Rails 3中的HEAD HTTP请求
Rails 3当前将HEAD请求路由到匹配的GET路由。 有头吗? 请求的方法,但返回false,请求就像一个get请求。 我可以检测请求是否是HEAD请求?
推理:我得到一个HEAD请求应该返回与get相同的标题,因此Rails想要执行完整的GET然后剃掉正文。 但是,我可以符合此请求,而不会发出GET会发出的相同数据库调用等。 这有意义吗?
我有这个问题。 事实certificate,启用缓存会导致这种情况。 在您的环境和#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上所期望的那样工作; 201的没有HEAD请求的响应主体和200的w /的GET。