目前,我们正面临着处理头部和获取请求的问题。让我解释一下详细的场景
我们已经在我们的应用程序中集成了入站和出站SMS设施。
但从过去的2-3个月,我们得到2-3次从短信服务提供商的请求,这是影响我们的系统。
经过与SMS服务提供商的长时间讨论后,他们说:“Head和Get请求都是从您的终端处理的。”
我还提到了此链接。您可以在此链接找到相应的日志。
有谁能建议如何解决这个问题呢?
通过对编辑的研究发现,由于服务器正在对其进行处理,所以需要同时获取头部和请求中的所有参数。
发布于 2016-01-04 20:42:09
我认为问题可能是行动调度:头中间件。其中一部分是以下代码:
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
否则,您应该能够访问控制器中的变量,如下所示:
if request.env["rack.methodoverride.original_method"]=='HEAD'
#do head processing here
head :ok, :additional_header => 'value'
else
#do get processing here
end
如果您担心性能问题,我建议编写自己的中间件来处理这些请求。Railscast有一些关于好的的这教程。
还请注意,其他中间件,如Rack::Cache也可能会干扰此过程。因此,您应该将中间件插入到顶部:
config.middleware.insert_before 0, "YourMiddleware"
发布于 2016-01-08 14:17:34
我只需要实现我自己的:head响应作为https://stackoverflow.com/a/10453525/5446866中的示例
if request.head?
head :ok # or whatever
else
# your other complex stuff here
end
您还可以添加特定于head请求的路由。例如
match '/validate_messages/sms' => 'validate_messages#noop', via: :head
然后在你的控制器里
def noop
head :ok
end
基本上,您必须对HEAD
请求实现您想要做的事情,否则它将继续使用您的GET
处理程序。
希望这有帮助
https://stackoverflow.com/questions/34395890
复制相似问题