ホーム·HTTPコードとヘッダー

HTTPステータスコードとヘッダー132種

404や500が何を意味するのか、Content-TypeやCache-Controlが何をするのかを一行でまとめました。

ステータスコード

1xx 情報4

進行中の知らせです。本当の応答はこの後に来ます。

2xx 成功10

要求が問題なく通ったという意味です。

3xx 転送7

別の場所へ行くようにという意味です。恒久か一時かで分かれます。

4xx 要求の誤り29

要求側に問題があるという意味です。同じものを送ればまた失敗します。

400 Bad Request要求そのものが壊れていて読めないという意味です。401 Unauthorized誰であるかを示していないという意味です。ログインすれば解けます。402 Payment Required支払いが必要という意味です。標準にはありますが実際にはあまり使われません。403 Forbidden誰であるかは分かっているが権限がないという意味です。ログインしても変わらないことがあります。404 Not Foundその住所には何もないという意味です。URLが違うか、すでに消えています。405 Method Not Allowedその住所はあるが、その方式は受け付けないという意味です。406 Not Acceptable要求された形式では返せないという意味です。407 Proxy Authentication Required中間のサーバーが先に認証を求めるという意味です。408 Request Timeout待ったが要求が最後まで届かなかったという意味です。409 Conflict今の状態とぶつかって処理できないという意味です。同時に編集したときに出ます。410 Gone意図的に消され、戻らないという意味です。404よりはっきりした別れです。411 Length Required本文の長さを示していないという意味です。412 Precondition Failed添えて送った条件が合わなかったという意味です。413 Content Too Large送った本文がサーバーの受け入れる大きさを超えたという意味です。414 URI Too Long住所が長すぎるという意味です。クエリを付けすぎたときに出ます。415 Unsupported Media Type送った本文の形式を扱えないという意味です。416 Range Not Satisfiable要求された範囲がファイルの外だという意味です。417 Expectation FailedExpectヘッダーに書いた期待に応えられないという意味です。418 I'm a teapotコーヒーを淹れてという要求をティーポットが断る、という冗談のコードです。421 Misdirected Requestこのサーバーが受けるべき要求ではないという意味です。422 Unprocessable Content形式は正しいが内容が規則に反していて処理できないという意味です。423 Lockedその資源が施錠されているという意味です。424 Failed Dependency先の要求が失敗したので、この要求もできないという意味です。425 Too Early再送の危険があるのでまだ処理しないという意味です。426 Upgrade Required別のプロトコルへ切り替えないと続けられないという意味です。428 Precondition Required条件を付けて送る必要があるという意味です。上書き事故を防ぐためです。429 Too Many Requests要求が多すぎるという意味です。Retry-Afterに再試行の時間が入ります。431 Request Header Fields Too Largeヘッダーが大きすぎるという意味です。クッキーがたまったときに出ます。451 Unavailable For Legal Reasons法的な理由で遮断されたという意味です。番号は小説『華氏451度』に由来します。

5xx サーバーの誤り11

サーバー側に問題があるという意味です。しばらくして試す価値があります。

ヘッダー

リクエストヘッダー28

ブラウザーがサーバーへ送るときに付けるヘッダーです。

Acceptどの形式で受け取りたいかを伝えます。Accept-Encoding圧縮方式を伝えます。gzipやbrを使うと転送量が大きく減ります。Accept-Language希望する言語を伝えます。多言語サイトはこの値を見て選びます。Authorization身元を証明する値です。トークンやIDとパスワードが入ります。Cookie先にサーバーが置いたクッキーを送り返します。Hostどのドメイン宛ての要求かを示します。一台のサーバーが複数サイトを持てるのはこのためです。If-Modified-Sinceその時刻より後に変わっていたときだけ送るように求めます。If-None-Match持っているETagと違うときだけ送るように求めます。キャッシュはこうして確かめます。Origin要求の出どころを伝えます。ブラウザーが付け、CORSの判断の基準になります。Rangeファイルの一部だけを求めます。再開やシークはこれで実現します。Refererどのページから来たかを伝えます。綴りの誤りのまま標準になりました。User-Agentどのブラウザーと機器かを伝えます。今はほとんどが似たように偽装されています。Sec-Fetch-Destその要求が何に使われるか(画像かスクリプトか)を伝えます。Sec-Fetch-Mode要求が同一出所かCORSかを伝えます。Sec-Fetch-Site要求が同じサイトからか別のサイトからかを伝えます。DNT追跡しないでほしいという要求です。強制力がなくほとんど無視されます。Expect本文を送る前に、サーバーが受け取るかを先に尋ねます。Forwarded中継を経た要求の元の情報を記録します。From要求した人のメールアドレスを入れます。クローラーが連絡先として使います。If-Match持っているETagと同じときだけ処理するように求めます。上書き事故を防ぎます。If-Range条件が合えば続きから、合わなければ最初から受け取ります。Max-Forwards中間サーバーを何回まで経由してよいかを決めます。Proxy-Authorization中間サーバーに示す認証情報です。TE転送中にどの符号化を受け入れるかを伝えます。Upgrade-Insecure-Requestshttpのリンクもhttpsに変えてほしいという要求です。X-Forwarded-For中継を経た要求の元のIPを入れます。標準ではありませんが広く使われます。X-Forwarded-Proto元の要求がhttpだったかhttpsだったかを伝えます。X-Requested-WithJavaScriptからの要求であることを示していた古い慣習です。

