2017-03-06 5 views
21

そこは、HTTPキープアライブメカニズムで知られている競合状態が存在する:私は理解したようブラウザはHTTPキープアライブ競合状態をどのように処理しますか?

、私は私のHTTPサーバより短いタイムアウトを持っているいずれかの私のHTTPクライアントが必要ですTCP-FINまたはTCP-RSTを取得するときに再試行してください。

私の質問は、今日のWebブラウザ、つまりuse the HTTP keepalive featureがこの競合状態をどのように処理するのかということです。彼らは再試行しますか?

私は参考に喜んで、Google検索は何も思い付きません。

答えて

16

RFCによれば、サーバーは408エラーコードで応答し、クライアント側に接続が既に閉じられていることを通知する必要があります。 RFCには次のように記載されています。

クライアントには送信中の未処理の要求がある場合、クライアントは新しい接続でその要求を繰り返すことがあります。

これは、408応答の処理方法を決定するのはクライアント(別名、各ブラウザ)までです。 2つの選択肢があります:

  • ハンドルも優雅:再試行自動的に新しい接続の残りの要求、ユーザーが
  • を起こった根本的な失敗を全く知らないままになるようにフェイルファスト:ユーザーに失敗したことを示します適切な408のエラーメッセージで

例えば、過去のChromeは、これを「バグ」のような行動とみなして最初のものに切り替えるまで、2番目のアプローチに従っていたようです。 Chromiumバグhereに関連したバグスレッドと関連コードの変更はhereです。

注:リンクされたスレッドの最終メールで読めるように、Chromeはこの接続でいくつかのリクエストが成功した場合にのみ、これらの再試行を行います。その結果、1回のリクエストでそれを再現しようとすると408回の返信が返された場合、その場合にChromeが再試行しないことに気付くでしょう。

+0

時間をかけてこれを調査していただき、ありがとうございます。 –

関連する問題