HTTPヘッダーの一覧と使用方法


プロキシサーバで利用するヘッダー

これらのヘッダーは通信の正常性や追跡性などにおいて重要な役割を持っています。
プロキシで一般的に利用されるHTTPヘッダーを一覧化します。
ヘッダー種別 | 目的 | 推奨ヘッダー | 説明 |
---|---|---|---|
クライアント情報の転送 | プロキシ経由時に元のクライアント情報を保持・転送する | • Forwarded |
RFC 7239で標準化された正式なヘッダー。クライアントのIPアドレス、プロトコル、ホスト名などの情報を構造化された形式で転送。Forwarded: for=192.0.2.43, proto=https, host=example.com
|
プロキシの存在表示 | HTTP標準に基づき、リクエストがプロキシを経由したことを示す | • Via | HTTP/1.1の正式な標準ヘッダー。リクエスト/レスポンスが経由したプロキシの情報を記録。Via: 1.1 proxy-server (Apache/2.4.1), 1.1 edge-cache
|
プロキシ認証 | フォワードプロキシへのクライアント認証に使用 | • Proxy-Authorization | HTTP標準のヘッダー。クライアントがプロキシに対して認証情報を提供するために使用。Proxy-Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
|
プロキシ認証チャレンジ | プロキシがクライアントに認証を要求する | • Proxy-Authenticate | HTTP標準のヘッダー。プロキシがクライアントに認証方法を提示するために使用。Proxy-Authenticate: Basic realm="Proxy Server Authentication"
|
キャッシュ制御 | コンテンツのキャッシュ動作を指定・制御する | • Cache-Control • Age • Warning • Cache-Status |
HTTP標準のキャッシュ関連ヘッダー。Cache-Controlはキャッシュの動作方法、Ageはキャッシュ内での経過時間、Warningは潜在的な問題の警告、Cache-Statusは新しい標準でキャッシュ処理の詳細を提供。Cache-Control: public, max-age=86400 Age: 2140 Cache-Status: ExampleCache; hit; ttl=60
|
コンテンツ変換・最適化 | プロキシによるコンテンツの変更や最適化を通知 | • Content-Encoding • Transfer-Encoding • TE • Accept-Encoding |
コンテンツ圧縮や変換に関するHTTP標準ヘッダー。Content-EncodingとTransfer-Encodingは適用された圧縮や変換方式を示し、TEとAccept-Encodingはサポートされる変換方式を通知。Content-Encoding: gzip Transfer-Encoding: chunked
|
セキュリティ関連 | Webセキュリティポリシーを強化し脆弱性対策を行う | • Content-Security-Policy • Strict-Transport-Security • X-Content-Type-Options • X-Frame-Options |
プロキシが追加または管理するセキュリティヘッダー。コンテンツセキュリティポリシーの定義、HTTPS強制、MIME-type偽装防止、フレーム挿入制御などを行う。Content-Security-Policy: default-src 'self' Strict-Transport-Security: max-age=31536000; includeSubDomains X-Content-Type-Options: nosniff
|
接続管理 | HTTP接続の振る舞いを制御する | • Connection • Keep-Alive |
HTTP接続の維持や終了を制御するヘッダー。ConnectionはHTTP/1.1での接続管理方法を指定し、Keep-Aliveは持続的接続のパラメータを定義。Connection: keep-alive Keep-Alive: timeout=5, max=100
|
条件付きリクエスト | キャッシュ効率化やリソース検証に使用 | • If-Modified-Since • If-None-Match • ETag • Last-Modified |
リソースの変更検出と条件付き転送に関するヘッダー。プロキシが効率的にキャッシュを管理し、不要なデータ転送を回避するための仕組みを提供。If-Modified-Since: Wed, 21 Oct 2020 07:28:00 GMT ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
|
クロスオリジン通信 | クロスオリジンリソース共有を制御する | • Access-Control-Allow-Origin • Access-Control-Allow-Methods • Access-Control-Allow-Headers • Access-Control-Expose-Headers |
主にリバースプロキシがCORS(Cross-Origin Resource
Sharing)ポリシーを管理・実装するためのヘッダー。異なるオリジン間でのリソース共有を安全に行う仕組みを提供。Access-Control-Allow-Origin: https://trusted-site.com Access-Control-Allow-Methods: GET, POST, OPTIONS
|
監視・トレーシング | 分散システムでの要求追跡やパフォーマンス分析 | • Traceparent • Tracestate • Server-Timing |
現代的なマイクロサービス環境でのリクエスト追跡と性能測定のためのヘッダー。Traceparent/TracestateはW3C Trace
Context標準の一部で、分散トレーシングを可能にし、Server-Timingはパフォーマンス指標を提供。Traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01 Server-Timing: cache;desc="Cache lookup";dur=23.2
|
非推奨だがよく使われるヘッダー
プロキシサーバでよく使われるヘッダーが軒並み入っておりません。
実は、今までプロキシサーバの世界で標準的に使われていたヘッダーは非推奨ヘッダーと言われており正式には推奨されていません。
以下、よく使われるが非推奨となっているヘッダーの一覧も表にしておきます。
非推奨ヘッダー | 問題点 | 現代的な代替手段 |
---|---|---|
Proxy-Connection | 非標準ヘッダーであり、HTTP/1.1以降では正式には推奨されていません。元々はHTTP/1.0の制限を回避するために導入されましたが、近代的なプロキシやクライアントでは不要です。 | Connection
ヘッダーを使用するべきです。HTTP/1.1では、標準のConnection ヘッダーがプロキシ対応となっており、Connection: keep-alive のように使用します。HTTP/2以降では接続管理が自動化されているため、このヘッダー自体が通常不要です。
|
X-Forwarded-For X-Forwarded-Proto X-Forwarded-Host |
広く使われているものの、正式なHTTP標準ではなく、「X-」プレフィックス付きのヘッダーはRFC 6648によって非推奨とされています。 | RFC 7239で標準化された Forwarded ヘッダーの使用が推奨されています。Forwarded: for=192.0.2.60;proto=https;by=203.0.113.43;host=example.com このヘッダーは複数のパラメータを一つのヘッダーにまとめ、より構造化された方法で情報を伝達します。ただし、実際には旧来のX-Forwardedシリーズがまだ広く使用されています。 |
X-XSS-Protection | クロスサイトスクリプティング(XSS)から保護するためのブラウザ組み込み機能を制御するために使用されていましたが、最新のブラウザではこの機能自体が廃止または非推奨となっています。 | 代わりに Content-Security-Policy
ヘッダーを使用するべきです。これはより包括的で効果的なセキュリティ制御を提供します:Content-Security-Policy: script-src 'self'
|
X-Cache X-Cache-Hit X-Cache-Lookup |
これらは非標準であり、プロキシベンダーごとに異なる形式や意味を持つことがあります。デバッグには役立ちますが、標準的な意味はありません。 | 標準的な代替はありませんが、Cache-Status ヘッダー(RFC 9211で定義)が新しい標準として登場しています:Cache-Status: OriginCache; hit; ttl=1100; key=example.com ただし、まだ広く採用されていません。 |
ヘッダーの使用方法
この内容については、一度に覚える必要はないと思います。
必要に応じて、参照しに来てください。
Forwarded ヘッダー
使用方法: クライアント接続に関する情報をバックエンドサーバーに転送します。
Forwarded: for=192.0.2.60;proto=https;by=203.0.113.43;host=example.com
設定例 (Nginx):
proxy_set_header Forwarded "for=\$remote_addr;proto=\$scheme;host=\$host;by=\$server_addr";
設定例 (Apache):
RequestHeader set Forwarded "for=%{REMOTE_ADDR}s;proto=%{REQUEST_SCHEME}s;host=%{HTTP_HOST}s"
Via ヘッダー
使用方法: リクエスト/レスポンスが経由したプロトコルとプロキシの情報を表示します。
Via: 1.1 proxy-name (Product/Version), 1.1 edge-gateway
設定例 (Squid):
via on
設定例 (Nginx - 省略する場合):
proxy_hide_header Via;
Proxy-Authorization ヘッダー
使用方法: クライアントがプロキシサーバーに認証情報を提供します。
Proxy-Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
クライアント設定例 (curl):
curl -x proxy.example.com:3128 -U username:password https://target-site.com/
Proxy-Authenticate ヘッダー
使用方法: プロキシが認証を要求する際に使用し、認証方式を指定します。
Proxy-Authenticate: Basic realm="Corporate Proxy"
設定例 (Squid):
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm Proxy Authentication Required
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
Cache-Control ヘッダー
使用方法: リソースのキャッシュ動作を制御します。
Cache-Control: public, max-age=86400
Cache-Control: private, no-cache
設定例 (Nginx):
expires 1d; # Cache-Control: max-age=86400 を設定
proxy_cache_bypass \$http_cache_control; # "no-cache" を尊重
設定例 (Varnish):
sub vcl_backend_response {
set beresp.ttl = 1d; # 1日間キャッシュ
}
Age ヘッダー
使用方法: レスポンスがキャッシュ内に存在している秒数を示します。
Age: 3600 # 1時間キャッシュ内に保存されている
プロキシが通常自動的に追加し、手動設定は不要です。
Cache-Status ヘッダー
使用方法: キャッシュ処理の詳細情報を提供します (RFC 9211)。
Cache-Status: ExampleCache; hit; ttl=60; key=uri; detail=1234
設定例 (高度なプロキシやCDNで設定可能):
# 多くの場合、自動的に追加されます
Content-Encoding ヘッダー
使用方法: レスポンスに適用された圧縮アルゴリズムを示します。
Content-Encoding: gzip
設定例 (Nginx):
gzip on;
gzip_types text/plain text/css application/javascript;
設定例 (Apache):
AddOutputFilterByType DEFLATE text/html text/plain text/css
Content-Security-Policy ヘッダー
使用方法: サイトのコンテンツソースポリシーを定義し、XSSなどの攻撃を防止します。
Content-Security-Policy: default-src 'self'; script-src 'self' trusted-scripts.com;
設定例 (Nginx):
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-scripts.com;";
設定例 (Apache):
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-scripts.com;"
Strict-Transport-Security ヘッダー
使用方法: サイトがHTTPS接続のみを使用するようブラウザに指示します。
Strict-Transport-Security: max-age=31536000; includeSubDomains
設定例 (Nginx):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
X-Content-Type-Options ヘッダー
使用方法: MIMEタイプのスニッフィング防止によりセキュリティ向上。
X-Content-Type-Options: nosniff
設定例 (Nginx):
add_header X-Content-Type-Options nosniff;
X-Frame-Options ヘッダー
使用方法: サイトがフレーム内に表示されることを制限し、クリックジャッキングを防止。
X-Frame-Options: SAMEORIGIN
設定例 (Nginx):
add_header X-Frame-Options SAMEORIGIN;
Connection ヘッダー
使用方法: HTTP接続の管理方法を指定します。
Connection: keep-alive
Connection: close
設定例 (Nginx):
keepalive_timeout 65; # keep-aliveの設定
proxy_set_header Connection ""; # HTTP/1.1での接続管理
ETag と If-None-Match ヘッダー
使用方法: リソースの変更検出とキャッシュ検証に使用。
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
設定例 (Nginx):
etag on; # ETAGを有効化
Last-Modified と If-Modified-Since ヘッダー
使用方法: リソースの変更日時に基づくキャッシュ検証。
Last-Modified: Wed, 21 Oct 2020 07:28:00 GMT
If-Modified-Since: Wed, 21 Oct 2020 07:28:00 GMT
Access-Control-Allow-Origin ヘッダー
使用方法: クロスオリジンリクエストを許可するドメインを指定。
Access-Control-Allow-Origin: https://trusted-site.com
Access-Control-Allow-Origin: * # すべてのドメインを許可(注意して使用)
設定例 (Nginx):
add_header Access-Control-Allow-Origin https://trusted-site.com;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
add_header Access-Control-Allow-Headers "DNT,X-CustomHeader,Keep-Alive,User-Agent";
Traceparent ヘッダー
使用方法: 分散トレーシングのためのリクエスト識別子。
Traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
設定例 (カスタム実装またはトレーシングツール使用):
# 多くの場合、OpenTelemetryなどのライブラリを使用
proxy_set_header Traceparent \$opentelemetry_trace_id;
Server-Timing ヘッダー
使用方法: サーバーサイドの処理時間に関する情報を提供。
Server-Timing: cache;desc="Cache lookup";dur=23.2
設定例 (カスタム処理):
add_header Server-Timing "edge;dur=\$upstream_response_time";
まとめ
これらのヘッダーは利用者やアクセス先のサーバ等へ必要な情報を連携するために必要なものとなります。
セキュリティに関わるものも多くあります。
正直、全てのヘッダーを頭に入れておくのは難しいと思いますが、要件に応じて必要なヘッダーを取捨選択する必要があることは頭に入れておいて下さい。
そこさえ覚えていれば、後はヘッダーの一覧を見ながら設計できれば十分だと思います。