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.
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.
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.
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
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
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>