Web技術の基礎
HTTP/2とHTTP/3の説明として正しいものはどれか。
- AHTTP/2は1つのTCP接続で複数のリクエストを並行して扱えるが、パケットの損失でほかのストリームも待たされることがあり、HTTP/3はUDP上のQUICでこれを減らした
- BHTTP/2は、HTTP/1.1と同じテキストの形式のメッセージを使い、リクエストごとに新しいTCP接続を並行して作ることで、複数の資源を同時に受け取れるようにした版である
- CHTTP/3は、HTTP/2と同じくTCPの上で動き、ヘッダを圧縮する方式だけを改めた版で、パケットの損失の影響はHTTP/2と変わらず、UDPは使わない
答えと解説を見る
正解:A. HTTP/2は1つのTCP接続で複数のリクエストを並行して扱えるが、パケットの損失でほかのストリームも待たされることがあり、HTTP/3はUDP上のQUICでこれを減らした
HTTP/1.1でも持続的接続(keep-alive)で1つのTCP接続を使い回せますが、1つの接続では応答を1つずつ順に受け取るため、ブラウザは複数の接続を並行して張っていました。HTTP/2はメッセージをバイナリのフレームに分け、1つのTCP接続の上に複数のストリームを多重化して並行に送ります。ただし、TCPはバイト列を順番どおりに渡すので、パケットが1つ失われると、再送が届くまで関係のないストリームのデータも待たされます(ヘッドオブラインブロッキング)。HTTP/3はUDPの上で動くQUICを使い、ストリームごとに順序を管理するので、損失の影響がそのストリームだけにとどまります。
- A. 正しい。HTTP/2は多重化で並行して送れますが、TCPでの損失の影響がすべてのストリームに及びます。HTTP/3はQUICでこれを減らしました。
- B. HTTP/2はバイナリのフレームを使い、1つの接続に複数のリクエストを多重化します。接続を作り直すと、むしろ遅くなります。
- C. HTTP/3はTCPではなく、UDPの上で動くQUICを使います。