コーディング

2022.07.20

エラーでよく見るHTTPステータスコードとは?

色々なWEBサイトを見て回っている時、「403」のような数字が表示されてサイトが見れなかった経験はありませんか?
この数字はサーバーからの返答の一種で、ステータスコードと呼ばれています。
ステータスコードには様々な種類があるため、今回は種類別に詳しく解説したいと思います!

HTTPステータスコードとは?

ステータスコードは正しくは「HTTPステータスコード」と言い、Webサーバーからのレスポンスの中のページの状態を表す3桁の数字を指しています。
Webサイトが表示されるまでの流れは下記のようになっています。

リンクをクリックしたり、URLを入力してエンターキーを押すと、ブラウザはアクセスしようとしているWebサーバーにリクエストを送信

サーバーはリクエストを受信、処理をした後、レスポンスを送り返す
(この時、HTTPヘッダー内にページの状態を表すHTTPステータスコードを返しています。)

レスポンスの内容をもとにブラウザはWebサイトを表示


基本的には表示されることはありませんが、エラーのレスポンスが返ってきた場合などにブラウザ上に表示されます。

ステータスコードのカテゴリーと違い

ステータスコードには大きく分けて100番台〜500番台の5カテゴリーがあります。
各カテゴリーの違いをざっくりと書くと下記のようになります。

  • 100番台:処理に時間がかかる、リクエストが継続中である状態
  • 200番台:処理が成功して正常にレスポンスができた状態
  • 300番台:リクエストに追加処理(リダイレクト)が必要である状態
  • 400番台:ブラウザからのリクエストに誤りがあり、レスポンスを返せない状態
  • 500番台:サーバーがブラウザからのリクエストの処理に失敗した状態

ここからは各コードのより細かい数字について解説します!

100番台

処理に時間がかかってしまったり、リクエストが継続中であることを示す100番台の主なステータスコードは下記になります。

100Continue/継続
サーバーがブラウザのリクエストヘッダーを受信し、リクエスト本文を受け取る準備ができた状態。
101Switching protocols/プロトコルの切り替え
ブラウザがサーバーにプロトコルの変更を要求し、サーバーがそれを受理した状態。
103Early hints/早期のヒント
サーバーの残りのレスポンスの準備が整う前に、先にいくつかのレスポンスヘッダーが返された状態。

200番台

処理が成功して正常にレスポンスがされた状態であることを示す200番台の主なステータスコードは下記になります。

200OK/成功
Webサイト、リソースが期待どおりに動作するときに配信される状態。
201Created/作成
サーバーがブラウザのリクエストを満たし、新しいリソースを作成した状態。
202Accepted/受理
サーバーがブラウザのリクエストを受け入れ、処理を行なっている状態。
リクエストは最終的に、レスポンスの完了につながる場合とそうでない場合があります。
203Non-Authoritative Information/信頼できない情報
プロキシサーバーがオリジンサーバーから200のステータスコードを受信したものの、ブラウザに渡す前にレスポンスを変更した状態。
(プロキシの使用中に表示されることがあります。)
204No Content/内容なし
サーバーがリクエストを正常に処理したものの、返すべきコンテンツが存在しない状態。
205Reset Content/内容のリセット
204番と同じく、サーバーがリクエストを処理したもののコンテンツを返さない状態。
こちらの場合はブラウザの画面を初期化する必要もがあります。
206Partial Content/部分的内容
ブラウザが一時停止したダウンロードを再開できるだけでなく、ダウンロードを複数のまとまりに分割できる状態。
Rangeヘッダーによりサーバーが要求されたリソースの一部のみを送信する場合、206番が返されます。
(ブラウザがRangeヘッダーを使用している場合、このステータスコードが表示されることがあります。)

300番台

リクエストに追加処理(リダイレクト)が必要である状態であることを示す300番台の主なステータスコードは下記になります。

