
HTTP pipelining is a feature of HTTP/1.1, which allows multiple
HTTP
HTTP (Hypertext Transfer Protocol) is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web, wher ...
requests to be sent over a single
TCP connection without waiting for the corresponding responses.
HTTP/1.1 requires servers to respond to pipelined requests correctly, with 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.
The technique was superseded by
multiplexing
In telecommunications and computer networking, multiplexing (sometimes contracted to muxing) is a method by which multiple analog or digital signals are combined into one signal over a shared medium. The aim is to share a scarce resource� ...
via
HTTP/2
HTTP/2 (originally named HTTP/2.0) is a major revision of the HTTP network protocol used by the World Wide Web. It was derived from the earlier experimental SPDY protocol, originally developed by Google. HTTP/2 was developed by the HTTP Working ...
,
which is supported by most modern
browsers
Browse, browser, or browsing may refer to:
Computing
*Browser service, a feature of Microsoft Windows to browse shared network resources
*Code browser, a program for navigating source code
*File browser or file manager, a program used to manage f ...
.
In
HTTP/3
HTTP/3 is the third major version of the Hypertext Transfer Protocol used to exchange information on the World Wide Web, complementing the widely deployed HTTP/1.1 and HTTP/2. Unlike previous versions which relied on the well-established TCP ...
, multiplexing is accomplished via
QUIC
QUIC () is a general-purpose transport layer network protocol initially designed by Jim Roskind at Google. It was first implemented and deployed in 2012 and was publicly announced in 2013 as experimentation broadened. It was also described at an ...
which replaces
TCP. This further reduces loading time, as there is no
head-of-line blocking
Head-of-line blocking (HOL blocking) in computer networking is a performance-limiting phenomenon that occurs when a queue of packets is held up by the first packet in the queue. This occurs, for example, in input-buffered network switches, out-o ...
even if some packets are lost.
Motivation and limitations
The pipelining of requests results in a dramatic improvement in the loading times of HTML pages, especially over high
latency connections such as
satellite Internet connections. 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
first-in-first-out
FIFO and LIFO accounting are methods used in managing inventory and financial matters involving the amount of money a company has to have tied up within inventory of produced goods, raw materials, parts, components, or feedstocks. They are used to ...
and
HOL blocking can occur.
The asynchronous operations of
HTTP/2
HTTP/2 (originally named HTTP/2.0) is a major revision of the HTTP network protocol used by the World Wide Web. It was derived from the earlier experimental SPDY protocol, originally developed by Google. HTTP/2 was developed by the HTTP Working ...
and
SPDY are solution for this.
By 2017 most browsers supported HTTP/2 by default which uses multiplexing instead.
Non-
idempotent
Idempotence (, ) is the property of certain operations in mathematics and computer science whereby they can be applied multiple times without changing the result beyond the initial application. The concept of idempotence arises in a number of pl ...
requests such as
POST
should not be pipelined.
Read requests like
GET
and
HEAD
can always be pipelined. A sequence of other idempotent requests like
PUT
and
DELETE
can be pipelined or not depending on whether requests in the sequence depend on the effect of others.
HTTP pipelining requires both the client and the server to support it.
HTTP/1.1 conforming servers are required to produce valid responses to pipelined requests, but may not actually process requests concurrently.
Most pipelining problems happen in HTTP intermediate nodes (hop-by-hop), i.e. in
proxy servers, especially in transparent proxy servers (if one of them along the HTTP chain does not handle pipelined requests properly then nothing works as it should).
Using pipelining with HTTP proxy servers is usually not recommended also because the HOL blocking problem may really slow down proxy server responses (as the server responses must be in the same order of the received requests).
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) the proxy can send the three cached responses to client in parallel before the response from server is received, decreasing the overall completion time (because requests are served in parallel with no head-of-line blocking problem).
The same advantage exists in HTTP/2 multiplexed streams.
Implementation status
Pipelining was introduced in HTTP/1.1 and was not present in HTTP/1.0.
There have always been complaints 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.
Implementation in web browsers
Of all the major browsers, only
Opera
Opera is a form of History of theatre#European theatre, Western theatre in which music is a fundamental component and dramatic roles are taken by Singing, singers. Such a "work" (the literal translation of the Italian word "opera") is typically ...
had a fully working implementation that was enabled by default. In other browsers HTTP pipelining was disabled or not implemented.
*
Internet Explorer 8
Windows Internet Explorer 8 (IE8) is a web browser for Windows. It was released by Microsoft on March 19, 2009, and was the default browser on Windows 7 and Windows Server 2008 R2.
It is the first version of IE to pass the Acid2 test, the last ...
does not support pipeline requests, due to concerns regarding buggy proxies and
head-of-line blocking
Head-of-line blocking (HOL blocking) in computer networking is a performance-limiting phenomenon that occurs when a queue of packets is held up by the first packet in the queue. This occurs, for example, in input-buffered network switches, out-o ...
.
*
Internet Explorer 11
Internet Explorer 11 (IE11) is the eleventh and final version of the Internet Explorer web browser, by now retired. It was initially included in the release of Windows 8.1, Windows RT, Windows RT 8.1 and Windows Server 2012 R2 on October 17, 2013 ...
does not support pipelining.
*Mozilla browsers (such as
Mozilla Firefox
Mozilla Firefox, or simply Firefox, is a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. It uses the Gecko rendering engine to display web pages, which implements curren ...
,
SeaMonkey
SeaMonkey is a free and open-source Internet suite. It is the continuation of the former Mozilla Application Suite, based on the same source code, which itself grew out of Netscape Communicator and formed the base of Netscape 6 and Netscape ...
and
Camino) used to support pipelining; however, it was removed in Firefox 54. When it was supported, pipelining was disabled by default to avoid issues with misbehaving servers. If pipelining was enabled by the user, Mozilla browsers used some heuristics, mostly to turn pipelining off for older
Microsoft IIS
Microsoft IIS (Internet Information Services, IIS, 2S) is an extensible web server created by Microsoft for use with the Windows NT family. IIS supports HTTP, HTTP/2, HTTP/3, HTTPS, FTP, FTPS, SMTP and NNTP. It has been an integral part of th ...
servers. The removal was eventually backported to SeaMonkey.
*
Konqueror
Konqueror is a Free and open-source software, free and open-source web browser and file manager that provides World Wide Web, web access and file viewer, file-viewer functionality for file systems (such as local files, files on a remote FTP ser ...
2.0 supports pipelining, but it is disabled by default.
*
Google Chrome
Google Chrome is a web browser developed by Google. It was first released in 2008 for Microsoft Windows, built with free software components from Apple WebKit and Mozilla Firefox. Versions were later released for Linux, macOS, iOS, iPadOS, an ...
previously supported pipelining, but it has been disabled due to bugs and problems with poorly behaving servers.
*
Pale Moon (web browser)
Pale Moon is a free and open-source web browser
A web browser, often shortened to browser, is an application for accessing websites. When a user requests a web page from a particular website, the browser retrieves its files from a web ...
supports pipelining, and is enabled by default.
Implementation in web proxy servers
Most HTTP proxies do not pipeline outgoing requests.
Some HTTP proxies, including transparent HTTP proxies, may manage pipelined requests very badly (e.g. by mixing up the order of pipelined responses).
Some versions of the
Squid
A squid (: squid) is a mollusc with an elongated soft body, large eyes, eight cephalopod limb, arms, and two tentacles in the orders Myopsida, Oegopsida, and Bathyteuthida (though many other molluscs within the broader Neocoleoidea are also ...
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". Squid supports multiple requests from clients.
The
Polipo proxy pipelines outgoing requests.
Tempesta FW, an open source
application delivery controller, also pipelines requests to backend servers.
Other implementations
The
libwww
Libwww is an early World Wide Web software library providing core functions for web browsers, implementing HTML, HTTP, and other technologies. Tim Berners-Lee, at the European Organization for Nuclear Research (CERN), released libwww (then also ca ...
library
A library is a collection of Book, books, and possibly other Document, materials and Media (communication), media, that is accessible for use by its members and members of allied institutions. Libraries provide physical (hard copies) or electron ...
made by the
World Wide Web Consortium
The World Wide Web Consortium (W3C) is the main international standards organization for the World Wide Web. Founded in 1994 by Tim Berners-Lee, the consortium is made up of member organizations that maintain full-time staff working together in ...
(W3C), supports pipelining since version 5.1 released at 18 February 1997.
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.
*The Microsoft
.NET Framework 3.5 supports HTTP pipelining in the module
System.Net.HttpWebRequest
.
*
Qt class
QNetworkRequest
, introduced in 4.4.
Some other applications currently exploiting pipelining are:
*IceBreak application server since BUILD389
*phttpget from
FreeBSD
FreeBSD is a free-software Unix-like operating system descended from the Berkeley Software Distribution (BSD). The first version was released in 1993 developed from 386BSD, one of the first fully functional and free Unix clones on affordable ...
(a minimalist pipelined HTTP client)
*
libcurl previously had limited support for pipelining using the CURLMOPT_PIPELINING option, but this support was removed in version 7.65.0
*
portsnap (a
FreeBSD
FreeBSD is a free-software Unix-like operating system descended from the Berkeley Software Distribution (BSD). The first version was released in 1993 developed from 386BSD, one of the first fully functional and free Unix clones on affordable ...
ports tree distribution system)
*
Advanced Packaging Tool
Advanced Package Tool (APT) is a free-software user interface that works with core libraries to handle the installation and removal of software on Debian and Debian-based Linux distributions. APT simplifies the process of managing software on ...
(APT) supports pipelining.
*
Subversion
Subversion () refers to a process by which the values and principles of a system in place are contradicted or reversed in an attempt to sabotage the established social order and its structures of Power (philosophy), power, authority, tradition, h ...
(SVN) has optional support for HTTP pipelining with the serf WebDAV access module (the default module, neon, does not have pipelining support).
*
Microsoft Message Queuing
Microsoft Message Queuing (MSMQ) is a message queue implementation developed by Microsoft and deployed in its Windows Server operating systems since Windows NT 4 and Windows 95. Windows Server 2016 and Windows 10 also includes this component. In ...
on
Windows Server 2003
Windows Server 2003, codenamed "Whistler Server", is the sixth major version of the Windows NT operating system produced by Microsoft and the first server version to be released under the Windows Server brand name. It is part of the Windows NT ...
utilises pipelining on HTTP by default, and can be configured to use it on HTTPS.
*IBM
CICS
IBM CICS (Customer Information Control System) is a family of mixed-language application servers that provide online business transaction management, transaction management and connectivity for applications on IBM mainframe systems under z/OS ...
3.1 supports HTTP pipelining within its client.
Testing tools which support HTTP pipelining include:
*
Nmap
Nmap (Network Mapper) is a network scanner created by Gordon Lyon (also known by his pseudonym ''Fyodor Vaskovich''). Nmap is used to discover hosts and services on a computer network by sending packets and analyzing the responses.
Nmap pro ...
supports pipelining requests with the Nmap Scripting Engine (NSE)
See also
*
HTTP persistent connection
*
WebSocket
WebSocket is a computer communications protocol, providing a full-duplex, simultaneous two-way communication channel over a single Transmission Control Protocol (TCP) connection. The WebSocket protocol was standardized by the Internet Engineering ...
*
SPDY
References
External links
*RFC 7230
HTTP/1.1 Pipelining FAQ at mozilla.org*
ttps://www.die.net/musings/page_load_time/ "Optimizing Page Load Times" articlebr>
phttpgetserfC library
{{DEFAULTSORT:Http Pipelining
Hypertext Transfer Protocol