目前我们在处理 HEAD 和 GET 请求时遇到问题。让我解释一下详细的场景
我们在我们的应用程序中集成了入站和出站 SMS 功能。
但是在过去的 2-3 个月里,我们收到了来自 SMS 服务提供商的 2-3 次 GET 请求,这对我们的系统造成了影响。
在与 SMS 服务提供商长时间讨论后,他们说“Head 和 Get 请求在您端的处理方式相似”
我还提到了 this link .您可以在 this link 找到相应的日志
所以任何人都可以建议如何解决这个问题。
编辑 经过研究,我们发现我们正在获取 HEAD 和 GET 请求中的所有参数,因为该服务器正在处理它。
最佳答案
我认为问题可能是 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
所以本质上,中间件甚至在路由器收到请求之前就更改了请求方法。 如果您希望您的路由器处理 HEAD 和 GET 请求之间的差异,您可以通过添加删除中间件
config.middleware.delete "ActionDispatch::Head"
到你的application.rb
否则,您应该能够像这样在 Controller 中访问该变量:
if request.env["rack.methodoverride.original_method"]=='HEAD'
#do head processing here
head :ok, :additional_header => 'value'
else
#do get processing here
end
如果您担心性能,我建议您编写自己的中间件来处理这些请求。 Railscasts 有一些 good关于 this 的教程.
另请注意,其他中间件,如 Rack::Cache 也可能会干扰此过程。所以你应该在顶部插入你的中间件:
config.middleware.insert_before 0, "YourMiddleware"
关于ruby-on-rails - 在 rails 3 中处理 HEAD 和 GET 请求时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34395890/