Firefoxを使用して多数のCSSファイルがあるサイトの1つにアクセスすると、定期的にすべてのCSSファイルがダウンロードされるわけではありません。
Firefox(F12)の開発者コントロールパネルを見ると、問題が発生すると、ファイルのステータスが0であることがわかります。これは、リクエストがサーバーに送信されなかったようですが、サーバーを見るとリクエストはそこにあります。
私はできる限り問題を単純化しようとしました、そして私はそれを100のCSSファイルを取得するhtmlファイルと問題が発生したときに自動的に検出するいくつかのjavascriptに減らすように管理しました
これは、人々が自分のインストールでテストしやすくし、私がただクレイジーではないことを証明しようとする試みです。
テストパラメータ:
GCP上の新しいDebian9(centOSでもテスト済み)
nginx 1.10.3(ただし、最新の安定版およびメインラインでも発生します)
HTTPS/SSLが有効(自己署名でテスト済み、暗号化して商用SSLを使用)
HTTP2が有効
Firefox 66(Firefox 65でもテスト済み)
これで、テストHTMLにアクセスすると、エラーが発生するまでjavascriptがページを再読み込みし、アラートを表示します。これには数秒から5分かかる場合があり、通常は最初の1分以内に発生します
Firefoxは最初のいくつかのCSSファイルをダウンロードしてから、残りをスキップするか、20-30-40ファイルをスキップしてから再試行します。スキップされたファイルのステータスは0になります。nginxアクセスログには、ステータス200または304のいずれかで応答したことが示されます。 、しかしFirefoxはその情報を表示しません
Html/cssテストパッケージはここからダウンロードできます: htmlテストパッケージ
ここで誰が/何が原因なのか100%わかりません
それは簡単に私かもしれませんが、その場合、誰も私の結果を再現できないはずであり、何人かの人々はすでに
Firefox、nginx、またはその2つの組み合わせである可能性があります。
過去2日間、壁に頭をぶつけていたので、どんな助けでも大歓迎です。
編集/説明:
私は、ユーザーに本番サーバーに100個のCSSファイルをダウンロードするように「強制」してはいけないことを理解しています:)
100は、結果を非常に簡単かつ迅速に再現できる数値でした。そこで、テストパッケージに100を使用して、問題を自分で簡単に再現できるようにしました。
答えがなく、わずかな脱線があったため(Michael Hampton、私は願っています:))、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;
私はこのように数週間、問題なく走っています。だから..問題は「解決された」