HTTPステータスコードについての備忘録

###はじめに

今回はHTTPステータスコードについての備忘録になります。

よくインターネットに繋がらないときなどに謎の数字に出会ったことはありませんか？
ITにあまり触れたことのない人でも、一体何の数字なんだろうと疑問を感じたことはあると思います。
そこで今回は、その謎の数字、<b>HTTPステータスコード</b>について私が調べた内容をまとめます。

###ブラウザがページを表示する仕組み

以下の記事がとても参考になったのでこちらを参照ください。
今回はどんなコードがあるかをまとめるため、こちらの仕組みは引用だけにとどめておきます。
リクエストとレスポンスの考え方を抑えておくことが大事だと思います。

https://www.rworks.jp/system/system-column/sys-entry/21249/

https://www.itmanage.co.jp/column/http-www-request-response-statuscode/



###<font color="OliveDrab">100番台～ : Informational</font>
| ステータスコード | 内容 |
|:--- |:--- |
| 100 Continue  | リクエストを継続できることを示す  |
| 101 Switching Protocols  | サーバがリクエストに対してプロトコルの切り替えを要求していることを示す  |
| 102 Processing  | 処理中である場合に返される  |

###<font color="CornflowerBlue">200番台～ :  Success</font>
| ステータスコード|内容|
|:--- |:--- |
| 200 OK  | リクエストが成功し、要求に対する情報が正常に返されていることを示す |
| 201 Created  | リクエストが完了し、新たに作成されたデータのURIが返されていることを示す<br>※PUTメソッドでリソースを作成するリクエストを行ったとき際に返却される |
| 202 Accepted  |  リクエストは受理されたが、まだ処理中である場合に返される|
|  203 Non-Authoritative Information |  実際の情報ではなくローカルやプロキシなどからの情報である場合を示す<br>※信頼できない情報 |
| 204 No Content  | リクエストを受理したが、返すべき情報が存在しない場合に返される  |
| 205 Reset Content  | リクエストを受理し、ユーザエージェントの画面をリセットする場合に返される  |
| 206 Partial Content  |  	レジュームを行ったような場合に、部分的GETリクエストを受理したときなどに返される |
|  207 Multi-Status | 複数のステータスが存在する場合に返される  |
|  208 Already Reported | 既に報告されている場合に返される。バインドループを防ぐためのコード  |
| 226 IM Used  | IMを使用している。Delta encoding in HTTPの拡張ステータスコード  |

###<font color="Orange">300番台～ : Redirection</font>
| ステータスコード | 内容 |
|:--- |:--- |
| 300 Multiple Choices  | リクエストしたリソースが複数存在し、選択が必要な場合に選択肢と一緒に返される  |
| 301 Moved Permanently  | 	リクエストしたリソースが恒久的に移動されているときに返される  |
| 302 Found  | 	リクエストに対するレスポンスが他のURLに存在するときに返される |
| 303 See Other  | 	リクエストに対するレスポンスが他のURIに存在するときに返される  |
| 304 Not Modified  | リクエストしたリソースは更新されていないことを示す。jsや画像などのキャッシュで変更がなかった場合によく使われる  |
| 305 Use Proxy  | プロキシを使用してリクエストを行わなければならない場合に返される  |
| 306 (Unused)  |  未使用である場合に返される |
|  307 Temporary Redirect |  リクエストしたリソースが一時的に移動されている場合に返される |
| 308 Permanent Redirect  | リクエストしたリソースは恒久的に移動されているときに返される  |

