gpt4 book ai didi

ruby-on-rails - 在 rails 3 中处理 HEAD 和 GET 请求时出现问题

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:01 24 4
gpt4 key购买 nike

目前我们在处理 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com