HTTPレスポンスの構成

サーバーから返されたHTTPレスポンスは次の要素で構成されています。

  • ステータスライン
  • HTTPレスポンスヘッダ
  • HTTPレスポンスボディ(メッセージボディ)

ステータスライン

ステータスラインは下記要素で構成されます。

  • HTTPバージョン
  • ステータスコード
  • テキストフレーズ(理由フレーズ)

HTTPバージョンには「HTTP/1.0」と「HTTP/1.1」の2つのバージョンがあります。
両差の違いについては割愛しますが、HTTP/1.1の方がページ表示速度が早く、
現在は、HTTP/1.1がスタンダードです。

HTTPレスポンスの構成

ステータスコードはサーバーからクライアントに返される3桁のコードで、現在の状態(ステータス)を表します。
ステータスコードはHTTPバージョンにより差がありますが、HTTP/1.1では主に下記のような種類があります。

まず、3桁のうちの先頭の数字により下記のように分類されます。

コード 意味 内容
1xx 肯定先行 正しいコマンドを受け付けて処理中である。
2xx 肯定完了 正しいコマンドを受け付けて処理を完了した。
3xx 肯定中間 正しいコマンドを受け付けて、次に別のコマンドを要求する。
4xx 一時否定完了 謝ったコマンドを受け付けた。再送を望む。
5xx 否定完了 サーバーの状態によりコマンドを受け付けることができない。

主なステータスコードは下記になります。

ステータス 応答フレーズ 内容
200 OK 正常にリクエストを受け付けた。
202 Created 正常にリソースを作成した。
205 Not Content 正常にリクエスト受け付けたが、応答するリソースなし。
301 Movement Permanantly リクエストされたリソースがLocationヘッダーで示されたURLへ完全に移動した。
304 Not Modified リソースは更新されていない。
400 Bad Request 開始行、メッセージヘッダーの構文にミスがあり受け取れない。
401 Unauthorized リソースには認証が必要であり、認証されていない。
404 Not Found リソースは存在しない。
405 Method Not Allowed そのメソッドの実行は許可されない。
500 Internal Server Error サーバー内部のエラー。
501 Not Implemented コマンドを実行する機能が存在しない。

例えば、存在しないリソースのURLを指定した場合、ステータスコード404がWebサーバーから返されます。
また、Webアプリケーションを作成する場合、500 サーバー内部エラーとはしつこく付き合っていくことになるでしょう、

HTTPレスポンスヘッダー

HTTPレスポンスヘッダーは、HTTPレスポンスボディ(データ本体)の前に格納される、各種の状態を示す情報が入れられている部分です。HTTPレスポンスの代表的な要素として次のようなものがあります。

コンテンツタイプ(Content-Type) データがHTMLなのか画像なのかを示す情報や、文字コードなどの情報。
再利用期限(Expires) 取得したデータを再度サーバーに問い合わせなくてもブラウザが再利用していい期限(キャッシュの制御に使われる)。
データの最終更新日時(Last-Modified) コンテンツの最終更新時刻。
エンティティ情報(ETag) ブラウザのキャッシュされたコンポーネントとWebサーバ上のオリジナルが一致しているかどうかを決定するため情報。
キャッシュ制御(Cache-ControlやPragma) ブラウザや通信を橋渡しするプロキシが、データのキャッシュをどう扱うかの情報。
接続状況(Connection) 接続を持続するのか(keep-alive)、毎回接続を切断するのか(close)。ブラウザもサーバーもHTTPバージョン1.1の持続接続(keep-alive)を使える場合、通信のやりとりが効率良くなる。
移動先(Location) リダイレクト先を示す情報。移動先となるURLが格納され、そのURLからデータを取得するように示す指示する。

データの最終更新日時(Last-Modified)について補足すると、ブラウザ側は、このコンテンツの最終更新時刻を覚えておき次回リクエストした際にリクエストヘッダの中に含めて送信します。Webサーバー側のコンテンツに変更がなければWebサーバーはステータスコード「304」という「コンテンツ未更新」ステータスコードを送ります。ブラウザは「304」を受け取ると自分のブラウザにキャッシュされたコンテンツを表示させるため、高速な表示が可能になり、かつ、配信負荷を軽減させることができます。

エンティティ情報(ETag)もLast-Modifiedヘッダと同じく、無駄な配信負荷を軽減させる仕組みです。HTMLや画像などがいつ更新されたものかの情報や、サーバー上のファイルの場所ID、ファイルのサイズ、更新日時などから算出した情報がETagに格納されます。次回同じデータをリクエストする際に、これらの情報を使って更新されているかどうかを確認し、WEBサーバー側でETagが一致していればステータス「304」を返しコンテンツを配信しません。