浏览器未显示X-Forwarded-For标头的原因

时间:2014-02-06 06:46:32

标签: http browser http-headers client-server

注意:请阅读完整的问题

我试图理解为什么每次请求页面时浏览器都没有向我显示任何 X-Forwarded-For 标题

BTW这里是我的请求标题看起来像

Request URL:http://localhost:3000/users/sign_in
Request Method:GET
Status Code:304 Not Modified

请求标题:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Cookie:undefined=0; poasterapp=s%3A4faaa6b1723e7c6fbd949083532c52598652547b.sNX%2BKOEed2TEQkQN7I7K5lgpoHMRpwerKFvUegMnTVI; _minerva_session=BAh7CUkiD3Nlc3Npb25faWQGOgZFRkkiJWEyM2Q0ZTViMWEyODBiYmFmODEwZTJhZmUwNWU5ODk5BjsAVEkiE3VzZXJfcmV0dXJuX3RvBjsARiIGL0kiCmZsYXNoBjsARm86JUFjdGlvbkRpc3BhdGNoOjpGbGFzaDo6Rmxhc2hIYXNoCToKQHVzZWRvOghTZXQGOgpAaGFzaHsGOgphbGVydFQ6DEBjbG9zZWRGOg1AZmxhc2hlc3sGOwpJIgAGOwBUOglAbm93MEkiEF9jc3JmX3Rva2VuBjsARkkiMUN0Uk56SXU0dUdIdzgwcFZJM3R0L2N4dlovRllTSGRrQ2o1R0VVanhIaVk9BjsARg%3D%3D--6bd89ce9d29e9bdcf56573f9a153dc663a8fe755
Host:localhost:3000
If-None-Match:"785d34e3998360353567fc710af123fb"
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36

响应标头(不需要但仍然)

Cache-Control:max-age=0, private, must-revalidate
Connection:close
ETag:"785d34e3998360353567fc710af123fb"
Server:thin 1.5.0 codename Knife
Set-Cookie:_minerva_session=BAh7CEkiD3Nlc3Npb25faWQGOgZFRkkiJWEyM2Q0ZTViMWEyODBiYmFmODEwZTJhZmUwNWU5ODk5BjsAVEkiE3VzZXJfcmV0dXJuX3RvBjsARiIGL0kiEF9jc3JmX3Rva2VuBjsARkkiMUN0Uk56SXU0dUdIdzgwcFZJM3R0L2N4dlovRllTSGRrQ2o1R0VVanhIaVk9BjsARg%3D%3D--dfb3ce9f5c97463cfcd0229a133654e6cc606d98; path=/; HttpOnly
X-Request-Id:41a6f3062dc8bc36b7b3eae71dc5075d
X-Runtime:89.238257
X-UA-Compatible:IE=Edge

现在如上所述,我在请求标题中看不到任何 X-Forwarded-For

通过 X-Forwarded-For wiki页面阅读让我觉得,这是通过缓存服务器完成的(在我的情况下,我认为是我的ISP提供商){ {1}}

如果他们就是这个问题,那就是

为什么?对于在我的机器上本地运行的服务器而言,同样如此(即so am I safe to believe that the **X-Forwarded-For** headers is something that is added at the caching server side (ISP provider)没有出现在请求标头中)我通过浏览器访问它们{{1} }

3 个答案:

答案 0 :(得分:8)

X-Forwarded-For不是RFC 2616 Section 5.3中指定的标准请求标头,用于解决协议标准请求标头(在RFC中指定)

  • 接受
  • 接收字符集
  • 接受编码
  • 接受语言
  • 授权
  • 期望
  • 主机
  • 如果-匹配
  • 如果-Modified-Since的
  • 如果-无 - 匹配
  • 如果-范围
  • 如果未改性的-由于
  • 最大 - 转发
  • 代理授权
  • 范围
  • Referer的
  • TE
  • 的User-Agent