###<font color="Red">400番台～ : Client Error</font>
| ステータスコード | 内容 |
|:--- |:--- |
| 400 Bad Request  | 定義されていないメソッドを使うなど、クライアントのリクエストに異常がある場合に返される  |
| 401 Unauthorized  | Basic認証やDigest認証などを行うときに使用される  |
| 402 Payment Required  | 支払いが必要である場合に返される。現在は未実装で、将来のために予約されている  |
| 403 Forbidden  | リソースにアクセスすることを拒否された場合に返される。サアクセス権がない場合など、権限設定を失敗しているときに返される  |
|  404 Not Found | 未検出。リソース・ページが見つからなかった場合に返される。アクセス権がない場合などにも使用される  |
| 405 Method Not Allowed  | 許可されていないメソッドを使用しようとした。POSTメソッドの使用が許されていないURIにPOSTでアクセスした場合など  |
| 406 Not Acceptable  | Accept関連のヘッダに受理できない内容が含まれている場合に返される。Accept-Language、Accept-Charsetなどでファイル形式、言語をブラウザが許可していない場合など  |
| 407 Proxy Authentication Required  | プロキシの認証が必要な場合に返される |
| 408 Request Timeout  | リクエストが時間以内に完了していない場合に返される  |
| 409 Conflict  | リクエストが現在のリソースと矛盾するので完了できない  |
| 410 Gone  | 	リソースは恒久的に移動・消滅した。どこにあるかもわからない状態。404 とは異なり、二度と復活しない場合に使われる  |
| 411 Length Required  |  Content-Lengthヘッダがないのでサーバがアクセスを拒否した場合に返される |
| 412 Precondition Failed  | 前提条件が誤りだった場合に返される  |
| 413 Request Entity Too Large  | リクエストエンティティがサーバの許容範囲を超えている場合に返す。サーバの制限サイズより大きいファイルをアップロードしたようなとき  |
| 414 Request-URI Too Long  | URIが長過ぎるのでサーバが処理を拒否した場合に返す。画像データのような大きなデータをGETメソッドで送ったような場合  |
| 415 Unsupported Media Type  |  指定されたメディアタイプがサーバでサポートされていない場合に返す |
| 416 Requested Range Not Satisfiable | 実リソースのサイズを超えるデータを要求した場合に返す。リソースのサイズが1024Byteしかないのに、1025Byteを取得しようとした場合など  |
| 417 Expectation Failed | サーバが拡張ステータスコードを扱えない場合に返す  |
| 418 I’m a teapot  | HTCPCP/1.0の拡張ステータスコード。ティーポットにコーヒーを淹れるリクエストが来て、拒否された場合に返す。※ジョークコード  |
| 422 Unprocessable Entity  | WebDAVの拡張ステータスコード。処理できないエンティティを示す  |
| 423 Locked  | WebDAVの拡張ステータスコード。リクエストしたリソースがロックされている場合に返す  |
| 424 Failed Dependency  | WebDAVの拡張ステータスコード。依存関係でエラーになった場合に返す  |
| 426 Upgrade Required  | Upgrading to TLS Within HTTP/1.1の拡張ステータスコード。アップグレードが必要な場合に返す  |
###<font color="DarkRed">500番台～ : Server Error</font>
| ステータスコード | 内容 |
|:--- |:--- |
| 500 Internal Server Error  | サーバ内部でエラーが発生した場合に返される。サーバ上で動作させているプログラムに文法エラーがあったり、設定に誤りがあった場合などに返される  |
|  501 Not Implemented | 実装されていないメソッドを使用した場合に返される  |
| 502 Bad Gateway  | ゲートウェイ・プロキシサーバで不正な要求を受け取り、拒否した場合に返される。 <b>不正なゲートウェイ</b>と表示される |
| 503 Service Unavailable  | サービスが一時的に過負荷やメンテナンスで使用不可能である場合に返される。アクセスが集中してサーバが処理できない場合によくでます  |
| 504 Gateway Timeout  | ゲートウェイ・プロキシサーバが制限時間内に処理できなかった場合に返される  |
| 505 HTTP Version Not Supported  | リクエストがサポートされていないHTTPバージョンである場合に返される  |
| 506 Variant Also Negotiates  | 	Transparent Content Negotiation in HTTPで定義されている拡張ステータスコード。ネゴシエートを試みてエラーになった場合に返される  |
| 507 Insufficient Storage  | WebDAVの拡張ステータスコード。リクエストを処理するために必要なストレージの容量が足りない場合に返される  |
| 508 Loop Detected  |  サーバ内でリダイレクトループに入ったときに返される |
| 509 Bandwidth Limit Exceeded  | そのサーバに設定されている帯域幅（転送量）を使い切った場合に返される  |
| 510 Not Extended | An HTTP Extension Frameworkで定義されている拡張ステータスコード。拡張できない場合に返される  |
| 511 Network Authentication Required  | ネットワークに対する認証が必要な場合に返される  |


###まとめ

自分で調べる前は、正直なところ400番台を少しだけ見たことがあるという感じでした。想像以上にコードがたくさんありましたが、それぞれ何を示しているかが明確ですので、いざ自分が開発をするぞとなった時に、これらが頭に入っていると、エラーの解決が少しは早くなるのではないかと思いました！また今回説明が不足している部分などはアップデートする予定です（自分で調べて意味をしっかり理解できない部分もあったので）。

最後に、今回の内容をざっくり頭に落とすために、以下の表でまとめました。

| 番号 | 内容 |
|:-:|:-:|
| 100番台  | 処理中を示す  |
| 200番台  | 成功を示す  |
| 300番台  | 情報の転送を示す  |
| 400番台  | クライアントサイドのエラーを示す  |
| 500番台  | サーバーサイドのエラーを示す  |

###参考
HTTPステータスコード一覧

https://httpstatuses.com/

208とはどのようなコードか

https://httpstatuses.com/208

418とはどのようなコードか

https://qiita.com/flano_yuki/items/ea251ac6b53bc54677d2

WebDAVとは？

https://www.kagoya.jp/howto/it-glossary/server/webdav/

An HTTP Extension Framework とは？

https://tex2e.github.io/rfc-translater/html/rfc2774.html