HTTP 1.1の仕様におけるHTTPヘッダーは、クライアントとサーバが通信する際に追加情報を付与するために使用されます。リクエストとレスポンスにはそれぞれヘッダーがあり、HTTP 1.1では特定の標準ヘッダーが定義されています。
HTTP 1.1 ヘッダーの構造
ヘッダーは、基本的に「名前: 値」の形式で書かれ、各ヘッダーの後に改行が続きます。ヘッダーの終了を示すために、空行が必要です。
ヘッダー名: 値
例えば、以下のようなリクエストヘッダーがあるとします:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9
この例では、クライアントがwww.example.comの/index.htmlリソースに対するリクエストを送信しています。
HTTP 1.1 ヘッダーの種類
HTTPヘッダーは、大きく分けて以下の4つのカテゴリーに分類されます。
General(汎用)ヘッダー
リクエストとレスポンスの両方に使用され、メッセージ全体に適用されます。
Cache-Control: キャッシュの動作を指定
Connection: コネクションの管理(例: keep-alive、close)
Date: メッセージの送信日時
Via: プロキシやゲートウェイの情報
Request(リクエスト)ヘッダー
クライアントがサーバに送信する追加情報を提供します。
Host: リクエストの送信先ホスト名とポート
User-Agent: クライアントソフトウェアの情報
Accept: クライアントが受け入れるメディアタイプ
Authorization: 認証情報
Referer: リクエスト元のURL
Cookie: サーバに保存されたクライアントの状態情報
Response(レスポンス)ヘッダー
サーバがクライアントに対して応答する際に送信する追加情報です。
Server: サーバソフトウェアの情報
Set-Cookie: クライアントにクッキーを保存するよう指示
Location: リダイレクト先のURLを指定
WWW-Authenticate: 認証が必要であることを通知
Retry-After: クライアントに再リクエストする時間を指示(主に503エラーの場合)
Entity(エンティティ)ヘッダー
リクエストやレスポンスの「エンティティ・ボディ」に関する情報を提供します。エンティティとは、送信されるデータのことです。
Content-Type: メディアタイプ(例: text/html, application/json)
Content-Length: エンティティボディのサイズ
Content-Encoding: エンティティの圧縮方式
Content-Language: エンティティの言語
Content-Disposition: ファイルダウンロード用の名前や形式
HTTP 1.1 で重要なヘッダー
Host
HTTP 1.1では、Hostヘッダーが必須です。これは、クライアントがどのホストに対してリクエストを送っているかをサーバに知らせます。これにより、1つのIPアドレスで複数のドメインをホスティングすることが可能になります。
例:
Host: www.example.com
Connection
keep-aliveやcloseの値を指定して、接続を持続させるか、すぐに閉じるかを制御します。デフォルトでHTTP 1.1はコネクションを維持します。
例:
Connection: keep-alive
Content-Type
サーバがレスポンスとして送信するデータの形式(メディアタイプ)を示します。例えば、HTMLページならtext/html、JSONデータならapplication/jsonです。
例:
Content-Type: text/html; charset=UTF-8
Cache-Control
リソースがキャッシュ可能かどうか、キャッシュの有効期限などを示します。
例:
Cache-Control: no-cache
User-Agent
クライアントがサーバに送信する自身の情報です。通常はブラウザやクライアントアプリケーションの名前とバージョンが含まれます。
例:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Authorization
クライアントがリソースにアクセスするために使用する認証情報です。
例:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
まとめ
HTTP 1.1のヘッダーは、クライアントとサーバがどのようにデータをやり取りするかを制御し、各種の追加情報を提供する役割を担っています。Hostヘッダーは必須で、適切に設定されないとリクエストの処理に失敗することがあります。他にも多くのヘッダーがHTTPの機能をサポートしており、それぞれ特定の目的を持っています。