(HTTP/2の場合)TCPコネクション上の仮想的な通信路のこと。
ネスペR5 p.17
HTTP/2では、一つのTCPコネクション上で、ストリームと呼ばれる仮想的な通信路を作ります。
この通信路によって、複数のHTTPリクエストとHTTPレスポンスを同時に処理することができるようになりました。
ストリームにはIDを付与し、複数のHTTPリクエストやHTTPレスポンスが同時にやり取りされても、クライアントとサーバーでどのストリームなのかを識別できるようにします。
HTTP/2では、クライアントからのリクエストに奇数のIDを、サーバーからのリクエストに偶数のIDを使うように決められています。
IDの衝突を避けるためです。
ストリーム(Stream)は川、流れを指す。この原語の意味から派生し各種分野で用いられる。
ストリーム(英: stream)とは、データを、比較的小さい単位が連続したものと捉え、上流から下流へ「流れるもの」とみなし、そのデータの入出力・送受信(途中段階を含む)を最小限の滞留とさせ低遅延処理となるように扱う形態を指す。
またその操作のための抽象データ型を指す。
HTTP/2の特徴
HTTP/2は従来のHTTPを踏襲しつつも、新たな転送手段を提供することで既存の問題点を解決し、より少ない通信量でより迅速にやり取りを行えるようになっている。HTTP/2の最大の特徴は、「ストリーム」という概念を導入したことだ。
これによって1つのコネクション内で同時に並行して複数のリクエスト/レスポンスを処理できるようになった。
図4 HTTP/2では「ストリーム」という概念を導入し、1つのコネクション内で複数のリクエスト/レスポンスを並行処理できるようになった
ストリームはクライアント−サーバー間を結ぶ仮想的なコネクションのようなもので、1つのHTTP/2コネクション内で同時に複数のストリームを確立できる。
HTTP/2ではこのストリーム内でリクエストやレスポンスをやり取りする仕組みになっている。ストリームはそれぞれ独立しており、あるストリームでやり取りされている内容がほかのストリームに影響を及ぼすことはない。
そのため複数のリクエスト/レスポンスを同時並行的に処理でき、レスポンスを返すための処理に時間がかかるようなケースでも、その間に別のリクエスト/レスポンスを処理することが可能となった。
たとえば図4の例では3つのストリームが確立されており、それぞれのストリーム内でのリクエストやレスポンスはほかのストリームの状態によらず送受信が可能になっている。ストリームごとに「優先度」を設定することも可能で、たとえばコンテンツの表示に必須のデータを優先して送信する、といった処理も可能だ。
また、ストリーム毎にフロー制御を行う機能も用意されている。
フレームとストリーム(多重化)
HTTP/2では一つのTCPコネクション上で、 複数のHTTPリクエストとHTTPレスポンスをやりとりします。
それらのやりとりを管理するための概念がストリームです。
わかりやすく説明すると、 一対のHTTPリクエストとHTTPレスポンスが一つのストリームに所属します。
一度使ったストリームは再利用されることはなく、 HTTPレスポンスが返ってくるとストリームは使われなくなります。