2017-02-09 127 views
2

据我所知,有时客户端会显示一个HTTP请求作为返回0状态代码时,请求无法连接,超时等,但我从来没有见过一个服务器记录0,因为它是什么发回给客户。Rails服务器返回HTTP状态0

我正在运行Rails 4.2,ruby 2.2.x API。我前几天正在分析我们的日志,并注意到我们的Rails API使用HTTP状态码0来响应不平凡的请求数量。我一直无法弄清楚为什么。

在某些情况下,它似乎请求永远不会对rails应用程序产生影响。我只能看到我认为由机架记录的日志消息,其中包含返回的请求路径和状态。在其他情况下,我可以看到我们从应用程序控制器登录的早期日志消息之一。

有没有人看过这样的行为?我不确定如何在不开始修改rails提供的标准机架中间件的情况下进一步调试。我自己无法再现这种情况;我只能在我们的日志中偶尔看到这一点。

多一点关于我们的堆栈:

  • 的Rails 4.2.5
  • 红宝石2.2.3
  • 彪马3.4.0
  • 我们nginx的反向代理,但我不认为是至少由于机架接收到请求而生效。

我意识到它可能不可能回答这里发生的事情,所以我希望提供有关如何最好地解决这个问题的建议。

回答

1

发现这是我们的Rails日志记录设置的问题。通过将这些日志与我们的nginx访问日志相关联,我可以看到302实际上正在返回给客户端。当CSRF保护失败时,通常会发生这种情况。

它看起来像这样由lograge(GEM)引起的错误:https://github.com/roidrage/lograge/issues/67

0

当基于Access-Control-Allow-Origin不允许的不同子域发送请求时,我看到了这种行为。所以也许这是一种可能性