HTTPパイプライン

パイプラインと非パイプラインの比較
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]

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

プロキシ

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

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

Polipo(英語版)はパイプライン化に対応している[13]

関連項目

脚注

  1. ^ a b c “Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing”. ietf.org. 2014年7月24日閲覧。
  2. ^ “Network Performance Effects of HTTP/1.1, CSS1, and PNG”. World Wide Web Consortium (1997年6月24日). 2015年2月20日閲覧。
  3. ^ a b Willis, Nathan (2009年11月18日). “Reducing HTTP latency with SPDY”. LWN.net. 2015年2月20日閲覧。
  4. ^ “Connections”. w3.org. 2015年2月20日閲覧。
  5. ^ “Wayback link of 'Windows Internet Explorer 8 Expert Zone Chat (August 14, 2008)'”. マイクロソフト (2008年8月14日). 2012年5月10日閲覧。
  6. ^ Pipelining Network MozillaZine
  7. ^ Cheah Chu Yeow. Firefox secrets. p. 180. ISBN 0-9752402-4-2 
  8. ^ “https://bugzilla.mozilla.org/show_bug.cgi?id=264354”. Mozilla. 2011年9月16日閲覧。
  9. ^ “Source code – nsHttpConnection.cpp”. Firefox source code. Mozilla (2010年5月7日). 2015年2月20日閲覧。
  10. ^ HTTP Pipelining - The Chromium Projects
  11. ^ Mark Nottingham (2007年6月20日). “The State of Proxy Caching”. 2015年2月20日閲覧。
  12. ^ “squid : pipeline_prefetch configuration directive”. Squid (2009年11月9日). 2015年2月20日閲覧。
  13. ^ “Polipo — a caching web proxy”. Juliusz Chroboczek (2009年9月18日). 2015年2月20日閲覧。

外部リンク

  • RFC 7230: 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
スタブアイコン

この項目は、インターネットウェブに関連した書きかけの項目です。この項目を加筆・訂正などしてくださる協力者を求めています(PJ:コンピュータ/P:コンピュータ)。

  • 表示
  • 編集
機能
ウェブ標準
関連項目
デスクトップ
KHTML, WebKit, Blink
Chromium系
フリーソフトウェア
(開発継続中)
フリーウェア
(開発継続中)
(開発終了済)
すべて▲
Gecko & Servo
(Firefox系)
(開発継続中)
(開発終了済)
すべて▲
Trident & EdgeHTML
Edge, IE系
(開発終了済)すべて▲
Presto
  • Opera (Version 12.18以前)▲
Goanna
テキスト
その他
モバイル
WebKit/Blink
Gecko
Trident/EdgeHTML
Presto
その他
  • Blazer(英語版)
  • Deepfish▲
  • Galio▲
  • ibisBrowser
  • Iris Browser
  • Konqueror Embedded
  • NetFront
  • Obigo Browser
  • Opera Mini
  • Skweezer
  • Skyfire(英語版)
  • Teashark
  • ThunderHawk(英語版)
  • UC Browser
  • uZard Web
  • Vision
  • WinWAP
  • Smooz
テレビ · ゲーム機
WebKit/Blink
Gecko
  • Kylo(英語版)
Presto
その他
  • ▲印のブラウザは開発終了
  • カテゴリ カテゴリ
  • コモンズ コモンズ