[英]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.