HTTP/1.1

The HyperText Transfer Protocol (HTTP) is a data communications protocol and acts as the foundation of the World Wide Web. After the original version was released and the functionality was subsequently extended, its popularity and usage grew but there were different implementations and there was a lack of standardization. In 1997, when HTTP/1.1 was published, several enhancements were introduced. This brought new features, as well as clarification for ambiguities in the protocol.

The HTTP/1.1 standard was published only a few months after HTTP/1.0, yet a version change was necessary because many applications pronounced themselves “HTTP/1.0”, but they were not fully implemented. Therefore, the specification of a more recent version of the protocol was necessary for clients and servers to properly understand each other’s capabilities.

New features

Among the features added to HTTP/1.1 were additional cache controls, Content Negotiation that allowed for different languages, content encodings, and types. For example, a client and server can come to an agreement as to which representation is most suitable. New HTTP request methods were added, as well as support for many new HTTP headers.

A notable improvement was that a HTTP Connection can be reused. In common instances where images are referenced in an HTML file, a subsequent HTTP Connection does not have to be made to download each one. This saves in terms of connection overhead, in particular, speeding up media-rich documents. Moreover, pipelining support allowed for a second HTTP request to be sent before the first was complete, reducing the overall latency of the exchange.

Yet another enrichment came from the ability to support server co-location. With the addition of the HTTP Host header, the protocol was able to support servers hosted on different domains but located at the same IP address.

Adoption and revision

HTTP/1.1 was quickly adopted by both browsers and end-users. As more browsers became compliant, revisions to the protocol to handle the flexibility needed by new services were made. This led to a new standard being released in June 1999, as RFC 2616. Ultimately, the HTTP Working Group, which was formed in 2007, released a six-part specification that replaced RFC 2616.

Example

In the following example, the client connects to a server and requests an HTML file. The server responds with the file contents, which include a link to an image. The same HTTP Connection is used to make a second HTTP request, this time for the image. It is clear from the example that HTTP connections, HTTP requests, and HTTP responses have changed significantly from earlier versions of the protocol.

Initial request

GET /index.html HTTP/1.1
Host: www.example.re
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1)
Accept: text/html
Accept-Language: en-US, en; q=0.5
Accept-Encoding: gzip, deflate

Response

200 OK
Server: Apache
Date: Thu, 01 Jan 1998 12:01:00 GMT
Connection: Keep-Alive
Keep-Alive: timeout=5, max=500
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Last-Modified: Mon, 29 Dec 1997 12:15:00 GMT
Transfer-Encoding: chunked

<html>
Welcome to the <img src=”/logo.gif”> example.re homepage!
</html>

Second request (same connection)

GET /logo.gif HTTP/1.1
Host: www.example.re
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1)
Accept: */*
Accept-Language: en-US, en; q=0.5
Accept-Encoding: gzip, deflate

Response

200 OK
Age: 8450220
Cache-Control: public, max-age=315360000
Connection: Keep-Alive
Content-Type: image/gif
Content-Length: 5000
Date: Thu, 01 Jan 1998 12:01:01 GMT
Last-Modified: Sun, 01 Jan 1995 12:01:00 GMT
Server: Apache

<The binary data for a 5K GIF image is included in the message body>

Takeaway

HTTP/1.1 introduced standardization, new features, and improved the efficiency of the protocol through better Caching, encoding, reusing of HTTP connections, and pipelining HTTP requests.

See also

Last updated: August 2, 2023