web-dev-qa-db-ja.com

FirefoxはSSLを使用したHTTP2経由でnginxサーバーからCSSファイルを定期的にダウンロードしません

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を使用して、問題を自分で簡単に再現できるようにしました。

3
noir04

答えがなく、わずかな脱線があったため(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;

私はこのように数週間、問題なく走っています。だから..問題は「解決された」

1
noir04