👏

インターネット概論~HTTP~

2021/07/20に公開

HTTP

HTTPは、Webでクライアントとサーバーが通信するときに使用されるアプリケーション層のプロトコルです。

Webの普及により、当初はなかった機能がHTTPにも求められるようになってきました、それに合わせてHTTPもバージョンアップを重ねて、現在ではHTTP/1.1が主流となって利用されています。

HTTP/1.1の概要

後継バージョンのHTTP/2やHTTP/3は速度面の改善が主な変更なので、機能面はHTTP/1.1の理解があれば問題ありません。

HTTPリクエスト

クライアントからサーバーに対して送信されるのがHTTPリクエストです。HTTPリクエストは、リクエスト行/ヘッダフィールド/リクエストボディの3つで構成されています。ヘッダフィールドとリクエストボディは省略可能です。

HTTPリクエストの1行目は必ずリクエスト行になり、サーバーに対してどのようなリクエストを送りたいかを表します。

2行目以降はヘッダフィールドで、HTTPで制御したい様々なパラメータを指定します。

ヘッダフィールドのあとに空行が入り、その後に続くのがリクエストボディです。サーバーに対してデータを送信する場合に、必要に応じて追加します。

リクエスト行

リクエスト行は、メソッド/リクエストターゲット/HTTPバージョンの3つで構成されています。

HTTP/1.1で規定されているメソッドは全部で8つです。

メソッド 役割
GET リソースの取得
POST データ送信
PUT リソース作成/更新
DELETE リソース削除
OPTION サーバー情報取得
HEAD ヘッダのみ取得
TRACE ネットワークチェック
CONNECT ネットワアークのトンネル

リクエストターゲットは、取得したいリソースのパスを指定します。

最後にHTTPバージョンが指定されます。

ヘッダフィールド

ヘッダフィールドはフィールド名:値のような形式で構成されます。ヘッダフィールドが複数まとまったものをHTTPヘッダと呼びます。

ヘッダフィールドはかなりたくさんの種類がありますが、いくつか紹介します。

  • Authorization…サーバーに送る認証情報を指定する。ここに、Basic認証やDigest認証の情報が入る。

  • Content-Type…サーバーにデータを送信するときのフォーマットを指定する。

  • Referer…1つ前のリクエストのURLを指定する。

リクエストボディ

サーバーにデータを送信したい場合には、リクエストボディに送信したいデータを格納します。ヘッダフィールドのContent-Typeでデータの形式を指定します。

HTTPレスポンス

クライアントからのHTTPリクエストに対して、サーバーが応答を返すのがHTTPレスポンスです。HTTPレスポンスは、ステータス行/ヘッダーフィールド/レスポンスボディの3つで構成されます。

ステータス行

ステータス行は、HTTPバージョン/ステータスコード/メッセージの3つで構成されています。

HTTPバージョンはそのままで、HTTPのバージョンが入ります。

ステータスコードは、リクエストの結果を決められたコードで表します。

1xx(情報レスポンス)

リクエストの受け取り情報だけを返すときに使用されます。Webアプリケーション開発ではほとんど使用することがありません。

2xx(成功レスポンス)

クライアントからのリクエストが受理され正常な処理が行われたことを表します。

  • 200 OK…リクエストが成功し、リソースのコンテンツが含まれたレスポンスが返る

  • 201 Created…リソース作成のリクエストに対し、作成完了を返す。新しく作成されたリソースのURLが返却される。

  • 202 Accepted…リクエストは受理されたが処理は完了していないことを表す。時間のかかる処理をリクエストした場合に使用される。

3xx(リダイレクションメッセージ)

リクエストは受理されたが、追加で処理が必要であることを示します。主に違うURLへリダイレクトさせたいときに使用されます。

  • 301 Moved Permanently…リソースが恒久的に別のURLに移動したいときに使用される。移動先のURLはLocation:ヘッダフィールドで示される。

  • 302 Found…リソースが一時的に別のURLに移動したときに使用される。

  • 304 Not Modified…リソースが更新されていないことを示す。キャッシュを使用してデータ通信を省略したいときに使用される。

4xx(クライアントエラーレスポンス)

クライアントからのリクエストに何らかの問題があったことを表します。

  • 400 Bad Request…フォーマットが間違っているなど、不正なリクエストであることを示す。

  • 401 Unauthorized…認証が必要であることを示す。

  • 403 Forbidden…リソースへのアクセス権限がないことを示す。

  • 404 Not Found…指定したリソースが存在しないことを示す。

5xx(サーバーエラーレスポンス)

サーバーがリクエスト処理に失敗したことを表します。

  • 500 Internal Server Error…サーバー内部で何らかのエラーが発生し、リクエストを正常に処理できなかった場合に使用される。

  • 503 Server Unavailable…サーバーが過負荷だったり、メンテナンス中だったりで一時的に利用できない場合に使用される。

ヘッダフィールド

HTTPレスポンスのヘッダフィールドもHTTPリクエストと同様に、フィールド名:値の形式です。よく使われるヘッダフィールドをいくつか紹介します。

  • Cache-Control…送信したりリソースがどのようにキャッシュ可能かを示す。

  • Content-Type…送信データのフォーマットを示す。

レスポンスボディ

HTTPレスポンスのコンテンツの中身はレスポンスボディに格納します。

参考書籍

WEB+DB PRESS Vol.122

Discussion