繁体   English   中英

Rails 3 中的 HEAD HTTP 请求

[英]HEAD HTTP requests in Rails 3

Rails 3 当前将 HEAD 请求路由到匹配的 GET 路由。 有头吗? 请求上的方法,但 in 返回 false 并且请求的行为类似于 get 请求。 我可以检测请求是否是 HEAD 请求吗?

推理:我认为 HEAD 请求应该返回与 get 完全相同的标头,因此 Rails 想要执行完整的 GET,然后剃掉正文。 但是,我可以遵守此请求,而无需发出与 GET 相同的数据库调用等。 这有意义吗?

我有这个确切的问题。 事实证明,启用缓存会导致这种情况。 在您的环境和#head 中关闭缓存? 将按预期工作。

问题是 Rack::Cache 将 HEAD 请求转换为 GET 请求,以便它们可以被缓存。 这可以说是正确的行为,但它干扰了我的应用程序。

你可以使用request.head吗? 确定它是否是 HEAD 请求的方法:

http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-head-3F

一旦确定是这样,您还可以使用控制器的 head() 方法而不是典型的渲染:

http://guides.rubyonrails.org/layouts_and_rendering.html#using-head-to-build-header-only-responses

所以我只是检查request.head? 在打扰数据库活动之前。 然后使用

head :ok, :custom_header => 'value'
def index
  if request.head?
    head :created
  else
    Rails.logger.info "Derp #{request.method}"
  end
end

唔。 上面的控制器方法就像我在 Ruby v1.9.3-p194 和 Rails v3.2.3 上期望的那样工作; HEAD 请求的 201 没有响应主体,GET 请求的 200 没有响应主体。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM