首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在rails 3中处理头部时发出请求并获取请求

在rails 3中处理头部时发出请求并获取请求
EN

Stack Overflow用户
提问于 2015-12-21 12:38:22
回答 2查看 380关注 0票数 5

目前,我们正面临着处理头部和获取请求的问题。让我解释一下详细的场景

我们已经在我们的应用程序中集成了入站和出站SMS设施。

但从过去的2-3个月,我们得到2-3次从短信服务提供商的请求,这是影响我们的系统。

经过与SMS服务提供商的长时间讨论后,他们说:“Head和Get请求都是从您的终端处理的。”

我还提到了此链接。您可以在此链接找到相应的日志。

有谁能建议如何解决这个问题呢?

通过对编辑的研究发现,由于服务器正在对其进行处理,所以需要同时获取头部和请求中的所有参数。

EN

回答 2

Stack Overflow用户

发布于 2016-01-04 20:42:09

我认为问题可能是行动调度:头中间件。其中一部分是以下代码:

代码语言:javascript
运行
复制
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请求之间的差异,可以通过添加

代码语言:javascript
运行
复制
config.middleware.delete "ActionDispatch::Head"

给你的application.rb

否则,您应该能够访问控制器中的变量,如下所示:

代码语言:javascript
运行
复制
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也可能会干扰此过程。因此,您应该将中间件插入到顶部:

代码语言:javascript
运行
复制
config.middleware.insert_before 0, "YourMiddleware"
票数 2
EN

Stack Overflow用户

发布于 2016-01-08 14:17:34

我只需要实现我自己的:head响应作为https://stackoverflow.com/a/10453525/5446866中的示例

代码语言:javascript
运行
复制
if request.head?
 head :ok # or whatever
else
 # your other complex stuff here
end

您还可以添加特定于head请求的路由。例如

代码语言:javascript
运行
复制
match '/validate_messages/sms' => 'validate_messages#noop', via: :head

然后在你的控制器里

代码语言:javascript
运行
复制
def noop
  head :ok
end

基本上,您必须对HEAD请求实现您想要做的事情,否则它将继续使用您的GET处理程序。

希望这有帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34395890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档