14. Header Field Definitions (ヘッダフィールド定義)
この章では、HTTP/1.1標準におけるすべての標準HTTPヘッダフィールドの構文とセマンティクスを定義します。送信者は、受信者がエンティティボディの一部として扱わない限り、この章または第7.1節(エンティティヘッダフィールド)で定義されていないヘッダフィールドを生成すべきではありません (SHOULD NOT)。
ヘッダフィールドの分類
HTTPヘッダフィールドは、機能に応じて以下のカテゴリに分類できます:
一般ヘッダフィールド (General Header Fields)
リクエストおよびレスポンスメッセージに適用されますが、転送されるエンティティには適用されません。
リクエストヘッダフィールド (Request Header Fields)
クライアントがリクエストおよびクライアント自身に関する追加情報をサーバーに渡すことができます。
レスポンスヘッダフィールド (Response Header Fields)
サーバーがステータス行に配置できないレスポンスに関する追加情報を渡すことができます。
エンティティヘッダフィールド (Entity Header Fields)
エンティティボディまたはリクエストで識別されるリソースに関するメタ情報を定義します。
HTTP/1.1 ヘッダフィールド完全リスト
コンテンツネゴシエーションヘッダフィールド
| ヘッダフィールド | 用途 | 例 |
|---|---|---|
| 14.1 Accept | クライアントが受け入れ可能なメディアタイプを指定 | Accept: text/html, application/json |
| 14.2 Accept-Charset | クライアントが受け入れ可能な文字セットを指定 | Accept-Charset: utf-8, iso-8859-1 |
| 14.3 Accept-Encoding | クライアントが受け入れ可能なコンテンツエンコーディングを指定 | Accept-Encoding: gzip, deflate |
| 14.4 Accept-Language | クライアントが優先する言語を指定 | Accept-Language: ja, en |
| 14.5 Accept-Ranges | サーバーが範囲リクエストを受け入れるかどうかを示す | Accept-Ranges: bytes |
認証ヘッダフィールド
| ヘッダフィールド | 用途 | タイプ |
|---|---|---|
| 14.8 Authorization | ユーザーエージェントの認証資格情報を含む | リクエストヘッダ |
| 14.33 Proxy-Authenticate | プロキシサーバーの認証チャレンジ | レスポンスヘッダ |
| 14.34 Proxy-Authorization | クライアントがプロキシに提供する認証資格情報 | リクエストヘッダ |
| 14.47 WWW-Authenticate | サーバーの認証チャレンジ | レスポンスヘッダ |
キャッシュ制御ヘッダフィールド
| ヘッダフィールド | 用途 | 説明 |
|---|---|---|
| 14.6 Age | レスポンスがプロキシキャッシュに滞在した時間 | レスポンスヘッダ |
| 14.9 Cache-Control | キャッシング指令を指定 | 一般ヘッダ |
| 14.21 Expires | レスポンスの有効期限の日付/時刻を指定 | エンティティヘッダ |
| 14.32 Pragma | 実装固有の指令(後方互換性) | 一般ヘッダ |
| 14.44 Vary | どのリクエストヘッダがキャッシュ選択に影響するかを示す | レスポンスヘッダ |
条件付きリクエストヘッダフィールド
| ヘッダフィールド | 用途 | 検証方法 |
|---|---|---|
| 14.24 If-Match | ETagが一致する場合のみ実行 | 強検証 |
| 14.25 If-Modified-Since | リソースが変更された後にのみ実行 | 時刻検証 |
| 14.26 If-None-Match | ETagが一致しない場合のみ実行 | 強/弱検証 |
| 14.27 If-Range | 条件付き範囲リクエスト | 組み合わせ検証 |
| 14.28 If-Unmodified-Since | リソースが変更されていない場合のみ実行 | 時刻検証 |
コンテンツ記述ヘッダフィールド
| ヘッダフィールド | 用途 | 説明 |
|---|---|---|
| 14.11 Content-Encoding | エンティティボディに適用されるエンコーディング | gzip, compress, deflate |
| 14.12 Content-Language | エンティティボディの自然言語 | ja, en-US |
| 14.13 Content-Length | エンティティボディのバイト長 | 数値 |
| 14.14 Content-Location | エンティティの代替位置 | URI |
| 14.15 Content-MD5 | エンティティボディのMD5ダイジェスト | Base64エンコード |
| 14.16 Content-Range | 部分エンティティボディの位置 | bytes 200-1000/1234 |
| 14.17 Content-Type | エンティティボディのメディアタイプ | text/html; charset=utf-8 |
接続管理ヘッダフィールド
| ヘッダフィールド | 用途 | 説明 |
|---|---|---|
| 14.10 Connection | 現在の接続のオプションを制御 | keep-alive, close |
| 14.23 Host | リクエストのホストとポート番号 | 必須のリクエストヘッダ |
| 14.39 TE | クライアントが受け入れ可能な転送エンコーディング | trailers, deflate |
| 14.40 Trailer | メッセージトレーラーに存在するヘッダフィールドを示す | チャンクエンコーディング |
| 14.41 Transfer-Encoding | メッセージボディに適用される転送エンコーディング | chunked |
| 14.42 Upgrade | 他のプロトコルへの切り替えをリクエスト | HTTP/2.0, WebSocket |
| 14.45 Via | 中間プロキシとゲートウェイを記録 | パスの追跡 |
エンティティ検証ヘッダフィールド
| ヘッダフィールド | 用途 | タイプ |
|---|---|---|
| 14.19 ETag | エンティティタグ(一意の識別子) | 強/弱バリデータ |
| 14.29 Last-Modified | リソースの最終変更時刻 | タイムスタンプ |
リクエスト制御ヘッダフィールド
| ヘッダフィールド | 用途 | 説明 |
|---|---|---|
| 14.7 Allow | リソースがサポートするHTTPメソッド | GET, POST, PUT |
| 14.20 Expect | クライアントが期待する特定のサーバー動作 | 100-continue |
| 14.22 From | リクエストユーザーの電子メールアドレス | 情報提供 |
| 14.31 Max-Forwards | TRACE/OPTIONSリクエストの最大転送回数 | 数値 |
| 14.35 Range | エンティティの部分コンテンツをリクエスト | bytes=0-499 |
| 14.36 Referer | リクエストURIの参照元アドレス | URI |
レスポンス制御ヘッダフィールド
| ヘッダフィールド | 用途 | 説明 |
|---|---|---|
| 14.18 Date | メッセージの作成日時 | HTTP日付形式 |
| 14.30 Location | リダイレクトまたは新規作成リソースのURI | 絶対/相対URI |
| 14.37 Retry-After | クライアントが再試行すべき時期を提案 | 日付または秒数 |
| 14.38 Server | オリジンサーバーのソフトウェア情報 | ソフトウェア名とバージョン |
| 14.46 Warning | 追加の警告情報 | 3桁の警告コード |
ユーザーエージェント情報
| ヘッダフィールド | 用途 | 説明 |
|---|---|---|
| 14.43 User-Agent | リクエストを開始したユーザーエージェント情報 | ブラウザ識別 |
ヘッダフィールド構文規則
すべてのHTTP/1.1ヘッダフィールド値の構文規則は、第2.2節(基本規則)およびこのセクションで説明されています。
一般的な構文規則
message-header = field-name ":" [ field-value ]
field-name = token
field-value = *( field-content | LWS )
複数値ヘッダフィールド
一部のヘッダフィールドには複数の値を含めることができ、以下の2つの方法で表現できます:
-
単一のヘッダフィールド、値はカンマ区切り:
Accept: text/html, application/json, */* -
同名の複数のヘッダフィールド:
Accept: text/html
Accept: application/json
Accept: */*
日付/時刻形式
HTTPアプリケーションは、以下の3つの日付/時刻形式を受け入れる必要があります:
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C asctime() format
重要な注意事項
ヘッダフィールドの拡張性
HTTP/1.1は拡張ヘッダフィールドを許可しますが、受信者は未知のヘッダフィールドを処理できる必要があります:
- プロキシ - 認識できないヘッダフィールドを転送しなければなりません
- ユーザーエージェント - 認識できないヘッダフィールドを無視すべきです
ヘッダフィールドの順序
ヘッダフィールドの定義で別途指定されていない限り、ヘッダフィールドの順序は重要ではありません。ただし、最初に一般ヘッダフィールド、次にリクエストヘッダまたはレスポンスヘッダフィールド、最後にエンティティヘッダフィールドを送信することを推奨します。
ヘッダフィールドのサイズ制限
HTTPはヘッダフィールドの長さに事前定義された制限を設けていませんが、実装は任意の合理的な長さのヘッダフィールドを受け入れる準備をすべきです。
関連参照
- ヘッダフィールドの完全な定義については、RFC 2616 第14章原文を参照してください
- 更新されたヘッダフィールド仕様については、RFC 7230-7235 (HTTP/1.1新バージョン) を参照してください
- IANA HTTPヘッダフィールドレジストリ:https://www.iana.org/assignments/message-headers
注意:この章では、すべての標準HTTP/1.1ヘッダフィールドの概要を提供しています。各ヘッダフィールドには、詳細な構文規則、使用シナリオ、および例があります。実際のアプリケーションでは、これらのヘッダフィールドの正しい使用法を理解することが、標準に準拠したHTTPアプリケーションを構築する上で重要です。