HTTPリクエストの構成

ブラウザから送信されるHTTPリクエストは次の要素で構成されています。

  • リクエストライン
  • HTTPリクエストヘッダー
  • HTTPリクエストボディ

リクエストライン

リクエストラインには、リクエストの種類(メソッド)などを記述します。メソッドはWebサーバーへの命令の種類を表し、主に下記のような種類があります。

GETメソッド クライアントがサーバーの情報を取得する(リソース取得要求)
HEADメソッド サーバー情報のヘッダー部分を取得する(リソース取得要求(ヘッダーのみ))
POSTメソッド クライアントからサーバーに情報を送る(データの送信と処理の要求)
PUTメソッド クライアントがサーバーにファイルを保存する(ファイルの転送)
DELETEメソッド クライアントがサーバーのファイルを削除する(ファイルの削除)
TRACEメソッド リクエストをそのままレスポンスとして返す(経由サーバーのトレース)

メソッドは多くの場合「GET」になり、この場合、HTTPリクエストではデータ本体が格納されるメッセージボディに空になります。メソッドが「POST」の場合(フォームから情報を送信するなど)は、メッセージボディにデータ本体が格納されます。

リクエストラインにはメソッドの他にリクエストURIやHTTPバージョンを記述します。

HTTPリクエストヘッダー

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

ユーザーエージェント名(User-Agent) ブラウザの種類やOSの情報。アクセスしているのがブラウザではなく検索エンジンのクローラの場合、「Googlebot」などの名前が入る。
リファラ(Referer) どのページから発生したリクエストなのかを示します。例えば、ページAにあるリンクをクリックしてページBに行った場合に、ページBへのHTTPリクエストにリファラーとしてページAが入る。
更新されていたら(If-Modified-Since)/同じでなければ(If-None-Match) 「更新されていなければその旨教えて」とWebサーバー側に指示する。ブラウザは、一度表示したデータを「ローカルキャッシュ」として保存しておき、同じデータは再取得しない。その際、ローカルキャッシュのデータが変更されていないかチェックするために、ファイルの変更日付や管理情報をリクエストに含めておく。
クッキー(Cookie) ブラウザに保存されているクッキー情報。
受け取り希望(Accept、Accept-Language、Accept-Encoding、Accept-Charset) どんなデータを受け取りたいか、画像の種類や、言語、文字コードなどの希望を伝える。例えば、英語表記か日本語表記など。

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