HTTPパイプライン![]()
HTTPパイプライン (HTTP pipelining) は、一つのTCPコネクション上で、複数のHTTPリクエストを応答を待つことなく送信する技術である[1]。 リクエストをパイプライン化することにより、ウェブページの読み込みが大幅に高速化される[2]。これは、遠隔地にあるサーバとの通信や衛星インターネットアクセスなどレイテンシが大きい場合に顕著である。HTTP/1.1の仕様上の制限から、クライアントからのリクエストの順序とサーバからのレスポンスの順序は同期している必要がある[1]ため、 HOLブロッキングが発生しうる。リクエスト順序とレスポンス順序の非同期は、HTTP/2 (SPDY) において規定されている[3]。 POSTのような冪等ではないメソッドをパイプライン化してはならない[4]。GETおよびHEADのみが連続するリクエストは常にパイプライン化が可能である。PUTやDELETEなど他のメソッドを含めて連続する場合のパイプライン化の可否は、リクエストの順序が他に影響を及ぼすか否かによる[1]。 HTTPパイプラインでは、クライアントおよびサーバ双方での対応が必要である。 対応状況HTTPパイプラインは、HTTP/1.1においてのみサポートされており、HTTP/1.0ではサポートされていない。 サーバサーバ側でのパイプライン化対応は、リクエスト間においてネットワークバッファを破棄しないよう注意していれば比較的容易である。そのため、大多数のサーバでは特に問題なくパイプライン化に対応している。 ウェブブラウザ近年のウェブブラウザでは、Prestoを搭載していた時代のOperaのみがパイプライン化を完全に実装し既定で有効としていた。他のブラウザは、パイプライン化を実装しているものの問題があることから既定では無効化していた、あるいは実装していない[3]。
プロキシSquidのいくつかのバージョンではパイプライン化に対応しているが、「帯域管理とログ記録」を理由として既定で無効化されている[12]。 関連項目脚注
外部リンク
|