为了使您的传入请求具有自定义[X-Forwarded-For]标头,必须由调用客户端将其显式添加到该请求中。最简单的解释为什么你没有看到该标题是发送请求的客户端没有手动添加它。

棘手的是,您期望看到的标题不是您应该期待接收的标题,除非您的服务与分离的来电者之间存在合同来自HTTProtocol,表示您应该期望在请求标头中指定X-Forwarded-For值。正如其他人已经说过的那样,XFF标头通常由代理服务器或负载平衡器设置,以指示真实请求者是通过其代理执行的。

作为服务提供商,如果您要求在所有请求中设置[X-Forwarded-For]标头,则必须在服务策略级别强制执行该标头。如果您不想为不能识别他们使用代理IP屏蔽的代理帐户提供服务,请使用403 Forbidden退回他们的请求。如果您处于必须为这些请求提供服务但依赖于此标头设置的情况下,那么您将不得不提出一个自定义过程,您可以在其中回复它们的错误。

以下是HTTProtocol对匿名的评论:

  

因为链接的来源可能是私人信息,也可能是      透露其他私人信息来源,这是强烈的      建议用户能够选择是否      发送Referer字段。例如,浏览器客户端可以拥有      切换开关用于公开/匿名浏览,这将是      分别启用/禁用Referer和From的发送      信息。

     

客户端不应在(非安全)中包含Referer头字段   如果引用页面是通过安全传输的,则为HTTP请求   协议

     

使用HTTP协议的服务的作者不应该使用GET
  基于提交敏感数据的表格,因为这将是   导致此数据在Request-URI中编码。许多现有的   服务器,代理和用户代理将在某些中记录请求URI   第三方可见的地方。服务器可以使用
  而是基于POST的表单提交   ...

     

详细说明每个请求中发送的用户自定义接受标头字段,      特别是如果这些包括质量值,则可以由服务器使用      作为相对可靠和长期存在的用户标识符。这样的用户      标识符将允许内容提供商进行点击跟踪,      并允许协作内容提供商匹配跨服务器      点击跟踪或表单提交个人用户。请注意      许多用户不在代理后面,主机的网络地址      运行用户代理也将充当长期用户      标识符。在使用代理进行增强的环境中      隐私,用户代理在提供接受时应该保守      最终用户的标头配置选项。作为极端隐私      测量,代理可以过滤中继请求中的接受标头。      提供高度标头的通用用户代理      可配置性应该警告用户可以丢失隐私      参与。

就个人而言,我会使用401.2将请求退回,并通过WWW-Authenticate响应标头将请求者路由到挑战屏幕,该标头向他们通知他们不允许匿名访问您的网站。这是一种使用WWW-Authenticate标头的混合方式,但似乎您期望X-Forwarded-For标头能够确认并识别真实请求者并允许公开非匿名访问为您服务。对我来说,这是一个身份验证问题。

答案 1 :(得分:4)

  • ISP提供商不会添加X-Forwarded-For。
  • X-Forwarded-For不是最终用户识别代理/平衡器背后的应用程序。
  • X-Forwarded-For用于代理/平衡器后面的应用程序来识别 用户。

例如:  你有网络应用程序(PHP,Java等)  你也有http服务器(Apache,nginx等):

  1. 用户请求http服务器。
  2. Http服务器重定向到Web应用程序的请求,使用X-Forwarded-For作为用户ip。
  3. 您的网络应用程序知道它位于http服务器后面,所以它会读取X-Forwarded-For作为用户ip。

答案 2 :(得分:1)

为什么期望X-Forwarded-For出现在首位?您正在连接到localhost上运行的Web服务器,因此根本没有涉及ISP提供商。即使您通过ISP连接到Web服务器,仍然不太可能将X-Forwarded-For添加到请求中。 X-Forwarded-For通常由HTTP代理服务器或负载均衡器添加,这两者都不是您要经历的。