我在一个流量非常低的网站上每天都会看到几个异常。异常看起来像这样:
Missing host to link to! Please provide the :host parameter,
set default_url_options[:host], or set :only_path to true
actionpack (3.1.1) lib/action_dispatch/http/url.rb:25:in `url_for'
-------------------------------
Request:
-------------------------------
* URL : http:///
为清楚起见,此处进行了删减,但没有其他重要的识别细节。例如,没有用户代理或引用者。似乎正在发生的是,这些是缺少 Host
header 的 HTTP/1.0 请求。现在对我来说奇怪的是这个异常甚至发生了,因为有问题的域名是由 nginx 使用 301s 规范化的,因此如果不使用正确的域就不可能访问 Rails 应用程序。
我不明白为什么 Rails 无论如何都会依赖于那个 header ,因为看起来 Nginx 应该通过更可靠的规范域,但是我不熟悉 Rack 内部结构。如果有人对如何最好地解决这个问题有任何指导,我将不胜感激。
- Rails/Rack 依赖此 header 是否有充分的理由?
- 这里是否存在潜在的 Rack 错误?
- 我应该用中间件注入(inject) header 吗?
- 我应该在 Rails 中破解一些东西来抑制它吗?
- 我应该配置 Nginx 以拒绝 HTTP/1.0 请求吗?
最佳答案
如果客户端不使用正确的域,可能无法访问应用程序,但这不是这里的问题。问题是服务器知道正确的域。没有 Host
header 和完全限定的 URL,服务器如何知道客户端请求的主机?
关于http - 如何处理 Rails 3.1 中丢失的主机 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8114461/