レスポンスヘッダー30

サーバーがブラウザーへ返すときに付けるヘッダーです。

Access-Control-Allow-Originどの出所がこの応答を読んでよいかを決めます。CORSの中心です。Access-Control-Allow-Methods別出所からの要求に許す方式を並べます。Access-Control-Allow-Headers別出所からの要求に許すヘッダーを並べます。Access-Control-Allow-Credentialsクッキーを載せた別出所の要求を許すかを決めます。Access-Control-Max-Age事前要求の結果をどれだけ再利用してよいかを決めます。Ageこの応答がキャッシュにとどまっていた時間です。Allowその住所が受け付ける方式を伝えます。405と一緒に来ます。Content-Disposition画面で開くか保存するかを決めます。ファイル名もここに入ります。Content-Security-Policyどこから来たスクリプトや画像を実行・表示してよいかを決めます。XSSを防ぐ柵です。ETagその版の指紋です。中身が変わると値も変わり、キャッシュが気づきます。Expiresこの時刻を過ぎたら古いものとして扱うように、という意味です。Last-Modified最後に変わった時刻です。条件付き要求の基準になります。Location次に行く住所です。転送応答や201と一緒に来ます。Permissions-Policyカメラ・マイク・位置などの機能をどの文書が使えるかを決めます。Referrer-Policy出所の情報をどこまで送るかを決めます。Retry-Afterいつ再試行すればよいかを伝えます。429や503と一緒に来ます。Server応答したサーバーのソフトウェアを伝えます。詳しく書くと攻撃の手がかりになります。Set-Cookieブラウザーにクッキーを置きます。HttpOnlyとSecureを付けるのが安全です。Strict-Transport-Securityこれ以降このサイトへはhttpsだけで来るようブラウザーに刻みます。Timing-Allow-Origin別の出所が性能の計測値を読んでよいかを決めます。Vary同じ住所でもどのヘッダー次第で応答が変わるかを伝えます。キャッシュはこれを見て分けます。WWW-Authenticateどの方式で認証するかを知らせます。401と一緒に来ます。X-Content-Type-Options形式をブラウザーが勝手に推測しないようにします。X-Frame-Options他のサイトがこのページを枠に入れられないようにします。X-XSS-Protection古いブラウザーのXSSフィルターを有効にしていたヘッダーです。今はCSPが代わります。Cross-Origin-Opener-Policy別の出所が窓を握れないよう切り離します。Cross-Origin-Resource-Policyこの資源をどの出所が取得できるかを決めます。Cross-Origin-Embedder-Policy出所の違う資源を無断で取り込めないようにします。Content-Range送った断片が全体のどこに当たるかを伝えます。206と一緒に来ます。Accept-Ranges部分要求を受け付けるかを伝えます。bytesなら再開できます。

双方で使う13

要求にも応答にも付きうるヘッダーです。

読み方

  • ステータスコードは最初の数字が意味を決めます。4なら要求側、5ならサーバー側の問題です。
  • 404は「ない」、403は「あるが許されない」です。取り違えると原因探しに時間がかかります。
  • ヘッダー名は大文字小文字を区別しません。Content-Typeとcontent-typeは同じヘッダーです。
  • キャッシュやCORSの問題はたいていヘッダー一行で決まります。ブラウザーのネットワークタブでそのまま見られます。

よくある質問

Q. 404と403は何が違いますか。

404はその住所に何もないという意味で、403はあるけれど見る権限がないという意味です。ただし資源の存在自体を隠すためにわざと404を返すサーバーもあります。

Q. 500エラーのとき自分にできることはありますか。

5で始まるコードはサーバー側の問題なので、たいていは待つしかありません。ただし502や504は前段と後段のあいだの問題で、少し待って再試行すると解けることが多いです。

Q. 301と302はどう選びますか。

住所を完全に移したなら301、一時的に別へ送るなら302です。301はブラウザーも検索エンジンも長く覚えるため、取り消しにくい点に注意してください。

Q. ヘッダー名は大文字小文字を区別しますか。

区別しません。Content-Typeとcontent-typeは同じヘッダーで、HTTP/2以降は小文字で送ると定められています。

Q. CORSエラーはなぜ起きますか。

ページが別出所の応答を読もうとしたとき、サーバーがAccess-Control-Allow-Originで許可していなければブラウザーが遮ります。サーバーは応答していて、ブラウザーが本文をコードに渡さないだけなので、ネットワークタブには見えるのにスクリプトからは読めないという状態になります。