(1) HTTPレスポンスの構造や各ヘッダーの概要について
(1-1) HTTPレスポンスの構造
(1-2) HTTPレスポンス行について
(1-3) HTTPレスポンスの各部分の概要
(1-3-1) 一般ヘッダー
(1-3-2) レスポンスヘッダー
(1-3-3) エンティティヘッダー
(1-4) HTTPレスポンスのボディ部について
(1) HTTPレスポンスの構造や各ヘッダーの概要について
(1-1) HTTPレスポンスの構造
「HTTPレスポンスメッセージ」というのは、「サーバ」から「クライアントのブラウザ」に対して送られるメッセージ(レスポンスやイベントの内容を表したデータ)の事です。構造は大まかには下図のようになっています。
(図111)HTTPレスポンスの構造
(表)HTTPレスポンスを構成する要素
項目 | 両方or片方 (レスポンスのみ or リクエスト・レスポンス両方に含まれる) |
ステータス行 | レスポンスのみ |
一般ヘッダー | 両方にあり |
レスポンスヘッダー | レスポンスのみ |
エンティティヘッダー | 両方にあり |
ボディ | 両方にあり |
各部分の概要について1つずつご紹介します。
(1-2) ステータス行について
URLにアクセスした際のプロトコルやステータスコードが表示される行です。
(構文)
[HTTPプロトコル] [ステータスコード] [Reason-Phrase]
■[HTTPプロトコル]
HTTP/1.1などプロトコルの名前が表示されます。
■[ステータスコード]、[Reason-Phrase]
[ステータスコード]は3桁の数字で表現され、リクエストが成功したのか?失敗したのか?をコード値で表現します。ステータスコードは最初の1桁でざっくり以下の区分分けが出来ます。
100番台(Informational) | リクエストが受領され、処理中 |
200番台(Success) | 成功のメッセージ |
300番台(Redirection) | リクエストを完了するためには、更なる対応が必要。 |
400番台(Client Error) | クライアント側のリクエスト構文誤等の理由でリクエスト不可 |
500番台(Server Error) | サーバ側のリクエスト構文誤等の理由でリクエスト不可 |
HTTP/1.1 200 OK
(1-3) HTTPレスポンスの各部分の概要
(1-3-1) 一般ヘッダー
リクエスト・レスポンスのいずれにも適用されるヘッダーです。ただし、データ自体には影響せず、主にメタデータの保持に使われます。
<一般ヘッダーの例~>
■Trailer
Trailerに含まれるフィールドのラインナップを示しています。受信者はこの情報から、チャンク(一塊のデータ)の最後のTrailerに何の情報が含まれているのか?を事前に知る事ができます。
(例)
Trailer: Expires
■Transfer-Encoding
ボディ部に適用されたされた転送方式(適用があれば)を表します。この転送方式の適用は、送信者と受信者の間でデータを安全に送る目的で行われるものです。
(例)
Transfer-Encoding: chunked
(1-3-2) レスポンスヘッダー
ステータス行では表現しきれない、レスポンスに関する追加のデータを付与するためのヘッダーです。サーバに関する情報や、URIで指定されたリソースに関する追加の情報が記録されています。
<レスポンスヘッダーの例>
■Location
訪問者をリクエストされたURL以外の場所へ「リダイレクト」するためのフィールド(項目)です。ステータスコードが「201」の場合のLocationはリクエストにより作成された、新しいリソースの値になっています。3xxの場合はリダイレクト先のURLの値になっています。
(例)
Location: http://www.rainbow.html
■Proxy-Authenticate
ステータスコード=407のレスポンス(クライアントにプロキシ認証を要求)の場合には、このフィールドが必ず含まれいます。
(例:Basic認証の例)
Proxy-Authenticate: Basic realm="Access to the internal site"
(1-3-3) エンティティヘッダー
ボティ部に関する情報を保持するためのヘッダーです。ボディ部が無い場合は、リクエスト対象のリソースに関する情報が記載されます。
<エンティティヘッダー例>
■ContentEncoding
エンティティボディ部を圧縮する際などに適用された処理などを表します。この情報から、でコードするには何の処理をしなければならないか、を知る事ができます。
(例1)
Content-Encoding: gzip
(例2)
Content-Encoding: compress
(1-4) ボディ部
エンティティボディの情報を保持するためのエリアです。構成としては「メッセージボディ=エンティティボディ+エンティティボディをエンコードしたもの」となっています。
リクエストにメッセージボディがあるかどうか?は「Content-Length」や「Transfer-Encoding」といった情報から推察する事ができます。
レスポンスの場合は、リクエストメソッド(GETなど)やステータスコード(400など)によって含まれるかどうか?が決まります。