1. 序章

このチュートリアルでは、インターネットを閲覧するときに日常的に扱っていることを探っていきます。 HTTPステータスコードは、HTTP標準の一部であり、コンピュータがWorldWideWebを介して相互に通信する方法でもあります。 HTTPステータスコードのさまざまなカテゴリについて学習し、最も一般的に使用されるコードの意味についても詳しく見ていきます。

2. まず、HTTPとは何ですか?

HTTPステータスコードについて説明する前に、HTTPとは何かを簡単に要約してみましょう。 HTTPはHypertextTransferProtocolの略で、Web上で通信がどのように行われるかを詳細に説明する標準です。 HTTPプロトコルは、最初はTim Berners-Leeによって発明され、後にインターネット技術特別調査委員会(IETF)のHTTPワーキンググループによって開発されました。 HTTPプロトコルのバージョンはRFC(Request For Comment)ドキュメントとして公開されており、RFCEditorのWebサイトで検索して詳細を確認できます。

HTTPは、クライアント間の要求と応答の形式を取ります(例: ブラウザ)とサーバー。 リンクをクリックするか、ブラウザにURLを入力するか、フォームを送信すると、ブラウザはサーバーにHTTPリクエストを開始し、サーバーに何をしたいかを伝えます。 たとえば、2台のコンピューター間の一般的なHTTP要求/応答通信は次のようになります。

クライアントのリクエスト:

GET / HTTP/1.1 
Host: www.google.com

サーバーの応答:

HTTP/1.1 200 OK 
Date: Sat, 12 Sep 2020 14:26:56 GMT 
Expires: -1 
Cache-Control: private, max-age=0 
Content-Type: text/html; charset=ISO-8859-1 
Set-Cookie: ...truncated... 
Accept-Ranges: none 
Vary: Accept-Encoding 
Transfer-Encoding: chunked 

(html)

これは、ブラウザにhttps://www.google.comと入力したときに舞台裏で行われることです。 応答の最初の行はステータス行であり、使用されているHTTPバージョン、HTTPステータスコード、およびそれに関連する理由句が含まれています。 この場合、ステータスコードは200で、理由フレーズはOKです。 これが何を意味するかについては、次のセクションで学習します。

3. HTTPステータスコード

IETFによると、HTTPステータスコードは3桁の整数コードであり、サーバーが要求を理解して満たそうとした結果を示します。 ステータスコードは、人間のユーザーを対象としたものではありません。 代わりに、クライアントがそれに応じて解釈し、行動することを目的としています。 クライアントは、ブラウザ、別のサーバー、またはHTTPリクエストを行う任意のアプリケーションにすることができます。

HTTPステータスコードは、ステータスコードの最初の桁に基づいて5つのクラスに分類されます。

  • 1xx –情報–リクエストを受信し、プロセスを続行
  • 2xx –成功–リクエストは正常に受信され、受け入れられました
  • 3xx –リダイレクト–リクエストを完了するにはさらにアクションを実行する必要があります
  • 4xx –クライアントエラー–要求に不正な構文が含まれているか、実行できません
  • 5xx –サーバーエラー–サーバーは明らかに有効な要求を実行できませんでした

この理解を使用すると、上記のリクエスト例はサーバーによって正常に処理されたリクエストであるとすぐに推測できます。

次に、遭遇する可能性のある最も一般的に使用されるHTTPステータスコードのいくつかを見てみましょう。

3.1. 200 OK

200ステータスコードは、リクエストが成功したことを示し、 GET POST PUT、PATCH 、およびDELETEのいずれかの操作の結果である可能性があります。 。 サーバーが200で応答する場合、応答にはアクションに適したペイロードも含まれている必要があります。 たとえば、GETリクエストへの200応答のペイロードには、通常、リクエストされたHtmlページなどのリクエストされたリソースが含まれます。

3.2. 201作成済み

201応答は、要求が成功し、新しいリソースが作成されたことを示します。 201ステータスコードになる可能性のあるリクエストの例は、新しいリソースを作成するためのフォームを送信する場合です。

3.3. 301が見つかりました

301応答は、要求しているリソースが永続的に移動したことを示しています。 301応答には、新しい場所のURIを含むLocationヘッダーが含まれている必要があります。 このLocationは、クライアントが新しい場所でリクエストを正常に繰り返すために使用できます。

3.4. 400不正な要求

このステータスコードは、サーバーに送信されたHTTPリクエストの構文が正しくないことを意味します。 たとえば、間違った形式のデータまたは間違ったデータ型のフォームを送信した場合、400の応答が返される可能性があります。

