ruby-on-rails - 中间件中@env 哈希中的变量 HTTP_X_FORWARDED_HOST 是什么?

标签 ruby-on-rails rack rack-middleware

在 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/

相关文章:

ruby-on-rails - 为什么在一个日期上加上和减去 2 个月不会返回相同的日期?

ruby-on-rails - Rails 中的自定义类

sinatra - 如何使用 Rack/保护在 Sinatra 中指定源白名单选项

ruby - 如何在 Sinatra 中只解析一次 JSON 请求体并将其暴露给所有路由?

ruby-on-rails - ActiveSupport::Cache::Strategy::LocalCache 有什么用?

ruby-on-rails - 使用 Rspec 测试中间件

ruby-on-rails - 如何在引擎中使用来自引擎的中间件

mysql - 在 ActiveRecord 中的一个查询中获取多条记录

ruby-on-rails - Rails created_at 查找条件

ruby-on-rails - form_for指定 ":html => { :multipart => true}"是否正确?