
HTTP pipelining is a feature of HTTP/1.1 which allows multiple
HTTP
The Hypertext Transfer Protocol (HTTP) 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, ...
requests to be sent over a single
TCP
TCP may refer to:
Science and technology
* Transformer coupled plasma
* Tool Center Point, see Robot end effector
Computing
* Transmission Control Protocol, a fundamental Internet standard
* Telephony control protocol, a Bluetooth communication s ...
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 via
HTTP/2,
which is supported by most modern
browsers.
In
HTTP/3, multiplexing is accomplished via
QUIC
QUIC (pronounced "quick") is a general-purpose transport layer network protocol initially designed by Jim Roskind at Google, implemented, and deployed in 2012, announced publicly in 2013 as experimentation broadened, and described at an IETF meet ...
which replaces
TCP
TCP may refer to:
Science and technology
* Transformer coupled plasma
* Tool Center Point, see Robot end effector
Computing
* Transmission Control Protocol, a fundamental Internet standard
* Telephony control protocol, a Bluetooth communication s ...
. This further reduces loading time, as there is no
head-of-line blocking 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 and
HOL blocking can occur.
The asynchronous operation of
HTTP/2 and
SPDY are solutions 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 server
In computer networking, a proxy server is a server application that acts as an intermediary between a client requesting a resource and the server providing that resource.
Instead of connecting directly to a server that can fulfill a requ ...
s, 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 theatre in which music is a fundamental component and dramatic roles are taken by singers. Such a "work" (the literal translation of the Italian word "opera") is typically a collaboration between a composer and a libre ...
had a fully working implementation that was enabled by default. In other browsers HTTP pipelining was disabled or not implemented.
*
Internet Explorer 8 does not support pipeline requests, due to concerns regarding buggy proxies and
head-of-line blocking.
*
Internet Explorer 11 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 current a ...
,
SeaMonkey and
Camino
Camino may refer to:
Places
*Camino, California, United States, a census-designated place
*Camino, Piedmont, Italy, a town
* Camino, Veneto, Italy, a town
People
*Jaime Camino (1936–2015), Spanish film director and screenwriter
*Renae Camino ...
) support pipelining; however, it is disabled by default. Pipelining is disabled by default to avoid issues with misbehaving servers. When pipelining is enabled, Mozilla browsers use some heuristics, especially to turn pipelining off for older
IIS servers. Support for H1 Pipeline was removed from Mozilla Firefox in Version 54.
*
Konqueror
Konqueror is a free and open-source web browser and file manager that provides web access and file-viewer functionality for file systems (such as local files, files on a remote FTP server and files in a disk image). It forms a core part of ...
2.0 supports pipelining, but it is disabled by default.
*
Google Chrome
Google Chrome is a cross-platform 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, macO ...
previously supported pipelining, but it has been disabled due to bugs and problems with poorly behaving servers.
*
Pale Moon (web browser) 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
True squid are molluscs with an elongated soft body, large eyes, eight arms, and two tentacles in the superorder Decapodiformes, though many other molluscs within the broader Neocoleoidea are also called squid despite not strictly fitting ...
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
Polipo is a lightweight caching and forwarding web proxy server. It has a wide variety of uses, from aiding security by filtering traffic; to caching web, DNS and other computer network lookups for a group of people sharing network resources; ...
proxy pipelines outgoing requests.
Tempesta FW, an open source
application delivery controller, also pipelines requests to backend servers.
Other implementations
The
libwww library
A library is a collection of materials, books or media that are accessible for use and not just for display purposes. A library provides physical (hard copies) or digital access (soft copies) materials, and may be a physical location or a vi ...
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 and led by Tim Berners-Lee, the consortium is made up of member organizations that maintain full-time staff working t ...
(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
The .NET Framework (pronounced as "''dot net"'') is a proprietary software framework developed by Microsoft that runs primarily on Microsoft Windows. It was the predominant implementation of the Common Language Infrastructure (CLI) until bein ...
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 and open-source Unix-like operating system descended from the Berkeley Software Distribution (BSD), which was based on Research Unix. The first version of FreeBSD was released in 1993. In 2005, FreeBSD was the most popular ...
(a minimalist pipelined HTTP client)
*
libcurl
cURL (pronounced like "curl", UK: , US: ) is a computer software project providing a library (libcurl) and command-line tool (curl) for transferring data using various network protocols. The name stands for "Client URL".
History
cURL was fi ...
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 and open-source Unix-like operating system descended from the Berkeley Software Distribution (BSD), which was based on Research Unix. The first version of FreeBSD was released in 1993. In 2005, FreeBSD was the most popular ...
ports tree distribution system)
*
Advanced Packaging Tool (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 transform the established social order and its structures of power, authority, hierarchy, and social norms. Sub ...
(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 on
Windows Server 2003
Windows Server 2003 is the sixth version of Windows Server operating system produced by Microsoft. It is part of the Windows NT family of operating systems and was released to manufacturing on March 28, 2003 and generally available on April 24, ...
utilises pipelining on HTTP by default, and can be configured to use it on HTTPS.
*IBM
CICS 3.1 supports HTTP pipelining within its client.
Testing tools which support HTTP pipelining include:
See also
*
HTTP persistent connection
*
WebSocket
WebSocket is a computer communications protocol, providing full-duplex communication channels over a single Transmission Control Protocol, TCP connection. The WebSocket protocol was standardized by the Internet Engineering Task Force, IETF as in ...
*
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