6

Content-Lengthヘッダーを持たない HTTP 応答の終わりを示すものは何ですか?

場合によっては、そのサーバーがTCP接続を閉じることを読んだことがあります。しかし、すべての応答を受信した後に TCP 接続が存在するケースを目撃しました。

そのため、次の場合に大きな問題が発生します。

  • Content-Lengthヘッダーがない
  • すべての HTTP 応答を受信した後に TCP 接続が存在する
  • ブラウザは、より多くの HTTP リクエストを送信するために同じ TCP 接続を使用したいと考えています。

その場合、ブラウザーは同じ TCP 接続を使用できることをどのように認識しますか? サーバーは、1 番目の HTTP 要求に関連するコンテンツをさらに送信する可能性があり、2 番目の HTTP 応答と混同される可能性があります。

4

1 に答える 1

8

クライアントとサーバーの両方が HTTP 1.1 をサポートしていて、サーバーが事前に応答本文のサイズを認識していない (したがってContent-Length応答ヘッダーを送信できない) 場合、サーバーはチャンク エンコーディングを使用する必要があります。サーバーが応答を送信した直後に TCP 接続を閉じていない場合でも、応答本文は削除されます。

HTTP 1.1 を使用できない場合 (クライアントまたはサーバーが古すぎるため)、チャンク エンコーディングは使用できません。このような場合、Content-Lengthヘッダーなしで応答を送信すると、サーバーは TCP 接続を永続的に保つことができなくなります。

于 2013-07-07T19:38:02.367 に答える