在 Rack 中间件过滤器中,我知道 call 方法需要一个 env 哈希变量。我正在查看某人的 Rack 中间件代码,我看到
env['HTTP_X_FORWARDED_HOST']
有人能解释一下 HTTP_X_FORWARDED_HOST 是什么意思吗?它是发出请求的主机吗?
最佳答案
我知道这是一个非常古老的问题,但是当浏览器和服务器之间存在代理(或多个代理)时,会使用 HTTP_X_FORWARDED_HOST。如果您有此设置:
End User -> Proxy A -> Proxy B -> Server
然后,当最终用户发出请求(带有 Host header )时,代理 A 将收到它。它将设置自己的主机,然后在向代理 B 发出请求之前将最终用户主机放入 X-Forwarded-Host。代理 B 也会这样做,将代理 A 的主机附加到 X-Forwarded-Host(因此 header 看起来像 EndUserHost,ProxyAHost) 并设置自己的主机。然后,您的服务器将收到一个请求,其中包含代理 B 的 Host header 和一个 X-Forwarded-Host header ,其值类似于
"EndUserHost,ProxyAHost"
。 .一些信息:http://hustoknow.blogspot.com/2011/02/x-forwarded-for-vs-httpxforwardedhost.html
需要注意的一件事:最终用户可以欺骗 X-Forwarded-Host,因此您必须小心使用它做出的假设。
关于ruby-on-rails - 中间件中@env 哈希中的变量 HTTP_X_FORWARDED_HOST 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17411391/