Edit count of the user (user_editcount ) | null |
Name of the user account (user_name ) | '2605:B100:733:34BC:9591:B926:589:D6C1' |
Age of the user account (user_age ) | 0 |
Groups (including implicit) the user is in (user_groups ) | [
0 => '*'
] |
Rights that the user has (user_rights ) | [
0 => 'createaccount',
1 => 'read',
2 => 'edit',
3 => 'createtalk',
4 => 'writeapi',
5 => 'viewmywatchlist',
6 => 'editmywatchlist',
7 => 'viewmyprivateinfo',
8 => 'editmyprivateinfo',
9 => 'editmyoptions',
10 => 'abusefilter-log-detail',
11 => 'urlshortener-create-url',
12 => 'centralauth-merge',
13 => 'abusefilter-view',
14 => 'abusefilter-log',
15 => 'vipsscaler-test'
] |
Whether the user is editing from mobile app (user_app ) | false |
Whether or not a user is editing through the mobile interface (user_mobile ) | true |
Page ID (page_id ) | 1218572 |
Page namespace (page_namespace ) | 0 |
Page title without namespace (page_title ) | 'HTTP pipelining' |
Full page title (page_prefixedtitle ) | 'HTTP pipelining' |
Edit protection level of the page (page_restrictions_edit ) | [] |
Last ten users to contribute to the page (page_recent_contributors ) | [
0 => 'Citation bot',
1 => 'Ade56facc',
2 => 'Kaltenmeyer',
3 => 'DanCherek',
4 => 'WikiCleanerBot',
5 => '195.91.239.8',
6 => 'Anton.bersh',
7 => '93.43.214.30',
8 => 'BlauerBaum',
9 => 'Serols'
] |
Page age in seconds (page_age ) | 544694660 |
Action (action ) | 'edit' |
Edit summary/reason (summary ) | 'Fixed' |
Old content model (old_content_model ) | 'wikitext' |
New content model (new_content_model ) | 'wikitext' |
Old page wikitext, before the edit (old_wikitext ) | '[[File:HTTP pipelining2.svg|thumb|right|300px|Time diagram of non-pipelined vs. pipelined connection]]
{{HTTP}}
'''HTTP pipelining''' is a feature of '''HTTP/1.1''' which allows multiple [[HTTP]] requests to be sent over a single [[Transmission Control Protocol|TCP]] (transmission control protocol) connection without waiting for the corresponding responses.<ref name="HTTP/1.1-pipelining">{{cite web|url=http://tools.ietf.org/html/rfc7230#section-6.3.2|title=Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing: Pipelining|publisher=ietf.org|accessdate=2014-07-24}}</ref> HTTP/1.1 specification requires servers to respond to pipelined requests correctly, sending back non-pipelined but valid responses even if server does not support HTTP pipelining. Despite this requirement, many legacy HTTP/1.1 servers do not support pipelining correctly, forcing most HTTP clients to not use HTTP pipelining in practice.
The technique was '''superseded''' by '''multiplexing''' via [[HTTP/2]],<ref name=":0">{{Cite web|url=https://developer.mozilla.org/en-US/docs/Web/HTTP/Connection_management_in_HTTP_1.x$revision/1330814|title=Revision 1330814 {{!}} Connection management in HTTP/1.x {{!}} MDN|website=MDN Web Docs|language=en-US|access-date=2018-03-19}}</ref> which is supported by most modern [[Web browser|browsers]].<ref name="browser_support">{{cite web|url=http://caniuse.com/#search=http2|title=HTTP2 browser support|accessdate=March 9, 2017}}</ref>
In [[HTTP/3]], the multiplexing is accomplished through the new underlying [[QUIC]] transport protocol, which replaces [[Transmission Control Protocol|TCP]]. This further reduces loading time, as there is no [[head-of-line blocking]] anymore.
==Motivation and limitations==
The pipelining of requests results in a dramatic improvement<ref>{{cite web|url=http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html|title=Network Performance Effects of HTTP/1.1, CSS1, and PNG|publisher=World Wide Web Consortium|accessdate=14 January 2010|date=24 June 1997|first1=Henrik Frystyk|last1=Nielsen|authorlink1=Henrik Frystyk Nielsen|first2=Jim|last2=Gettys|authorlink2=Jim Gettys|first3=Anselm|last3=Baird-Smith|first4=Eric|last4=Prud'hommeaux|first5=Håkon Wium|last5=Lie|authorlink5=Håkon Wium Lie|first6=Chris|last6=Lilley|authorlink6=Chris Lilley (computer scientist)}}</ref> in the loading times of HTML pages, especially over high [[Latency (engineering)|latency]] connections such as [[Satellite Internet|satellite Internet connection]]s. The speedup is less apparent on broadband connections, as the limitation of HTTP 1.1 still applies: the server must send its responses in the same order that the requests were received—so the entire connection remains [[FIFO and LIFO accounting|first-in-first-out]]<ref name="HTTP/1.1-pipelining" /> and [[Head-of-line blocking|HOL blocking]] can occur.
The asynchronous operation of [[HTTP/2]] and [[SPDY]] are solutions for this.<ref name="lwnspdy">{{cite web|url=https://lwn.net/Articles/362473/|title=Reducing HTTP latency with SPDY|first=Nathan|last=Willis|date=18 November 2009|publisher=[[LWN.net]]}}</ref> Browsers ultimately did not enable pipelining by default, and by 2017 most browsers supported HTTP/2 by default which used multiplexing instead.<ref name=":0" />
Non-[[idempotence (computer science)#Examples|idempotent]] requests, like those using [[POST (HTTP)|<code>POST</code>]], should not be pipelined.<ref name="non-idempotent">{{cite web|url=http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html|title=Connections|publisher=[[w3.org]]}}</ref> Sequences of <code>GET</code> and <code>HEAD</code> requests can always be pipelined. A sequence of other idempotent requests like <code>PUT</code> and <code>DELETE</code> can be pipelined or not depending on whether requests in the sequence depend on the effect of others.<ref name="HTTP/1.1-pipelining"/>
HTTP pipelining requires both the client and the server to support it. [[Hypertext Transfer Protocol|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.<ref>{{cite web|url=https://www-archive.mozilla.org/projects/netlib/http/pipelining-faq.html|title=HTTP/1.1 Pipelining FAQ'}}</ref>
{{Clear left}}
Most pipelining problems may happen in HTTP '''intermediate nodes''' (hop-by-hop), i.e. mainly in [[proxy server]]s (proxies), specially in transparent proxy servers (because they are used anyway without requiring user client configuration, so if only one of them, along the HTTP chain, does not handle pipelined requests properly then nothing works as it should).<ref name="make-pipelining-usable"/>
Using '''pipelining''' with HTTP '''proxy''' servers is usually '''not recommended''' also because the '''HOL blocking''' problem may really '''slow down''' a lot '''proxy server responses''' (as the server responses must be in the same order of the received requests).<ref name="HTTP/1.1-pipelining"/> <ref name="MSIE-8-chat-2008"/>
'''Example''': if a client sends 4 pipelined GET requests to a proxy through a single connection and the first one is not in its cache then the proxy has to forward that request to the destination web server; if the following three requests are instead found in its cache, the proxy has to wait for the web server response, then it has to send it to the client and only then it can send the three cached responses too.
If instead a client opens 4 connections to a proxy and sends 1 GET request per connection (without using pipelining) then the proxy can send the three cached responses to client in parallel before the response from server is received, decreasing a lot the overall completion time (because requests are served in parallel with no head-of-line blocking problem).<ref name="HTTP/1.1-concurrency">{{cite web|url=http://tools.ietf.org/html/rfc7230#section-6.4|title=Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing: Concurrency|publisher=ietf.org|accessdate=2014-07-24}}</ref> The same advantage, but with more speed, happens in HTTP/2 multiplexed streams.
==Implementation status==
Pipelining was introduced in HTTP/1.1 and was not present in HTTP/1.0.<ref>{{Cite web |url=http://www8.org/w8-papers/5c-protocols/key/key.html |title=Archived copy |access-date=2016-04-16 |archive-url=https://web.archive.org/web/20160424204340/http://www8.org/w8-papers/5c-protocols/key/key.html |archive-date=2016-04-24 |url-status=dead }}</ref>
It looks like that since the beginning, implementing HTTP pipelining properly and / or deploying it has never been an easy task for anybody (excepted for developers of web servers). There have always been complains about browsers, proxy servers, etc. not working well when using pipelined requests / responses, up to the point that for many years (at least till 2011) software developers, engineers, web experts, etc. tried to summarize the various kind of problems they noted, to fix things and to give advices about how to deal with pipelining on the Open Web.<ref name="make-pipelining-usable">{{Cite document|url= https://www.ietf.org/archive/id/draft-nottingham-http-pipeline-01.html|title=Making HTTP Pipelining Usable on the Open Web|date=March 14, 2011|author=Mark Nottingham|accessdate= October 16, 2021}}</ref>
===Implementation in web servers===
Implementing pipelining in [[web server]]s is a relatively simple matter of making sure that network buffers are not discarded between requests. For that reason, most modern web servers (that fully implement HTTP/1.1) handle pipelining without any problem.
===Implementation in web browsers===
Of all the major browsers, only [[Opera (web browser)|Opera]] based on [[Presto (layout engine)|Presto]] layout engine had a fully working implementation that was enabled by default. In all other browsers HTTP pipelining was disabled or not implemented.<ref name="lwnspdy"/>
*[[Internet Explorer 8]] does not pipeline requests, due to concerns regarding buggy proxies and [[head-of-line blocking]].<ref name="MSIE-8-chat-2008">{{cite web|url=http://www.microsoft.com/windowsxp/expertzone/chats/transcripts/08_0814_ez_ie8.mspx|title=Wayback link of 'Windows Internet Explorer 8 Expert Zone Chat (August 14, 2008)'|date=August 14, 2008|publisher=[[Microsoft]]|accessdate=May 10, 2012|archive-url=https://web.archive.org/web/20101204053757/http://www.microsoft.com/windowsxp/expertzone/chats/transcripts/08_0814_ez_ie8.mspx|archive-date=December 4, 2010|url-status=dead}}</ref>
*[[Internet Explorer 11]] does not support pipelining.<ref>{{Cite news|url=https://blogs.msdn.microsoft.com/ie/2005/04/11/internet-explorer-and-connection-limits/|title=Internet Explorer and Connection Limits|newspaper=IEBlog|access-date=2016-11-14}}</ref>
*Mozilla browsers (such as [[Mozilla Firefox]], [[SeaMonkey]] and [[Camino (web browser)|Camino]]) support pipelining; however, it is disabled by default.<ref>[http://kb.mozillazine.org/Network.http.pipelining Pipelining Network] [[MozillaZine]]</ref><ref>{{cite book|title=Firefox secrets|author=Cheah Chu Yeow|year=2005|page=[https://archive.org/details/firefoxsecrets0000chea/page/180 180]|isbn=0-9752402-4-2|url-access=registration|url=https://archive.org/details/firefoxsecrets0000chea/page/180}}</ref> Pipelining is disabled by default to avoid issues with misbehaving servers.<ref>{{cite web|url= https://bugzilla.mozilla.org/show_bug.cgi?id=264354|title=Bug 264354: Enable HTTP pipelining by default|publisher=[[Mozilla]]|accessdate=September 16, 2011}}</ref> When pipelining is enabled, Mozilla browsers use some heuristics, especially to turn pipelining off for older [[Internet Information Services|IIS]] servers.<ref>{{cite web|url=https://hg.mozilla.org/releases/mozilla-2.0/file/09565753ce5f/netwerk/protocol/http/src/nsHttpConnection.cpp#l251|title=Source code – nsHttpConnection.cpp|publisher=Mozilla|work=Firefox source code|date=May 7, 2010|accessdate=December 5, 2010}}</ref> Support for H1 Pipeline was removed from Mozilla Firefox in Version 54.<ref>{{cite web|url= https://bugzilla.mozilla.org/show_bug.cgi?id=1340655|title=Bug 1340655: Remove H1 Pipeline Support|publisher=[[Mozilla]]|accessdate=March 22, 2017}}</ref>
*[[Konqueror]] 2.0 supports pipelining, but it is disabled by default.<ref>{{Cite book|url=https://books.google.com/books?id=J1gb2eb-NuEC&dq=pipelining+%22konqueror%22&pg=PA31|title=Internet Communication: Protocols and related subjects|author=Emir Arian|date=|access-date=2021-10-16|language=en|isbn=}}</ref>
*[[Google Chrome]] previously supported pipelining, but it has been disabled due to bugs and problems with poorly behaving servers.<ref>[https://www.chromium.org/developers/design-documents/network-stack/http-pipelining HTTP Pipelining - The Chromium Projects]</ref>
*[[Pale Moon (web browser)]] supports pipelining, and is enabled by default.<ref>{{Cite web|url=https://forum.palemoon.org/viewtopic.php?f=5&t=16869&p=123455|title=HTTP/1 Pipelining support has been removed in Firefox 54 - Pale Moon forum|website=forum.palemoon.org|language=en-us|access-date=2018-06-07}}</ref>
===Implementation in web proxy servers===
Most HTTP proxies do not pipeline outgoing requests.<ref>{{cite web|url= https://www.mnot.net/blog/2007/06/20/proxy_caching|title=The State of Proxy Caching|date=June 20, 2007|author=Mark Nottingham|accessdate= May 16, 2009}}</ref>
Some HTTP proxies, including transparent HTTP proxies, may manage pipelined requests very badly (i.e. by mixing up the order of pipelined responses, etc.).<ref>{{cite web|url= https://www.mnot.net/blog/2011/07/11/what_proxies_must_do|title=What proxies must do|date=July 11, 2011|author=Mark Nottingham|accessdate= October 16, 2021}}</ref>
Some versions of the [[Squid (software)|Squid]] web proxy will pipeline up to two outgoing requests. This functionality has been disabled by default and needs to be manually enabled for "bandwidth management and access logging reasons".<ref>{{cite web|url=http://www.squid-cache.org/Doc/config/pipeline_prefetch/|title=squid : pipeline_prefetch configuration directive|date=November 9, 2009|publisher=[[Squid (software)|Squid]]|accessdate=December 1, 2009}}</ref> Squid supports multiple requests from clients.
The [[Polipo]] proxy pipelines outgoing requests.<ref>{{cite web|url= http://www.pps.jussieu.fr/~jch/software/polipo/|title=Polipo — a caching web proxy|date=September 18, 2009|publisher=Juliusz Chroboczek|accessdate=November 12, 2009}}</ref>
Tempesta FW, an open source [[application delivery controller]],<ref>{{cite web|url= https://github.com/tempesta-tech/tempesta|title=Tempesta FW — a Linux Application Delivery Controller|publisher=GitHub|accessdate=March 29, 2018}}</ref> also pipelines requests to backend servers.<ref>{{cite web|url= https://github.com/tempesta-tech/tempesta/wiki/Servers:-Tempesta's-side|title=Servers: Tempesta's side - tempesta-tech/tempesta Wiki|date=August 1, 2017|publisher=Tempesta Technologies INC|accessdate=March 29, 2018}}</ref>
===Other implementations===
The [[libwww]] [[library (computing)|library]] made by the [[World Wide Web Consortium]] (W3C), supports pipelining since version 5.1 released at 18 February 1997.<ref>{{cite web|last=Kahan|first=José|title=Change History of libwww|url=http://www.w3.org/Library/User/History.html |publisher=[[World Wide Web Consortium]]|accessdate=August 3, 2010|date= June 7, 2002}}</ref>
Other application development libraries that support HTTP pipelining include:
*Perl modules providing client support for HTTP pipelining are HTTP::Async and the LWPng ([[libwww-perl]] New Generation) library.<ref>{{Cite web |url=http://miltonkeynes.pm.org/talks/2010/02/colin_bradford_http_async.pdf |title=Using HTTP::Async for Parallel HTTP Requests (Colin Bradford) |access-date=2010-08-03 |archive-url=https://web.archive.org/web/20120310042434/http://miltonkeynes.pm.org/talks/2010/02/colin_bradford_http_async.pdf |archive-date=2012-03-10 |url-status=dead }}</ref>
*The Microsoft [[.NET Framework]] 3.5 supports HTTP pipelining in the module <code>System.Net.HttpWebRequest</code>.<ref>[http://blogs.msdn.com/b/mflasko/archive/2006/07/17/669293.aspx System.Net.HttpWebRequest & pipelining]</ref>
*[[Qt (framework)|Qt]] class <code>QNetworkRequest</code>, introduced in 4.4.<ref>[http://doc.qt.nokia.com/4.6/qnetworkrequest.html QNetworkRequest Class Reference] {{webarchive|url=https://web.archive.org/web/20091222054207/http://doc.qt.nokia.com/4.6/qnetworkrequest.html |date=2009-12-22 }}, Nokia QT documentation</ref>
Some other applications currently exploiting pipelining are:
*IceBreak application server since BUILD389
*phttpget from [[FreeBSD]] (a minimalist pipelined HTTP client)<ref>[http://www.daemonology.net/phttpget/ Pipelined HTTP GET utility]</ref>
*[[libcurl]] previously had limited support for pipelining using the CURLMOPT_PIPELINING option,<ref>[http://curl.haxx.se/dev/readme-pipelining.html Curl pipelining explanation] {{webarchive|url=https://web.archive.org/web/20120627181619/http://curl.haxx.se/dev/readme-pipelining.html|date=2012-06-27}}, Curl developer documentation</ref> but this support was removed in version 7.65.0<ref>[https://daniel.haxx.se/blog/2019/04/06/curl-says-bye-bye-to-pipelining/ Curl pipelining removal announcement]{{webarchive|url=https://web.archive.org/web/20210205184800/https://daniel.haxx.se/blog/2019/04/06/curl-says-bye-bye-to-pipelining/|date=2021-02-05}}</ref>
*[[portsnap]] (a [[FreeBSD]] [[FreeBSD Ports|ports tree]] distribution system)
*[[APT (software)|Advanced Packaging Tool]] (APT) supports pipelining.{{Citation needed|date=August 2010}}
*[[Apache Subversion|Subversion]] (SVN) has optional support for HTTP pipelining with the serf WebDAV access module (the default module, neon, does not have pipelining support).<ref>{{cite book | title = Version Control with Subversion|author1=C. Michael Pilato |author2=Ben Collins-Sussman |author3=Brian W. Fitzpatrick |page=238|publisher=[[O'Reilly Media]]|year=2008|isbn=978-0-596-51033-6}}</ref><ref>{{cite web|url=http://www.erenkrantz.com/oscon/OSCON%202007%20Subversion%20New%20Toys.pdf|title=Subversion: Powerful New Toys|author=Justin R. Erenkrantz|year=2007}}</ref>
*[[Microsoft Message Queuing]] on [[Windows Server 2003]] utilises pipelining on HTTP by default, and can be configured to use it on HTTPS.<ref>{{cite web|url= https://technet.microsoft.com/en-us/library/cc737394%28WS.10%29.aspx|title= HTTP/HTTPS messages|publisher=[[Microsoft TechNet]]|date=January 21, 2005}}</ref>
*IBM [[CICS]] 3.1 supports HTTP pipelining within its client.<ref>[http://publib.boulder.ibm.com/infocenter/cicsts/v3r1/index.jsp?topic=/com.ibm.cics.ts31.doc/dfhtl/topics/dfhtl_cwspipelining.htm How CICS Web support handles pipelining]</ref>
Testing tools which support HTTP pipelining include:
*[[httperf]]<ref>{{Cite web |url=http://www.hpl.hp.com/research/linux/httperf/ |title=HTTP Website |access-date=2010-10-01 |archive-url=https://web.archive.org/web/20120608143409/http://www.hpl.hp.com/research/linux/httperf/ |archive-date=2012-06-08 |url-status=dead }}</ref>
==See also==
*[[HTTP persistent connection]]
*[[WebSocket]]
*[[SPDY]]
==References==
{{Reflist}}
==External links==
*RFC 7230 {{cite web|url=http://tools.ietf.org/html/rfc7230#section-6.3.2|title=Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing|publisher=ietf.org|accessdate=2014-07-24}}
*[https://www.mozilla.org/projects/netlib/http/pipelining-faq.html HTTP/1.1 Pipelining FAQ at mozilla.org]
*[https://www.w3.org/Protocols/HTTP/Performance/Pipeline.html "Network Performance Effects of HTTP/1.1, CSS1, and PNG" at w3.org]
*[https://www.die.net/musings/page_load_time/ "Optimizing Page Load Times" article]
*[https://www.daemonology.net/phttpget/ phttpget]
*[https://code.google.com/p/serf/ serf] C library
{{DEFAULTSORT:Http Pipelining}}
[[Category:Hypertext Transfer Protocol]]' |
New page wikitext, after the edit (new_wikitext ) | 'Typo
==Motivation and limitations==
The pipelining of requests results in a dramatic improvement<ref>{{cite web|url=http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html|title=Network Performance Effects of HTTP/1.1, CSS1, and PNG|publisher=World Wide Web Consortium|accessdate=14 January 2010|date=24 June 1997|first1=Henrik Frystyk|last1=Nielsen|authorlink1=Henrik Frystyk Nielsen|first2=Jim|last2=Gettys|authorlink2=Jim Gettys|first3=Anselm|last3=Baird-Smith|first4=Eric|last4=Prud'hommeaux|first5=Håkon Wium|last5=Lie|authorlink5=Håkon Wium Lie|first6=Chris|last6=Lilley|authorlink6=Chris Lilley (computer scientist)}}</ref> in the loading times of HTML pages, especially over high [[Latency (engineering)|latency]] connections such as [[Satellite Internet|satellite Internet connection]]s. The speedup is less apparent on broadband connections, as the limitation of HTTP 1.1 still applies: the server must send its responses in the same order that the requests were received—so the entire connection remains [[FIFO and LIFO accounting|first-in-first-out]]<ref name="HTTP/1.1-pipelining" /> and [[Head-of-line blocking|HOL blocking]] can occur.
The asynchronous operation of [[HTTP/2]] and [[SPDY]] are solutions for this.<ref name="lwnspdy">{{cite web|url=https://lwn.net/Articles/362473/|title=Reducing HTTP latency with SPDY|first=Nathan|last=Willis|date=18 November 2009|publisher=[[LWN.net]]}}</ref> Browsers ultimately did not enable pipelining by default, and by 2017 most browsers supported HTTP/2 by default which used multiplexing instead.<ref name=":0" />
Non-[[idempotence (computer science)#Examples|idempotent]] requests, like those using [[POST (HTTP)|<code>POST</code>]], should not be pipelined.<ref name="non-idempotent">{{cite web|url=http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html|title=Connections|publisher=[[w3.org]]}}</ref> Sequences of <code>GET</code> and <code>HEAD</code> requests can always be pipelined. A sequence of other idempotent requests like <code>PUT</code> and <code>DELETE</code> can be pipelined or not depending on whether requests in the sequence depend on the effect of others.<ref name="HTTP/1.1-pipelining"/>
HTTP pipelining requires both the client and the server to support it. [[Hypertext Transfer Protocol|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.<ref>{{cite web|url=https://www-archive.mozilla.org/projects/netlib/http/pipelining-faq.html|title=HTTP/1.1 Pipelining FAQ'}}</ref>
{{Clear left}}
Most pipelining problems may happen in HTTP '''intermediate nodes''' (hop-by-hop), i.e. mainly in [[proxy server]]s (proxies), specially in transparent proxy servers (because they are used anyway without requiring user client configuration, so if only one of them, along the HTTP chain, does not handle pipelined requests properly then nothing works as it should).<ref name="make-pipelining-usable"/>
Using '''pipelining''' with HTTP '''proxy''' servers is usually '''not recommended''' also because the '''HOL blocking''' problem may really '''slow down''' a lot '''proxy server responses''' (as the server responses must be in the same order of the received requests).<ref name="HTTP/1.1-pipelining"/> <ref name="MSIE-8-chat-2008"/>
'''Example''': if a client sends 4 pipelined GET requests to a proxy through a single connection and the first one is not in its cache then the proxy has to forward that request to the destination web server; if the following three requests are instead found in its cache, the proxy has to wait for the web server response, then it has to send it to the client and only then it can send the three cached responses too.
If instead a client opens 4 connections to a proxy and sends 1 GET request per connection (without using pipelining) then the proxy can send the three cached responses to client in parallel before the response from server is received, decreasing a lot the overall completion time (because requests are served in parallel with no head-of-line blocking problem).<ref name="HTTP/1.1-concurrency">{{cite web|url=http://tools.ietf.org/html/rfc7230#section-6.4|title=Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing: Concurrency|publisher=ietf.org|accessdate=2014-07-24}}</ref> The same advantage, but with more speed, happens in HTTP/2 multiplexed streams.
==Implementation status==
Pipelining was introduced in HTTP/1.1 and was not present in HTTP/1.0.<ref>{{Cite web |url=http://www8.org/w8-papers/5c-protocols/key/key.html |title=Archived copy |access-date=2016-04-16 |archive-url=https://web.archive.org/web/20160424204340/http://www8.org/w8-papers/5c-protocols/key/key.html |archive-date=2016-04-24 |url-status=dead }}</ref>
It looks like that since the beginning, implementing HTTP pipelining properly and / or deploying it has never been an easy task for anybody (excepted for developers of web servers). There have always been complains about browsers, proxy servers, etc. not working well when using pipelined requests / responses, up to the point that for many years (at least till 2011) software developers, engineers, web experts, etc. tried to summarize the various kind of problems they noted, to fix things and to give advices about how to deal with pipelining on the Open Web.<ref name="make-pipelining-usable">{{Cite document|url= https://www.ietf.org/archive/id/draft-nottingham-http-pipeline-01.html|title=Making HTTP Pipelining Usable on the Open Web|date=March 14, 2011|author=Mark Nottingham|accessdate= October 16, 2021}}</ref>
===Implementation in web servers===
Implementing pipelining in [[web server]]s is a relatively simple matter of making sure that network buffers are not discarded between requests. For that reason, most modern web servers (that fully implement HTTP/1.1) handle pipelining without any problem.
===Implementation in web browsers===
Of all the major browsers, only [[Opera (web browser)|Opera]] based on [[Presto (layout engine)|Presto]] layout engine had a fully working implementation that was enabled by default. In all other browsers HTTP pipelining was disabled or not implemented.<ref name="lwnspdy"/>
*[[Internet Explorer 8]] does not pipeline requests, due to concerns regarding buggy proxies and [[head-of-line blocking]].<ref name="MSIE-8-chat-2008">{{cite web|url=http://www.microsoft.com/windowsxp/expertzone/chats/transcripts/08_0814_ez_ie8.mspx|title=Wayback link of 'Windows Internet Explorer 8 Expert Zone Chat (August 14, 2008)'|date=August 14, 2008|publisher=[[Microsoft]]|accessdate=May 10, 2012|archive-url=https://web.archive.org/web/20101204053757/http://www.microsoft.com/windowsxp/expertzone/chats/transcripts/08_0814_ez_ie8.mspx|archive-date=December 4, 2010|url-status=dead}}</ref>
*[[Internet Explorer 11]] does not support pipelining.<ref>{{Cite news|url=https://blogs.msdn.microsoft.com/ie/2005/04/11/internet-explorer-and-connection-limits/|title=Internet Explorer and Connection Limits|newspaper=IEBlog|access-date=2016-11-14}}</ref>
*Mozilla browsers (such as [[Mozilla Firefox]], [[SeaMonkey]] and [[Camino (web browser)|Camino]]) support pipelining; however, it is disabled by default.<ref>[http://kb.mozillazine.org/Network.http.pipelining Pipelining Network] [[MozillaZine]]</ref><ref>{{cite book|title=Firefox secrets|author=Cheah Chu Yeow|year=2005|page=[https://archive.org/details/firefoxsecrets0000chea/page/180 180]|isbn=0-9752402-4-2|url-access=registration|url=https://archive.org/details/firefoxsecrets0000chea/page/180}}</ref> Pipelining is disabled by default to avoid issues with misbehaving servers.<ref>{{cite web|url= https://bugzilla.mozilla.org/show_bug.cgi?id=264354|title=Bug 264354: Enable HTTP pipelining by default|publisher=[[Mozilla]]|accessdate=September 16, 2011}}</ref> When pipelining is enabled, Mozilla browsers use some heuristics, especially to turn pipelining off for older [[Internet Information Services|IIS]] servers.<ref>{{cite web|url=https://hg.mozilla.org/releases/mozilla-2.0/file/09565753ce5f/netwerk/protocol/http/src/nsHttpConnection.cpp#l251|title=Source code – nsHttpConnection.cpp|publisher=Mozilla|work=Firefox source code|date=May 7, 2010|accessdate=December 5, 2010}}</ref> Support for H1 Pipeline was removed from Mozilla Firefox in Version 54.<ref>{{cite web|url= https://bugzilla.mozilla.org/show_bug.cgi?id=1340655|title=Bug 1340655: Remove H1 Pipeline Support|publisher=[[Mozilla]]|accessdate=March 22, 2017}}</ref>
*[[Konqueror]] 2.0 supports pipelining, but it is disabled by default.<ref>{{Cite book|url=https://books.google.com/books?id=J1gb2eb-NuEC&dq=pipelining+%22konqueror%22&pg=PA31|title=Internet Communication: Protocols and related subjects|author=Emir Arian|date=|access-date=2021-10-16|language=en|isbn=}}</ref>
*[[Google Chrome]] previously supported pipelining, but it has been disabled due to bugs and problems with poorly behaving servers.<ref>[https://www.chromium.org/developers/design-documents/network-stack/http-pipelining HTTP Pipelining - The Chromium Projects]</ref>
*[[Pale Moon (web browser)]] supports pipelining, and is enabled by default.<ref>{{Cite web|url=https://forum.palemoon.org/viewtopic.php?f=5&t=16869&p=123455|title=HTTP/1 Pipelining support has been removed in Firefox 54 - Pale Moon forum|website=forum.palemoon.org|language=en-us|access-date=2018-06-07}}</ref>
===Implementation in web proxy servers===
Most HTTP proxies do not pipeline outgoing requests.<ref>{{cite web|url= https://www.mnot.net/blog/2007/06/20/proxy_caching|title=The State of Proxy Caching|date=June 20, 2007|author=Mark Nottingham|accessdate= May 16, 2009}}</ref>
Some HTTP proxies, including transparent HTTP proxies, may manage pipelined requests very badly (i.e. by mixing up the order of pipelined responses, etc.).<ref>{{cite web|url= https://www.mnot.net/blog/2011/07/11/what_proxies_must_do|title=What proxies must do|date=July 11, 2011|author=Mark Nottingham|accessdate= October 16, 2021}}</ref>
Some versions of the [[Squid (software)|Squid]] web proxy will pipeline up to two outgoing requests. This functionality has been disabled by default and needs to be manually enabled for "bandwidth management and access logging reasons".<ref>{{cite web|url=http://www.squid-cache.org/Doc/config/pipeline_prefetch/|title=squid : pipeline_prefetch configuration directive|date=November 9, 2009|publisher=[[Squid (software)|Squid]]|accessdate=December 1, 2009}}</ref> Squid supports multiple requests from clients.
The [[Polipo]] proxy pipelines outgoing requests.<ref>{{cite web|url= http://www.pps.jussieu.fr/~jch/software/polipo/|title=Polipo — a caching web proxy|date=September 18, 2009|publisher=Juliusz Chroboczek|accessdate=November 12, 2009}}</ref>
Tempesta FW, an open source [[application delivery controller]],<ref>{{cite web|url= https://github.com/tempesta-tech/tempesta|title=Tempesta FW — a Linux Application Delivery Controller|publisher=GitHub|accessdate=March 29, 2018}}</ref> also pipelines requests to backend servers.<ref>{{cite web|url= https://github.com/tempesta-tech/tempesta/wiki/Servers:-Tempesta's-side|title=Servers: Tempesta's side - tempesta-tech/tempesta Wiki|date=August 1, 2017|publisher=Tempesta Technologies INC|accessdate=March 29, 2018}}</ref>
===Other implementations===
The [[libwww]] [[library (computing)|library]] made by the [[World Wide Web Consortium]] (W3C), supports pipelining since version 5.1 released at 18 February 1997.<ref>{{cite web|last=Kahan|first=José|title=Change History of libwww|url=http://www.w3.org/Library/User/History.html |publisher=[[World Wide Web Consortium]]|accessdate=August 3, 2010|date= June 7, 2002}}</ref>
Other application development libraries that support HTTP pipelining include:
*Perl modules providing client support for HTTP pipelining are HTTP::Async and the LWPng ([[libwww-perl]] New Generation) library.<ref>{{Cite web |url=http://miltonkeynes.pm.org/talks/2010/02/colin_bradford_http_async.pdf |title=Using HTTP::Async for Parallel HTTP Requests (Colin Bradford) |access-date=2010-08-03 |archive-url=https://web.archive.org/web/20120310042434/http://miltonkeynes.pm.org/talks/2010/02/colin_bradford_http_async.pdf |archive-date=2012-03-10 |url-status=dead }}</ref>
*The Microsoft [[.NET Framework]] 3.5 supports HTTP pipelining in the module <code>System.Net.HttpWebRequest</code>.<ref>[http://blogs.msdn.com/b/mflasko/archive/2006/07/17/669293.aspx System.Net.HttpWebRequest & pipelining]</ref>
*[[Qt (framework)|Qt]] class <code>QNetworkRequest</code>, introduced in 4.4.<ref>[http://doc.qt.nokia.com/4.6/qnetworkrequest.html QNetworkRequest Class Reference] {{webarchive|url=https://web.archive.org/web/20091222054207/http://doc.qt.nokia.com/4.6/qnetworkrequest.html |date=2009-12-22 }}, Nokia QT documentation</ref>
Some other applications currently exploiting pipelining are:
*IceBreak application server since BUILD389
*phttpget from [[FreeBSD]] (a minimalist pipelined HTTP client)<ref>[http://www.daemonology.net/phttpget/ Pipelined HTTP GET utility]</ref>
*[[libcurl]] previously had limited support for pipelining using the CURLMOPT_PIPELINING option,<ref>[http://curl.haxx.se/dev/readme-pipelining.html Curl pipelining explanation] {{webarchive|url=https://web.archive.org/web/20120627181619/http://curl.haxx.se/dev/readme-pipelining.html|date=2012-06-27}}, Curl developer documentation</ref> but this support was removed in version 7.65.0<ref>[https://daniel.haxx.se/blog/2019/04/06/curl-says-bye-bye-to-pipelining/ Curl pipelining removal announcement]{{webarchive|url=https://web.archive.org/web/20210205184800/https://daniel.haxx.se/blog/2019/04/06/curl-says-bye-bye-to-pipelining/|date=2021-02-05}}</ref>
*[[portsnap]] (a [[FreeBSD]] [[FreeBSD Ports|ports tree]] distribution system)
*[[APT (software)|Advanced Packaging Tool]] (APT) supports pipelining.{{Citation needed|date=August 2010}}
*[[Apache Subversion|Subversion]] (SVN) has optional support for HTTP pipelining with the serf WebDAV access module (the default module, neon, does not have pipelining support).<ref>{{cite book | title = Version Control with Subversion|author1=C. Michael Pilato |author2=Ben Collins-Sussman |author3=Brian W. Fitzpatrick |page=238|publisher=[[O'Reilly Media]]|year=2008|isbn=978-0-596-51033-6}}</ref><ref>{{cite web|url=http://www.erenkrantz.com/oscon/OSCON%202007%20Subversion%20New%20Toys.pdf|title=Subversion: Powerful New Toys|author=Justin R. Erenkrantz|year=2007}}</ref>
*[[Microsoft Message Queuing]] on [[Windows Server 2003]] utilises pipelining on HTTP by default, and can be configured to use it on HTTPS.<ref>{{cite web|url= https://technet.microsoft.com/en-us/library/cc737394%28WS.10%29.aspx|title= HTTP/HTTPS messages|publisher=[[Microsoft TechNet]]|date=January 21, 2005}}</ref>
*IBM [[CICS]] 3.1 supports HTTP pipelining within its client.<ref>[http://publib.boulder.ibm.com/infocenter/cicsts/v3r1/index.jsp?topic=/com.ibm.cics.ts31.doc/dfhtl/topics/dfhtl_cwspipelining.htm How CICS Web support handles pipelining]</ref>
Testing tools which support HTTP pipelining include:
*[[httperf]]<ref>{{Cite web |url=http://www.hpl.hp.com/research/linux/httperf/ |title=HTTP Website |access-date=2010-10-01 |archive-url=https://web.archive.org/web/20120608143409/http://www.hpl.hp.com/research/linux/httperf/ |archive-date=2012-06-08 |url-status=dead }}</ref>
==See also==
*[[HTTP persistent connection]]
*[[WebSocket]]
*[[SPDY]]
==References==
{{Reflist}}
==External links==
*RFC 7230 {{cite web|url=http://tools.ietf.org/html/rfc7230#section-6.3.2|title=Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing|publisher=ietf.org|accessdate=2014-07-24}}
*[https://www.mozilla.org/projects/netlib/http/pipelining-faq.html HTTP/1.1 Pipelining FAQ at mozilla.org]
*[https://www.w3.org/Protocols/HTTP/Performance/Pipeline.html "Network Performance Effects of HTTP/1.1, CSS1, and PNG" at w3.org]
*[https://www.die.net/musings/page_load_time/ "Optimizing Page Load Times" article]
*[https://www.daemonology.net/phttpget/ phttpget]
*[https://code.google.com/p/serf/ serf] C library
{{DEFAULTSORT:Http Pipelining}}
[[Category:Hypertext Transfer Protocol]]' |
Unified diff of changes made by edit (edit_diff ) | '@@ -1,9 +1,3 @@
-[[File:HTTP pipelining2.svg|thumb|right|300px|Time diagram of non-pipelined vs. pipelined connection]]
-{{HTTP}}
-'''HTTP pipelining''' is a feature of '''HTTP/1.1''' which allows multiple [[HTTP]] requests to be sent over a single [[Transmission Control Protocol|TCP]] (transmission control protocol) connection without waiting for the corresponding responses.<ref name="HTTP/1.1-pipelining">{{cite web|url=http://tools.ietf.org/html/rfc7230#section-6.3.2|title=Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing: Pipelining|publisher=ietf.org|accessdate=2014-07-24}}</ref> HTTP/1.1 specification requires servers to respond to pipelined requests correctly, sending back non-pipelined but valid responses even if server does not support HTTP pipelining. Despite this requirement, many legacy HTTP/1.1 servers do not support pipelining correctly, forcing most HTTP clients to not use HTTP pipelining in practice.
-
-The technique was '''superseded''' by '''multiplexing''' via [[HTTP/2]],<ref name=":0">{{Cite web|url=https://developer.mozilla.org/en-US/docs/Web/HTTP/Connection_management_in_HTTP_1.x$revision/1330814|title=Revision 1330814 {{!}} Connection management in HTTP/1.x {{!}} MDN|website=MDN Web Docs|language=en-US|access-date=2018-03-19}}</ref> which is supported by most modern [[Web browser|browsers]].<ref name="browser_support">{{cite web|url=http://caniuse.com/#search=http2|title=HTTP2 browser support|accessdate=March 9, 2017}}</ref>
-
-In [[HTTP/3]], the multiplexing is accomplished through the new underlying [[QUIC]] transport protocol, which replaces [[Transmission Control Protocol|TCP]]. This further reduces loading time, as there is no [[head-of-line blocking]] anymore.
+Typo
==Motivation and limitations==
' |
New page size (new_size ) | 16258 |
Old page size (old_size ) | 17964 |
Size change in edit (edit_delta ) | -1706 |
Lines added in edit (added_lines ) | [
0 => 'Typo'
] |
Lines removed in edit (removed_lines ) | [
0 => '[[File:HTTP pipelining2.svg|thumb|right|300px|Time diagram of non-pipelined vs. pipelined connection]]',
1 => '{{HTTP}}',
2 => ''''HTTP pipelining''' is a feature of '''HTTP/1.1''' which allows multiple [[HTTP]] requests to be sent over a single [[Transmission Control Protocol|TCP]] (transmission control protocol) connection without waiting for the corresponding responses.<ref name="HTTP/1.1-pipelining">{{cite web|url=http://tools.ietf.org/html/rfc7230#section-6.3.2|title=Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing: Pipelining|publisher=ietf.org|accessdate=2014-07-24}}</ref> HTTP/1.1 specification requires servers to respond to pipelined requests correctly, sending back non-pipelined but valid responses even if server does not support HTTP pipelining. Despite this requirement, many legacy HTTP/1.1 servers do not support pipelining correctly, forcing most HTTP clients to not use HTTP pipelining in practice.',
3 => '',
4 => 'The technique was '''superseded''' by '''multiplexing''' via [[HTTP/2]],<ref name=":0">{{Cite web|url=https://developer.mozilla.org/en-US/docs/Web/HTTP/Connection_management_in_HTTP_1.x$revision/1330814|title=Revision 1330814 {{!}} Connection management in HTTP/1.x {{!}} MDN|website=MDN Web Docs|language=en-US|access-date=2018-03-19}}</ref> which is supported by most modern [[Web browser|browsers]].<ref name="browser_support">{{cite web|url=http://caniuse.com/#search=http2|title=HTTP2 browser support|accessdate=March 9, 2017}}</ref>',
5 => '',
6 => 'In [[HTTP/3]], the multiplexing is accomplished through the new underlying [[QUIC]] transport protocol, which replaces [[Transmission Control Protocol|TCP]]. This further reduces loading time, as there is no [[head-of-line blocking]] anymore.'
] |
All external links added in the edit (added_links ) | [] |
All external links removed in the edit (removed_links ) | [
0 => 'http://caniuse.com/#search=http2',
1 => 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Connection_management_in_HTTP_1.x$revision/1330814'
] |
All external links in the new text (all_links ) | [
0 => 'http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html',
1 => 'https://lwn.net/Articles/362473/',
2 => 'http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html',
3 => 'https://www-archive.mozilla.org/projects/netlib/http/pipelining-faq.html',
4 => 'https://www.ietf.org/archive/id/draft-nottingham-http-pipeline-01.html',
5 => 'https://web.archive.org/web/20101204053757/http://www.microsoft.com/windowsxp/expertzone/chats/transcripts/08_0814_ez_ie8.mspx',
6 => 'http://www.microsoft.com/windowsxp/expertzone/chats/transcripts/08_0814_ez_ie8.mspx',
7 => 'http://tools.ietf.org/html/rfc7230#section-6.4',
8 => 'https://web.archive.org/web/20160424204340/http://www8.org/w8-papers/5c-protocols/key/key.html',
9 => 'http://www8.org/w8-papers/5c-protocols/key/key.html',
10 => 'https://blogs.msdn.microsoft.com/ie/2005/04/11/internet-explorer-and-connection-limits/',
11 => 'http://kb.mozillazine.org/Network.http.pipelining',
12 => 'https://archive.org/details/firefoxsecrets0000chea/page/180',
13 => 'https://bugzilla.mozilla.org/show_bug.cgi?id=264354',
14 => 'https://hg.mozilla.org/releases/mozilla-2.0/file/09565753ce5f/netwerk/protocol/http/src/nsHttpConnection.cpp#l251',
15 => 'https://bugzilla.mozilla.org/show_bug.cgi?id=1340655',
16 => 'https://books.google.com/books?id=J1gb2eb-NuEC&dq=pipelining+%22konqueror%22&pg=PA31',
17 => 'https://www.chromium.org/developers/design-documents/network-stack/http-pipelining',
18 => 'https://forum.palemoon.org/viewtopic.php?f=5&t=16869&p=123455',
19 => 'https://www.mnot.net/blog/2007/06/20/proxy_caching',
20 => 'https://www.mnot.net/blog/2011/07/11/what_proxies_must_do',
21 => 'http://www.squid-cache.org/Doc/config/pipeline_prefetch/',
22 => 'http://www.pps.jussieu.fr/~jch/software/polipo/',
23 => 'https://github.com/tempesta-tech/tempesta',
24 => 'https://github.com/tempesta-tech/tempesta/wiki/Servers:-Tempesta's-side',
25 => 'http://www.w3.org/Library/User/History.html',
26 => 'https://web.archive.org/web/20120310042434/http://miltonkeynes.pm.org/talks/2010/02/colin_bradford_http_async.pdf',
27 => 'http://miltonkeynes.pm.org/talks/2010/02/colin_bradford_http_async.pdf',
28 => 'http://blogs.msdn.com/b/mflasko/archive/2006/07/17/669293.aspx',
29 => 'http://doc.qt.nokia.com/4.6/qnetworkrequest.html',
30 => 'https://web.archive.org/web/20091222054207/http://doc.qt.nokia.com/4.6/qnetworkrequest.html',
31 => 'http://www.daemonology.net/phttpget/',
32 => 'http://curl.haxx.se/dev/readme-pipelining.html',
33 => 'https://web.archive.org/web/20120627181619/http://curl.haxx.se/dev/readme-pipelining.html',
34 => 'https://daniel.haxx.se/blog/2019/04/06/curl-says-bye-bye-to-pipelining/',
35 => 'https://web.archive.org/web/20210205184800/https://daniel.haxx.se/blog/2019/04/06/curl-says-bye-bye-to-pipelining/',
36 => 'http://www.erenkrantz.com/oscon/OSCON%202007%20Subversion%20New%20Toys.pdf',
37 => 'https://technet.microsoft.com/en-us/library/cc737394(WS.10).aspx',
38 => 'http://publib.boulder.ibm.com/infocenter/cicsts/v3r1/index.jsp?topic=/com.ibm.cics.ts31.doc/dfhtl/topics/dfhtl_cwspipelining.htm',
39 => 'https://web.archive.org/web/20120608143409/http://www.hpl.hp.com/research/linux/httperf/',
40 => 'http://www.hpl.hp.com/research/linux/httperf/',
41 => 'http://tools.ietf.org/html/rfc7230#section-6.3.2',
42 => 'https://www.mozilla.org/projects/netlib/http/pipelining-faq.html',
43 => 'https://www.w3.org/Protocols/HTTP/Performance/Pipeline.html',
44 => 'https://www.die.net/musings/page_load_time/',
45 => 'https://www.daemonology.net/phttpget/',
46 => 'https://code.google.com/p/serf/'
] |
Links in the page, before the edit (old_links ) | [
0 => 'http://blogs.msdn.com/b/mflasko/archive/2006/07/17/669293.aspx',
1 => 'http://caniuse.com/#search=http2',
2 => 'http://curl.haxx.se/dev/readme-pipelining.html',
3 => 'http://doc.qt.nokia.com/4.6/qnetworkrequest.html',
4 => 'http://kb.mozillazine.org/Network.http.pipelining',
5 => 'http://miltonkeynes.pm.org/talks/2010/02/colin_bradford_http_async.pdf',
6 => 'http://publib.boulder.ibm.com/infocenter/cicsts/v3r1/index.jsp?topic=/com.ibm.cics.ts31.doc/dfhtl/topics/dfhtl_cwspipelining.htm',
7 => 'http://tools.ietf.org/html/rfc7230#section-6.3.2',
8 => 'http://tools.ietf.org/html/rfc7230#section-6.4',
9 => 'http://www.daemonology.net/phttpget/',
10 => 'http://www.erenkrantz.com/oscon/OSCON%202007%20Subversion%20New%20Toys.pdf',
11 => 'http://www.hpl.hp.com/research/linux/httperf/',
12 => 'http://www.microsoft.com/windowsxp/expertzone/chats/transcripts/08_0814_ez_ie8.mspx',
13 => 'http://www.pps.jussieu.fr/~jch/software/polipo/',
14 => 'http://www.squid-cache.org/Doc/config/pipeline_prefetch/',
15 => 'http://www.w3.org/Library/User/History.html',
16 => 'http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html',
17 => 'http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html',
18 => 'http://www8.org/w8-papers/5c-protocols/key/key.html',
19 => 'https://archive.org/details/firefoxsecrets0000chea/page/180',
20 => 'https://blogs.msdn.microsoft.com/ie/2005/04/11/internet-explorer-and-connection-limits/',
21 => 'https://books.google.com/books?id=J1gb2eb-NuEC&dq=pipelining+%22konqueror%22&pg=PA31',
22 => 'https://bugzilla.mozilla.org/show_bug.cgi?id=264354',
23 => 'https://bugzilla.mozilla.org/show_bug.cgi?id=1340655',
24 => 'https://code.google.com/p/serf/',
25 => 'https://daniel.haxx.se/blog/2019/04/06/curl-says-bye-bye-to-pipelining/',
26 => 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Connection_management_in_HTTP_1.x$revision/1330814',
27 => 'https://forum.palemoon.org/viewtopic.php?f=5&t=16869&p=123455',
28 => 'https://github.com/tempesta-tech/tempesta',
29 => 'https://github.com/tempesta-tech/tempesta/wiki/Servers:-Tempesta's-side',
30 => 'https://hg.mozilla.org/releases/mozilla-2.0/file/09565753ce5f/netwerk/protocol/http/src/nsHttpConnection.cpp#l251',
31 => 'https://lwn.net/Articles/362473/',
32 => 'https://technet.microsoft.com/en-us/library/cc737394(WS.10).aspx',
33 => 'https://web.archive.org/web/20091222054207/http://doc.qt.nokia.com/4.6/qnetworkrequest.html',
34 => 'https://web.archive.org/web/20101204053757/http://www.microsoft.com/windowsxp/expertzone/chats/transcripts/08_0814_ez_ie8.mspx',
35 => 'https://web.archive.org/web/20120310042434/http://miltonkeynes.pm.org/talks/2010/02/colin_bradford_http_async.pdf',
36 => 'https://web.archive.org/web/20120608143409/http://www.hpl.hp.com/research/linux/httperf/',
37 => 'https://web.archive.org/web/20120627181619/http://curl.haxx.se/dev/readme-pipelining.html',
38 => 'https://web.archive.org/web/20160424204340/http://www8.org/w8-papers/5c-protocols/key/key.html',
39 => 'https://web.archive.org/web/20210205184800/https://daniel.haxx.se/blog/2019/04/06/curl-says-bye-bye-to-pipelining/',
40 => 'https://www-archive.mozilla.org/projects/netlib/http/pipelining-faq.html',
41 => 'https://www.chromium.org/developers/design-documents/network-stack/http-pipelining',
42 => 'https://www.daemonology.net/phttpget/',
43 => 'https://www.die.net/musings/page_load_time/',
44 => 'https://www.ietf.org/archive/id/draft-nottingham-http-pipeline-01.html',
45 => 'https://www.mnot.net/blog/2007/06/20/proxy_caching',
46 => 'https://www.mnot.net/blog/2011/07/11/what_proxies_must_do',
47 => 'https://www.mozilla.org/projects/netlib/http/pipelining-faq.html',
48 => 'https://www.w3.org/Protocols/HTTP/Performance/Pipeline.html'
] |
Parsed HTML source of the new revision (new_html ) | '<div class="mw-parser-output"><p>Typo
</p>
<div id="toc" class="toc" role="navigation" aria-labelledby="mw-toc-heading"><input type="checkbox" role="button" id="toctogglecheckbox" class="toctogglecheckbox" style="display:none" /><div class="toctitle" lang="en" dir="ltr"><h2 id="mw-toc-heading">Contents</h2><span class="toctogglespan"><label class="toctogglelabel" for="toctogglecheckbox"></label></span></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Motivation_and_limitations"><span class="tocnumber">1</span> <span class="toctext">Motivation and limitations</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#Implementation_status"><span class="tocnumber">2</span> <span class="toctext">Implementation status</span></a>
<ul>
<li class="toclevel-2 tocsection-3"><a href="#Implementation_in_web_servers"><span class="tocnumber">2.1</span> <span class="toctext">Implementation in web servers</span></a></li>
<li class="toclevel-2 tocsection-4"><a href="#Implementation_in_web_browsers"><span class="tocnumber">2.2</span> <span class="toctext">Implementation in web browsers</span></a></li>
<li class="toclevel-2 tocsection-5"><a href="#Implementation_in_web_proxy_servers"><span class="tocnumber">2.3</span> <span class="toctext">Implementation in web proxy servers</span></a></li>
<li class="toclevel-2 tocsection-6"><a href="#Other_implementations"><span class="tocnumber">2.4</span> <span class="toctext">Other implementations</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-7"><a href="#See_also"><span class="tocnumber">3</span> <span class="toctext">See also</span></a></li>
<li class="toclevel-1 tocsection-8"><a href="#References"><span class="tocnumber">4</span> <span class="toctext">References</span></a></li>
<li class="toclevel-1 tocsection-9"><a href="#External_links"><span class="tocnumber">5</span> <span class="toctext">External links</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="Motivation_and_limitations">Motivation and limitations</span></h2>
<p>The pipelining of requests results in a dramatic improvement<sup id="cite_ref-1" class="reference"><a href="#cite_note-1">[1]</a></sup> in the loading times of HTML pages, especially over high <a href="/wiki/Latency_(engineering)" title="Latency (engineering)">latency</a> connections such as <a href="/wiki/Satellite_Internet" class="mw-redirect" title="Satellite Internet">satellite Internet connections</a>. The speedup is less apparent on broadband connections, as the limitation of HTTP 1.1 still applies: the server must send its responses in the same order that the requests were received—so the entire connection remains <a href="/wiki/FIFO_and_LIFO_accounting" title="FIFO and LIFO accounting">first-in-first-out</a><sup id="cite_ref-HTTP/1.1-pipelining_2-0" class="reference"><a href="#cite_note-HTTP/1.1-pipelining-2">[2]</a></sup> and <a href="/wiki/Head-of-line_blocking" title="Head-of-line blocking">HOL blocking</a> can occur.
</p><p>The asynchronous operation of <a href="/wiki/HTTP/2" title="HTTP/2">HTTP/2</a> and <a href="/wiki/SPDY" title="SPDY">SPDY</a> are solutions for this.<sup id="cite_ref-lwnspdy_3-0" class="reference"><a href="#cite_note-lwnspdy-3">[3]</a></sup> Browsers ultimately did not enable pipelining by default, and by 2017 most browsers supported HTTP/2 by default which used multiplexing instead.<sup id="cite_ref-:0_4-0" class="reference"><a href="#cite_note-:0-4">[4]</a></sup>
</p><p>Non-<a href="/wiki/Idempotence_(computer_science)#Examples" class="mw-redirect" title="Idempotence (computer science)">idempotent</a> requests, like those using <a href="/wiki/POST_(HTTP)" title="POST (HTTP)"><code>POST</code></a>, should not be pipelined.<sup id="cite_ref-non-idempotent_5-0" class="reference"><a href="#cite_note-non-idempotent-5">[5]</a></sup> Sequences of <code>GET</code> and <code>HEAD</code> requests can always be pipelined. A sequence of other idempotent requests like <code>PUT</code> and <code>DELETE</code> can be pipelined or not depending on whether requests in the sequence depend on the effect of others.<sup id="cite_ref-HTTP/1.1-pipelining_2-1" class="reference"><a href="#cite_note-HTTP/1.1-pipelining-2">[2]</a></sup>
</p><p>HTTP pipelining requires both the client and the server to support it. <a href="/wiki/Hypertext_Transfer_Protocol" title="Hypertext Transfer Protocol">HTTP/1.1</a> 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.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6">[6]</a></sup>
</p>
<div style="clear:left;"></div>
<p>Most pipelining problems may happen in HTTP <b>intermediate nodes</b> (hop-by-hop), i.e. mainly in <a href="/wiki/Proxy_server" title="Proxy server">proxy servers</a> (proxies), specially in transparent proxy servers (because they are used anyway without requiring user client configuration, so if only one of them, along the HTTP chain, does not handle pipelined requests properly then nothing works as it should).<sup id="cite_ref-make-pipelining-usable_7-0" class="reference"><a href="#cite_note-make-pipelining-usable-7">[7]</a></sup>
</p><p>Using <b>pipelining</b> with HTTP <b>proxy</b> servers is usually <b>not recommended</b> also because the <b>HOL blocking</b> problem may really <b>slow down</b> a lot <b>proxy server responses</b> (as the server responses must be in the same order of the received requests).<sup id="cite_ref-HTTP/1.1-pipelining_2-2" class="reference"><a href="#cite_note-HTTP/1.1-pipelining-2">[2]</a></sup> <sup id="cite_ref-MSIE-8-chat-2008_8-0" class="reference"><a href="#cite_note-MSIE-8-chat-2008-8">[8]</a></sup>
</p><p><b>Example</b>: if a client sends 4 pipelined GET requests to a proxy through a single connection and the first one is not in its cache then the proxy has to forward that request to the destination web server; if the following three requests are instead found in its cache, the proxy has to wait for the web server response, then it has to send it to the client and only then it can send the three cached responses too.
</p><p>If instead a client opens 4 connections to a proxy and sends 1 GET request per connection (without using pipelining) then the proxy can send the three cached responses to client in parallel before the response from server is received, decreasing a lot the overall completion time (because requests are served in parallel with no head-of-line blocking problem).<sup id="cite_ref-HTTP/1.1-concurrency_9-0" class="reference"><a href="#cite_note-HTTP/1.1-concurrency-9">[9]</a></sup> The same advantage, but with more speed, happens in HTTP/2 multiplexed streams.
</p>
<h2><span class="mw-headline" id="Implementation_status">Implementation status</span></h2>
<p>Pipelining was introduced in HTTP/1.1 and was not present in HTTP/1.0.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10">[10]</a></sup>
</p><p>It looks like that since the beginning, implementing HTTP pipelining properly and / or deploying it has never been an easy task for anybody (excepted for developers of web servers). There have always been complains about browsers, proxy servers, etc. not working well when using pipelined requests / responses, up to the point that for many years (at least till 2011) software developers, engineers, web experts, etc. tried to summarize the various kind of problems they noted, to fix things and to give advices about how to deal with pipelining on the Open Web.<sup id="cite_ref-make-pipelining-usable_7-1" class="reference"><a href="#cite_note-make-pipelining-usable-7">[7]</a></sup>
</p>
<h3><span class="mw-headline" id="Implementation_in_web_servers">Implementation in web servers</span></h3>
<p>Implementing pipelining in <a href="/wiki/Web_server" title="Web server">web servers</a> is a relatively simple matter of making sure that network buffers are not discarded between requests. For that reason, most modern web servers (that fully implement HTTP/1.1) handle pipelining without any problem.
</p>
<h3><span class="mw-headline" id="Implementation_in_web_browsers">Implementation in web browsers</span></h3>
<p>Of all the major browsers, only <a href="/wiki/Opera_(web_browser)" title="Opera (web browser)">Opera</a> based on <a href="/wiki/Presto_(layout_engine)" class="mw-redirect" title="Presto (layout engine)">Presto</a> layout engine had a fully working implementation that was enabled by default. In all other browsers HTTP pipelining was disabled or not implemented.<sup id="cite_ref-lwnspdy_3-1" class="reference"><a href="#cite_note-lwnspdy-3">[3]</a></sup>
</p>
<ul><li><a href="/wiki/Internet_Explorer_8" title="Internet Explorer 8">Internet Explorer 8</a> does not pipeline requests, due to concerns regarding buggy proxies and <a href="/wiki/Head-of-line_blocking" title="Head-of-line blocking">head-of-line blocking</a>.<sup id="cite_ref-MSIE-8-chat-2008_8-1" class="reference"><a href="#cite_note-MSIE-8-chat-2008-8">[8]</a></sup></li>
<li><a href="/wiki/Internet_Explorer_11" title="Internet Explorer 11">Internet Explorer 11</a> does not support pipelining.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11">[11]</a></sup></li>
<li>Mozilla browsers (such as <a href="/wiki/Mozilla_Firefox" class="mw-redirect" title="Mozilla Firefox">Mozilla Firefox</a>, <a href="/wiki/SeaMonkey" title="SeaMonkey">SeaMonkey</a> and <a href="/wiki/Camino_(web_browser)" title="Camino (web browser)">Camino</a>) support pipelining; however, it is disabled by default.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12">[12]</a></sup><sup id="cite_ref-13" class="reference"><a href="#cite_note-13">[13]</a></sup> Pipelining is disabled by default to avoid issues with misbehaving servers.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14">[14]</a></sup> When pipelining is enabled, Mozilla browsers use some heuristics, especially to turn pipelining off for older <a href="/wiki/Internet_Information_Services" title="Internet Information Services">IIS</a> servers.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15">[15]</a></sup> Support for H1 Pipeline was removed from Mozilla Firefox in Version 54.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16">[16]</a></sup></li>
<li><a href="/wiki/Konqueror" title="Konqueror">Konqueror</a> 2.0 supports pipelining, but it is disabled by default.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17">[17]</a></sup></li>
<li><a href="/wiki/Google_Chrome" title="Google Chrome">Google Chrome</a> previously supported pipelining, but it has been disabled due to bugs and problems with poorly behaving servers.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18">[18]</a></sup></li>
<li><a href="/wiki/Pale_Moon_(web_browser)" class="mw-redirect" title="Pale Moon (web browser)">Pale Moon (web browser)</a> supports pipelining, and is enabled by default.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19">[19]</a></sup></li></ul>
<h3><span class="mw-headline" id="Implementation_in_web_proxy_servers">Implementation in web proxy servers</span></h3>
<p>Most HTTP proxies do not pipeline outgoing requests.<sup id="cite_ref-20" class="reference"><a href="#cite_note-20">[20]</a></sup>
</p><p>Some HTTP proxies, including transparent HTTP proxies, may manage pipelined requests very badly (i.e. by mixing up the order of pipelined responses, etc.).<sup id="cite_ref-21" class="reference"><a href="#cite_note-21">[21]</a></sup>
</p><p>Some versions of the <a href="/wiki/Squid_(software)" title="Squid (software)">Squid</a> web proxy will pipeline up to two outgoing requests. This functionality has been disabled by default and needs to be manually enabled for "bandwidth management and access logging reasons".<sup id="cite_ref-22" class="reference"><a href="#cite_note-22">[22]</a></sup> Squid supports multiple requests from clients.
</p><p>The <a href="/wiki/Polipo" title="Polipo">Polipo</a> proxy pipelines outgoing requests.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23">[23]</a></sup>
</p><p>Tempesta FW, an open source <a href="/wiki/Application_delivery_controller" title="Application delivery controller">application delivery controller</a>,<sup id="cite_ref-24" class="reference"><a href="#cite_note-24">[24]</a></sup> also pipelines requests to backend servers.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25">[25]</a></sup>
</p>
<h3><span class="mw-headline" id="Other_implementations">Other implementations</span></h3>
<p>The <a href="/wiki/Libwww" title="Libwww">libwww</a> <a href="/wiki/Library_(computing)" title="Library (computing)">library</a> made by the <a href="/wiki/World_Wide_Web_Consortium" title="World Wide Web Consortium">World Wide Web Consortium</a> (W3C), supports pipelining since version 5.1 released at 18 February 1997.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26">[26]</a></sup>
</p><p>Other application development libraries that support HTTP pipelining include:
</p>
<ul><li>Perl modules providing client support for HTTP pipelining are HTTP::Async and the LWPng (<a href="/wiki/Libwww-perl" class="mw-redirect" title="Libwww-perl">libwww-perl</a> New Generation) library.<sup id="cite_ref-27" class="reference"><a href="#cite_note-27">[27]</a></sup></li>
<li>The Microsoft <a href="/wiki/.NET_Framework" title=".NET Framework">.NET Framework</a> 3.5 supports HTTP pipelining in the module <code>System.Net.HttpWebRequest</code>.<sup id="cite_ref-28" class="reference"><a href="#cite_note-28">[28]</a></sup></li>
<li><a href="/wiki/Qt_(framework)" class="mw-redirect" title="Qt (framework)">Qt</a> class <code>QNetworkRequest</code>, introduced in 4.4.<sup id="cite_ref-29" class="reference"><a href="#cite_note-29">[29]</a></sup></li></ul>
<p>Some other applications currently exploiting pipelining are:
</p>
<ul><li>IceBreak application server since BUILD389</li>
<li>phttpget from <a href="/wiki/FreeBSD" title="FreeBSD">FreeBSD</a> (a minimalist pipelined HTTP client)<sup id="cite_ref-30" class="reference"><a href="#cite_note-30">[30]</a></sup></li>
<li><a href="/wiki/Libcurl" class="mw-redirect" title="Libcurl">libcurl</a> previously had limited support for pipelining using the CURLMOPT_PIPELINING option,<sup id="cite_ref-31" class="reference"><a href="#cite_note-31">[31]</a></sup> but this support was removed in version 7.65.0<sup id="cite_ref-32" class="reference"><a href="#cite_note-32">[32]</a></sup></li>
<li><a href="/wiki/Portsnap" title="Portsnap">portsnap</a> (a <a href="/wiki/FreeBSD" title="FreeBSD">FreeBSD</a> <a href="/wiki/FreeBSD_Ports" title="FreeBSD Ports">ports tree</a> distribution system)</li>
<li><a href="/wiki/APT_(software)" title="APT (software)">Advanced Packaging Tool</a> (APT) supports pipelining.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (August 2010)">citation needed</span></a></i>]</sup></li>
<li><a href="/wiki/Apache_Subversion" title="Apache Subversion">Subversion</a> (SVN) has optional support for HTTP pipelining with the serf WebDAV access module (the default module, neon, does not have pipelining support).<sup id="cite_ref-33" class="reference"><a href="#cite_note-33">[33]</a></sup><sup id="cite_ref-34" class="reference"><a href="#cite_note-34">[34]</a></sup></li>
<li><a href="/wiki/Microsoft_Message_Queuing" title="Microsoft Message Queuing">Microsoft Message Queuing</a> on <a href="/wiki/Windows_Server_2003" title="Windows Server 2003">Windows Server 2003</a> utilises pipelining on HTTP by default, and can be configured to use it on HTTPS.<sup id="cite_ref-35" class="reference"><a href="#cite_note-35">[35]</a></sup></li>
<li>IBM <a href="/wiki/CICS" title="CICS">CICS</a> 3.1 supports HTTP pipelining within its client.<sup id="cite_ref-36" class="reference"><a href="#cite_note-36">[36]</a></sup></li></ul>
<p>Testing tools which support HTTP pipelining include:
</p>
<ul><li><a href="/wiki/Httperf" title="Httperf">httperf</a><sup id="cite_ref-37" class="reference"><a href="#cite_note-37">[37]</a></sup></li></ul>
<h2><span class="mw-headline" id="See_also">See also</span></h2>
<ul><li><a href="/wiki/HTTP_persistent_connection" title="HTTP persistent connection">HTTP persistent connection</a></li>
<li><a href="/wiki/WebSocket" title="WebSocket">WebSocket</a></li>
<li><a href="/wiki/SPDY" title="SPDY">SPDY</a></li></ul>
<h2><span class="mw-headline" id="References">References</span></h2>
<style data-mw-deduplicate="TemplateStyles:r1011085734">.mw-parser-output .reflist{font-size:90%;margin-bottom:0.5em;list-style-type:decimal}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist">
<div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1067248974">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:linear-gradient(transparent,transparent),url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:linear-gradient(transparent,transparent),url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:linear-gradient(transparent,transparent),url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:linear-gradient(transparent,transparent),url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}</style><cite id="CITEREFNielsenGettysBaird-SmithPrud'hommeaux1997" class="citation web cs1"><a href="/wiki/Henrik_Frystyk_Nielsen" title="Henrik Frystyk Nielsen">Nielsen, Henrik Frystyk</a>; <a href="/wiki/Jim_Gettys" title="Jim Gettys">Gettys, Jim</a>; Baird-Smith, Anselm; Prud'hommeaux, Eric; <a href="/wiki/H%C3%A5kon_Wium_Lie" title="Håkon Wium Lie">Lie, Håkon Wium</a>; <a href="/wiki/Chris_Lilley_(computer_scientist)" title="Chris Lilley (computer scientist)">Lilley, Chris</a> (24 June 1997). <a rel="nofollow" class="external text" href="http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html">"Network Performance Effects of HTTP/1.1, CSS1, and PNG"</a>. World Wide Web Consortium<span class="reference-accessdate">. Retrieved <span class="nowrap">14 January</span> 2010</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Network+Performance+Effects+of+HTTP%2F1.1%2C+CSS1%2C+and+PNG&rft.pub=World+Wide+Web+Consortium&rft.date=1997-06-24&rft.aulast=Nielsen&rft.aufirst=Henrik+Frystyk&rft.au=Gettys%2C+Jim&rft.au=Baird-Smith%2C+Anselm&rft.au=Prud%27hommeaux%2C+Eric&rft.au=Lie%2C+H%C3%A5kon+Wium&rft.au=Lilley%2C+Chris&rft_id=http%3A%2F%2Fwww.w3.org%2FProtocols%2FHTTP%2FPerformance%2FPipeline.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-HTTP/1.1-pipelining-2"><span class="mw-cite-backlink">^ <a href="#cite_ref-HTTP/1.1-pipelining_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-HTTP/1.1-pipelining_2-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-HTTP/1.1-pipelining_2-2"><sup><i><b>c</b></i></sup></a></span> <span class="error mw-ext-cite-error" lang="en" dir="ltr">Cite error: The named reference <code>HTTP/1.1-pipelining</code> was invoked but never defined (see the <a href="/wiki/Help:Cite_errors/Cite_error_references_no_text" title="Help:Cite errors/Cite error references no text">help page</a>).
</span></li>
<li id="cite_note-lwnspdy-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-lwnspdy_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-lwnspdy_3-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite id="CITEREFWillis2009" class="citation web cs1">Willis, Nathan (18 November 2009). <a rel="nofollow" class="external text" href="https://lwn.net/Articles/362473/">"Reducing HTTP latency with SPDY"</a>. <a href="/wiki/LWN.net" title="LWN.net">LWN.net</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Reducing+HTTP+latency+with+SPDY&rft.pub=LWN.net&rft.date=2009-11-18&rft.aulast=Willis&rft.aufirst=Nathan&rft_id=https%3A%2F%2Flwn.net%2FArticles%2F362473%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-:0-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-:0_4-0">^</a></b></span> <span class="error mw-ext-cite-error" lang="en" dir="ltr">Cite error: The named reference <code>:0</code> was invoked but never defined (see the <a href="/wiki/Help:Cite_errors/Cite_error_references_no_text" title="Help:Cite errors/Cite error references no text">help page</a>).
</span></li>
<li id="cite_note-non-idempotent-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-non-idempotent_5-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html">"Connections"</a>. <a href="/wiki/W3.org" class="mw-redirect" title="W3.org">w3.org</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Connections&rft.pub=w3.org&rft_id=http%3A%2F%2Fwww.w3.org%2FProtocols%2Frfc2616%2Frfc2616-sec8.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www-archive.mozilla.org/projects/netlib/http/pipelining-faq.html">"HTTP/1.1 Pipelining FAQ'<span class="cs1-kern-right"></span>"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=HTTP%2F1.1+Pipelining+FAQ%27&rft_id=https%3A%2F%2Fwww-archive.mozilla.org%2Fprojects%2Fnetlib%2Fhttp%2Fpipelining-faq.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-make-pipelining-usable-7"><span class="mw-cite-backlink">^ <a href="#cite_ref-make-pipelining-usable_7-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-make-pipelining-usable_7-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite id="CITEREFMark_Nottingham2011" class="citation journal cs1">Mark Nottingham (March 14, 2011). <a rel="nofollow" class="external text" href="https://www.ietf.org/archive/id/draft-nottingham-http-pipeline-01.html">"Making HTTP Pipelining Usable on the Open Web"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">October 16,</span> 2021</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.atitle=Making+HTTP+Pipelining+Usable+on+the+Open+Web&rft.date=2011-03-14&rft.au=Mark+Nottingham&rft_id=https%3A%2F%2Fwww.ietf.org%2Farchive%2Fid%2Fdraft-nottingham-http-pipeline-01.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span> <span class="cs1-hidden-error citation-comment"><code class="cs1-code">{{<a href="/wiki/Template:Cite_journal" title="Template:Cite journal">cite journal</a>}}</code>: </span><span class="cs1-hidden-error citation-comment">Cite journal requires <code class="cs1-code">|journal=</code> (<a href="/wiki/Help:CS1_errors#missing_periodical" title="Help:CS1 errors">help</a>)</span></span>
</li>
<li id="cite_note-MSIE-8-chat-2008-8"><span class="mw-cite-backlink">^ <a href="#cite_ref-MSIE-8-chat-2008_8-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-MSIE-8-chat-2008_8-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20101204053757/http://www.microsoft.com/windowsxp/expertzone/chats/transcripts/08_0814_ez_ie8.mspx">"Wayback link of 'Windows Internet Explorer 8 Expert Zone Chat (August 14, 2008)'<span class="cs1-kern-right"></span>"</a>. <a href="/wiki/Microsoft" title="Microsoft">Microsoft</a>. August 14, 2008. Archived from <a rel="nofollow" class="external text" href="http://www.microsoft.com/windowsxp/expertzone/chats/transcripts/08_0814_ez_ie8.mspx">the original</a> on December 4, 2010<span class="reference-accessdate">. Retrieved <span class="nowrap">May 10,</span> 2012</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Wayback+link+of+%27Windows+Internet+Explorer+8+Expert+Zone+Chat+%28August+14%2C+2008%29%27&rft.pub=Microsoft&rft.date=2008-08-14&rft_id=http%3A%2F%2Fwww.microsoft.com%2Fwindowsxp%2Fexpertzone%2Fchats%2Ftranscripts%2F08_0814_ez_ie8.mspx&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-HTTP/1.1-concurrency-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-HTTP/1.1-concurrency_9-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://tools.ietf.org/html/rfc7230#section-6.4">"Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing: Concurrency"</a>. ietf.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2014-07-24</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Hypertext+Transfer+Protocol+%28HTTP%2F1.1%29%3A+Message+Syntax+and+Routing%3A+Concurrency&rft.pub=ietf.org&rft_id=http%3A%2F%2Ftools.ietf.org%2Fhtml%2Frfc7230%23section-6.4&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20160424204340/http://www8.org/w8-papers/5c-protocols/key/key.html">"Archived copy"</a>. Archived from <a rel="nofollow" class="external text" href="http://www8.org/w8-papers/5c-protocols/key/key.html">the original</a> on 2016-04-24<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-04-16</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Archived+copy&rft_id=http%3A%2F%2Fwww8.org%2Fw8-papers%2F5c-protocols%2Fkey%2Fkey.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span><span class="cs1-maint citation-comment"><code class="cs1-code">{{<a href="/wiki/Template:Cite_web" title="Template:Cite web">cite web</a>}}</code>: CS1 maint: archived copy as title (<a href="/wiki/Category:CS1_maint:_archived_copy_as_title" title="Category:CS1 maint: archived copy as title">link</a>)</span></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation news cs1"><a rel="nofollow" class="external text" href="https://blogs.msdn.microsoft.com/ie/2005/04/11/internet-explorer-and-connection-limits/">"Internet Explorer and Connection Limits"</a>. <i>IEBlog</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2016-11-14</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEBlog&rft.atitle=Internet+Explorer+and+Connection+Limits&rft_id=https%3A%2F%2Fblogs.msdn.microsoft.com%2Fie%2F2005%2F04%2F11%2Finternet-explorer-and-connection-limits%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://kb.mozillazine.org/Network.http.pipelining">Pipelining Network</a> <a href="/wiki/MozillaZine" title="MozillaZine">MozillaZine</a></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite id="CITEREFCheah_Chu_Yeow2005" class="citation book cs1">Cheah Chu Yeow (2005). <span class="cs1-lock-registration" title="Free registration required"><a rel="nofollow" class="external text" href="https://archive.org/details/firefoxsecrets0000chea/page/180"><i>Firefox secrets</i></a></span>. p. <a rel="nofollow" class="external text" href="https://archive.org/details/firefoxsecrets0000chea/page/180">180</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/0-9752402-4-2" title="Special:BookSources/0-9752402-4-2"><bdi>0-9752402-4-2</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Firefox+secrets&rft.pages=180&rft.date=2005&rft.isbn=0-9752402-4-2&rft.au=Cheah+Chu+Yeow&rft_id=https%3A%2F%2Farchive.org%2Fdetails%2Ffirefoxsecrets0000chea%2Fpage%2F180&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://bugzilla.mozilla.org/show_bug.cgi?id=264354">"Bug 264354: Enable HTTP pipelining by default"</a>. <a href="/wiki/Mozilla" title="Mozilla">Mozilla</a><span class="reference-accessdate">. Retrieved <span class="nowrap">September 16,</span> 2011</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Bug+264354%3A+Enable+HTTP+pipelining+by+default&rft.pub=Mozilla&rft_id=https%3A%2F%2Fbugzilla.mozilla.org%2Fshow_bug.cgi%3Fid%3D264354&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://hg.mozilla.org/releases/mozilla-2.0/file/09565753ce5f/netwerk/protocol/http/src/nsHttpConnection.cpp#l251">"Source code – nsHttpConnection.cpp"</a>. <i>Firefox source code</i>. Mozilla. May 7, 2010<span class="reference-accessdate">. Retrieved <span class="nowrap">December 5,</span> 2010</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Firefox+source+code&rft.atitle=Source+code+%E2%80%93+nsHttpConnection.cpp&rft.date=2010-05-07&rft_id=https%3A%2F%2Fhg.mozilla.org%2Freleases%2Fmozilla-2.0%2Ffile%2F09565753ce5f%2Fnetwerk%2Fprotocol%2Fhttp%2Fsrc%2FnsHttpConnection.cpp%23l251&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1340655">"Bug 1340655: Remove H1 Pipeline Support"</a>. <a href="/wiki/Mozilla" title="Mozilla">Mozilla</a><span class="reference-accessdate">. Retrieved <span class="nowrap">March 22,</span> 2017</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Bug+1340655%3A+Remove+H1+Pipeline+Support&rft.pub=Mozilla&rft_id=https%3A%2F%2Fbugzilla.mozilla.org%2Fshow_bug.cgi%3Fid%3D1340655&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite id="CITEREFEmir_Arian" class="citation book cs1">Emir Arian. <a rel="nofollow" class="external text" href="https://books.google.com/books?id=J1gb2eb-NuEC&dq=pipelining+%22konqueror%22&pg=PA31"><i>Internet Communication: Protocols and related subjects</i></a><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-10-16</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Internet+Communication%3A+Protocols+and+related+subjects&rft.au=Emir+Arian&rft_id=https%3A%2F%2Fbooks.google.com%2Fbooks%3Fid%3DJ1gb2eb-NuEC%26dq%3Dpipelining%2B%2522konqueror%2522%26pg%3DPA31&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.chromium.org/developers/design-documents/network-stack/http-pipelining">HTTP Pipelining - The Chromium Projects</a></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://forum.palemoon.org/viewtopic.php?f=5&t=16869&p=123455">"HTTP/1 Pipelining support has been removed in Firefox 54 - Pale Moon forum"</a>. <i>forum.palemoon.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2018-06-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=forum.palemoon.org&rft.atitle=HTTP%2F1+Pipelining+support+has+been+removed+in+Firefox+54+-+Pale+Moon+forum&rft_id=https%3A%2F%2Fforum.palemoon.org%2Fviewtopic.php%3Ff%3D5%26t%3D16869%26p%3D123455&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite id="CITEREFMark_Nottingham2007" class="citation web cs1">Mark Nottingham (June 20, 2007). <a rel="nofollow" class="external text" href="https://www.mnot.net/blog/2007/06/20/proxy_caching">"The State of Proxy Caching"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">May 16,</span> 2009</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=The+State+of+Proxy+Caching&rft.date=2007-06-20&rft.au=Mark+Nottingham&rft_id=https%3A%2F%2Fwww.mnot.net%2Fblog%2F2007%2F06%2F20%2Fproxy_caching&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite id="CITEREFMark_Nottingham2011" class="citation web cs1">Mark Nottingham (July 11, 2011). <a rel="nofollow" class="external text" href="https://www.mnot.net/blog/2011/07/11/what_proxies_must_do">"What proxies must do"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">October 16,</span> 2021</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=What+proxies+must+do&rft.date=2011-07-11&rft.au=Mark+Nottingham&rft_id=https%3A%2F%2Fwww.mnot.net%2Fblog%2F2011%2F07%2F11%2Fwhat_proxies_must_do&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.squid-cache.org/Doc/config/pipeline_prefetch/">"squid : pipeline_prefetch configuration directive"</a>. <a href="/wiki/Squid_(software)" title="Squid (software)">Squid</a>. November 9, 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">December 1,</span> 2009</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=squid+%3A+pipeline_prefetch+configuration+directive&rft.pub=Squid&rft.date=2009-11-09&rft_id=http%3A%2F%2Fwww.squid-cache.org%2FDoc%2Fconfig%2Fpipeline_prefetch%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.pps.jussieu.fr/~jch/software/polipo/">"Polipo — a caching web proxy"</a>. Juliusz Chroboczek. September 18, 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">November 12,</span> 2009</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Polipo+%E2%80%94+a+caching+web+proxy&rft.pub=Juliusz+Chroboczek&rft.date=2009-09-18&rft_id=http%3A%2F%2Fwww.pps.jussieu.fr%2F~jch%2Fsoftware%2Fpolipo%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/tempesta-tech/tempesta">"Tempesta FW — a Linux Application Delivery Controller"</a>. GitHub<span class="reference-accessdate">. Retrieved <span class="nowrap">March 29,</span> 2018</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Tempesta+FW+%E2%80%94+a+Linux+Application+Delivery+Controller&rft.pub=GitHub&rft_id=https%3A%2F%2Fgithub.com%2Ftempesta-tech%2Ftempesta&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/tempesta-tech/tempesta/wiki/Servers:-Tempesta's-side">"Servers: Tempesta's side - tempesta-tech/tempesta Wiki"</a>. Tempesta Technologies INC. August 1, 2017<span class="reference-accessdate">. Retrieved <span class="nowrap">March 29,</span> 2018</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Servers%3A+Tempesta%27s+side+-+tempesta-tech%2Ftempesta+Wiki&rft.pub=Tempesta+Technologies+INC&rft.date=2017-08-01&rft_id=https%3A%2F%2Fgithub.com%2Ftempesta-tech%2Ftempesta%2Fwiki%2FServers%3A-Tempesta%27s-side&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite id="CITEREFKahan2002" class="citation web cs1">Kahan, José (June 7, 2002). <a rel="nofollow" class="external text" href="http://www.w3.org/Library/User/History.html">"Change History of libwww"</a>. <a href="/wiki/World_Wide_Web_Consortium" title="World Wide Web Consortium">World Wide Web Consortium</a><span class="reference-accessdate">. Retrieved <span class="nowrap">August 3,</span> 2010</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Change+History+of+libwww&rft.pub=World+Wide+Web+Consortium&rft.date=2002-06-07&rft.aulast=Kahan&rft.aufirst=Jos%C3%A9&rft_id=http%3A%2F%2Fwww.w3.org%2FLibrary%2FUser%2FHistory.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120310042434/http://miltonkeynes.pm.org/talks/2010/02/colin_bradford_http_async.pdf">"Using HTTP::Async for Parallel HTTP Requests (Colin Bradford)"</a> <span class="cs1-format">(PDF)</span>. Archived from <a rel="nofollow" class="external text" href="http://miltonkeynes.pm.org/talks/2010/02/colin_bradford_http_async.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2012-03-10<span class="reference-accessdate">. Retrieved <span class="nowrap">2010-08-03</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Using+HTTP%3A%3AAsync+for+Parallel+HTTP+Requests+%28Colin+Bradford%29&rft_id=http%3A%2F%2Fmiltonkeynes.pm.org%2Ftalks%2F2010%2F02%2Fcolin_bradford_http_async.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://blogs.msdn.com/b/mflasko/archive/2006/07/17/669293.aspx">System.Net.HttpWebRequest & pipelining</a></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://doc.qt.nokia.com/4.6/qnetworkrequest.html">QNetworkRequest Class Reference</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20091222054207/http://doc.qt.nokia.com/4.6/qnetworkrequest.html">Archived</a> 2009-12-22 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a>, Nokia QT documentation</span>
</li>
<li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.daemonology.net/phttpget/">Pipelined HTTP GET utility</a></span>
</li>
<li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://curl.haxx.se/dev/readme-pipelining.html">Curl pipelining explanation</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120627181619/http://curl.haxx.se/dev/readme-pipelining.html">Archived</a> 2012-06-27 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a>, Curl developer documentation</span>
</li>
<li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://daniel.haxx.se/blog/2019/04/06/curl-says-bye-bye-to-pipelining/">Curl pipelining removal announcement</a><a rel="nofollow" class="external text" href="https://web.archive.org/web/20210205184800/https://daniel.haxx.se/blog/2019/04/06/curl-says-bye-bye-to-pipelining/">Archived</a> 2021-02-05 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a></span>
</li>
<li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite id="CITEREFC._Michael_PilatoBen_Collins-SussmanBrian_W._Fitzpatrick2008" class="citation book cs1">C. Michael Pilato; Ben Collins-Sussman; Brian W. Fitzpatrick (2008). <i>Version Control with Subversion</i>. <a href="/wiki/O%27Reilly_Media" title="O'Reilly Media">O'Reilly Media</a>. p. 238. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-596-51033-6" title="Special:BookSources/978-0-596-51033-6"><bdi>978-0-596-51033-6</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Version+Control+with+Subversion&rft.pages=238&rft.pub=O%27Reilly+Media&rft.date=2008&rft.isbn=978-0-596-51033-6&rft.au=C.+Michael+Pilato&rft.au=Ben+Collins-Sussman&rft.au=Brian+W.+Fitzpatrick&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite id="CITEREFJustin_R._Erenkrantz2007" class="citation web cs1">Justin R. Erenkrantz (2007). <a rel="nofollow" class="external text" href="http://www.erenkrantz.com/oscon/OSCON%202007%20Subversion%20New%20Toys.pdf">"Subversion: Powerful New Toys"</a> <span class="cs1-format">(PDF)</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Subversion%3A+Powerful+New+Toys&rft.date=2007&rft.au=Justin+R.+Erenkrantz&rft_id=http%3A%2F%2Fwww.erenkrantz.com%2Foscon%2FOSCON%25202007%2520Subversion%2520New%2520Toys.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-35">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://technet.microsoft.com/en-us/library/cc737394%28WS.10%29.aspx">"HTTP/HTTPS messages"</a>. <a href="/wiki/Microsoft_TechNet" title="Microsoft TechNet">Microsoft TechNet</a>. January 21, 2005.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=HTTP%2FHTTPS+messages&rft.pub=Microsoft+TechNet&rft.date=2005-01-21&rft_id=https%3A%2F%2Ftechnet.microsoft.com%2Fen-us%2Flibrary%2Fcc737394%2528WS.10%2529.aspx&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
<li id="cite_note-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-36">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://publib.boulder.ibm.com/infocenter/cicsts/v3r1/index.jsp?topic=/com.ibm.cics.ts31.doc/dfhtl/topics/dfhtl_cwspipelining.htm">How CICS Web support handles pipelining</a></span>
</li>
<li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120608143409/http://www.hpl.hp.com/research/linux/httperf/">"HTTP Website"</a>. Archived from <a rel="nofollow" class="external text" href="http://www.hpl.hp.com/research/linux/httperf/">the original</a> on 2012-06-08<span class="reference-accessdate">. Retrieved <span class="nowrap">2010-10-01</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=HTTP+Website&rft_id=http%3A%2F%2Fwww.hpl.hp.com%2Fresearch%2Flinux%2Fhttperf%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></span>
</li>
</ol></div></div>
<h2><span class="mw-headline" id="External_links">External links</span></h2>
<ul><li>RFC 7230 <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1067248974"/><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://tools.ietf.org/html/rfc7230#section-6.3.2">"Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing"</a>. ietf.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2014-07-24</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Hypertext+Transfer+Protocol+%28HTTP%2F1.1%29%3A+Message+Syntax+and+Routing&rft.pub=ietf.org&rft_id=http%3A%2F%2Ftools.ietf.org%2Fhtml%2Frfc7230%23section-6.3.2&rfr_id=info%3Asid%2Fen.wikipedia.org%3AHTTP+pipelining" class="Z3988"></span></li>
<li><a rel="nofollow" class="external text" href="https://www.mozilla.org/projects/netlib/http/pipelining-faq.html">HTTP/1.1 Pipelining FAQ at mozilla.org</a></li>
<li><a rel="nofollow" class="external text" href="https://www.w3.org/Protocols/HTTP/Performance/Pipeline.html">"Network Performance Effects of HTTP/1.1, CSS1, and PNG" at w3.org</a></li>
<li><a rel="nofollow" class="external text" href="https://www.die.net/musings/page_load_time/">"Optimizing Page Load Times" article</a></li>
<li><a rel="nofollow" class="external text" href="https://www.daemonology.net/phttpget/">phttpget</a></li>
<li><a rel="nofollow" class="external text" href="https://code.google.com/p/serf/">serf</a> C library</li></ul></div>' |
Whether or not the change was made through a Tor exit node (tor_exit_node ) | false |
Unix timestamp of change (timestamp ) | 1646340260 |