300Multiple Choices/複数の選択
ブラウザのリクエストを満たすためにサーバーが応答できるリソースが複数ある状態で、ブラウザがその中からいずれかを選択する必要がある状態。
使用可能なファイルの拡張子が複数ある場合や、サーバーで単語の意味が曖昧になっている時に発生。
301Moved Permanently/恒久的に移動
要求されたページが恒久的に移動された状態。
302Found/発見
要求されたリソースは移動したものの、見つかった状態。
要求されたリソースが予想された場所ではなく、別の場所で見つかったことを示すため、一時的なURLリダイレクトに使用されます。
303See Other/他を参照せよ
ブラウザがPOST、PUT、またはDELETEを介して、リクエストされたリソースを見つけたことをブラウザに伝えた状態。
GETを利用するには、以前に使用したものとは異なるURLに適切なリクエストを行う必要がある。
304Not Modified/未更新
要求されたリソースが、最後にアクセスしてから変更されていない状態。
ブラウザキャッシュに保存されているリソースが変更されていないことをブラウザに通知。
以前にダウンロードしたリソースを再利用し、ページの配信を高速化するのに使用。
307Temporary Redirect/一時的リダイレクト
リソースが一時的に別のURLに移動されたときの適切な使用法として、302番を再定義する形で導入。
302番とは異なり、HTTPメソッドを変更することができない。
308 Permanent Redirect/恒久的リダイレクト
301番を継承するかたちで誕生。
HTTPメソッドの変更を許可せず、要求されたリソースが新しいURLに永続的に移動されたことを示す。

400番台

ブラウザからのリクエストに誤りがあり、レスポンスを返せない状態であることを示す400番台の主なステータスコードは下記になります。

400Bad Request/不正
サーバーが、クライアント側のエラーのためにレスポンスを返すことができない状態。
401 Unauthorizedまたはauthorization required/認証が必要
ターゲットリソースに有効な認証資格情報がない状態。
htpasswdを使用して基本的なHTTP認証を設定した時に表示されることがある。
402Payment Required/支払いが必要
主に必要な資金が不足しているためにリクエストを処理できないことを示す。
(このコードはデジタルキャッシュシステムの一部として使用するために作成されました。)
403Forbidden/拒否
リソースへのアクセスが禁止されている状態。
ログインせずにパスワードで保護されたコンテンツにアクセスしようとするなど、ユーザーが表示する権限のないものにアクセスしようとしたときに返される。
404Not Found/未検出
要求されたリソースが見つからなかった状態。
405Method not allowed/未許可のメソッド
メソッドが許可されていない状態。
レンタルサーバー(オリジンサーバー)が受信したメソッドをサポートしているものの、ターゲットリソースがサポートしていない場合などに返される。
406Not acceptable response/受理不可
要求されたリソースが(リクエストで送信されたAcceptヘッダーに照らし合わせ)受け入れられないコンテンツしか生成できない状態。
407 Proxy Authentication Required/プロキシ認証が必要
プロキシサーバーが使用されており、続行する前にブラウザがそれ自身の認証をする必要がある状態。
408Request Timeout/タイムアウト
サーバーが、ブラウザからの残りのリクエストを待機してタイムアウトになった状態。
ブラウザからの完全なリクエストを待っている間にサーバーがタイムアウトすると返されるため、サーバーは、ブラウザから送信された完全なリクエストを取得できなかったことになる。
409Conflict/競合
関連するリソースと競合しているため、サーバーがブラウザのリクエストを処理できなかった状態。
複数の同時編集が原因で発生する場合がある。
410Gone/消滅
要求されたリソースがなくなっており、消滅している状態。
404番とは異なり、410番は永続的であり二度と復活しないものであることを意味する。
411Length Required/長さが必要
要求されたリソースでクライアントが特定の長さを指定する必要があるものの、それが指定されていない状態。
412Precondition Failed/前提条件が失敗
ブラウザのリクエストヘッダーに特定の条件が含まれており、サーバーがその仕様を満たしていない状態。
413Payload Too LargeまたはRequest Entity Too Large/ペイロード過大
リクエストの大きさが、サーバーが処理しようとする、または処理できる範囲を超えている状態。
414URI Too Long/URLが長すぎる
サーバーが処理できないほど大きなクエリ文字列としてエンコードされたGETリクエストに対する結果として表示。
415Unsupported Media Type/サポートされていないメディアタイプ
サーバーまたはリソースがリクエストされたメディアタイプをサポートしていない状態。
416Range Not Satisfiable/レンジが範囲外
リクエストが、サーバーが返すことができないリソースの特定の部分に対するものである状態。
417Expectation Failed/Expectヘッダーによる拡張が失敗
サーバーが、リクエストのExpectヘッダーフィールドで指定された要件を満たすことができない状態。
418I’m a teapot/私はティーポット
コーヒーを淹れろというリクエストを受け取ったティーポットにより返される。
1988年のエイプリルフールのジョークネタ。
422Unprocessable Entity/処理できないエンティティ
クライアントリクエストにセマンティックエラーが含まれており、サーバーがそれを処理できない状態。
425Too Early/Early dataを受け入れない
サーバーがリプレイ攻撃される可能性があるために、リクエストの処理を拒絶している状態。
426Upgrade Required/アップグレード要求
リクエストのアップグレードヘッダーフィールドの内容により、クライアントが別のプロトコルに切り替える必要がある状態。
428Precondition Required/事前条件が必要
リクエストを処理する前にサーバーで条件を指定する必要がある状態。
429Too many requests/要求が多すぎる
指定された時間内にあまりにも多くのリクエストをユーザーが送信したときにサーバーから返される。
サイトにアクセスしようとするボットまたはスクリプトが原因で発生する場合がある。
431Request Header Fields Too Large/リクエストヘッダーフィールド過大
ヘッダーフィールドが大きすぎるため、サーバーがリクエストを処理できない状態。
単一のヘッダーフィールド、またはすべてのヘッダーフィールドに問題がある可能性がある。
451Unavailable for Legal Reasons/法的理由により利用不可
サーバーのオペレーターが、リクエストされたリソース(またはリクエストされたリソースを含むリソースのまとまり)へのアクセスを禁止するよう(政府などから)指示を受けている状態。
499 Client closed request/クライアントによるリクエストの終了
まだ処理している間にクライアント側でリクエストが切断た状態。

