Firefox 定期不會通過帶有 SSL 的 HTTP2 從 nginx 伺服器下載 CSS 文件
當我使用 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;
我已經這樣跑了幾個星期了,沒有任何問題。所以..問題“解決了”