(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) HTTPリクエスト行について
URLにアクセスする際のメソッドやプロトコルを指定する行です。
(構文)
[メソッド名] [URI] [HTTPプロトコル]
■[メソッド名]
GET | 指定URIのリソース情報(Webページの内容など)を取得するメソッドです。 |
HEAD | GETとほぼ同じだが、違いはレスポンスに「メッセージボディ」を含まない点です。 |
POST | 指定URIのリソースにデータを送り、追加/更新するためのメソッドです。 |
など
■[URI]
リクエスト対象のURIを指定します。
■[HTTPプロトコル]
「HTTP/」の後ろにバージョン番号を付記します。
(例)
GET /XXX/index.html HTTP/1.1
(1-3) HTTPリクエストの各部分の概要
(1-3-1) 一般ヘッダー
・リクエスト/レスポンスのいずれにも適用されるヘッダーです。
・ただし、データ自体には影響せず、主にメタデータの保持に使われます。
(例のご紹介)
■Date
メッセージが生成された日時を表します。
(構文)
Date = "Date" ":" HTTP-date
(例)
Date: Tue, 15 Nov 1994 08:12:31 GMT
■Via
「経由」という意味の単語の通り、プロキシやゲートウェイなど、User Agentとサーバとの間で別のノードを経由する場合には必須の項目となります。内容としては、その仲介時に使用するプロトコルや受信者の指定を行います。
(例)
Via: 1.0 rainbow, 1.1 somewhere.com (Apache/1.1)
ユーザーエージェントはHTTP/1.0でリクエストを送り、「rainbow」という名前のプロキシを経由し、更にHTTP/1.1を使って「somewhere.com」という別のプロキシに転送し、目的地のサーバに到達することを意味します。
(1-3-2) リクエストヘッダー
「リクエストに関する追加情報」や「クライアント自身の情報」を付与するためのヘッダーです。例えば、ブラウザの種類、バージョン、機能などをサーバに伝える事で、サーバがブラウザと互換性があるデータを返却できるように補助します。
(例のご紹介)
■Host
リクエスト対象のリソースがある「ホスト名」と「ポート番号」を指定します。
(例)
Host: HostName:8080
■User-Agent
User-AgentはブラウザからWebサイトにアクセスする際に使うソフトウェアで、このフィールドに指定するのは、リクエストを発している端末のユーザーエージェントを記述します。
(例)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64)
(1-3-3) エンティティヘッダー
ボティ部に関する情報を保持するためのヘッダーです。ボディ部が無い場合は、リクエスト対象のリソースに関する情報が記載されます。
(例のご紹介)
■Conent-Length
ボディ部のデータ長を表しています。
(例)
Content-Length: 352
■Allow
リクエスト対象URIのリソースにて許可されているメソッドを表しています。この項目の目的は受信者(ブラウザ)に対して、対象のリソースが許可するメソッドを通知する事です。
(例)
Allow: GET, HEAD, PUT
(1-4) ボディ部
ボディ部は全てのリクエストに存在する訳ではありません。GETやHEADといったリソースを取得するのみのメソッドにおいてはボディ部は必須ではありません(PUTメソッド等で必要となる)。内容としては「Content-Type」で指定された形式の、「Content-Length」分の長さのデータが入っています。