Forwarded

Forwarded リクエストヘッダーは、リバースプロキシサーバー(ロードバランサー、CDN、など)によって追加される可能性のある情報を格納します。この情報はリクエストの経路にプロキシサーバーが介在している場合、変更されるか失われます。

例えば、クライアントが HTTP プロキシー(またはロードバランサー)を通してウェブサーバーに接続している場合、サーバーログはプロキシーの IP アドレス、ホストアドレス、プロトコルのみを格納します。このヘッダーを使用して元のリクエストの IP アドレス、 ホスト、プロトコルを特定することができます。 このヘッダーはオプションで、サーバーへの経路上のどのプロキシーサーバーでも追加したり、変更したり、除去したりすることができます。

このヘッダーはデバッグ、統計、および場所に依存するコンテンツの生成に使用されます。 設計上、クライアントの IP アドレスのようなプライバシーに敏感な情報を公開します。 したがって、このヘッダーを展開するときは、ユーザーのプライバシーに注意しなければなりません。

このヘッダーの代替で、事実上の標準となっているものは X-Forwarded-For, X-Forwarded-Host, X-Forwarded-Proto ヘッダーです。

ヘッダー種別 リクエストヘッダー
禁止ヘッダー名 いいえ

構文

単一のプロキシーからの転送ヘッダーの構文を下記に示します。 ディレクティブはセミコロンで区切られた key=value の組です。

http
Forwarded: by=<identifier>;for=<identifier>;host=<host>;proto=<http|https>

クライアントとサーバーの間に複数のプロキシーサーバーがある場合、それ ぞれが自分自身で転送情報を指定することができます。 これはヘッダーブロックの最後に新しい Forwarded ヘッダーを追加するか、カンマ区切りのリストで最後の Forwarded ヘッダーの最後に情報を追加することで可能です。

ディレクティブ

by 省略可

リクエストがプロキシーサーバーに入ってきたインターフェイス。 識別子は次のいずれかを取ります。

  • 難読化された識別子("hidden" や "secret" など)。 これは既定値として扱われます。
  • IP アドレス(v4 または v6、オプションでポート番号つき、および ipv6 は引用符と角括弧で囲まれます)
  • 先行するエンティティが不明な場合(およびリクエストの転送が行われたことを示したい場合)は "unknown"
for 省略可

リクエストを発行したクライアントと、その後のプロキシーチェーン内のプロキシー。 識別子は by ディレクティブと同じ値を取ります。

host 省略可

プロキシーから受信したときの Host リクエストヘッダー。

proto 省略可

そのプロトコルがリクエストの作成に使用されたか (ふつうは "http" または "https")。

Forwarded ヘッダーの使用

http
Forwarded: for="_mdn"

# 大文字小文字の区別なし
Forwarded: For="[2001:db8:cafe::17]:4711"

# セミコロン区切り
Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43

# 複数のプロキシサーバーの値をカンマを使用して追加することができる
Forwarded: for=192.0.2.43, for=198.51.100.17

X-Forwarded-For から Forwarded への移行

アプリケーション、サーバー、プロキシーが標準化された Forwarded ヘッダーに対応している場合は、 X-Forwarded-For を置き換えることができます。 なお、 IPv6 アドレスは、 Forwarded では(X-Forwarded-For ヘッダーの場合とは異なり)引用符と角括弧で囲む必要があります。

http
X-Forwarded-For: 192.0.2.172
Forwarded: for=192.0.2.172

X-Forwarded-For: 192.0.2.43, 2001:db8:cafe::17
Forwarded: for=192.0.2.43, for="[2001:db8:cafe::17]"

仕様書

Specification
Forwarded HTTP Extension
# section-4

関連情報