Nginx

Firefox 定期不會通過帶有 SSL 的 HTTP2 從 nginx 伺服器下載 CSS 文件

  • April 12, 2019

當我使用 Firefox 訪問我的一個包含大量 CSS 文件的網站時,並非定期下載所有 CSS 文件

查看 Firefox (F12) 的開發人員控制面板,我看到,當問題發生時,文件的狀態 = 0,幾乎就像請求從未發送到伺服器一樣,但查看伺服器請求就在那裡。

我試圖盡可能地簡化問題,並且我已經設法將其簡化為一個包含 100 個 CSS 文件的 html 文件,以及一些會在問題發生時自動檢測的 javascript

這是為了讓人們更容易在他們自己的安裝上進行測試,並試圖證明我不只是瘋了

測試參數:

GCP 上的全新 debian 9(也在 centOS 上測試過)

nginx 1.10.3(但它也發生在最新的穩定版和主線上)

啟用 HTTPS/SSL(使用自簽名測試,讓我們加密和商業 SSL)

啟用 HTTP2

Firefox 66(也用 Firefox 65 測試過)

現在,當我訪問我的測試 HTML 時,javascript 將重新載入頁面,直到發生錯誤,然後顯示警報。這可能需要幾秒鐘到五分鐘,通常在第一分鐘內發生

Firefox 將下載前幾個 CSS 文件,然後似乎跳過其余文件,或者跳過 20-30-40 文件然後重試,跳過的文件將具有狀態 0 nginx 訪問日誌將顯示它以狀態 200 或 304 響應, 但 Firefox 永遠不會顯示該資訊

html/css測試包可以在這裡下載: html測試包

我不是 100% 確定誰/什麼是錯的

很容易就是我,但如果是這樣的話,應該沒有人能夠重現我的結果,而且有幾個人已經

它可以是 Firefox,也可以是 nginx,或者兩者的組合

任何幫助將不勝感激,在過去的兩天裡一直把我的頭撞在牆上

編輯/澄清:

我意識到我不應該/永遠“強迫”使用者必須在生產伺服器上下載 100 個 CSS 文件 :)

100 只是結果非常容易和快速重現的數字,所以我選擇了 100 作為測試包,讓你們更容易/更快地自己重現問題

由於沒有答案和輕微的脫軌(我希望邁克爾漢普頓沒有難過的感覺 :)),我最終向 Firefox 團隊送出了一個錯誤: https ://bugzilla.mozilla.org/show_bug.cgi?id=1538978

該錯誤原來是其他一些錯誤的重複,所有這些都可以在 bugzilla 上看到。

但簡而言之,當 nginx 達到其 http2_max_requests 限制時,它會發送一個“goaway”。

Firefox 不能很好地處理這個問題,因此會產生一些問題

Chrome處理的好一點,好像等一下再重試

誰在“錯誤”,我真的不知道,但顯著減少問題的一種方法是將 http2_max_requests 設置為一個非常高的數字,例如 500.000,預設值為 1000

http2_max_requests 500000;

我已經這樣跑了幾個星期了,沒有任何問題。所以..問題“解決了”

引用自:https://serverfault.com/questions/959516