3.5. 401無許可

これは、リクエストを送信してリソースにアクセスしようとしているユーザーが適切に認証されていないことを意味します。 HTTP標準によると、サーバーが401で応答する場合、サーバーが使用する認証スキームのリストを含むWWW-Authenticateヘッダーも送信する必要があります。

3.6. 403禁止します

403応答は一般的に401と混同されます。 ただし、403応答は、アクセスまたはアクセス許可が不十分なため、サーバーが要求を拒否していることを意味します。 認証されたとしても、特定のリクエストが許可されない場合があります。

3.7. 404お探しのページが見つかりませんでした

このステータスコードは、要求されたリソースが見つからない場合に返されます。 たとえば、ウェブサイトに存在しないページや何らかの理由で削除されたページのURLを入力した場合、404応答が返されます。

存在しないページにアクセスしようとするこの例を見てください。

POST /test HTTP/1.1 
Host: www.google.com

これにより、Googleから404ステータスコードが生成されます。

HTTP/1.1 404 Not Found 
Content-Type: text/html; charset=UTF-8 
Referrer-Policy: no-referrer 
Content-Length: 1565 
Date: Sat, 12 Sep 2020 16:38:02 GMT 

(html)

3.8. 405メソッドは許可されていません

405応答は、サーバーが要求で使用されたメソッドをサポートしていないことを意味します。 たとえば、エンドポイントがGETリクエストのみを受け入れ、POSTを送信しようとすると、405応答コードになります。 この場合、サーバーは、許可されたメソッドのリストを含むAllowヘッダーフィールドも返送する必要があります。

たとえば、Googleへの次のリクエスト:

DELETE / HTTP/1.1 
Host: www.google.com

応答が発生します:

HTTP/1.1 405 Method Not Allowed 
Allow: GET, HEAD 
Date: Sat, 12 Sep 2020 15:39:35 GMT 
Content-Type: text/html; charset=UTF-8 
Server: gws 
Content-Length: 1591 
X-XSS-Protection: 0 
X-Frame-Options: SAMEORIGIN 

(html)

3.9. 408リクエストタイムアウト

このステータスコードは、サーバーが待機する準備ができた時間内に要求メッセージが完了しなかったことをサーバーから示しています。 クライアントがHTTPリクエストの送信に遅すぎる場合、これが発生する可能性があります。 これは、インターネット接続が遅いなど、多くの理由が原因である可能性があります。

3.10. 413要求エンティティが大きすぎます

このステータスコードは、リクエストのペイロードが大きすぎるため、サーバーがリクエストを処理できないか、処理したくないことを示しています。 これは、大きすぎてサーバーの制限を超えるファイルをアップロードしようとした場合に発生する可能性があります。

3.11. 500内部サーバーエラー

内部サーバーエラーは、何らかの理由でサーバーがエラーのためにリクエストを処理できなかったことを意味します。 これは通常、サーバーのバグまたは未処理の例外が原因です。

3.12. 429リクエストが多すぎます

場合によっては、サービスがリソースに対して行われるリクエストの数を制限したい場合があります。 429応答コードは、許可された要求の数を超えたことをクライアントに示します。 これは、レート制限ユーザーやAPIの収益化にも役立ちます。

3.13. 418私はティーポットです

418ステータスコードは、1998年4月にエイプリルフールのジョークとして公開されました。公式の応答コードとして登録されていませんが、Node.jsやASP.Netなどの多くのフレームワークやライブラリで採用されています。 「イースターエッグ」のジョーク。 実際、 https://www.google.com/teapot にアクセスして、これが実際に動作していることを確認することもできます。

4. 割り当てられていないHTTPステータスコード

HTTPステータスコードは拡張可能であり、上記にリストしたものは、使用されている多くのステータスコードのほんの一部にすぎません。 ステータスコードの完全なリストはIANAによって維持されており、HTTPステータスコードレジストリで確認できます。 できるだけ多くのアプリケーションをサポートするために、正式に登録されたステータスコードを使用することをお勧めします。 ただし、割り当てられておらず、サービスが登録済みのステータスコードを拡張するために使用できるステータスコードの範囲があります。

104 to 199
209 to 225
227 to 299
309 to 399
418 to 420
427
430
432 to 450
452 to 499
509
512 to 599

5. 結論

この記事では、HTTPステータスコードと、それらがWeb上での通信に使用されるHTTP標準の重要な部分である方法について学習しました。 最も一般的に使用されているステータスコードのいくつかを調べ、まだ正式に使用されていない未割り当てのステータスコードの範囲について簡単に触れました。