中间件中@env哈希中的变量HTTP_X_FORWARDED_HOST是什么?

时间:2013-07-01 18:38:46

标签: ruby-on-rails rack rack-middleware

在Rack中间件过滤器中,我知道call方法采用env哈希变量。我正在查看某人的Rack中间件代码,我看到了

 env['HTTP_X_FORWARDED_HOST']

有人可以解释HTTP_X_FORWARDED_HOST的含义吗?它是请求源自的主机吗?

1 个答案:

答案 0 :(得分:18)

我知道这是一个超级老问题,但是当浏览器和服务器之间存在代理(或多个代理)时,会使用HTTP_X_FORWARDED_HOST。如果你有这个设置:

End User -> Proxy A -> Proxy B -> Server

然后,当最终用户发出请求(带有主机头)时,代理A将接收它。它将设置自己的主机,然后在向代理B发出请求之前将最终用户主机放入X-Forwarded-Host。代理B将执行相同操作,将代理A的主机附加到X-Forwarded-Host(因此标题将显示像EndUserHost,ProxyAHost)并设置自己的主机。然后,您的服务器将收到一个请求,其中包含代理B的主机头,以及一个X-Forwarded-Host标头,其值类似于"EndUserHost,ProxyAHost"

一些信息:http://hustoknow.blogspot.com/2011/02/x-forwarded-for-vs-httpxforwardedhost.html

有一点需要注意:最终用户可以欺骗X-Forwarded-Host,因此您必须小心使用它做出的假设。