CodeWiz Logo

    CodeWiz

    Evolution of HTTP: Comparing HTTP/0.9, HTTP/1.0, HTTP/1.1, HTTP/2, and HTTP/3

    Evolution of HTTP: Comparing HTTP/0.9, HTTP/1.0, HTTP/1.1, HTTP/2, and HTTP/3

    15/01/2025

    Introduction

    The Hypertext Transfer Protocol (HTTP) is the foundation of data communication on internet and plays a crucial role in enabling the exchange of information between various devices and servers. Originally it was designed to transfer hypertext documents for the web, but it has evolved over time to support a wide range of use cases including APIs, streaming media, and real-time communication. In this article, we will explore the evolution of the HTTP protocol, comparing the key features, improvements, and drawbacks of HTTP/0.9, HTTP/1.0, HTTP/1.1, HTTP/2, and HTTP/3.

    HTTP Overview

    HTTP operates as a request-response protocol between a client and a server. The client, typically a web browser, sends an HTTP request to the server, which then processes the request and returns an HTTP response. This response contains the requested resource, such as an HTML page, image, or other data. HTTP is stateless, meaning each request is independent and does not retain any information about previous requests. This simplicity allows for efficient and scalable communication on the web.

    HTTP Flow

    HTTP/0.9

    HTTP/0.9 was the first version of the HTTP protocol, introduced in 1991. It was extremely simple and designed primarily for fetching HTML documents.

    Key Features

    • Simple request-response model: Clients could only send a GET request, and the server would respond with the requested HTML document.
    • Stateless protocol: Each request was independent, with no state maintained between requests.
    • Text-based communication: Communication was done using plain text.

    Drawbacks

    • Limited functionality: Only supported GET requests and HTML responses.
    • No headers: Lacked support for HTTP headers, making it difficult to convey metadata about the request or response.
    • No status codes: Did not provide status codes to indicate the success or failure of a request.

    Sample Request-Response

    A typical HTTP/0.9 request and response looked like this:

    Request:

    GET /index.html

    Response:

    <HTML>
        Hello, World!
    </HTML>

    HTTP/1.0

    HTTP/1.0, introduced in 1996, built upon HTTP/0.9 by adding more functionality and flexibility.

    Key Features

    • Support for headers: Introduced HTTP headers to convey metadata about the request and response.
    • Status codes: Added status codes to indicate the success or failure of a request.
    • Support for different content types: Allowed servers to respond with different types of content, not just HTML.
    • Versioning: Introduced the HTTP/1.0 version string in requests and responses.
    • HTTP methods: Added support for other HTTP methods like POST, PUT, DELETE, etc.

    Drawbacks

    • Each request requires a new TCP connection: This leads to high latency as establishing a new connection for each request involves a three-way handshake.
    • High latency due to connection setup and teardown: The overhead of setting up and tearing down connections for each request can significantly slow down communication.
    • Limited support for caching and persistent connections: HTTP/1.0 lacks advanced caching mechanisms and does not support keeping connections open for multiple requests.

    Sample Request-Response

    A typical HTTP/1.0 request and response looked like this:

    Request:

    GET /index.html HTTP/1.0
    Host: example.com

    Response:

    HTTP/1.0 200 OK
    Content-Type: text/html
    <HTML>
        Hello, World!
        <IMG SRC="/image.gif">
    </HTML>

    HTTP/1.1

    HTTP/1.1, introduced in 1997, brought several improvements over HTTP/1.0 to address its limitations. It was extremely stable version and widely adopted. It was the most widely used version of HTTP for over two decades.

    Key Features

    • Persistent connections (keep-alive): HTTP/1.1 allows multiple requests and responses to be sent over a single TCP connection, reducing the overhead of connection setup and teardown.
    • Chunked transfer encoding: This feature enables the server to start sending a response before knowing its total size, improving the efficiency of data transfer.
    • Improved caching mechanisms: HTTP/1.1 introduces more sophisticated caching headers, such as Cache-Control, to better manage resource caching.
    • Support for request pipelining: Clients can send multiple requests without waiting for each response, potentially improving performance.

    Drawbacks

    • Head-of-line blocking in pipelining: If one request in a pipeline is delayed, it can block all subsequent requests, reducing the effectiveness of pipelining. Because of this, pipelining is not widely used. Browsers use parallel connections instead.
    • Limited support for multiplexing: HTTP/1.1 does not support sending multiple requests and responses concurrently over a single connection.

    Sample Request-Response

    A typical HTTP/1.1 request and response looks like this:

    Request:

    GET /index.html HTTP/1.1
    Host: example.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate, br
    Connection: keep-alive

    Response:

    HTTP/1.1 200 OK
    Content-Type: text/html; charset=UTF-8
    Content-Encoding: gzip
    Connection: keep-alive
    Date: Mon, 01 Dec 2024 12:00:00 GMT
    Server: Apache
    Transfer-Encoding: chunked
    <HTML>
        Hello, World!
    </HTML>

    HTTP/2

    Features available in HTTP 1.1 allowed developers to build complex web applications. More visual elements, JavaScript, and CSS files were being used in web pages. Much more data was transmitted over significantly more HTTP requests and this created more complexity and overhead for HTTP/1.1 connections. To address these issues, Google introduced SPDY protocol in 2010, which late became the basis for HTTP/2.

    HTTP/2 was standardized in 2015 and introduced significant changes to improve performance and reduce latency.

    Key Features

    • Binary protocol instead of text-based: HTTP/2 uses a binary format for framing, which is more efficient to parse and less error-prone than text-based formats.
    • Multiplexing of multiple requests over a single connection: Multiple requests and responses can be sent concurrently over a single connection, eliminating head-of-line blocking.
    • Header compression (HPACK): HTTP/2 compresses headers to reduce the overhead of sending repetitive header data.
    • Server push: The server can proactively send resources to the client before they are requested, improving page load times.
    • Stream prioritization: Allows clients to prioritize requests, ensuring critical resources are delivered first.

    Drawbacks

    • Packet loss of one stream affects others: Sine HTTP/2 uses TCP, packet loss detection and retransmission in one stream can affect all streams multiplexed over the same connection.

    HTTP/3

    HTTP/3 standardised in June 2022, builds on the improvements of HTTP/2 and uses QUIC protocol instead of TCP. QUIC is a transport protocol developed by Google that runs over UDP, providing faster connection establishment and improved performance.

    Key Features

    • Uses QUIC instead of TCP: QUIC is a transport protocol that runs over UDP, providing faster connection establishment and improved performance.
    • Improved connection establishment with 0-RTT: QUIC allows data to be sent in the first round trip, reducing latency for new connections.
    • Better handling of packet loss and congestion: QUIC implements packet loss detection and retransmission independently for each stream, reducing the impact of packet loss on other streams.

    Drawbacks

    • Requires support for QUIC in both clients and servers: Adoption of HTTP/3 depends on the availability of QUIC support in browsers, servers, and network infrastructure.
    • Still in the early stages of adoption: As a relatively new protocol, HTTP/3 is not yet widely deployed, and some networks may not fully support it.

    Usage Statistics

    As per Cloudflare's HTTP version usage statistics, below is the distribution of HTTP versions in 2024:

    HTTP Usage Statistics

    Conclusion

    The evolution of HTTP has brought significant improvements in performance, security, and reliability. Each version of HTTP has addressed the limitations of its predecessors, making the web faster and more efficient. As we move towards widespread adoption of HTTP/3, we can expect even better performance and user experiences on the web.

    To stay updated with the latest developments in web technologies, follow us on YouTube, LinkedIn, and Medium.

    References