2016-03-29 12 views
0

HTTPはTCPを使用したアプリケーション層プロトコルなので、ここでHTTP経由で大きなファイルをダウンロードするように要求すると、何が起こるのですか。HTTP応答のTCPハンドシェイク?

HTTP要求がTCPパケットに断片化され、TCPが3ウェイハンドシェイクと私の要求パケットをサーバーに送信します。私の質問は、古いTCP接続を通過するサーバー(ファイル)からの応答か、サーバーは私のファイルを送信するためにブラウザと別の3方向ハンドシェイクと別のトランスポート層接続を開始しますか?

+0

'ftp'のようなプロトコルとは異なり、' http'と 'https'プロトコルはファイル転送のために追加のソケット/接続をオープンしません。実際には、ファイル転送はこれらのプロトコルでは何も特別なものではなく、httpサーバから返される他の応答と同様に動作します。ヘッダ、空白行、ペイロードです。 – arkascha

+0

@arkascha簡単なHTTPレスポンスはリクエストソケットに沿って起こるでしょうか?それは応答のための追加の握手を意味しない?? – shidsun

+0

これはロケット科学ではありません.wiresharkのようなネットワークスニファを起動し、httpサーバに1つのファイルのダウンロード要求を行います。返信をキャプチャすると、先頭にヘッダー(ファイルの種類、転送のエンコーディング、サイズなど)が表示され、この場合はペイロードが表示されます。実際には、ネットワークトポロジは通常、単にNAT側のソリューションがクライアント側で使用されるため、第2ソケットを開く手段がありません。 – arkascha

答えて

2

ファイル転送は既存の接続を使用します。ただし、ファイルが転送されるまで接続をビジーにします。

したがって、ファイルのダウンロード中にユーザーがリンクをクリックすると、接続がビジー状態になります。したがって、クリックされたURLを要求できるようにするには、Webブラウザが追加の接続を開く必要があります。

HTTP/1.1では、既存の接続がアイドル状態で使用されます(一定時間が経過するとアイドル状態の接続が閉じられます)。

+0

HTTP/1.1ではデフォルトで同じ接続を再使用しません。 – jch

+0

@jch:ダウンロードには数分かかることがあります。新しい接続を開く代わりに(ユーザーがリンクをクリックしたとき)、ダウンロードが完了するまでWebブラウザが待機する必要があることを意味しますか? **** ***の代わりに*** ***を書いた理由です。 – jgauffin

+0

合意しましたが、あなたの意見は誤解を招くと思います。おそらく、接続の再利用が行われていることを明確にすることができますか? – jch

関連する問題