5

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

 env['HTTP_X_FORWARDED_HOST']

有人可以解释 HTTP_X_FORWARDED_HOST 是什么意思吗?是发起请求的主机吗?

4

1 回答 1

21

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

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

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

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

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

于 2013-12-03T20:22:35.817 回答