HTTPパイプライン

HTTPパイプライン (HTTP pipelining) は、一つのTCPコネクション上で、複数のHTTPリクエストを応答を待つことなく送信する技術である。

リクエストをパイプライン化することにより、ウェブページの読み込みが大幅に高速化される。これは、遠隔地にあるサーバとの通信や衛星インターネットアクセスなどレイテンシが大きい場合に顕著である。HTTP/1.1の仕様上の制限から、クライアントからのリクエストの順序とサーバからのレスポンスの順序は同期している必要があるため、 が発生しうる。リクエスト順序とレスポンス順序の非同期は、HTTP/2 (SPDY) において規定されている。

POSTのような冪等ではないメソッドをパイプライン化してはならない。GETおよびHEADのみが連続するリクエストは常にパイプライン化が可能である。PUTやDELETEなど他のメソッドを含めて連続する場合のパイプライン化の可否は、リクエストの順序が他に影響を及ぼすか否かによる。

HTTPパイプラインでは、クライアントおよびサーバ双方での対応が必要である。

対応状況 
HTTPパイプラインは、HTTP/1.1においてのみサポートされており、HTTP/1.0ではサポートされていない。

サーバ 
サーバ側でのパイプライン化対応は、リクエスト間においてネットワークバッファを破棄しないよう注意していれば比較的容易である。そのため、大多数のサーバでは特に問題なくパイプライン化に対応している。

ウェブブラウザ 
近年のウェブブラウザでは、Prestoを搭載していた時代のOperaのみがパイプライン化を完全に実装し既定で有効としていた。他のブラウザは、パイプライン化を実装しているものの問題があることから既定では無効化していた、あるいは実装していない。

Internet Explorer 8はパイプライン化に対応していない（パイプライン化に関するバグを有しているプロキシの存在およびHOLブロッキングの回避のため）
Mozilla（Mozilla Firefox、SeaMonkey、Caminoなど）は、パイプライン化に対応しているが既定では無効化されている（パイプライン化で誤った振る舞いをするサーバが存在するため）。パイプライン化を有効化した際には、古いIISが相手の場合にはパイプライン化を自動的に無効化するなど、いくつかのヒューリスティクスが用いられる。
Google Chromeはバージョン18以降でパイプライン化に対応しているが、非標準のオプション機能扱いである。HTTPSのパイプライン化には対応していない。バージョン26より、オプション機能として有効化するためのフラグが除去された。

プロキシ 
プロキシの多くはパイプライン化に対応していない。

Squidのいくつかのバージョンではパイプライン化に対応しているが、「帯域管理とログ記録」を理由として既定で無効化されている。

はパイプライン化に対応している。

関連項目 
HTTPの持続的接続
WebSocket
SPDY

脚注

外部リンク 
 : Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
HTTP/1.1 Pipelining FAQ at mozilla.org
"Network Performance Effects of HTTP/1.1, CSS1, and PNG" at w3.org
"Optimizing Page Load Times" article
phttpget
serf C library

Hypertext Transfer Protocol