我觉得问题可能是ActionDispatch::Head中间件。那 一部分是下面的代码:
def call(env)
if env["REQUEST_METHOD"] == "HEAD"
env["REQUEST_METHOD"] = "GET"
env["rack.methodoverride.original_method"] = "HEAD"
status, headers, _ = @app.call(env)
[status, headers, []]
else
@app.call(env)
end
end
所以基本上中间件改变请求方法路由器甚至会请求之前。 如果你希望你的路由器来处理头之间的区别和GET请求,您可以通过添加
config.middleware.delete "ActionDispatch::Head"
您application.rb中
否则删除中间件,你应该能够访问该变量的像这样的控制器:
if request.env["rack.methodoverride.original_method"]=='HEAD'
#do head processing here
head :ok, :additional_header => 'value'
else
#do get processing here
end
如果您担心性能,我建议编写自己的中间件来处理这些请求。 Railscasts在this上有几个good教程。
另请注意,其他中间件,如Rack :: Cache也可能会干扰此过程。所以,你应该将您的中间件之上:
config.middleware.insert_before 0, "YourMiddleware"
尝试类似这样: match'user/show'=>'users#show',:via => [:get,:head] –
@ i-am-simple-user问题是什么?有更多的GET请求比平常?这会导致什么问题? –
@ThongKuah基本上我使用的是heroku,它将HEAD请求视为GET。虽然我得到了HEAD,但它正在使用GET,并且它也向我显示GET不只是HEOG –