500番台

サーバーがブラウザからのリクエストの処理に失敗した状態であることを示す500番台の主なステータスコードは下記になります。

500Internal Server Error/サーバー内部エラー
サーバーでエラーが発生したため、要求を完了できない状態。
サーバー内部でエラーが発生したことを単に意味する一般的なコードで、サーバーで問題が発生したためリクエストされたリソースが配信されない状況を指す。
501Not Implemented/実装されていない
サーバーがリクエストを満たすために必要な機能をサポートしていない状態。
ほとんどの場合、Webサーバー自体の問題であり、ホスト側によって解決される必要がある。
502 Bad Gateway/不正なゲートウェイ
プロキシサーバーの使用中など、あるサーバーが別のサーバーから無効なリクエストを受信したことを意味する。
また、クエリまたはリクエストに時間がかかりすぎることで、サーバーによりキャンセルまたは強制終了され、データベースへの接続が切断されるケースもある。
503Service Unavailable/サービス利用不可
サーバーが現在、リクエストを処理できない状態。
そのため、リクエストを完了することができない状態。
504Gateway Timeout/ゲートウェイタイムアウト
ゲートウェイとして機能するサーバーが、別のサーバーのレスポンスを待ってタイムアウトした状態。
リクエストの処理に2つのサーバーが関与し、最初のサーバーが2番目のサーバーのレスポンスを待ってタイムアウトしたときに返される。
505HTTP Version Not Supported/サポートしていないHTTPバージョン
サーバー側がクライアントがリクエストの作成に使用したHTTPバージョンをサポートしていない状態。
511Network Authentication Required/ネットワークに対する認証が必要
使用しようとしているネットワークでリクエストをサーバーに送信する前に、何らかの認証が必要である状態。
公共のWi-Fiの利用規約に同意する必要がある場合など。

まとめ

ステータスコードのカテゴリーだけでもざっくりわかっているといざエラーで表示された時にも焦らずに対応ができますね!
また、エンジニアの間でステータスコードの百人一首が流行っているとかいないとか…笑

ぜひご活用ください!

こちらもおすすめ

この記事をシェアする

関連記事

  • 2023.12.30

    案件を切り替える拡張機能「Project Manager」が便利!

    コーディング

  • 2023.12.29

    記事タイトルを行数で制御するCSS

    CSS

    コーディング

  • 2023.12.29

    CSSのホバーを工夫するようになった話

    コーディング

    制作

おすすめ記事

  • 2022.04.28

    【カメラ初心者向け】物撮りが上手くなるコツ ~食べ物編~

    その他

    制作

  • 好きなフォントは?現役WEBデザイナーに聞いてみた!

    2022.06.01

    デザイナーなら好きなフォントの1つや2つあるでしょ?現役WEBデザイナーに好きなフォント聞いてみた!

    デザイン

    制作

  • 2022.04.22

    【動画編集ソフト】アフターエフェクトとプレミアプロってなにが違うの?違いと使い分けを解説!

    制作

    動画

×