3

を受け入れるエンドポイントがあり、text/event-stream基本的に と の 2 つの異なるタイプのイベントを送信statsしますresult。サーバーresultがイベントを送信し、接続を閉じるとき。

問題は、sse の設計上、ブラウザーが接続を再試行することです。それを防ぐために、リトライ値を 60000 などのより高い数値に設定し、結果が得られたらクライアントで接続を閉じます。

問題は、待ち時間が長い場合、Chrome が複数のリクエストをサーバーに送信することです (localhost では問題なく動作します)。Safari と Firefox は問題なく動作します。Chromeでは、ネットワークタブにリクエストが1つしかないため、リクエストがタイムアウトしたためにChromeがサーバーに接続しようとすることはないと思います。また、2番目のリクエストを送信するため、サーバーが最初のリクエストを閉じるのを待ちません。Chrome でこの問題が発生する原因は何ですか?

注: サーバーが送信したリクエストのエンドポイントとオリジンは異なります。通常の HTTP リクエストの場合、Chrome は権限を確認するために OPTIONS リクエストを追加で送信しますが、SSE の場合は OPTIONS プリフライト リクエストを送信しませんが、SSE は GET リクエストであるため、これが問題であるかどうかはわかりません。

4

1 に答える 1

0

この問題は、Google データセーバー拡張機能が原因で発生します。リクエストが Google のサーバーから送信されたものかどうかは確認しませんでしたが、ブラウザが同じリクエストを再度発行しただけで、その拡張機能を無効にすることで問題が解決しました。

于 2016-09-01T10:41:09.027 に答える