http - 如何处理 Rails 3.1 中丢失的主机 header

标签 http ruby-on-rails-3.1 rack

我在一个流量非常低的网站上每天都会看到几个异常。异常看起来像这样:

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/

相关文章:

ruby-on-rails - Rails 新手——Webrat 方法在集成测试中不起作用

deployment - 如何将 Sinatra 应用程序作为 gem 发送并部署它?

c - 什么是 HTTP Parser,用在什么地方,有什么作用

ruby-on-rails - 那些具有 "iframe=true&width=80%&height=80%"查询参数的请求怎么了?

ruby-on-rails - 无法弄清楚 Rails_Admin 中的关联

ruby-on-rails - rails s 在设计配置发送邮件时出错

ruby-on-rails - 使用 Ruby on Rails link_to 链接到 Controller 操作

ruby - 如何使用 Rack 为特定文件设置内容类型?

javascript - 303 响应代码不起作用(Stripe Connect 与 Angular.js)

windows - 查询 http header 时出现错误 ERROR_WINHTTP_HEADER_NOT_FOUND