Page namespace (page_namespace ) | 0 |
Page title without namespace (page_title ) | 'HTTP pipelining' |
Full page title (page_prefixedtitle ) | 'HTTP pipelining' |
Old page wikitext, before the edit (old_wikitext ) | '{{HTTP}}
'''[[HTTP]] pipelining''' is a technique in which multiple [[HTTP]] requests are written out to a single [[Internet socket|socket]] without waiting for the corresponding responses. Pipelining is only supported in HTTP/1.1, not in 1.0.
The pipelining of requests results in a dramatic improvement in page loading times, especially over high [[Lag|latency]] connections such as [[Satellite Internet|satellite Internet connection]]s.
Since it is usually possible to fit several HTTP requests in the same [[Transmission Control Protocol|TCP]] [[Packet (information technology)|packet]], HTTP pipelining allows fewer TCP packets to be sent over the [[Computer networking|network]], reducing [[network load]].
Non-idempotent methods like POST should not be pipelined. Sequences of GET and HEAD requests can be always pipelined. A sequence of other [[idempotence (computer science)|idempotent]] requests like GET, HEAD, PUT and DELETE can be pipelined or not depending on whether requests in the sequence depend on the effect of others.<ref>{{cite web|url=http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2|title=part of Hypertext Transfer Protocol -- HTTP/1.1 Sektion 9.1.2 Idempotent Methods|date=2004/09/01 |publisher=[[W3C]]|accessdate=2009-05-16}}</ref>
HTTP pipelining requires both the client and the server to support it. HTTP/1.1 conforming servers are required to support pipelining. This does not mean that servers are required to pipeline responses, but that they are required not to fail if a client chooses to pipeline requests.
== Implementation status ==
[[Image:HTTP pipelining.svg|thumb|right|300px|Schema of non-pipelined vs. pipelined connection.]]
=== Implementation in web servers ===
Implementing pipelining in web servers is a relatively simple matter of making sure that network buffers are not discarded between requests. For that reason, most modern web servers handle pipelining without any problem.
Exceptions include IIS 4 and reportedly 5.{{Fact|date=March 2009}}
=== Implementation in web browsers ===
[[Internet Explorer]] supports pipelining.<ref>{{cite web|url=http://www.microsoft.com/windowsxp/expertzone/chats/transcripts/08_0814_ez_ie8.mspx|title=Windows Internet Explorer 8 Expert Zone Chat (August 14, 2008)|date=August 14, 2008|publisher=[[Microsoft]]|accessdate=2009-03-27}}</ref>
[[Mozilla Firefox 3]] supports pipelining, but it's disabled by default. It uses some [[Heuristic (computer science)|heuristic]]s, especially to turn pipelining off for [[Internet Information Services|IIS]] [[web server|server]]s. Instructions for enabling pipelining can be found at [http://support.mozilla.com/tiki-view_forum_thread.php?locale=de&comments_parentId=36381&forumId=1 How do I enable Pipelining].
[[Camino]] does the same thing as Firefox.
[[Konqueror]] 2.0 supports pipelining, but it's disabled by default. Instructions for enabling it can be found at [http://gentoo-wiki.com/TIP_Konqueror Konqueror: Tips & Tricks].
[[Opera (web browser)|Opera]] has pipelining enabled by default. It uses [[Heuristic (computer science)|heuristic]]s to control the level of pipelining employed depending on the connected [[web server|server]].[http://operawiki.info/HttpProtocol]
[[Google Chrome]] is not believed to support pipelining, although it may be implemented in the near future.<ref>{{cite web|url=http://code.google.com/p/chromium/issues/detail?id=8991|title=Issue 8991: Optional HTTP pipelining mode|date=Mar 19, 2009|publisher=[[Google Chrome]]|accessdate=2009-05-16}}</ref>
=== Implementation in web proxies ===
Most HTTP proxies do not pipeline outgoing requests.<ref>{{cite web|url=http://www.mnot.net/blog/2007/06/20/proxy_caching|title=mnot’s Web log: The State of Proxy Caching|date=20 June 2007|publisher=[[mnot.net]]|accessdate=2009-05-16}}</ref>
Some versions of the Squid web proxy will pipeline up to two outgoing requests. This functionality has been disabled in the latest versions. Squid supports multiple requests from clients.
The [http://www.pps.jussieu.fr/~jch/software/polipo/ Polipo] proxy pipelines outgoing requests.
=== Other implementations ===
Some other applications currently exploiting pipelining are [http://www.daemonology.net/phttpget/ phttpget] from [[FreeBSD]] (a minimalist pipelined HTTP client), [[portsnap]] (a [[FreeBSD]] [[FreeBSD Ports|ports tree]] distribution system), [[lftp]] (a sophisticated file transfer program) and LWPng (libwww-perl New Generation) library.
== References ==
<references/>
== External links ==
* [http://www.w3.org/Protocols/rfc2616/rfc2616.html RFC 2616 Hypertext Transfer Protocol -- HTTP/1.1]
* [http://www.mozilla.org/projects/netlib/http/pipelining-faq.html HTTP/1.1 Pipelining FAQ at mozilla.org]
* [http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html "Network Performance Effects of HTTP/1.1, CSS1, and PNG" at w3.org]
* [http://www.die.net/musings/page_load_time/ "Optimizing Page Load Times" article]
* [http://www.daemonology.net/phttpget/ phttpget]
* [http://www.mozilla.org/support/firefox/tips#oth_pipelining "Pipelining optimizations in Firefox" ]
* [http://www.visolve.com/squid/sqguide.php Http accelerator]
[[Category:HTTP]]
[[de:HTTP-Pipelining]]
[[fr:Pipelining HTTP]]
[[pl:Pipelining]]
[[ru:HTTP pipelining]]
[[zh:HTTP管線化]]' |
New page wikitext, after the edit (new_wikitext ) | '{{HTTP}}
'''[[HTTP]] pipelining''' is a technique in which multiple [[HTTP]] requests are written out to a single [[Internet socket|socket]] without waiting for the corresponding responses. Pipelining is only supported in HTTP/1.1, not in 1.0.
The pipelining of requests results in a dramatic improvement in page loading times, especially over high [[Lag|latency]] connections such as [[Satellite Internet|satellite Internet connection]]s.
Since it is usually possible to fit several HTTP requests in the same [[Transmission Control Protocol|TCP]] [[Packet (information technology)|packet]], HTTP pipelining allows fewer TCP packets to be sent over the [[Computer networking|network]], reducing [[network load]].
Non-idempotent methods like POST should not be pipelined. Sequences of GET and HEAD requests can be always pipelined. A sequence of other [[idempotence (computer science)|idempotent]] requests like GET, HEAD, PUT and DELETE can be pipelined or not depending on whether requests in the sequence depend on the effect of others.<ref>{{cite web|url=http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2|title=part of Hypertext Transfer Protocol -- HTTP/1.1 Sektion 9.1.2 Idempotent Methods|date=2004/09/01 |publisher=[[W3C]]|accessdate=2009-05-16}}</ref>
HTTP pipelining requires both the client and the server to support it. HTTP/1.1 conforming servers are required to support pipelining. This does not mean that servers are required to pipeline responses, but that they are required not to fail if a client chooses to pipeline requests.
== Implementation status ==
[[Image:HTTP pipelining.svg|thumb|right|300px|Schema of non-pipelined vs. pipelined connection.]]
=== Implementation in web servers ===
Implementing pipelining in web servers is a relatively simple matter of making sure that network buffers are not discarded between requests. For that reason, most modern web servers handle pipelining without any problem.
Exceptions include IIS 4 and reportedly 5.{{Fact|date=March 2009}}
=== Implementation in web browsers ===
[[Internet Explorer]] supports pipelining.<ref>{{cite web|url=http://www.microsoft.com/windowsxp/expertzone/chats/transcripts/08_0814_ez_ie8.mspx|title=Windows Internet Explorer 8 Expert Zone Chat (August 14, 2008)|date=August 14, 2008|publisher=[[Microsoft]]|accessdate=2009-03-27}}</ref>
[[Mozilla Firefox 3]] supports pipelining, but it's disabled by default. It uses some [[Heuristic (computer science)|heuristic]]s, especially to turn pipelining off for [[Internet Information Services|IIS]] [[web server|server]]s. Instructions for enabling pipelining can be found at [http://support.mozilla.com/tiki-view_forum_thread.php?locale=de&comments_parentId=36381&forumId=1 How do I enable Pipelining].
[[Camino]] does the same thing as Firefox.
[[Konqueror]] 2.0 supports pipelining, but it's disabled by default. Instructions for enabling it can be found at [http://gentoo-wiki.com/TIP_Konqueror Konqueror: Tips & Tricks].
[[Opera (web browser)|Opera]] has pipelining enabled by default. It uses [[Heuristic (computer science)|heuristic]]s to control the level of pipelining employed depending on the connected [[web server|server]].[http://operawiki.info/HttpProtocol]
[[Google Chrome]] is not believed to support pipelining, although it may be implemented in the near future.<ref>{{cite web|url=http://code.google.com/p/chromium/issues/detail?id=8991|title=Issue 8991: Optional HTTP pipelining mode|date=Mar 19, 2009|publisher=[[Google Chrome]]|accessdate=2009-05-16}}</ref>
=== Implementation in web proxies ===
Most HTTP proxies do not pipeline outgoing requests.<ref>{{cite web|url=http://www.mnot.net/blog/2007/06/20/proxy_caching|title=mnot’s Web log: The State of Proxy Caching|date=20 June 2007|publisher=[[mnot.net]]|accessdate=2009-05-16}}</ref>
Some versions of the Squid web proxy will pipeline up to two outgoing requests. This functionality has been disabled in the latest versions. Squid supports multiple requests from clients.
The [http://www.pps.jussieu.fr/~jch/software/polipo/ Polipo] proxy pipelines outgoing requests.
=== Other implementations ===
Some other applications currently exploiting pipelining are [http://www.daemonology.net/phttpget/ phttpget] from [[FreeBSD]] (a minimalist pipelined HTTP client), [[portsnap]] (a [[FreeBSD]] [[FreeBSD Ports|ports tree]] distribution system), [[lftp]] (a sophisticated file transfer program) and LWPng (libwww-perl New Generation) library.
== References ==
<references/>' |