TL;DR

1997 年に RFC 2068 で発表された HTTP の標準バージョン。持続的接続(Keep-Alive)とパイプライン化を導入した。

なぜ必要か

HTTP/1.0 では、1 つの TCP 接続で 1 つのリクエストと 1 つのレスポンスしか処理しなかった。TCP は、データを送る前に 3 回のやり取り(ハンドシェイク)で接続を確立する。そのため、1 つのページにある画像、JavaScript、CSS などを取りに行くたびに接続を張ると、性能が落ちる。

仕組み

持続的接続

TCP 接続を再利用して、複数のリクエストとレスポンスを処理する。リソースごとに TCP 接続を確立する必要がなくなった。

パイプライン化

1 つの TCP 接続で、レスポンスを待たずに複数のリクエストを送る。

注意点

パイプライン化では、サーバはリクエストを受けた順にレスポンスを返す必要がある。そのため、1 つのレスポンスが遅れたり失われたりすると、それ以降のレスポンスも使えなくなる(HOL ブロッキング)。この問題は TCP 自体でも起こり、HTTP/3 は QUIC でこれを解決している。

一部のサーバやプロキシがパイプライン化をサポートしていないこともあり、今はあまり使われない。代わりに HTTP/2 のマルチプレキシングが使われる。

関連

出典