HTTPリクエストは、以下の4つの要素で構成されます。
HTTPリクエストの4つの要素
HTTPリクエストは、以下の4つの要素で構成されます。
- リクエストライン:HTTPリクエストの最初の行で、リクエストのタイプ、URI(Uniform Resource Identifier)、およびHTTPバージョンが含まれています。例えば、GETメソッドを使用してhttp://example.com/page.html にアクセスする場合、リクエストラインは次のようになります。
GET /page.html HTTP/1.1 - HTTPヘッダ:リクエストに関するメタ情報が含まれています。
例えば、ブラウザの種類やバージョン、言語、クッキー情報、圧縮方法などが含まれます。 - 空白行:リクエストラインとHTTPヘッダの終わりを示す空白行が含まれます。
- メッセージボディ:オプションの要素であり、リクエストで送信するデータが含まれます。
例えば、POSTリクエストでフォームデータを送信する場合、メッセージボディにはフォームフィールドの値が含まれます。ただし、GETリクエストではメッセージボディは含まれません。
リクエストライン具体例
TTPリクエストのリクエストラインは、以下のような構造になっています。
メソッド URI HTTPバージョン
メソッド:リクエストの種類を指定します。代表的なメソッドには、GET、POST、PUT、DELETEなどがあります。
URI:アクセスするリソースの場所を指定します。URIには、スキーム(http、httpsなど)、ホスト名、ポート番号、リソースのパス、クエリストリング(オプション)が含まれます。
HTTPバージョン:HTTPプロトコルのバージョンを示します。代表的なバージョンには、HTTP/1.0、HTTP/1.1、HTTP/2などがあります。
例えば、GETメソッドを使用してhttp://example.com/page.htmlにアクセスする場合、リクエストラインは次のようになります。
GET /page.html HTTP/1.1
ここで、メソッドはGET、URIは/page.html、HTTPバージョンはHTTP/1.1になります。
HTTPヘッダ
HTTPリクエストには、HTTPヘッダと呼ばれる追加の情報が含まれています。HTTPヘッダには、クライアントとサーバー間でやりとりされる情報や、コンテンツの圧縮、キャッシュ制御、認証などのセキュリティ関連の情報が含まれています。
以下は、ブラウザがhttp://example.com/index.html にアクセスする場合のHTTPリクエストのHTTPヘッダの具体例です。
Host: example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate, br Connection: keep-alive Cookie: __cfduid=d7d51415f2242672f50863b63e9f306131619604778
例えば、Hostヘッダには、クライアントがアクセスするサーバーのホスト名が含まれています。
User-Agentヘッダ:ブラウザの種類やバージョン、使用しているオペレーティングシステムなどの情報が含まれています。
Acceptヘッダ:クライアントが受け入れ可能なコンテンツタイプが含まれています。
Accept-Encodingヘッダ:クライアントが受け入れ可能な圧縮アルゴリズムが含まれています。
Connectionヘッダ:クライアントがサーバーとの接続を維持するかどうかが含まれています。
Cookieヘッダには、サーバーから送信されたクッキーが含まれています。
空白行
HTTPリクエストの空白行は、リクエストラインとHTTPヘッダ、およびHTTPヘッダとメッセージボディの間の空行を指します。空白行は、HTTPリクエストの構成要素を区切るために使用されます。
空白行の例を示します。
codeGET /example HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
この例では、リクエストラインとHTTPヘッダの末尾に空白行があります。これにより、HTTPヘッダとメッセージボディが区切られます。
このリクエストは、/exampleというリソースに対してGETメソッドを使用し、example.comというホストに対して送信されています。
User-Agentヘッダは、クライアントのブラウザを識別するために使用されます。Acceptヘッダは、クライアントが受け入れ可能なコンテンツタイプを指定します。
空白行の後には、メッセージボディは含まれていません。
メッセージボディ
HTTPリクエストのメッセージボディは、必要に応じてリクエストに含まれる本文の部分を指します。メッセージボディは、HTTPリクエストに含まれる必要がある場合にのみ使用されます。
メッセージボディの例を示します。
POST /example HTTP/1.1
Host: example.com
Content-Type: application/json
{"username": "john", "password": "secret"}
この例では、/exampleというリソースに対してPOSTメソッドを使用し、example.comというホストに対して送信されています。
Content-Typeヘッダは、メッセージボディで使用されるデータの種類を指定します。この例では、JSON形式でデータが送信されます。
メッセージボディには、{“username”: “john”, “password”: “secret”}というJSONデータが含まれています。このデータは、Webサーバーに送信されるフォームデータ、ユーザー認証情報、またはその他の情報を含めることができます。
まとめ
HTTPリクエストは、クライアントがWebサーバーに対して送信する要求のことを指します。HTTPリクエストは、リクエストライン、HTTPヘッダ、空白行、そして必要に応じてメッセージボディで構成されます。
Webサーバーは、HTTPリクエストを受信すると、リクエストに応じた処理を行い、HTTPレスポンスを返します。