HTTP 要求

HTTP 要求は、サーバー上にある指定されたホストに対して、クライアントによって作成されます。 要求の目的は、サーバー上にあるリソースにアクセスすることです。

リクエストを行うために、クライアントは URL (Uniform Resource Locator)のコンポーネントを使用します。これには、リソースにアクセスするために必要な情報が含まれています。 URLの構成要素がURLについて説明しています。

正常に作成された HTTP 要求には、以下の要素が含まれています。
  1. 要求行。
  2. 一連の HTTP ヘッダー、またはヘッダー・フィールド。
  3. メッセージ・ボディ (必要な場合)。
各 HTTP ヘッダーの後には、復帰改行 (CRLF) が続きます。 HTTP ヘッダーが終わると、その後に追加の CRLF が使用され (空の行を置くため)、それからメッセージ・ボディが始まります。

要求行

要求行は、要求メッセージの最初の行です。 これは、少なくとも以下の 3 つの項目で構成されます。
  1. メソッド。 メソッドは、リソースを使用して何を行うかをサーバーに伝える、1 語のコマンドです。 例えば、サーバーは、リソースをクライアントに送信するように要求される場合があります。
  2. 要求の URL のパス構成要素。 パスは、サーバー上のリソースを識別します。
  3. クライアントがそのメッセージをどの HTTP 仕様に準拠させようとしているのかを示す、HTTP バージョン番号。
要求行の例は次のようになります。
GET /software/htp/cics/index.html HTTP/1.1
この例では、次のようになっています。
  • メソッドは GET
  • パスは /software/htp/cics/index.html
  • HTTP バージョンは HTTP/1.1
要求行には、次のような追加の項目が含まれる場合もあります。
  • 照会ストリング。 これは、リソースが何かの目的に使用できる情報のストリングを提供します。 照会ストリングは先頭に疑問符 (?) を付けて、パスの後に続きます。
  • パスに追加される、URL のスキームおよびホスト構成要素。 リソースの位置がこの方法で指定される場合、これは絶対 URI 形式と呼ばれています。 HTTP/1.1 の場合、この形式は、要求がプロキシー・サーバーを通る場合に使用されます。 また、HTTP/1.1 の場合、URL のホスト構成要素が要求行に含まれていない場合は、メッセージの Host ヘッダーに組み込む必要があります。

HTTP ヘッダー

HTTP ヘッダーは、メッセージ、送信者、および送信側が求める受信側との通信方法に関する情報を、 受信側に提供するため、メッセージに書き込まれます。 各 HTTP ヘッダーは、名前と値で構成されます。 HTTP プロトコルの仕様では、標準セットの HTTP ヘッダーを定義し、それらのヘッダーを正しく使用する方法について記述しています。 または、HTTP メッセージには、HTTP/1.1 または HTTP/1.0 の仕様の一部には含まれていない、拡張ヘッダーを組み込むこともできます。

クライアント要求の HTTP ヘッダーには、その要求に対する応答方法を決定するためにサーバー側で使用できる情報が含まれます。 例えば、以下の一連のヘッダーを使用すると、要求された文書をユーザーがフランス語またはドイツ語でのみ読み取ること、および、その文書を最後にクライアントが取得した日時以降に変更があった場合にのみ、文書を送信する必要があることを、指定できます。
Accept-Language: fr, de
If-Modified-Since: Fri, 10 Dec 2004 11:22:13 GMT

要求メッセージの一連の HTTP ヘッダーの後には、ヘッダーとメッセージ・ボディを区切るために、空の行 (つまり、CRLF のみの行) が置かれます。

メッセージ・ボディ

HTTP メッセージのボディの内容はいずれも、メッセージ・ボディまたはエンティティー・ボディとして参照できます。 技術の見地からいえば、エンティティー・ボディはメッセージの実際の内容です。 メッセージ・ボディには、エンティティー・ボディが含まれます。 エンティティー・ボディは、元の状態のままであることも、移送のために なんらかの方法で (例えば、チャンクに分割されている (チャンク転送コーディング) など) エンコードされることもあります。 要求のメッセージ・ボディは、便宜上、要求ボディとして参照される場合があります。

メッセージ・ボディは、一部の要求メソッドには適切で、その他の要求メソッドには不適切 な場合があります。 例えば、入力データをサーバーに送信する、POST メソッドを持つ要求には、データが含まれているメッセージ・ボディがあります。 リソースの送信をサーバーに求める、GET メソッドを持つ要求には、メッセージ・ボディはありません。