HTTP_X_FORWARDED_FOR

X-Forwarded-For: ヘッダー (HTTP)

[31] X-Forwarded-For: ヘッダーは、 (順串逆串) が直接のクライアントIPアドレスを保存し、 次以降のホップへと伝えるためのものです。

仕様書

構文

[11] IPv6アドレスは (括弧で括るなどせずに) 直接書くことができるようです。

[12] Squid などが対応しているようです。鯖側Webアプリケーションの類では IPv4アドレスにしか対応していないことが多々あります。

[13] X-Forwarded-For: 欄を複数含めることにより (あるいは , によって連結することにより) 多段のの通過を表現できます。

[14] 鯖側Webアプリケーションの類ではこれに対応していないこともあります。

順序

[6] Wikipedia の説明によると先頭 (前) ほどクライアント側、末尾 (後) ほど側の IPアドレスを表していることになっているようですが、 実際には必ずしもこの順序が守られているわけでは無いようです。

実装

[36] さくらインターネットの共有レンタルサーバーでは、 X-Sakura-Forwarded-For: (HTTP_X_SAKURA_FORWARDED_FOR) が使われるようです。

[10] X-Client-IP:, CF-Connecting-IP:, X-Real-IP: といったヘッダーが使われることもあります。

Forwarded: ヘッダー for 引数

[20] Forwarded: ヘッダーfor 引数は、クライアントについての情報を表します >>19

[24] 値の構文は節点識別子です >>19

  1. 節点識別子

[21] 既定の設定では難読化識別子を使うべきです >>19

[22] 必要ならかわりにIPアドレス (や場合によってはポート番号) を指定しても構いません >>19

[23] unknown としても構いません >>19

歴史

誕生

[4] X-Forwarded-For:Squid が使い始めました。

X-Forwarded-For: clientIPaddr|unknown

Squid が最初。 他のproxyがつけているのはSquidのマネ。 HTTP DraftがForwarded:からVia: へ変更されたのを受けて、 クライアントアドレスをどこかに残すために新設されました。 (changelogヨリ)

  • 1.0.beta1: Forwarded: 追加 (User-Agent: ... via ... そのまま)
  • 1.1.alpha17: User-Agent: via.. 廃止、Forwarded:のみ
  • 1.1.beta21: Forwarded->Via
  • 1.1.beta24: X-Forwarded-For 新設

この頃の Squid はバージョンアップがやたら激しく、 alphaだbetaだreleaseだといった違いにあまり意味はありません。

Forwarded: by proxy-URI [(product)] [for client-FQDN]

draft-ietf-http-v10-spec-01.txt および draft-ietf-http-v11-spec-01.txt までの HTTP-draft に出現。 標準化に際しては 「冗長である」 という理由から Via: に置き換わっています。 "for ..." 部分は Via: から削られたため、Squid では代わりに X-Forwarded-For ヘッダを新設しました。 (当時まじめにDraft等を追っかけていたのは Squid くらいだったような気が)

Forwarded-For: ヘッダー

[29] Forwarded-For: として標準化することが提案されました >>28

Forwarded: ヘッダー

[30] >>28 は次の版で現在とほぼ同じ Forwarded: ヘッダーに拡張されました。

[25] RFC 7239X-Forwarded-For: と同様の内容を持つ Forwarded: ヘッダーfor 引数 >>19 が追加されました。

[27] IPv6アドレスが含まれることもあります >>26

X-Forwarded-For: 192.0.2.43, 2001:db8:cafe::17

メモ

[5] X-Forwarded-For - Wikipedia, the free encyclopedia ( ( 版)) <http://en.wikipedia.org/wiki/X-Forwarded-For>

[7] suz-lab - blog: すでに"X-Forwarded-For"ヘッダのついたHTTPリクエストがELBを経由すると ( ( 版)) <http://blog.suz-lab.com/2011/06/x-forwarded-forhttpelb.html>

[8] リバースプロキシ環境下のapacheではmod_extract_forwardedよりもやっぱりmod_rpaf? - うまい棒blog ( ( 版)) <http://d.hatena.ne.jp/hogem/20090622/1245675445>

[9] mod_remoteip - Apache HTTP Server ( ( 版)) <http://httpd.apache.org/docs/2.3/mod/mod_remoteip.html>

[15] Ruby - Rack::Request#hostがX-Forwarded-Hostの最後のプロキシホストを返す理由 - Qiita [キータ] ( ( 版)) <http://qiita.com/mechamogera/items/32db29aa0db91df704ba>

[16] HTTP - XFF - Qiita ( ( 版)) <http://qiita.com/wakaba@github/items/cf8730ca3d75b28d844a>

[17] How does CloudFlare handle HTTP Request headers? – CloudFlare Support ( ( 版)) <https://support.cloudflare.com/hc/en-us/articles/200170986-How-does-CloudFlare-handle-HTTP-Request-headers->

[18] draft-nottingham-surrogates-00 - Requirements for Demand-Driven Surrogate Origin Servers ( ( 版)) <http://tools.ietf.org/html/draft-nottingham-surrogates-00#section-3.7.1>

[32] X-Forwarded-For Header :: Add-ons for Firefox ( ( 版)) <https://addons.mozilla.org/ja/firefox/addon/x-forwarded-for-header/>

[33] SOL4816 - Using the X-Forwarded-For HTTP header to preserve the original client IP address for traffic translated by a SNAT ( ( 版)) <https://support.f5.com/kb/en-us/solutions/public/4000/800/sol4816.html>

[34] Guidelines for Web Content Transformation Proxies 1za ( ( 版)) <http://www.w3.org/2005/MWI/BPWG/Group/TaskForces/CT/editors-drafts/Guidelines/100402#sec-additional-headers>

[35] mod_proxy - Apache HTTP Server Version 2.4 ( 版) <http://httpd.apache.org/docs/current/en/mod/mod_proxy.html#x-headers>

X-Forwarded-For

The IP address of the client.