2017-02-09 124 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不允許的不同子域發送請求時,我看到了這種行爲。所以也許這是一種可能性