在Rack中间件过滤器中,我知道call方法采用env哈希变量。我正在查看某人的Rack中间件代码,我看到了
env['HTTP_X_FORWARDED_HOST']
有人可以解释HTTP_X_FORWARDED_HOST的含义吗?它是请求源自的主机吗?
答案 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,因此您必须小心使用它做出的假设。