[31] X-Forwarded-For:
ヘッダーは、
串 (順串や逆串) が直接のクライアントのIPアドレスを保存し、
次以降のホップへと伝えるためのものです。
[11] IPv6アドレスは (括弧で括るなどせずに) 直接書くことができるようです。
[13] X-Forwarded-For:
欄を複数含めることにより (あるいは ,
によって連結することにより) 多段の串の通過を表現できます。
[6] Wikipedia の説明によると先頭 (前) ほどクライアント側、末尾 (後) ほど鯖側の IPアドレスを表していることになっているようです。
[38] 実際には必ずしもこの順序が守られているわけでは無いようです。
[40] MDN は詳しい解説を載せていますが >>37、 その根拠をまったく示していません。
[41] そもそもこの機能は仕様書もなく慣習的に使われてきたもので、 どのように使われるべきか規範的で信頼できる根拠が何も存在していないのです。
[42] どのような順序にするのが正しいかという問題とは別に (しかし密接に関わる問題として)、 IPアドレスを1つ拾って何かをしたいとき、 どれを選ぶのが適切なのか、という問題があります。 >>15
[43] これも仕様が定まっていない上に、「用途による」としか言いようがないので答えるのが難しい。
[15] Ruby - Rack::Request#hostがX-Forwarded-Hostの最後のプロキシホストを返す理由 - Qiita [キータ] ( ( 版)) http://qiita.com/mechamogera/items/32db29aa0db91df704ba
[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。
[21] 既定の設定では難読化識別子を使うべきです >>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 7239 で X-Forwarded-For:
と同様の内容を持つ
Forwarded:
ヘッダーの for
引数
>>19 が追加されました。
[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
[16] HTTP - XFF - Qiita ( ( 版)) http://qiita.com/wakaba@github/items/cf8730ca3d75b28d844a
[44]
HTTP
X-Forwarded-For:
ヘッダー
($ENV{HTTP_X_FORWARDED_FOR}
) のよくある話のまとめ
X-Client-IP:
、X-Sakura-Forwarded-For:
、CF-Connecting-IP:
などForwarded:
ヘッダーを新たに開発したが、本稿にまとめた問題を解決するものではない[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