HTTPヘッダーにはさまざまな種類があり、用途に応じていくつかの分類が存在します。
この記事では『HTTPヘッダー』について、以下の内容をわかりやすく解説しています。
- HTTPヘッダーとは
- HTTPヘッダーの分類
- General Header(汎用ヘッダー)の一覧
- Request Header(リクエストヘッダー)の一覧
- Response Header(レスポンスヘッダー)の一覧
- Entity Header(エンティティヘッダー)の一覧
HTTPヘッダーとは
HTTPヘッダーは、HTTPリクエストやHTTPレスポンスに付加される追加情報(メタデータ)です。クライアント(ブラウザなど)とサーバーが通信する際、HTTPヘッダーの情報によって、通信の方法や内容を細かく制御・調整することができます。
HTTPヘッダーは、複数のヘッダーフィールド(Header Field)と呼ばれる行から成り立っており、それぞれのヘッダーフィールドは、以下のように「フィールド名(name
)」、「コロン(:
)」、「1文字分の空白」、「フィールド値(value
)」で構成されています。
構成
フィールド名(name): フィールド値(value)
例
Content-Type: text/html
HTTPヘッダーの分類
HTTPヘッダーは以下のカテゴリに分類されます。
- 汎用ヘッダー・一般ヘッダー(General Header)
- HTTPリクエストとHTTPレスポンスの両方で使用されるヘッダー。
- 例:
Cache-Control
,Connection
,Date
- リクエストヘッダー(Request Header)
- HTTPリクエストて使用されるヘッダー。
- クライアントからサーバーに送信される情報を含んでいる。
- 例:
Accept
,Authorization
,User-Agent
- レスポンスヘッダー(Response Header)
- HTTPレスポンスにて利用されるヘッダー。
- サーバーからクライアントに送信される情報を含んでいる。
- 例:
Server
,Set-Cookie
- 表現ヘッダー(Representation Header)
- リソースの表現に関する情報を提供するヘッダー。
- 例:
Content-Length
,Content-Range
以前は「エンティティヘッダー(Entity Header)」というカテゴリがあり、これはエンティティ(リクエストやレスポンスのメッセージボディに関する情報)を示すヘッダーでした。しかし、現在のHTTP/1.1の仕様では「エンティティ」や「エンティティヘッダー」という用語は使われなくなり、一部のヘッダーは「表現ヘッダー(Representation Header)」という新しいカテゴリに分類されています。
General Header(汎用ヘッダー)の一覧
HTTPヘッダー | 説明 |
Cache-Control | HTTP/1.1でブラウザやプロキシがコンテンツをどのようにキャッシュするかを制御するヘッダー |
Connection | TCPコネクションを切断するか維持するかを指定するヘッダー |
Date | HTTPメッセージが作成または送信された日時を示すヘッダー |
Pragma | HTTP/1.0でキャッシュ制御を行うためのヘッダー |
Trailer | チャンク転送エンコーディング使用時に追加のヘッダーを指定するためのヘッダー |
Transfer-Encoding | HTTPメッセージボディのエンコード方式(圧縮や分割など)を指定するためのヘッダー |
Upgrade | HTTP接続をWebSocketやHTTP/2、HTTP/3などにアップグレードするためのヘッダー |
Via | HTTPメッセージが経由したプロキシやゲートウェイの情報を記録するためのヘッダー |
Warning | HTTPレスポンスに追加情報や警告を提供し、キャッシュの問題などを示すためのヘッダー |
Cache-Control
Cache-Control
ヘッダーは、HTTP/1.1通信において、ブラウザや中間サーバー(プロキシやCDN)がコンテンツをどのようにキャッシュするかを制御するHTTPヘッダーです。HTTP/1.0ではPragma
ヘッダーがキャッシュ制御に使用されていましたが、HTTP/1.1以降ではCache-Control
が推奨されています。
Cache-Control
ヘッダーの構文を以下に示します。
Cache-Controlヘッダーの構文
Cache-Control: <ディレクティブ>
<ディレクティブ>
- キャッシュのルールを指定するオプション(例:
no-cache
,no-store
,public
,max-age=3600
など)を指定します。 no-cache
- キャッシュを保存できるが、キャッシュを再利用する際には、再利用前にそのキャッシュが有効であることをオリジンサーバーで確認する。
no-store
- コンテンツを一切キャッシュに保存しない。機密情報に適しています。
public
- どのキャッシュ(ブラウザ、CDN、プロキシ)でも保存可能。
max-age=<秒数>
- キャッシュの有効期間を指定(例:
max-age=3600
は1時間)。
- キャッシュの有効期間を指定(例:
- キャッシュのルールを指定するオプション(例:
- 複数のオプションをカンマ
,
で区切って指定可能- 例;
Cache-Control: public, max-age=86400
- 例;
Connection
Connection
ヘッダーは、HTTP通信において現在のTCPコネクションの扱いを制御するHTTPヘッダーです。このヘッダーを使用することで、応答送信後にTCPコネクションを切断するか、維持するかを指定できます。
Connectionヘッダーの値
Connection
ヘッダーに指定可能な値には、keep-alive
とclose
があります。
keep-alive
- 現在の通信を送信した後もTCPコネクションを維持し、後続の通信でも再利用します。
close
- 応答送信後にTCPコネクションを切断します。
以下にConnection
ヘッダ-の具体例を示しています。
Connection: keep-alive
Date
Date
ヘッダーは、HTTPメッセージが作成または送信された日時を示すHTTPヘッダーです。HTTPリクエストでは使用されることは少なく、HTTPレスポンスにおいて、サーバーがレスポンスを生成した日時を示す際に使用することが多いです。
Date
ヘッダーの構文は以下のようになっており、日時はグリニッジ標準時(GMT)で記述されます。
Date: <曜日>, <日> <月> <年> <時>:<分>:<秒> GMT
例えば、2025年1月26日の9時に作成されたHTTPメッセージの場合、Date
ヘッダーは以下のようになります。
Date: Fri, 26 Jan 2025 09:00:00 GMT
Pragma
Pragma
ヘッダーは、HTTP/1.0でキャッシュ制御を行うために使用されるヘッダーです。HTTP/1.1以降ではCache-Control
ヘッダーが推奨されていますが、後方互換性のためにPragma
が引き続きサポートされています。
Pragmaヘッダーの値
Pragma
ヘッダーに指定可能な値には、no-cache
があります。
no-cache
Cache-Control: no-cache
と同じです。
以下にPragma
ヘッダ-の具体例を示しています。
Pragma: no-cache
Trailer
Trailer
ヘッダーは、HTTP通信でチャンク転送エンコーディング(chunked transfer encoding)が使用される場合に、メッセージの末尾に含まれる追加ヘッダーを指定するためのHTTPヘッダーです。Trailer
ヘッダーは、Transfer-Encoding: chunked
が使用される場合にのみ意味を持ちます。
Trailer
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストにおいて、クライアントはTrailer: Content-MD5
でメッセージの末尾に Content-MD5
ヘッダーが追加されることを通知しています。
POST /upload HTTP/1.1
Host: example.com
Transfer-Encoding: chunked
Trailer: Content-MD5
4
Wiki
5
pedia
0
Content-MD5: 1B2M2Y8AsgTpgAmY7PhCfg==
Transfer-Encoding
Transfer-Encoding
ヘッダーは、HTTPメッセージボディ部分のエンコード方式を指定するために使用されるHTTPヘッダーです。このエンコード方式は、データをどのように加工して送信するか(圧縮や分割など)を決めます。
Transfer-Encodingヘッダーの値
Transfer-Encoding
ヘッダーに指定可能な値には、chunked
やgzip
やidentity
などがあります。
chunked
- データを「チャンク(塊)」に分割して送信する。
gzip
- データをgzip形式に圧縮して送信する。
- 圧縮方式の指定については、現在は
Content-Encoding
ヘッダーで指定するのが一般的です。
identity
- エンコードを行わず、元のデータをそのまま送信します。これがデフォルトです。
以下にTransfer-Encoding
ヘッダ-の使用例を示しています。
Transfer-Encoding: chunked
Transfer-Encoding
ヘッダーが指定されていない場合、HTTPメッセージボディは「そのまま送信される」のがデフォルトです。この場合、ボディのサイズをContent-Length
ヘッダーで明示する必要があります。
Upgrade
Upgrade
ヘッダーは、HTTP/1.1の接続を別のプロトコルにアップグレードしたい場合に使用するHTTPヘッダーです。このヘッダーを使うことで、クライアントがサーバーに対して別のプロトコルへのアップグレードを要求できます。
HTTP/1.1からWebSocketへの切り替えや、HTTP/1.1からHTTP/2(h2c)やHTTP/3に切り替えたい場合に使用されます。ただし、HTTP/2やHTTP/3では、通常ALPN(Application-Layer Protocol Negotiation)が利用されるため、Upgrade
ヘッダーは主にWebSocketに切り替える場合に使用されれます。
例えば、HTTP/1.1からWebSocketに切り替えたい場合、以下のようなHTTPリクエストとHTTPレスポンスになります。
HTTPリクエスト例
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Upgrade: websocket
でクライアントがプロトコルをWebSocketに切り替えたいことを示しています。Connection: Upgrade
でUpgrade
ヘッダーを有効にすることを示します。Sec-WebSocket-Key
はクライアントが生成したランダムなキーで、サーバーが正しい応答を生成して返すことで通信の正当性を検証します。Sec-WebSocket-Version
はクライアントがサポートしているWebSocketプロトコルのバージョン(通常は13)を指定します。
HTTPレスポンス例
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
サーバーは101ステータスコード(Switching Protocols)を返し、WebSocketへの切り替えを承認します。Upgrade: websocket
はプロトコルがWebSocketに切り替えられたことを示します。Sec-WebSocket-Accept
はクライアントから受け取ったSec-WebSocket-Key
に固定文字列258EAFA5-E914-47DA-95CA-C5AB0DC85B11
を結合し、SHA-1でハッシュ化した後にBase64エンコードして生成された値です。これにより、クライアントとサーバー間の通信が正当であることを保証します。
Via
Via
ヘッダーは、HTTPリクエストやHTTPレスポンスがプロキシサーバーやゲートウェイを経由する際に、経由したノードの情報を記録するためのHTTPヘッダーです。この情報は以下の目的で利用されます。
- ループの防止
- 経由ノードの情報が追加されることで、同じノードを何度も経由する場合にループを検出可能。
- 透明性
- クライアントやサーバーが経由ノードの情報を把握できる。
- デバッグとトラブルシューティング
- 経由したプロキシやゲートウェイの情報から、ネットワーク上の問題箇所を特定可能。
Via
ヘッダーの構文を以下に示します。
Viaヘッダーの構文
Via: <received-protocol> <received-by> [<comment>]
received-protocol
- 経由したプロキシやゲートウェイが使用したプロトコル。
- 通常、HTTPバージョンが指定されます(例えば、 経由ノードがHTTP/1.1を使用していた場合には、
1.1
となります)。
received-by
- 経由したノードのホスト名またはIPアドレス。
comment
(任意)- ノードに関する追加情報。省略可能。
Via
ヘッダーの具体例を以下に示します。
単一プロキシを経由した場合
Via: 1.1 example.com (Apache/2.4.41)
1.1
: 経由ノードがHTTP/1.1を使用。example.com
: 経由ノードのホスト名。(Apache/2.4.41)
: 経由ノードのサーバー情報(コメント部分)。
複数のプロキシを経由した場合
Via: 1.1 example.com, 1.0 proxy1.example.net (Squid/3.5)
1.1 example.com
: 最初に経由したプロキシがHTTP/1.1を使用。1.0 proxy1.example.net (Squid/3.5)
: 次に経由したプロキシがHTTP/1.0を使用。
このように、HTTPリクエストやHTTPレスポンスが複数のプロキシサーバーを経由した場合、Via
ヘッダーにはすべての経由情報がカンマで区切られて含まれます。
Warning
Warning
ヘッダーは、HTTPレスポンスに追加情報や警告を提供するために使用されるヘッダーです。主にレスポンスの状態やキャッシュの問題点を示すために利用されます。
Warning
ヘッダーの構文を以下に示します。
Viaヘッダーの構文
Warning: <コード番号> <エージェント> "<警告テキスト>" [<日付>]
コード番号
- 警告の種類を示す3桁のコード。
- 110:レスポンスが「古い」(過去のデータを提供)。
- 113:キャッシュが期限切れ(過去に保存されたデータ)。
エージェント
- 警告を生成したサーバーやプロキシの情報(例: ホスト名)。
警告テキスト
- 警告メッセージ。
日付
(任意)- 警告が生成された日時。
Warning
ヘッダーの具体例を以下に示します。
Warning: 113 example.net "Heuristic expiration"
113
: キャッシュの有効期限が切れている場合の警告。example.net
: 警告を生成したプロキシの情報。"Heuristic expiration"
: デフォルトの期限が切れたことを示すメッセージ。
Request Header(リクエストヘッダー)の一覧
HTTPヘッダー | 説明 |
Access-Control-Request-Methods | CORSのプリフライトリクエストで、使用予定のHTTPメソッドをサーバーへ通知するヘッダー |
Access-Control-Request-Headers | CORSのプリフライトリクエストで、送信予定のカスタムヘッダーをサーバーへ通知するヘッダー |
Accept | クライアントが受け入れ可能なMIMEタイプをサーバーに通知するヘッダー |
Accept-Charset | クライアントが受け入れ可能な文字エンコーディングをサーバーに通知するヘッダー |
Accept-Encoding | クライアントが受け入れ可能なコンテンツエンコーディング形式を通知するヘッダー |
Accept-Language | クライアントが受け入れ可能な言語(自然言語)をサーバーに通知するヘッダー |
Authorization | サーバーに対して認証情報を提供するヘッダー |
Cookie | クライアントに保存されたCookie情報をサーバーに送信するヘッダー |
Expect | リクエストボディ送信前にサーバーの受け入れ可否を確認するヘッダー |
From | クライアントのメールアドレスを示すヘッダー |
Host | リクエスト先のサーバーのホスト名とポート番号を指定するヘッダー |
If-Modified-Since | 指定日時以降にリソースが変更されていれば取得するようサーバーに指示するヘッダー |
If-Match | リソースが特定のETag値と一致する場合のみリソースへの処理(削除など)を許可するヘッダー |
If-None-Match | リソースが特定のETag値と異なる場合のみリソースへの処理(取得など)を許可するヘッダー |
If-Range | リソースが変更されていなければ範囲リクエストを許可し、変更があれば全体を取得するヘッダー |
If-Unmodified-Since | 指定日時以降にリソースが変更されていない場合のみリクエストを実行するヘッダー |
Max-Forwards | リクエストが経由できるプロキシやゲートウェイの最大数を制限するヘッダー |
Origin | リクエストの送信元を示し、CORSの判定に使用されるヘッダー |
Proxy-Authorization | プロキシサーバーを通じたリクエストの際に認証情報を提供するためのヘッダー |
Range | リソースの一部(特定範囲)を取得するためのヘッダー |
Referer | リクエストが発生した元のページのURLを示すヘッダー |
Upgrade-Insecure-Requests | HTTPからHTTPSへのアップグレードを希望することをサーバーに通知するヘッダー |
TE | クライアントが受け入れ可能な転送エンコーディングの形式を指定するヘッダー |
User-Agent | クライアントの情報(ブラウザ、OS等)をサーバーに通知するヘッダー |
X-Forwarded-Host | プロキシ経由時にクライアントの送信元ホスト名をWebサーバーに伝えるヘッダー |
X-Forwarded-For | プロキシ経由時にクライアントの送信元IPアドレスをWebサーバーに伝えるヘッダー |
Access-Control-Request-Methods
Access-Control-Request-Methods
ヘッダーは、HTTPリクエストにおいて、CORS(Cross-Origin Resource Sharing)のプリフライトリクエストで使用されるHTTPヘッダーです。クライアント(通常はブラウザ)が、特定のリソースに対してどのHTTPメソッド(例: GET, POST, DELETEなど)を使用する予定であるかを、事前にサーバーへ通知します。
Access-Control-Request-Methods
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
OPTIONS /api/resource HTTP/1.1
Host: example.com
Origin: https://client.example
Access-Control-Request-Method: DELETE
OPTIONS
: プリフライトリクエストは通常OPTIONSメソッドで送信されます。Origin
: リクエストを発行しているオリジン。Access-Control-Request-Method: DELETE
: クライアントが本リクエストでDELETEメソッドを使用する予定であることを通知。
HTTPレスポンス例
HTTP/1.1 204 No Content
Access-Control-Allow-Methods: GET, POST, DELETE
Access-Control-Allow-Origin: https://client.example
204 No Content
: プリフライトリクエストが成功し、指定されたメソッドが許可されている。Access-Control-Allow-Methods
: サーバーが許可するHTTPメソッドのリストを示す。Access-Control-Allow-Origin
: 指定されたオリジン(例:https://client.example
)からのリクエストを許可。
Access-Control-Request-Method
はリクエストヘッダーであり、クライアントがサーバーに通知するためのものです。サーバーが許可するメソッドはAccess-Control-Allow-Methods
レスポンスヘッダーで応答します。
Access-Control-Request-Headers
Access-Control-Request-Headers
ヘッダーは、HTTPリクエストにおいて、CORS(Cross-Origin Resource Sharing)のプリフライトリクエストで使用されるHTTPヘッダーです。クライアント(通常はブラウザ)が、サーバーに対して「実際のリクエストで送信予定のカスタムHTTPヘッダー」を事前に通知するために利用されます。
Access-Control-Request-Headers
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
OPTIONS /api/resource HTTP/1.1
Host: example.com
Origin: https://client.example
Access-Control-Request-Headers: Authorization, X-Custom-Header
OPTIONS
: プリフライトリクエストは通常OPTIONS
メソッドで送信されます。Origin
: リクエストを発行しているオリジン。Access-Control-Request-Headers
: クライアントが本リクエストで送信予定のヘッダー(ここではAuthorization
とX-Custom-Header
)。
HTTPレスポンス例
HTTP/1.1 204 No Content
Access-Control-Allow-Headers: Authorization, X-Custom-Header
Access-Control-Allow-Origin: https://client.example
204 No Content
: プリフライトリクエストが成功し、指定されたヘッダーが許可されている。Access-Control-Allow-Headers
: サーバーが許可するHTTPヘッダーをリストアップ。Access-Control-Allow-Origin
: 指定されたオリジン(例:https://client.example
)からのリクエストを許可。
Access-Control-Request-Headers
はリクエストヘッダーであり、クライアントがサーバーに通知するためのものです。サーバーが許可するヘッダーはAccess-Control-Allow-Headers
レスポンスヘッダーで応答します。
Accept
Accept
ヘッダーは、HTTPリクエストにおいて、クライアントが受け入れ可能なMIMEタイプ(メディアタイプ)をサーバーに通知するHTTPヘッダーです。この情報を元に、サーバーはクライアントが希望する形式でレスポンスを返すことができます。
Accept
ヘッダーの構文を以下に示します。
Acceptヘッダーの構文
Accept: <メディアタイプ>[;q=<品質値>], ...
<メディアタイプ>
- 受け入れ可能なメディアタイプ(例:
application/json
,text/html
)。
- 受け入れ可能なメディアタイプ(例:
q=<品質値>
(任意)- 優先度を示す値(1.0が最も高い、デフォルトは1.0)。
Accept
ヘッダーの具体例を以下に示します。
JSONを受け入れる場合
Accept: application/json
クライアントはapplication/json
形式のデータを希望。
複数のメディアタイプを指定する場合
Accept: text/html, application/json
クライアントはtext/html
またはapplication/json
のいずれかを希望。
優先度を指定する場合
Accept: application/json;q=0.9, text/html;q=0.8, */*;q=0.1
application/json
(最優先)、text/html
(次点)、その他の形式(最低優先度)の順番で希望しています。
サーバーは、Accept
ヘッダーが指定されていない場合、通常はデフォルトの形式(例: text/html
)でレスポンスを返します。
Accept-Charset
Accept-Charset
ヘッダーは、HTTPリクエストにおいて、クライアント(通常はブラウザ)が受け入れ可能な文字セット(文字エンコーディング)をサーバーに通知するためのHTTPヘッダーです。この情報を基に、サーバーはクライアントがサポートする文字エンコーディングでレスポンスを返します。
Accept-Charset
ヘッダーの構文を以下に示します。
Accept-Charsetヘッダーの構文
Accept-Charset: <文字セット>[;q=<品質値>], ...
<文字セット>
- クライアントが受け入れる文字エンコーディング(例:
UTF-8
,ISO-8859-1
)。
- クライアントが受け入れる文字エンコーディング(例:
q=<品質値>
(任意)- 優先度を示す値(1.0が最も高い、デフォルトは1.0)。
Accept-Charset
ヘッダーの具体例を以下に示します。
UTF-8のみを受け入れる場合
Accept-Charset: UTF-8
クライアントはUTF-8
エンコーディングのみ受け入れる。
複数の文字セットを指定する場合
Accept-Charset: UTF-8, ISO-8859-1
クライアントはUTF-8
またはISO-8859-1
のどちらかのみ受け入れる。優先度は明示されていないため、同じ扱い。
優先度を指定する場合
Accept-Charset: UTF-8;q=1.0, ISO-8859-1;q=0.8, *;q=0.1
UTF-8
(最優先)、ISO-8859-1
(次点)、その他すべての文字セット(最低優先度)の順番で受け入れる。
現代のWeb環境では、ほとんどのクライアントとサーバーがデフォルトでUTF-8
を使用するため、このヘッダーが指定されることは少なくなっています。
Accept-Encoding
Accept-Encoding
ヘッダーは、HTTPリクエストにおいて、クライアントが受け入れ可能なコンテンツエンコーディング形式(gzipなど)をサーバーに通知するためのHTTPヘッダーです。サーバーは、この情報を基にクライアントが対応可能な形式で圧縮したレスポンスを返します。
Accept-Encoding
ヘッダーの構文を以下に示します。
Accept-Encodingヘッダーの構文
Accept-Encoding: <エンコーディング形式>[;q=<品質値>], ...
<エンコーディング形式>
- クライアントが受け入れるエンコーディングの形式(例:
gzip
,br
)。
- クライアントが受け入れるエンコーディングの形式(例:
q=<品質値>
(任意)- 優先度を示す値(1.0が最も高い、デフォルトは1.0)。
Accept-Encoding
ヘッダーの具体例を以下に示します。
gzipのみを受け入れる場合
Accept-Encoding: gzip
クライアントはgzip
形式の圧縮データのみ受け入れる。
複数のエンコーディング形式を指定する場合
Accept-Encoding: gzip, deflate, br
クライアントはgzip
、deflate
、br
のいずれかのみ受け入れる。優先度は明示されていないため、同じ扱い。
優先度を指定する場合
Accept-Encoding: br;q=1.0, gzip;q=0.8, identity;q=0.5
br
(最優先)、gzip
(次点)、圧縮なし(identity
)の順番で受け入れる。
Accept-Encoding
ヘッダーが指定されない場合、サーバーは通常、データを圧縮せずに送信します。また、サーバーが指定された形式をサポートしていない場合、圧縮されないレスポンスを返します。
Accept-Language
Accept-Language
ヘッダーは、HTTPリクエストにおいて、クライアント(通常はブラウザ)が受け入れ可能な言語(自然言語)をサーバーに通知するためのHTTPヘッダーです。サーバーはこの情報を基に、クライアントが希望する言語でコンテンツを返すように対応します。サーバが多国語に対応しているときなどに使います。
Accept-Language
ヘッダーの構文を以下に示します。
Accept-Languageヘッダーの構文
Accept-Language: <言語コード>[;q=<品質値>], ...
<言語コード>
- 言語コード(例:
en
,ja
,fr
)。必要に応じて地域コード(例:en-US
,en-GB
)を含めることも可能です。
- 言語コード(例:
q=<品質値>
(任意)- 優先度を示す値(1.0が最も高い、デフォルトは1.0)。
Accept-Language
ヘッダーの具体例を以下に示します。
日本語のみを受け入れる場合
Accept-Language: ja
クライアントは日本語(ja
)のみを受け入れる。
複数のエンコーディング形式を指定する場合
Accept-Language: en, ja
クライアントは英語(en
)または日本語(ja
)のいずれかのみ受け入れる。優先度は明示されていないため、同じ扱い。
優先度を指定する場合
Accept-Language: ja;q=1.0, en;q=0.8, fr;q=0.6
日本語(ja)、英語(en)、フランス語(fr
)の順番で受け入れる。
すべての言語を受け入れる場合
Accept-Language: *
クライアントはどの言語でも受け入れる。
Authorization
Authorization
ヘッダーは、HTTPリクエストにおいて、サーバーに対して認証情報を提供するために使用されるHTTPヘッダーです。この情報を基に、サーバーはクライアントのリクエストを許可または拒否します。サーバーがWWW-Authenticate
レスポンスヘッダーを通じて認証を要求した場合、クライアントはAuthorization
ヘッダーを使用して応答します。
Authorization
ヘッダーの構文を以下に示します。
Authorizationヘッダーの構文
Authorization: <スキーム> <認証情報>
<スキーム>
- 認証方式(例:
Basic
,Bearer
)。
- 認証方式(例:
<認証情報>
- 認証スキームに基づく認証データ(例: エンコードされた文字列やトークン)
Authorization
ヘッダーの具体例を以下に示します。
Basic認証
ユーザー名とパスワードをBase64でエンコードして送信します。
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
dXNlcm5hbWU6cGFzc3dvcmQ=
は、username:password
をBase64でエンコードした文字列です。
Bearerトークン認証
アクセストークンを使用してリソースにアクセスします(OAuth 2.0などで使用)。
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
トークン(eyJhbGciOiJIUzI1NiIs...
)は、アクセストークンやJWT(JSON Web Token)などです。
APIキー認証(独自の認証スキーム)
サーバーが特定のキーを認証情報として要求する場合です。
Authorization: ApiKey abc123xyz456
abc123xyz456
はAPIキーです。
Cookie
Cookie
ヘッダーは、HTTPリクエストにおいて、クライアント(通常はブラウザ)に保存されているCookie情報をサーバーに送信するためのHTTPヘッダーです。サーバーはこの情報を利用して、セッション管理やユーザー情報の追跡を行います。
Cookie
ヘッダーの構文を以下に示します。
Cookieヘッダーの構文
Cookie: <キー1>=<値1>; <キー2>=<値2>; ...
<キー>
- Cookie名。
<値>
- Cookieに保存された値。
Cookie
ヘッダーの具体例を以下に示します。
単一のCookieを送信
Cookie: sessionId=abc123
クライアントはsessionId
という名前のCookieに値abc123
を設定して送信します。
複数のCookieを送信
Cookie: sessionId=abc123; userPref=darkMode
複数のキーと値のペアをセミコロン(;
)で区切って送信します。
Expect
Expect
ヘッダーは、HTTPリクエストにおいて、リクエストボディを送信する前にサーバーがそのリクエストを受け入れるかを確認する際に使用するHTTPヘッダーです。主に大きなリクエストボディを送信する前などに使用されます。サーバーがそのリクエストを受け入れられる場合は、100 Continue
ステータスコードを返します。
Expect
ヘッダーの構文を以下に示します。
Expectヘッダーの構文
Expect: <期待する動作>
Expect
ヘッダーの具体例を以下に示します。
100-Continueを指定する場合
クライアントが大きなリクエストボディを送信する際に、サーバーがそのリクエストを受け入れるか確認したい場合には、以下のようなHTTPリクエストを送ります。
POST /upload HTTP/1.1
Host: example.com
Content-Length: 1048576
Expect: 100-Continue
サーバーが期待が以下に示すように100 Continue
を返せば、クライアントはリクエストボディを送信します。サーバーがエラーを返した場合、クライアントはリクエストボディを送信せずに処理を終了します。
HTTP/1.1 100 Continue
補足
- 多くのクライアント(例: ブラウザ)は
Expect
ヘッダーを明示的に指定しませんが、一部のライブラリやツールでは大きなデータを送信する際に自動的に付加されます。 - サーバーが
Expect: 100-Continue
をサポートしていない場合、417 Expectation Failed
を返します。
From
From
ヘッダーは、HTTPリクエストにおいて、リクエストを送信したユーザーまたはクライアントのメールアドレスを示すために使用されるHTTPヘッダーです。主に、自動化されたクライアント(ボットやクローラーなど)が自らを識別する目的で使用されます。
From
ヘッダーの構文を以下に示します。
Fromヘッダーの構文
From: <メールアドレス>
From
ヘッダーの具体例を以下に示します。
ボットのリクエストにおける例
以下のHTTPリクエストは、bot@example.com
というメールアドレスを持つクライアント(ボット)から送信されています。
GET /example HTTP/1.1
Host: example.com
From: bot@example.com
補足
- メールアドレスは個人情報に該当するため、
From
ヘッダーを使用する際は注意が必要です。自動化されたシステムやボットでのみ利用するのが一般的です。
Host
Host
ヘッダーは、HTTPリクエストにおいて、リクエスト先のサーバーのホスト名(DNS名またはIPアドレス)とポート番号を指定するHTTPヘッダーです。HTTP/1.1では、すべてのリクエストにおいてこのヘッダーを必須としています。ポート番号は省略可能です。省略した場合、HTTP通信では「80」、HTTPS通信では「443」が適用されます。
Host
ヘッダーの構文を以下に示します。
Hostヘッダーの構文
Host: <ホスト名>[:<ポート番号>]
<ホスト名>
- リクエストの宛先となるサーバーのホスト名(例:
example.com
)。
- リクエストの宛先となるサーバーのホスト名(例:
<ポート番号>
(任意)- 必要に応じて指定するポート番号(例:
:443
)。
- 必要に応じて指定するポート番号(例:
Host
ヘッダーの具体例を以下に示します。
ホスト名のみを指定する場合
Host: example.com
ポート番号が省略されているので(HTTP通信では「80」、HTTPS通信では「443」)を使用します。
ホスト名とポート番号を指定する場合
Host: example.com:8080
ポート番号8080
を明示的に指定しています。
補足
- HTTP/1.1では、すべてのリクエストにおいて
Host
ヘッダーが必須です。これがない場合、サーバーはリクエストを拒否するか、エラーを返す可能性があります。 - サーバーが複数のドメインをホストしている場合、
Host
ヘッダーを基に適切なリソースを識別します。 - HTTP/2では
Host
ヘッダーは非推奨であり、代わりに:authority
ヘッダーが使用されます。
If-Modified-Since
If-Modified-Since
ヘッダーは、HTTPリクエストにおいて、指定した日時以降にリソースが変更されている場合のみ、そのリソースを取得するようサーバーに指示するHTTPヘッダーです。
If-Modified-Since
ヘッダーはクライアントが、キャッシュ済みのリソースが最新であるかを確認するために使用します。サーバーはリソースの最終更新日時とIf-Modified-Since
の日時を比較し、リソースが指定した日時以降に更新されていない場合、サーバーは304 Not Modified
を返し、リソースを再送しません。
If-Modified-Since
ヘッダーの構文を以下に示します。
If-Modified-Sinceヘッダーの構文
If-Modified-Since: <日時>
<日時>
- クライアントが持つキャッシュの最終取得日時(
Date
ヘッダーと同じ形式)。
- クライアントが持つキャッシュの最終取得日時(
If-Modified-Since
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントは、2025年1月24日12:00:00以降にリソースが変更されていれば、新しいリソースを要求しています。
GET /resource HTTP/1.1
Host: example.com
If-Modified-Since: Wed, 24 Jan 2025 12:00:00 GMT
HTTPレスポンス例
リソースが更新されていない場合、サーバーはリソースを再送せず、304 Not Modified
を返します。
HTTP/1.1 304 Not Modified
リソースが更新されている場合、サーバーは新しいリソースを返し、Last-Modified
ヘッダーでリソースの最終更新日時を通知します。
HTTP/1.1 200 OK
Content-Type: text/html
Last-Modified: Thu, 25 Jan 2025 14:30:00 GMT
If-Match
If-Match
ヘッダーは、HTTPリクエストにおいて、サーバー上のリソースを更新や削除する前に、そのリソースが特定のバージョン(ETag値)と一致しているかを確認するために使用されるHTTPヘッダーです。
If-Match
ヘッダーはリソースの競合を防ぐために使用されます。リソースが他のクライアントによって変更されていた場合、リクエストは拒否されます。これにより、データの整合性を保ちつつ、安全なリソース操作が可能になります。
If-Match
ヘッダーの構文を以下に示します。
If-Matchヘッダーの構文
If-Match: <ETag値>[, <ETag値> ...]
ETag値
- リソースのバージョンを識別する識別子(ダブルクォートで囲む)。
If-Match
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントは、ETagが"123456789abcdef"
であるリソースを更新しようとしています。
PUT /example-resource HTTP/1.1
Host: example.com
If-Match: "123456789abcdef"
Content-Type: application/json
{
"key": "new-value"
}
HTTPレスポンス例
ETagが一致した場合、リクエストが成功し、新しいETag値が返されます。
HTTP/1.1 200 OK
ETag: "987654321fedcba"
ETagが一致しない場合、リクエストは拒否され、リソースは変更されません。
HTTP/1.1 412 Precondition Failed
If-Matchヘッダーの使用手順
- リソースの取得
- クライアントは、GETリクエストを送信してリソースを取得します。
- サーバーはレスポンスにETagを含めます。
- 条件付きリクエストの送信
- クライアントは、受け取ったETagを
If-Match
ヘッダーに設定し、条件付きのPUT
またはDELETE
リクエストを送信します。
- クライアントは、受け取ったETagを
- サーバーの処理
- サーバーはリソースのETagと
If-Match
の値を比較します。 - 一致する場合: リクエストを処理します。
- 一致しない場合: リクエストを拒否し、
412 Precondition Failed
を返します。
- サーバーはリソースのETagと
If-None-Match
If-None-Match
ヘッダーは、HTTPリクエストにおいて、指定したETag値とサーバー上のリソースのETag値が一致しない場合にのみリクエストを実行するよう指示するHTTPヘッダーです。
主にGET
リクエストにおいて、キャッシュが最新でない場合にのみ、新しいリソースを取得する場合や、POST/PUT/DELETE
リクエストにおいて、特定のリソースが存在しない際にのみ処理を行う場合に使用されます。
If-None-Match
ヘッダーの構文を以下に示します。
If-None-Matchヘッダーの構文
If-None-Match: <ETag値>[, <ETag値> ...]
ETag値
- リソースのバージョンを識別する識別子(ダブルクォートで囲む)。
If-None-Match
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントは、ETagが"123456789abcdef"
のリソースが変更されていないかを確認します。
GET /example-resource HTTP/1.1
Host: example.com
If-None-Match: "123456789abcdef"
HTTPレスポンス例
ETagが一致した場合、リソースが変更されていないため、サーバーは本文を送信せず、キャッシュされたリソースが最新であることを示します。
HTTP/1.1 304 Not Modified
ETagが一致しない場合、リソースが変更されているため、サーバーは新しいリソースを返し、最新のETagをレスポンスに含めます。
HTTP/1.1 200 OK
ETag: "987654321fedcba"
Content-Type: application/json
{
"key": "updated-value"
}
If-Matchヘッダーの使用手順
- リソースの取得
- クライアントは、
GET
リクエストを送信してリソースを取得します。 - サーバーはレスポンスにETagを含めます。
- クライアントは、
- 条件付きリクエストの送信
- クライアントは、受け取ったETagを
If-None-Match
ヘッダーに設定し、サーバーにリクエストを送信します。
- クライアントは、受け取ったETagを
- サーバーの処理
- サーバーはリソースのETagと
If-None-Match
の値を比較します。 - 一致する場合:
304 Not Modified
やエラーを返します。 - 一致しない場合: リソースを返します。
- サーバーはリソースのETagと
If-Range
If-Range
ヘッダーは、HTTPリクエストにおいて、条件付き範囲リクエストを行うために使用されるHTTPヘッダーです。リソースが変更されていない場合、範囲リクエスト(Range
ヘッダー)で指定された範囲を取得し、リソースが変更されている場合は、リソース全体を再取得します。サーバーはクライアントから送られたETag値または最終更新日時(Last-Modified
)を基にリソースの変更有無を判断します。
If-Range
ヘッダーの構文を以下に示します。
If-Rangeヘッダーの構文
If-Range: <ETag> または <最終更新日時>
ETag
- リソースのバージョンを識別する識別子(例:
"123456789abcdef"
)。
- リソースのバージョンを識別する識別子(例:
最終更新日時
- リソースの最終更新日時を示す値(例:
Wed, 26 Jan 2025 09:00:00 GMT
)。
- リソースの最終更新日時を示す値(例:
If-Range
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントは、If-Range
ヘッダーを用いています。If-Range
ヘッダーにはEtag
値を指定しています。
GET /example-resource HTTP/1.1
Host: example.com
Range: bytes=100-200
If-Range: "123456789abcdef"
HTTPレスポンス例
サーバー上のリソースのETagが"123456789abcdef"
と一致した場合、範囲リクエスト成功なので、バイト範囲100-200
を返します。
HTTP/1.1 206 Partial Content
Content-Range: bytes 100-200/1000
Content-Type: application/octet-stream
[リソースの指定された範囲のデータ]
サーバー上のリソースのETagが"123456789abcdef"
と一致しない場合、リソースが変更されているため、サーバーはリソース全体を返します。
HTTP/1.1 200 OK
Content-Length: 1000
Content-Type: application/octet-stream
[リソース全体のデータ]
If-Matchヘッダーの使用手順
- リソースの取得
- クライアントは、
GET
リクエストを送信してリソースを取得します。 - サーバーはレスポンスに
ETag
またはLast-Modified
を含めます。
- クライアントは、
- 条件付きリクエストの送信
- クライアントは
If-Range
ヘッダーとRange
ヘッダーを設定してリクエストを送信します。
- クライアントは
- サーバーの処理
- サーバーはリソースが変更されていない場合は範囲リクエストを処理し、変更されている場合はリソース全体を返します。
If-Range
ヘッダーはIf-None-Match
やIf-Modified-Since
と異なり、部分的なレスポンスをサポートするのが目的です。
If-Unmodified-Since
If-Unmodified-Since
ヘッダーは、HTTPリクエストにおいて、指定された日時以降にリソースが変更されていない場合のみリクエストを実行するようサーバーに指示するHTTPヘッダーです。リソースがその日時以降に変更されている場合は、リクエストが拒否されます。
If-Unmodified-Since
ヘッダーの構文を以下に示します。
If-Unmodified-Sinceヘッダーの構文
If-Unmodified-Since: <日時>
<日時>
- リソースの変更を判定する基準となる日時(
Date
ヘッダーと同じ形式)。
- リソースの変更を判定する基準となる日時(
If-Unmodified-Since
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントは、リソースが2025年1月24日 12:00:00 GMT
以降変更されていない場合のみリクエストを処理するように指定しています。
PUT /example-resource HTTP/1.1
Host: example.com
If-Unmodified-Since: Wed, 24 Jan 2025 12:00:00 GMT
Content-Type: application/json
{
"key": "new-value"
}
HTTPレスポンス例
リソースが変更されていない場合には、リクエストが成功します。
HTTP/1.1 200 OK
リソースが変更されていた場合には、サーバーはリクエストを拒否し、リソースは変更されません。他のプロセスがリソースを変更していた場合、リクエストを拒否することで意図しないデータの上書きを防げます。
HTTP/1.1 412 Precondition Failed
If-Matchヘッダーの使用手順
- リソースの取得
- クライアントはリソースを取得し、その
Last-Modified
日時を保存します。
- クライアントはリソースを取得し、その
- 条件付きリクエストの送信
- クライアントは、リソースが変更されていないか確認するために
If-Unmodified-Since
ヘッダーを送信します。
- クライアントは、リソースが変更されていないか確認するために
- サーバーの処理
- サーバーはリソースの更新日時と
If-Unmodified-Since
の値を比較します。 - 変更されていない場合 → リクエストを処理。
- 変更されている場合 →
412 Precondition Failed
を返し、リクエストを拒否。
- サーバーはリソースの更新日時と
Max-Forwards
Max-Forwards
ヘッダーは、HTTPリクエストにおいて、リクエストが経由できるプロキシやゲートウェイの最大数を制限するために使用されるHTTPヘッダーです。主にTRACEメソッドとともに使用され、無限ループを防ぐために役立ちます。
Max-Forwards
ヘッダーの構文を以下に示します。
Max-Forwardsヘッダーの構文
Max-Forwards: <数値>
<数値>
- リクエストが通過できる最大プロキシ/ゲートウェイの数。0になるとサーバーがリクエストを処理し、それ以上転送されません。
Max-Forwards
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントはサーバーまでの経路をデバッグするためにTRACE
メソッドを使用しており、リクエストは最大5回までプロキシやゲートウェイを経由できます。
TRACE / HTTP/1.1
Host: example.com
Max-Forwards: 5
Max-Forwardsヘッダーの使用手順
- クライアントがMax-Forwardsを設定
- クライアントが
Max-Forwards
ヘッダーを設定し、リクエストを送信します。
- クライアントが
- プロキシまたはゲートウェイが値を減少させる
- リクエストを転送するたびに
Max-Forwards
の値を1減らします。
- リクエストを転送するたびに
- 値が0になったらサーバーが処理
- 転送を停止し、リクエストを処理してレスポンスを返します。
Max-Forward
ヘッダーはTRACE
とともに使用されることがほとんどで、一般的なGET
やPOST
リクエストには通常不要です。
Origin
Origin
ヘッダーは、HTTPリクエストにおいて、HTTPリクエストの送信元(オリジン)を示すヘッダーで、CORS(Cross-Origin Resource Sharing)の判定に使用されます。主に、クロスオリジン(異なるドメイン間)でのリクエストのセキュリティ制御に関わります。
オリジンとは
オリジンは、URL内の「スキーム(プロトコル)
+ FQDN(ホスト+ドメイン)
+ ポート番号
」の組み合わせです(ポート番号は省略可能)。例えばこのページからHTTPリクエストした場合、オリジンは「https://it-infomation.com
」となります。
Origin
ヘッダーの構文を以下に示します。
Originヘッダーの構文
Origin: <スキーム>://<ホスト>[:<ポート>]
<スキーム>
http
またはhttps
<ホスト>
- FQDN(完全修飾ドメイン名)またはIPアドレス
<ポート>
(省略可)- 標準ポート(HTTP: 80, HTTPS: 443)は省略可能
Origin
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
https://client.example.com
のページからリクエストが発生した場合には、以下のようになります。
GET /api/data HTTP/1.1
Host: api.example.com
Origin: https://client.example.com
HTTPレスポンス例
サーバーがリクエストを許可した場合には、以下のようになります。以下の例だと、アクセスを許可するオリジンを、https://client.example.com
のみに指定しています。
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://client.example.com
Originヘッダーの注意点
- サーバー側のCORS設定が必要
Access-Control-Allow-Origin
を適切に設定しないと、ブラウザはレスポンスをブロックする。
- 異なるオリジン間のリクエストは制限される
https://client.example.com
からhttps://api.example.com
へのリクエストは、CORSの許可がないと失敗します。
Proxy-Authorization
Proxy-Authorization
ヘッダーは、HTTPリクエストにおいて、クライアントがプロキシサーバーを通じてリクエストを送信する際に、プロキシへの認証情報を提供するためのHTTPヘッダーです。プロキシが認証を要求する場合、クライアントはこのヘッダーを使用してユーザー名やパスワード、トークンを送信し、アクセスを許可されます。
サーバーがProxy-Authenticate
ヘッダーを送信し、クライアントがProxy-Authorization
ヘッダーで認証情報を提供します。
Proxy-Authorization
ヘッダーの構文を以下に示します。
Proxy-Authorizationヘッダーの構文
Proxy-Authorization: <認証方式> <認証情報>
<認証方式>
- 認証方式(例:
Basic
,Bearer
)。
- 認証方式(例:
<認証情報>
- 認証スキームに基づく認証データ(例: エンコードされた文字列やトークン)
Proxy-Authorization
ヘッダーの具体例を以下に示します。
Basic認証
ユーザー名とパスワードをBase64でエンコードして送信します。
Proxy-Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
dXNlcm5hbWU6cGFzc3dvcmQ=
は、username:password
をBase64でエンコードした文字列です。
Bearerトークン認証
アクセストークンを使用してリソースにアクセスします(OAuth 2.0などで使用)。
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
トークン(eyJhbGciOiJIUzI1NiIs...
)は、アクセストークンです。
Range
Range
ヘッダーは、HTTPリクエストにおいて、HTTPリクエストでリソースの一部(特定の範囲のデータ)を要求するために使用されるHTTPヘッダーです。これにより、大きなファイルを分割して取得したり、ダウンロードの再開が可能になります。
Range
ヘッダーの構文を以下に示します。
Rangeヘッダーの構文
Range: <単位>=<開始位置>-<終了位置>
<単位>
:bytes
(バイト単位)が一般的に使用される。<開始位置>
: 取得したいデータの開始バイト位置(0から始まる)。<終了位置>
: (省略可): 取得したいデータの終了バイト位置。
Range
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントは、Range
ヘッダーを用いて、リソースの一部(100-200バイト)を要求しています。
GET /example-resource HTTP/1.1
Host: example.com
Range: bytes=100-200
HTTPレスポンス例
サーバーがRange
リクエストをサポートしており、リソースのサイズが201バイト以上の場合、指定された範囲(100-200バイト)を返します。
HTTP/1.1 206 Partial Content
Content-Range: bytes 100-200/1000
Content-Length: 101
Content-Type: application/octet-stream
[100-200 バイト目のデータ]
サーバーが Range
リクエストをサポートしていない場合、サーバーがRange
リクエストを無視し、全データを送信します。
HTTP/1.1 200 OK
Content-Length: 1000
Content-Type: application/octet-stream
[リソース全体のデータ]
Referer
Referer
ヘッダー(リファラー)は、HTTPリクエストにおいて、現在のリクエストが発生した元のページ(直前に閲覧していたページ)のURLを示すHTTPヘッダーです。ユーザーがあるページのリンクをクリックした際に、そのリンク元のURLをサーバーに伝えるために使用されます。
Referer
ヘッダーの構文を以下に示します。
Refererヘッダーの構文
Referer: <URL>
<URL>
- ユーザーがリクエストを発行した元のページのURL。
Referer
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
ユーザーがhttps://example.com
のページにあるリンクをクリックしてhttps://destination.com/page
に移動した場合には、以下のようなHTTPリクエストになります。その結果、destination.com
のサーバーは、このリクエストの発生元がexample.com
であることを知ることができます。
GET /page HTTP/1.1
Host: destination.com
Referer: https://example.com
「Referer」の綴りは正しくは「Referrer」ですが、HTTP仕様を決定する際に「Referer」と誤記され、そのまま正式な仕様として定着しました
Upgrade-Insecure-Requests
Upgrade-Insecure-Requests
ヘッダーは、クライアント(通常はブラウザ)がHTTPからHTTPSへのアップグレードを希望することをサーバーに通知するためのヘッダーです。このヘッダーが送信された場合、サーバーは可能であれば、安全なHTTPSリソースを提供することが推奨されます。
Upgrade-Insecure-Requests
ヘッダーの構文を以下に示します。
Upgrade-Insecure-Requestsヘッダーの構文
Upgrade-Insecure-Requests: 1
1
の値は「HTTPSへのアップグレードを希望する」という意味です。それ以外の値は使用されません。
Upgrade-Insecure-Requests
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントはHTTPS版のリソースを要求できるなら提供してほしいことを示しています。
GET /example-page HTTP/1.1
Host: example.com
Upgrade-Insecure-Requests: 1
HTTPレスポンス例
サーバーがHTTPSリソースを提供することが可能な場合、リダイレクトを指示します。その結果、クライアントはhttps://example.com/example-page
に自動的に移動します。
HTTP/1.1 301 Moved Permanently
Location: https://example.com/example-page
サーバーがHTTPSを提供していない場合、通常のHTTPレスポンスを返します。
HTTP/1.1 200 OK
Content-Type: text/html
TE
TE
ヘッダーは、HTTPリクエストにおいて、クライアントがサーバーに対して「受け入れ可能なTransfer-Encodingの形式(転送エンコーディング)」を指定するためのヘッダーです。通常、HTTP/1.1の「チャンク転送エンコーディング(chunked)」に関するサポートを示すために使用されますが、通常のウェブブラウザではほとんど利用されません。
TE
ヘッダーの構文を以下に示します。
TEヘッダーの構文
TE: <エンコーディング方式>[;q=<品質値>], ...
<エンコーディング形式>
- クライアントが受け入れ可能な Transfer-Encoding 方式(例:
chunked
)
- クライアントが受け入れ可能な Transfer-Encoding 方式(例:
q=<品質値>
(任意):- 優先度を示す値(1.0が最も高い、デフォルトは1.0)。
TE
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、TE: chunked
でクライアントはchunked
転送エンコーディングを受け入れ可能であることをサーバーに伝えています。
GET /example.txt HTTP/1.1
Host: example.com
TE: chunked
HTTPレスポンス例
サーバーはTransfer-Encoding: chunked
を含むレスポンスを返します。
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/plain
4
Test
7
Message
0
サーバーがchunked
転送を使用しない場合、通常のレスポンスを送信します。
HTTP/1.1 200 OK
Content-Length: 13
Content-Type: text/plain
Hello, World!
補足
TE
ヘッダーは主にchunked
転送のために使用します。- その他のエンコーディング(
gzip
やdeflate
など)はTE
ではなくAccept-Encoding
ヘッダーで指定します。
X-Forwarded-Host
X-Forwarded-Host
ヘッダーは、HTTPリクエストにおいて、ロードバランサやプロキシサーバを経由してWebサーバに接続する際に、クライアントの送信元ホスト名をWebサーバに伝えるためのHTTPヘッダーです。通常、プロキシを経由するとHost
ヘッダーが変わる可能性があるため、元のホスト情報を保持するためにX-Forwarded-Host
が使用されます。
X-Forwarded-Host
ヘッダーの構文を以下に示します。
X-Forwarded-Hostヘッダーの構文
X-Forwarded-Host: <オリジナルのホスト名>
<オリジナルのホスト名>
- クライアントが最初にリクエストを送信したホスト。
X-Forwarded-Host
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントがexample.com
にアクセスし、プロキシproxy.example.net
を経由した場合のHTTPリクエストは以下のようになります。
GET /page HTTP/1.1
Host: proxy.example.net
X-Forwarded-Host: example.com
Host: proxy.example.net
はプロキシのホスト名(実際のリクエストが送られる先)です。X-Forwarded-Host: example.com
はクライアントが本来アクセスしようとしていたホスト名です。
HTTPレスポンス例
HTTPレスポンスは以下のようになります。
HTTP/1.1 200 OK
Content-Type: text/html
X-Processed-Host: example.com
<!DOCTYPE html>
<html>
<head><title>Example Page</title></head>
<body><h1>Welcome to Example.com!</h1></body>
</html>
X-Processed-Host: example.com
はWebサーバーがX-Forwarded-Host
を認識し、オリジナルのホストを処理したことを示してます。
X-Forwarded-For
X-Forwarded-For
ヘッダーは、HTTPリクエストにおいて、ロードバランサやプロキシサーバを経由してWebサーバに接続する際に、クライアントの送信元のIPアドレスをWebサーバに伝えるためのHTTPヘッダーです。アクセス制御やログ管理でクライアントの正しいIPを記録するために使用されます。
X-Forwarded-For
ヘッダーの構文を以下に示します。
X-Forwarded-Forヘッダーの構文
X-Forwarded-For: <クライアントIP>[, <プロキシ1IP>, <プロキシ2IP>, ...]
<クライアントIP>
- 最初のIPが元のクライアントのIP。
<プロキシIP>
- 複数のプロキシを通過した場合、経由したプロキシのIPが順番に追加されます。
X-Forwarded-For
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアント(203.0.113.10
)がプロキシ(192.168.1.1
)を経由してexample.com
にHTTPリクエストを送信する場合、以下のようになります。
GET /page HTTP/1.1
Host: example.com
X-Forwarded-For: 203.0.113.10, 192.168.1.1
X-Forwarded-For: 203.0.113.10
は元のクライアントのIPアドレスです。
クライアント(203.0.113.10
)が、2つのプロキシ(192.168.1.1
, 10.0.0.1
)を経由してexample.com
にHTTPリクエストを送信する場合、以下のようになります。
GET /page HTTP/1.1
Host: example.com
X-Forwarded-For: 203.0.113.10, 192.168.1.1, 10.0.0.1
HTTPレスポンス例
HTTPレスポンスは以下のようになります。
HTTP/1.1 200 OK
Content-Type: text/html
X-Client-IP: 203.0.113.10
<!DOCTYPE html>
<html>
<head><title>Client IP</title></head>
<body><h1>Your IP: 203.0.113.10</h1></body>
</html>
X-Client-IP: 203.0.113.10
はサーバーがX-Forwarded-For
からクライアントの元IPを認識してレスポンスに含めています。
Response Header(レスポンスヘッダー)の一覧
HTTPヘッダー | 説明 |
Access-Control-Allow-Origin | CORSにおいて、他のオリジンからのリクエストを許可するヘッダー |
Access-Control-Allow-Credentials | CORSにおいて、認証情報(クッキー等)の送信を制御するヘッダー |
Access-Control-Allow-Methods | CORSにおいて、サーバーが許可するHTTPメソッドを指定するヘッダー |
Access-Control-Allow-Headers | CORSにおいて、サーバーが許可するカスタムヘッダーを指定するヘッダー |
Access-Control-Max-Age | CORSのプリフライトリクエストの結果をキャッシュできる時間を指定するヘッダー |
Access-Control-Expose-Headers | CORSにおいて、ブラウザがアクセス可能な追加のレスポンスヘッダーを指定するヘッダー |
Accept-Ranges | サーバーがRangeリクエスト(部分取得リクエスト)に対応しているかを通知するヘッダー |
Age | キャッシュサーバーがコンテンツをキャッシュしてからの経過時間を示すヘッダー |
ETag | リソースの識別用の一意な識別子を示すヘッダー |
Location | リダイレクト時の遷移先URLを指定するヘッダー |
Proxy-Authenticate | プロキシがクライアントに認証情報の入力を要求する際に使用するヘッダー |
Retry-After | サーバーが一時的に処理できない場合の再試行推奨時間を通知するヘッダー |
Referrer-Policy | ブラウザがRefererヘッダーをリクエストに含める際の情報量を制御するヘッダー |
Server | サーバーソフトウェアの情報(名称やバージョン)を示すヘッダー |
Set-Cookie | サーバーがクライアントにCookieを設定する際に使用するヘッダー |
Access-Control-Allow-Origin
Access-Control-Allow-Origin
ヘッダーは、CORS(Cross-Origin Resource Sharing)において、他のオリジン(異なるドメイン)からのリクエストを許可するためのHTTPレスポンスヘッダーです。
Access-Control-Allow-Origin
ヘッダーの構文を以下に示します。
Access-Control-Allow-Originヘッダーの構文
Access-Control-Allow-Origin: <オリジン, *, またはnull>
オリジン
- 指定したオリジンのみリクエストを許可する
*
- 全てのオリジンからのリクエストを許可(ただし、認証情報を伴うリクエストには使用不可)
null
file://
やdata://
などのサンドボックス化された文書に対して、リクエストを許可する。
Access-Control-Allow-Origin
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアント(https://client.example.com
)からhttps://api.example.com
にGET
リクエストを送信した場合、HTTPリクエストは以下のようになります。
GET /data HTTP/1.1
Host: api.example.com
Origin: https://client.example.com
Origin: https://client.example.com
はクライアントのオリジン(リクエストの発信元)です。
HTTPレスポンス例
HTTPレスポンスは以下のようになります。
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://client.example.com
Content-Type: application/json
{"message": "CORS request successful"}
Access-Control-Allow-Origin: https://client.example.com
はhttps://client.example.com
からのリクエストのみ許可しています。
すべてのオリジンからのリクエストを許可する場合、HTTPレスポンスは以下のようになります。
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json
{"message": "CORS request from any origin is allowed"}
Access-Control-Allow-Credentials
Access-Control-Allow-Credentials
ヘッダーは、CORS(Cross-Origin Resource Sharing)において、クライアントが認証情報(クッキーやHTTP認証ヘッダー)を含めたリクエストを送信できるかを制御するためのHTTPレスポンスヘッダーです。
Access-Control-Allow-Credentials
ヘッダーの構文を以下に示します。
Access-Control-Allow-Credentialsヘッダーの構文
Access-Control-Allow-Credentials: true
true
のみが有効な値です(false
や他の値は無効)。true
を設定すると、ブラウザがクッキーや認証情報を含めたリクエストを送信可能になります。
Access-Control-Allow-Credentials
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアント(https://client.example.com
)からhttps://api.example.com
に、クッキーを含めたリクエストを送信した場合、HTTPリクエストは以下のようになります。
GET /user-info HTTP/1.1
Host: api.example.com
Origin: https://client.example.com
Cookie: sessionId=abc123
Origin: https://client.example.com
はクライアントのオリジン(CORSリクエスト)を示しており、Cookie: sessionId=abc123
は認証情報(セッションID)を含めたリクエストです。
HTTPレスポンス例
HTTPレスポンスは以下のようになります。
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://client.example.com
Access-Control-Allow-Credentials: true
Content-Type: application/json
{"user": "JohnDoe"}
Access-Control-Allow-Origin: https://client.example.com
は特定のオリジンのみ許可しています(*
は使用できません)。Access-Control-Allow-Credentials: true
により、クライアントがクッキーや認証情報を送信できるようにしています。
補足
Access-Control-Allow-Credentials: true
を使用する場合、Access-Control-Allow-Origin
にワイルドカード(*
)は設定できません。必ず特定のオリジンを指定する必要があります(例:Access-Control-Allow-Origin: https://client.example.com
)。
Access-Control-Allow-Methods
Access-Control-Allow-Methods
ヘッダーは、CORS(Cross-Origin Resource Sharing)において、サーバーが許可するHTTPメソッド(GET, POST, DELETE など)を指定するHTTPレスポンスヘッダーです。このヘッダーは、プリフライトリクエスト(OPTIONS)に対するレスポンスとして送信されます。
Access-Control-Allow-Methods
ヘッダーの構文を以下に示します。
Access-Control-Allow-Methodsヘッダーの構文
Access-Control-Allow-Methods: <method1>, <method2>, ...
<method1>, <method2>
- 許可するHTTPメソッドをカンマ区切りで指定。
Access-Control-Allow-Methods
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントがDELETE
メソッドを使用できるか確認するために、OPTIONS
リクエストを送信した場合、HTTPリクエストは以下のようになります。
OPTIONS /api/resource HTTP/1.1
Host: example.com
Origin: https://client.example
Access-Control-Request-Method: DELETE
HTTPレスポンス例
サーバーがGET, POST, DELETE
を許可している場合のHTTPレスポンスは以下のようになります。
HTTP/1.1 204 No Content
Access-Control-Allow-Methods: GET, POST, DELETE
Access-Control-Allow-Origin: https://client.example
Access-Control-Allow-Headers
Access-Control-Allow-Headers
ヘッダーは、CORS(Cross-Origin Resource Sharing)において、サーバーが許可するカスタムヘッダー(例: Content-Type
, Authorization
など)を指定するHTTPレスポンスヘッダーです。このヘッダーは、プリフライトリクエスト(OPTIONS)に対するレスポンスとして送信されます。
Access-Control-Allow-Headers
ヘッダーの構文を以下に示します。
Access-Control-Allow-Headersヘッダーの構文
Access-Control-Allow-Headers: <header1>, <header2>, ...
<header1>, <header2>
- 許可するカスタムヘッダーをカンマ区切りで指定します。
Access-Control-Allow-Headers
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントがContent-Type
とAuthorization
を使用できるか確認するために、OPTIONS
リクエストを送信した場合、HTTPリクエストは以下のようになります。
OPTIONS /api/resource HTTP/1.1
Host: example.com
Origin: https://client.example
Access-Control-Request-Headers: Content-Type, Authorization
HTTPレスポンス例
サーバーがContent-Type
とAuthorization
の使用を許可している場合のHTTPレスポンスは以下のようになります。
HTTP/1.1 204 No Content
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Origin: https://client.example
Access-Control-Max-Age
Access-Control-Max-Age
ヘッダーはCORS(Cross-Origin Resource Sharing)において、プリフライトリクエスト(OPTIONS
)の結果をキャッシュできる時間(秒)を指定するHTTPレスポンスヘッダーです。このヘッダーを設定すると、一定時間の間、クライアントは同じプリフライトリクエストを再送しなくて済みます。結果として、サーバーの負荷軽減やレスポンス速度の向上に役立ちます。
Access-Control-Max-Age
ヘッダーの構文を以下に示します。
Access-Control-Max-Ageヘッダーの構文
Access-Control-Max-Age: <seconds>
<seconds>
- プリフライトリクエストのキャッシュ有効期間(秒単位)を指定します。
- 例えば、
3600
(1時間)を指定すると、1時間の間、同じプリフライトリクエストを再送しなくてもよくなります。
Access-Control-Max-Age
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントがPOST
メソッドを使いたい場合において、事前にサーバーに許可を求めるHTTPリクエストは以下のようになります。
OPTIONS /api/resource HTTP/1.1
Host: example.com
Origin: https://client.example
Access-Control-Request-Method: POST
HTTPレスポンス例
サーバーがPOST
を許可し、プリフライトリクエストの結果を3600秒(1時間)キャッシュする場合のHTTPレスポンスは以下のようになります。
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://client.example
Access-Control-Allow-Methods: POST
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers
Access-Control-Expose-Headers
ヘッダーはCORS(Cross-Origin Resource Sharing)において、ブラウザがアクセス可能なレスポンスヘッダーを指定するHTTPレスポンスヘッダーです。
通常、CORS環境では、ブラウザがアクセスできるレスポンスヘッダーはデフォルトで制限されており、Content-Type
やCache-Control
など一部のヘッダーしかアクセスできません。しかし、このヘッダーを使用すると、サーバーは追加のヘッダーをクライアントに公開でき、ブラウザはX-Custom-Header
のようなカスタムヘッダーもアクセス可能になります。
Access-Control-Expose-Headers
ヘッダーの構文を以下に示します。
Access-Control-Expose-Headersヘッダーの構文
Access-Control-Expose-Headers: <header1>, <header2>, ...
<header1>, <header2>
- クライアントに公開したいレスポンスヘッダー をカンマ区切りで指定します。
Access-Control-Expose-Headers
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストを送信したとします。
GET /api/data HTTP/1.1
Host: example.com
Origin: https://client.example
HTTPレスポンス例
以下のHTTPレスポンスでは、サーバーがX-Custom-Header
をHTTPレスポンスヘッダーとして返し、Access-Control-Expose-Headers: X-Custom-Header
でブラウザがその値にアクセスできるようにしています。
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://client.example
Access-Control-Expose-Headers: X-Custom-Header
X-Custom-Header: 12345
Accept-Ranges
Accept-Ranges
ヘッダーは、HTTPレスポンスにおいて、サーバーがRange
リクエスト(部分取得リクエスト)に対応しているかどうかを通知するHTTPヘッダーです。
Accept-Ranges
ヘッダーの構文を以下に示します。
Accept-Rangesヘッダーの構文
Accept-Ranges: bytes or none
byte
- サーバーが
Range
リクエストをサポートしています。
- サーバーが
none
- サーバーが
Range
リクエストをサポートしていません。
- サーバーが
Accept-Ranges
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントは、Range
ヘッダーを用いて、リソースの一部(100-200バイト)を要求しています。
GET /example-resource HTTP/1.1
Host: example.com
Range: bytes=100-200
HTTPレスポンス例
サーバーがRange
リクエスト(部分取得リクエスト)をサポートしている場合のHTTPレスポンスは以下のようになります。
HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-Range: bytes 100-200/1000
Content-Length: 101
Content-Type: application/octet-stream
[100-200 バイト目のデータ]
補足
Accept-Ranges
は、サーバーがRange
リクエスト(部分取得リクエスト)をサポートしているかどうかをクライアントに通知するためのレスポンスヘッダーです。ただし、Accept-Ranges
を送らなくても、サーバーが206 Partial Content
を返せば、クライアントはRange
リクエストが機能することを理解できます。仕様上は必須ではないですが、サーバーがRange
リクエストに対応していることを明示するために、Accept-Ranges: bytes
を送るのが一般的です。
Age
Age
ヘッダーは、HTTPレスポンスにおいて、プロキシサーバーやCDNなどのキャッシュサーバーが、コンテンツをキャッシュしてからどれくらいの時間が経過したかをクライアントに通知するために使用されるHTTPヘッダーです。この情報を基に、クライアントはキャッシュが古くなっていないかを判断できます。
Age
ヘッダーの構文を以下に示します。
Ageヘッダーの構文
Age: <seconds>
<seconds>
- キャッシュされてからの経過時間(秒単位)
Age
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントがサーバーからindex.htmlを取得しています。
GET /index.html HTTP/1.1
Host: example.com
HTTPレスポンス例
HTTPレスポンスは以下のようになります。Age: 120
でキャッシュされてから120秒(2分)経過していることが分かります。
HTTP/1.1 200 OK
Cache-Control: max-age=3600
Age: 120
Content-Type: text/html
ETag
ETag(エンティティタグ)は、HTTPレスポンスにおいて、リソースを識別するための一意な識別子です。HTTPレスポンスにETag
ヘッダーを含めることで、クライアントにEtagを渡します。主にキャッシュの管理や条件付きリクエストに使用され、リソースの変更を効率的に検出できます。
ETagの役割を以下に示します。
- キャッシュの最適化
- クライアントは、サーバーから取得したリソースの
ETag
を保存し、再取得時にIf-None-Match
を送信することで、リソースが変更されていない場合は再ダウンロードを回避できる。
- クライアントは、サーバーから取得したリソースの
- リソースの整合性チェック
If-Match
やIf-Range
を使用して、データの変更がないことを確認しながらリクエストを行う。
- コンテンツのバージョン管理
ETag
の値は、コンテンツのハッシュ値やバージョン番号などが使われ、リソースの変更を特定できる。
ETag
ヘッダーの構文を以下に示します。
ETagヘッダーの構文
ETag: "値"
"値"
- サーバーが生成する一意な識別子(例: ハッシュ値やバージョン情報)。
ETag
ヘッダーの具体例を以下に示します。
1. 最初のHTTPリクエスト
以下のHTTPリクエストを送信したとします。
GET /index.html HTTP/1.1
Host: example.com
2. HTTPレスポンス
HTTPレスポンスは以下のようになります。ETag: "abc123"
でクライアントにEtagを渡しています。
HTTP/1.1 200 OK
ETag: "abc123"
Cache-Control: max-age=3600
Content-Type: text/html
<!DOCTYPE html>
<html>
<head><title>Test Page</title></head>
<body><h1>Hello, World!</h1></body>
</html>
3. 次回のHTTPリクエスト
If-None-Match
にETag
を指定し、サーバーに「このリソースは変わったか?」と確認しています。
GET /index.html HTTP/1.1
Host: example.com
If-None-Match: "abc123"
Location
Location
ヘッダーは、HTTPレスポンスにおいて、リダイレクト先のURLを指定するために使用するHTTPヘッダーです。クライアントはこのURLへ自動的にリクエストを送信し、ユーザーを適切なページへ遷移させます。
Location
ヘッダーの構文を以下に示します。
Locationヘッダーの構文
Location: <URL>
<URL>
- クライアントがリダイレクトすべきURL
- 通常は絶対URLを指定(例:
https://example.com/new-page
) - 相対URLも使用可能だが、推奨されない
Location
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストを送信したとします。以下の例では、クライアントがold-page
にアクセスしています。
GET /old-page HTTP/1.1
Host: example.com
HTTPレスポンス例
HTTPレスポンスは以下のようになります。以下の例では、サーバーがnew-page
へリダイレクトしています。
HTTP/1.1 301 Moved Permanently
Location: https://example.com/new-page
Content-Length: 0
クライアントはhttps://example.com/new-page
へリクエストを送り直しています。301 Moved Permanently
を指定すると、ブラウザはキャッシュし、次回からnew-page
に直接アクセスするようになります。
302 Found
を指定した場合、一時的なリダイレクトとなり、次回以降もold-page
にアクセス可能になります。
HTTP/1.1 302 Found
Location: https://example.com/new-page
Content-Length: 0
Proxy-Authenticate
Proxy-Authenticate
ヘッダーは、HTTPレスポンスにおいて、プロキシサーバーがクライアントに認証情報の入力を要求するためのHTTPヘッダーです。これはWWW-Authenticate
ヘッダーのプロキシ版であり、プロキシサーバーが認証を要求する際に使用します。
Proxy-Authenticate
ヘッダーの構文を以下に示します。
Proxy-Authenticateヘッダーの構文
Proxy-Authenticate: <認証方式> realm="<認証領域>"
<認証方式>
Basic
,Digest
,Bearer
などの認証方式を指定します。
realm="<認証領域>"
- 認証が必要な範囲を示す(例:
"Secure Proxy"
)
- 認証が必要な範囲を示す(例:
Proxy-Authenticate
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストを送信したとします。
GET /resource HTTP/1.1
Host: example.com
HTTPレスポンス例
認証が必要な場合、HTTPレスポンスは以下のようになります。
HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="Secure Proxy"
Content-Length: 0
407 Proxy Authentication Required
はクライアントは認証情報を送る必要があることを示しています。Proxy-Authenticate: Basic realm="Secure Proxy"
は認証方式はBasic
、プロキシの認証領域は"Secure Proxy"
であることを示しています。
その後、クライアントは以下のようなProxy-Authorization
ヘッダーを含むHTTPリクエストを送ることで、プロキシへの認証情報を提供する必要があります。
GET http://example.com/ HTTP/1.1
Host: example.com
Proxy-Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Retry-After
Retry-After
ヘッダーは、HTTPレスポンスにおいて、サーバーが一時的にリクエストを処理できない場合に、クライアントが再試行するべきタイミングを通知するHTTPヘッダーです。主に503 Service Unavailable
や429 Too Many Requests
のレスポンスと一緒に送信されます。
Retry-After
ヘッダーの構文を以下に示します。
Retry-Afterヘッダーの構文
Retry-After: <秒数>
または
Retry-After: <日時(HTTP日付フォーマット)>
<秒数>
- 再試行までの秒数(例:
Retry-After: 120
→ 120秒後に再試行)
- 再試行までの秒数(例:
<日時>
- 具体的な時刻(RFC 7231 フォーマット)(例:
Retry-After: Wed, 21 Oct 2025 07:28:00 GMT
)
- 具体的な時刻(RFC 7231 フォーマット)(例:
Retry-After
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストを送信したとします。
GET /api HTTP/1.1
Host: example.com
HTTPレスポンス例
サーバーが一時的に負荷が高いため、120秒後に再試行するように通知した場合、HTTPレスポンスは以下のようになります。
HTTP/1.1 503 Service Unavailable
Retry-After: 120
Content-Type: text/plain
Service is temporarily unavailable. Please retry after 120 seconds.
メンテナンスが終わる時間を具体的な日時(GMT)で通知した場合、HTTPレスポンスは以下のようになります。
HTTP/1.1 503 Service Unavailable
Retry-After: Wed, 21 Oct 2025 07:28:00 GMT
Content-Type: text/plain
The service is down for maintenance. Please retry after the specified time.
Referrer-Policy
Referrer-Policy
ヘッダーは、HTTPレスポンスにおいて、ブラウザがReferer
ヘッダーをリクエストに含める際の情報量を制御するためのHTTPヘッダーです。プライバシー保護やセキュリティ強化のために使用されます。
Referrer-Policy
ヘッダーの構文を以下に示します。
Referrer-Policyヘッダーの構文
Referrer-Policy: <ポリシー>
<ポリシー>
- リファラー情報の送信ルールを指定します。以下に一例を示します。
no-referrer
Referer
を一切送信しない
strict-origin-when-cross-origin
- 同一オリジンならフルURL、異なるオリジンならドメインのみ。HTTPS→HTTPのダウングレード時は
Referer
を送信しない。
- 同一オリジンならフルURL、異なるオリジンならドメインのみ。HTTPS→HTTPのダウングレード時は
<日時>
- 具体的な時刻(RFC 7231 フォーマット)(例:
Retry-After: Wed, 21 Oct 2025 07:28:00 GMT
)
- 具体的な時刻(RFC 7231 フォーマット)(例:
Referrer-Policy
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
ユーザーがhttps://example.com
のページにあるリンクをクリックしてhttps://destination.com/page
に移動した場合には、以下のようなHTTPリクエストになります。
GET /page HTTP/1.1
Host: destination.com
Referer: https://example.com
Referer
ヘッダーが送信されていますが、この送信内容はReferrer-Policy
ヘッダーによって変更されます。例えば、サーバーが以下のようなHTTPレスポンスを送信していた場合には、Referer
ヘッダーは送信されなくなります。
HTTP/1.1 200 OK
Referrer-Policy: no-referrer
Content-Type: text/html
Server
Server
ヘッダーは、HTTPレスポンスにおいて、サーバーソフトウェアの情報(名称やバージョン)を示すためのHTTPヘッダーです。主にサーバーの種類(Apache, Nginx, IIS など)やバージョン情報を提供します。
Server
ヘッダーの構文を以下に示します。
Serverヘッダーの構文
Server: <サーバーソフトウェア情報>
<サーバーソフトウェア情報>
- サーバーの名称やバージョンを記述します。
- 例
Server: Apache/2.4.41 (Ubuntu)
Server: nginx/1.18.0
Server
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントがexample.com
にアクセスしたとします。
GET / HTTP/1.1
Host: example.com
HTTPレスポンス例
サーバーがServer
ヘッダーを含むレスポンスを返します。サーバーがApache/2.4.41 (Ubuntu)
で動作していることが分かります。
HTTP/1.1 200 OK
Server: Apache/2.4.41 (Ubuntu)
Content-Type: text/html
<!DOCTYPE html>
<html>
<head><title>Example</title></head>
<body><h1>Hello, World!</h1></body>
</html>
補足
Server
ヘッダーが有効だと、攻撃者にサーバー情報が知られる可能性があります。古いバージョンのサーバーを使っていると、既知の脆弱性を狙われるリスクがあります。そのため、不要なら削除または簡略化(例: Server: Apache
のみ)するのが推奨されています。
Set-Cookie
Set-Cookie
ヘッダーは、HTTPレスポンスにおいて、ウェブサーバーがクライアント(ブラウザ)に対してCookieを設定するためのHTTPヘッダーです。クッキーを使用することで、ユーザーのセッション情報や設定を保存し、ウェブサイトが利用者の状態を追跡・管理できます。
Set-Cookie
ヘッダーの構文を以下に示します。
Set-Cookieヘッダーの構文
Set-Cookie: <クッキー名>=<値>; <オプション>
<クッキー名>=<値>
- クッキーのキーと値
<オプション>
(任意)- クッキーの動作を制御する属性
Set-Cookie
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントがexample.com
にアクセスしたとします。
GET / HTTP/1.1
Host: example.com
HTTPレスポンス例
以下のHTTPレスポンスでは、サーバーがクッキーを設定しています。
HTTP/1.1 200 OK
Set-Cookie: sessionId=abc123; Path=/
Content-Type: text/html
<!DOCTYPE html>
<html>
<head><title>Example</title></head>
<body><h1>Welcome!</h1></body>
</html>
次回のHTTPリクエストではクライアントは保存したクッキーを送信します。その結果、サーバーはクッキー情報を受け取り、セッションを認識できます。
GET / HTTP/1.1
Host: example.com
Cookie: sessionId=abc123
Strict-Transport-Security(HSTS)
Strict-Transport-Security
ヘッダーは、HTTPレスポンスにおいて、Webサイトへの接続を強制的にHTTPSへリダイレクトし、以降のそのドメインへのアクセスをHTTPSのみに制限するHTTPヘッダーです。仕様はRFC 6797で規定されており、中間者攻撃(MITM攻撃)を防ぐ目的で使用されます。
Strict-Transport-Security
ヘッダーの構文を以下に示します。
Strict-Transport-Securityヘッダーの構文
Strict-Transport-Security: max-age=<秒数>
Strict-Transport-Security: max-age=<秒数>; includeSubDomains
Strict-Transport-Security: max-age=<秒数>; includeSubDomains; preload
max-age=<秒数>
- HTTPS接続を強要する時間(秒)(必須)
includeSubDomains
- サブドメインにも適用する(任意)
preload
- HSTS Preloadリストに登録するために必要(任意)
Strict-Transport-Security
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントがexample.com
にアクセスしたとします。
GET / HTTP/1.1
Host: example.com
HTTPレスポンス例
以下のHTTPレスポンスでは、サーバーがHSTSを有効化し、以降HTTPSのみを強制しています。
HTTP/1.1 301 Moved Permanently
Location: https://example.com/
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Vary
Vary
ヘッダーは、HTTPレスポンスにおいて、キャッシュのバリエーションを指定し、サーバーが異なるリクエストヘッダーの値に応じて異なるレスポンスを返す場合に使用されるHTTPヘッダーです。
Vary
ヘッダーの構文を以下に示します。
Varyヘッダーの構文
Vary: *
Vary: <ヘッダ名>, <ヘッダ名>, …
Vary: *
- すべてのヘッダーに応じてレスポンスが変わる(キャッシュ不可)
Vary: Accept-Language
- 言語設定によってレスポンスを分ける
Vary: User-Agent, Accept-Encoding
- 複数のヘッダーに応じてキャッシュを分ける
Vary
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントがexample.com
にアクセスし、日本語(ja
)のコンテンツを要求したとします。
GET / HTTP/1.1
Host: example.com
Accept-Language: ja
HTTPレスポンス例
以下のHTTPレスポンスでは、サーバーがVary: Accept-Language
を設定し、言語ごとに異なるレスポンスをキャッシュ可能にしています。
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Vary: Accept-Language
<!DOCTYPE html>
<html>
<head><title>ようこそ</title></head>
<body><h1>こんにちは!</h1></body>
</html>
補足
例えば、ユーザAは、Accept-Language
ヘッダーの値を「ja」(日本語)に設定し、ユーザBは「en」(英語)に設定したとします。この場合、ユーザAは日本語のページを、ユーザBは英語のページを要求することになります。同じURLであっても、言語設定によって異なる内容のページが提供されます。このような状況では、キャッシュが適切に動作するようにするためにVary
ヘッダーが必要です。サーバーがレスポンスにVary: Accept-Language
を含めることで、キャッシュはAccept-Language
の値に応じて異なるページを保存し、適切な言語のページを提供できるようになります。
WWW-Authenticate
WWW-Authenticate
ヘッダーは、HTTPレスポンスにおいて、HTTPサーバーがクライアントに対して認証を要求する際に使用されるHTTPヘッダーです。このヘッダーを受け取ったクライアントは、認証情報をAuthorization
ヘッダーに含めて再リクエストする必要があります。
WWW-Authenticate
ヘッダーの構文を以下に示します。
WWW-Authenticateヘッダーの構文
WWW-Authenticate: <認証方式> realm="<認証領域>"
<認証方式>
Basic
,Digest
,Bearer
などの認証方式を指定
realm="<認証領域>"
- 認証が必要な領域を示す(ログイン範囲など)
WWW-Authenticate
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントが認証が必要なページにアクセスしたとします。
GET /protected-resource HTTP/1.1
Host: example.com
HTTPレスポンス例
以下のHTTPレスポンスでは、サーバーが認証を要求しています。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Secure Area"
Content-Length: 0
401 Unauthorized
は認証が必要であることを示しています。WWW-Authenticate: Basic realm="Secure Area"
はBasic認証を要求し、"Secure Area"
という領域の認証が必要であることを示しています。
HTTPリクエスト例
クライアントはAuthorization
ヘッダーを追加して再リクエストします。
GET /protected-resource HTTP/1.1
Host: example.com
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
dXNlcm5hbWU6cGFzc3dvcmQ=
はusername:password
をBase64エンコードした値です。
Entity Header(エンティティヘッダー)の一覧
HTTPヘッダー | 説明 |
Allow | 指定URIで使用可能なHTTPメソッドをリスト化し、クライアントに通知するレスポンスヘッダー |
Content-Encoding | レスポンスボディがどのエンコーディング方式(圧縮方式)でエンコードされているかを示すヘッダー |
Content-Language | レスポンスボディが使用する言語を指定し、多言語対応サイトで使用されるヘッダー |
Content-Length | レスポンスボディのサイズ(バイト単位)を示し、適切な処理を可能にするヘッダー |
Content-Location | レスポンスが対応するリソースのURIを示し、コンテンツの位置を明確にするヘッダー |
Content-Range | レスポンスボディがリソースの一部である場合に、その範囲(バイト範囲)を示すヘッダー |
Content-Type | レスポンスボディのメディアタイプ(MIMEタイプ)を指定するヘッダー |
Expires | キャッシュの有効期限を指定し、クライアントがキャッシュを利用するか判断するヘッダー |
Last-Modified | リソースの最終更新日時を通知し、キャッシュの最新性を判断するためのヘッダー |
Allow
Allow
ヘッダーは、HTTPレスポンスにおいて、指定したURIで使用可能なHTTPメソッドをリスト化し、クライアントに通知するためのHTTPヘッダーです。主に405 Method Not Allowed
のレスポンスとともに使用され、どのメソッドが許可されているかを明示します。
Allow
ヘッダーの構文を以下に示します。
Allowヘッダーの構文
Allow: <メソッド1>, <メソッド2>, …
<メソッド>
- 許可されるHTTPメソッドをカンマ区切りで記述します。
Allow
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントがDELETE
メソッドでHTTPリクエストを送信したとします。
DELETE /resource HTTP/1.1
Host: example.com
HTTPレスポンス例
サーバーがDELETE
を許可していない場合、405 Method Not Allowed
を返し、使用可能なメソッドをAllow
ヘッダーで通知します。
HTTP/1.1 405 Method Not Allowed
Allow: GET, POST, HEAD
Content-Length: 0
405 Method Not Allowed
はクライアントが送ったメソッド(DELETE
)が許可されていないことを示しています。Allow: GET, POST, HEAD
で許可されているメソッドを通知しています。
Content-Encoding
Content-Encoding
ヘッダーは、HTTPレスポンスにおいて、ボディがどのエンコーディング方式(圧縮方式)でエンコードされているかを示すHTTPヘッダーです。クライアントはこのヘッダーを見て、データを適切にデコード(展開)します。
Content-Encoding
ヘッダーの構文を以下に示します。
Content-Encodingヘッダーの構文
Content-Encoding: <エンコーディング方式>
<エンコーディング方式>
gzip
→ Gzip圧縮。最も一般的な圧縮方式です。compress
→ Unixcompress
コマンドの圧縮(ほぼ使用されない)deflate
→ Zlib圧縮br
→ Brotli 圧縮(HTTP/2以降で推奨)identity
→ 何もエンコードされていない(デフォルト)
- 複数のエンコーディングが適用される場合、カンマ , で区切ります。
- 例:
Content-Encoding: gzip, identity
- 例:
Content-Encoding
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントがexample.com
にリソースをリクエストしています。その際、クライアントはAccept-Encoding
ヘッダーで、gzip
、deflate
、br
いずれかの圧縮方式を受け入れ可能であることをサーバーに通知しています。
GET /resource HTTP/1.1
Host: example.com
Accept-Encoding: gzip, deflate, br
HTTPレスポンス例
以下のHTTPレスポンスでは、サーバーはgzip
圧縮されたレスポンスを返しています。
HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 1024
[圧縮されたHTMLデータ]
Content-Encoding: gzip
はボディがgzip
で圧縮されていることを示しています。クライアントはこれを解凍して元のHTMLデータに戻します。
Content-Language
Content-Language
ヘッダーは、HTTPレスポンスにおいて、ボディ(コンテンツ)が使用している言語を指定するためのHTTPヘッダーです。主に、多言語対応のWebサイトで、サーバーがどの言語のコンテンツを返したかをクライアントに通知するために使われます。
Content-Language
ヘッダーの構文を以下に示します。
Content-Languageヘッダーの構文
Content-Language: <言語コード>
<言語コード>
- ISO 639-1 言語コード(例:
ja
,en
,fr
,de
)
- ISO 639-1 言語コード(例:
- 複数の言語を指定可能
- 英語とフランス語の両方で書かれているコンテンツの場合
Content-Language: en, fr
のようにカンマ区切りで記述します。
- 英語とフランス語の両方で書かれているコンテンツの場合
Content-Language
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントがexample.com
にHTTPリクエストしたとします。
GET / HTTP/1.1
Host: example.com
HTTPレスポンス例
サーバーが日本語のコンテンツを返す場合には、以下のようなHTTPレスポンスになります。
HTTP/1.1 200 OK
Content-Language: ja
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
<head><title>こんにちは</title></head>
<body><h1>ようこそ!</h1></body>
</html>
クライアントはContent-Language: ja
を見て、このページが日本語であると判断できます。
Content-Languageの用途
- Webサイトが多言語対応している場合、正しい言語情報を提供できる。
- 検索エンジンが適切な言語を認識し、検索結果の言語を最適化できる。
- 音声読み上げなどで、正しい言語として認識される。
Content-Length
Content-Length
ヘッダーは、HTTPメッセージのボディのサイズ(バイト単位)を指定するHTTPヘッダーです。サーバーやクライアントは、このヘッダーを使ってボディのデータがどれくらいの長さなのかを把握し、適切に処理します。
Content-Length
ヘッダーの構文を以下に示します。
Content-Lengthヘッダーの構文
Content-Length: <バイト数>
<バイト数>
- ボディのサイズ(単位: バイト)
Content-Length
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
クライアントがPOST
リクエストでデータを送信する際にContent-Length
ヘッダーを用いることができます。
POST /submit HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 27
{"name": "Alice", "age": 25}
Content-Length: 27
はボディの長さが27バイトであることを示しており、サーバーはこのヘッダーを見て、受信するデータサイズを確認することができます。
HTTPレスポンス例
サーバーが1,234バイトのHTMLを返す場合のHTTPレスポンスを以下に示します。
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<!DOCTYPE html>
<html>
<head><title>Example</title></head>
<body><h1>Welcome!</h1></body>
</html>
Content-Length: 1234
はレスポンスのボディが1,234バイトであることを示しており、クライアントはこれを見て、データが完全に受信されたかを判断することができます。
Content-Location
Content-Location
ヘッダーは、HTTPレスポンスにおいて、リソース(コンテンツ)の固有の位置(URI)を示すためのHTTPヘッダーです。これは、クライアントに対して「このレスポンスがどのURIに対応するのか」を明確にするために使用されます。
Content-Location
ヘッダーの構文を以下に示します。
Content-Locationヘッダーの構文
Content-Location: <URI>
<URI>
- レスポンスが対応するリソースの場所(絶対URIまたは相対URI)
Content-Location
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントは/latest-report
というエンドポイントにアクセスしています。
GET /latest-report HTTP/1.1
Host: example.com
HTTPレスポンス例
以下のHTTPレスポンスでは、サーバーは/latest-report
というエンドポイントが/reports/2025-01.pdf
という具体的なリソースに対応していることを示しています。
HTTP/1.1 200 OK
Content-Location: /reports/2025-01.pdf
Content-Type: application/pdf
[PDFデータ]
Content-Range
Content-Range
ヘッダーは、HTTPレスポンスにおいて、レスポンスのボディがリソースの一部である場合に、その範囲(バイト範囲)を示すHTTPヘッダーです。主に部分配信(Rangeリクエスト)に使用され、動画ストリーミングや大きなファイルの分割ダウンロードなどで役立ちます。
Content-Range
ヘッダーの構文を以下に示します。
Content-Rangeヘッダーの構文
リソースのサイズが分かる場合
Content-Range: bytes <開始位置>-<終了位置>/<全体のサイズ>
リソースのサイズが不明な場合
Content-Range: bytes <開始位置>-<終了位置>/*
<開始位置>-<終了位置>
- 返される範囲(バイト単位)
/<全体のサイズ>
- 元のリソース全体のサイズ
*
を使うと、全体のサイズが不明な場合でも部分範囲を示すことができる。
Content-Range
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントがexample.com/video.mp4
の一部(1000~1999バイト)を要求しています。
GET /video.mp4 HTTP/1.1
Host: example.com
Range: bytes=1000-1999
HTTPレスポンス例
以下のHTTPレスポンスでは、サーバーが要求された部分データ(1000~1999バイト)を返しています。
HTTP/1.1 206 Partial Content
Content-Range: bytes 1000-1999/500000
Content-Length: 1000
Content-Type: video/mp4
[要求された動画データ(1000バイト)]
206 Partial Content
はリクエストされた範囲のデータを返すこと示しています。Content-Range: bytes 1000-1999/500000
は全体500,000バイトのうち、1000~1999バイトのデータを返していることを示しています。Content-Length: 1000
はレスポンスのデータサイズを示しています。
Content-Type
Content-Type
ヘッダーは、HTTPメッセージのボディ(データ)のメディアタイプ(MIMEタイプ)を指定するHTTPヘッダーです。サーバーとクライアントの両方で使用され、リクエストボディとレスポンスボディの種類を示します。
Content-Type
ヘッダーの構文を以下に示します。
Content-Typeヘッダーの構文
Content-Type: <メディアタイプ>; <オプション>
<メディアタイプ>
text/html
,application/json
,image/png
など
<オプション>
(任意)charset=UTF-8
などの追加情報
Content-Type
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントがJSONデータをサーバーに送信しています。
POST /submit HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 32
{"name": "Alice", "age": 25}
Content-Type: application/json
によってサーバーにJSONデータを送ることを示ています。
HTTPレスポンス例
以下のHTTPレスポンスでは、サーバーがHTMLをクライアントに返しています。
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1024
<!DOCTYPE html>
<html>
<head><title>Example</title></head>
<body><h1>Welcome!</h1></body>
</html>
Content-Type: text/html; charset=UTF-8
によって、レスポンスがHTMLであり、UTF-8エンコーディングであることが分かります。
よく使われるContent-Typeの例
text/html
:HTMLドキュメントtext/plain
:プレーンテキストapplication/json
:JSONデータapplication/xml
:XMLデータimage/png
:PNG画像image/jpeg
:JPEG画像multipart/form-data
:ファイルアップロード用(フォームデータ)application/octet-stream
:バイナリデータ(汎用)
Expires
Expires
ヘッダーは、HTTPレスポンスにおいて、キャッシュの有効期限を指定するHTTPヘッダーです。クライアント(ブラウザやプロキシ)は、この日時を過ぎるまでキャッシュを利用し、新しいリクエストを送らずにキャッシュを使うことができます。
Expires
ヘッダーの構文を以下に示します。
Expiresヘッダーの構文
Expires: <日時(GMT形式)>
<日時>
RFC 1123
フォーマット(例:Wed, 21 Oct 2025 07:28:00 GMT
)
Expires
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントが画像をリクエストしています。
GET /logo.png HTTP/1.1
Host: example.com
HTTPレスポンス例
以下のHTTPレスポンスでは、サーバーがExpires
ヘッダーを含めて返しています。
HTTP/1.1 200 OK
Content-Type: image/png
Expires: Wed, 21 Oct 2025 07:28:00 GMT
[画像データ]
Expires: Wed, 21 Oct 2025 07:28:00 GMT
によって、クライアントこの日時までキャッシュを利用することができます。
Last-Modified
Last-Modified
ヘッダーは、HTTPレスポンスにおいて、リソース(コンテンツ)の最終更新日時を通知するHTTPヘッダーです。ブラウザやプロキシは、この情報を使ってキャッシュが最新かどうかを判断し、不要なリクエストを減らします。
Last-Modified
ヘッダーの構文を以下に示します。
Last-Modifiedヘッダーの構文
Last-Modified: <日時(GMT形式)>
<日時>
RFC 1123
フォーマット(例:Wed, 21 Oct 2025 07:28:00 GMT
)
Last-Modified
ヘッダーの具体例を以下に示します。
HTTPリクエスト例
以下のHTTPリクエストでは、クライアントがindex.html
をリクエストしています。
GET /index.html HTTP/1.1
Host: example.com
HTTPレスポンス例
以下のHTTPレスポンスでは、サーバーがLast-Modified
を含めてレスポンスしています。
HTTP/1.1 200 OK
Content-Type: text/html
Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT
<!DOCTYPE html>
<html>
<head><title>Example</title></head>
<body><h1>Welcome!</h1></body>
</html>
Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT
によって、このページは2025年10月21日 07:28:00 GMTに更新されたことが分かります。