staticdata.dev
Menu
Datasets About Contact

HTTP Versions

The five major HTTP protocol versions — 0.9, 1.0, 1.1, 2, and 3 — with the year each was published, its defining RFC, and a summary of the key features or architectural changes it introduced. HTTP/0.9 was never formally specified; all subsequent versions are defined by IETF RFCs.

Quick fetch

Stable URL. CORS-enabled. No auth.

bash
curl https://staticdata.dev/v1/http-versions.json

Or use as a typed import: import { httpVersions } from "https://staticdata.dev/v1/http-versions.ts"

Formats

  • JSON 1.6 KB

    /v1/http-versions.json

    Open

    min: 1.4 KB · /v1/http-versions.min.json

  • CSV 1.2 KB

    /v1/http-versions.csv

    Open
  • TypeScript 1.8 KB

    /v1/http-versions.ts

    export const httpVersions

    type HttpVersion = (typeof httpVersions)[number]

    Open

Schema

Each record in the dataset has the following shape.

Schema
Field Type Description Example
version string Version number string 1.1
name string Protocol name with HTTP prefix HTTP/1.1
year number Year the version was published 1997
rfc string | null Original defining RFC identifier, or null if unspecified RFC 2068
description string Summary of key features and changes Added persistent connections (keep-alive), chunked transfer encoding, the mandatory Host header, and cache-control directives. First specified in RFC 2068 (1997), revised by RFC 2616 (1999), RFCs 7230-7235 (2014) and RFC 9112 (2022). Remained the dominant protocol for over a decade.

Preview

First 5 records.

Data preview
versionnameyearrfcdescription
0.9HTTP/0.91991The original one-line protocol. Supports only GET requests with no headers, status codes, or versioning. Responses are raw HTML only.
1.0HTTP/1.01996RFC 1945Introduced request/response headers, status codes, content types, and support for methods beyond GET. Each request opens a new TCP connection.
1.1HTTP/1.11997RFC 2068Added persistent connections (keep-alive), chunked transfer encoding, the mandatory Host header, and cache-control directives. First specified in RFC 2068 (1997), revised by RFC 2616 (1999), RFCs 7230-7235 (2014) and RFC 9112 (2022). Remained the dominant protocol for over a decade.
2HTTP/22015RFC 7540Binary framing layer enabling multiplexed streams, header compression (HPACK), server push, and stream prioritization over a single TCP connection. RFC 7540 was obsoleted by RFC 9113 (2022), which deprecated the original prioritization scheme; browsers have since dropped server push.
3HTTP/32022RFC 9114Replaces TCP with QUIC (UDP-based, RFC 9000) to eliminate transport-level head-of-line blocking, reduce connection latency, and improve performance on lossy networks. Uses QPACK header compression.

Showing 5 of 5. View full data:  JSON · CSV

Fetch examples

Drop-in snippets in five languages.

curl
curl -sSL https://staticdata.dev/v1/http-versions.json | jq '.[0]'
JavaScript
import type { HttpVersion } from "https://staticdata.dev/v1/http-versions.ts";

const res = await fetch("https://staticdata.dev/v1/http-versions.min.json");
if (!res.ok) throw new Error(`Fetch failed: ${res.status}`);
const httpVersions: HttpVersion[] = await res.json();
console.log(httpVersions[0]);
Python
import urllib.request, json

with urllib.request.urlopen("https://staticdata.dev/v1/http-versions.min.json") as r:
    httpVersions = json.load(r)

print(httpVersions[0])
Go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

func main() {
	resp, err := http.Get("https://staticdata.dev/v1/http-versions.min.json")
	if err != nil { panic(err) }
	defer resp.Body.Close()

	var data []map[string]any
	if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
		panic(err)
	}
	fmt.Println(data[0])
}
Rust
use serde_json::Value;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let body = ureq::get("https://staticdata.dev/v1/http-versions.min.json").call()?.into_string()?;
    let data: Vec<Value> = serde_json::from_str(&body)?;
    println!("{:?}", data.first());
    Ok(())
}

Sources and methodology

HTTP/0.9 (1991) was Tim Berners-Lee’s original single-line protocol with no headers or status codes; it was never given a formal RFC. HTTP/1.0 (RFC 1945, 1996) added headers, status codes, and content negotiation but opened a new TCP connection per request. HTTP/1.1 (RFC 2068, 1997, revised by RFC 2616 in 1999, RFCs 7230–7235 in 2014 and RFCs 9110/9112 in 2022) introduced persistent connections and became the web’s dominant protocol for nearly two decades.

HTTP/2 (RFC 7540, 2015) replaced the text-based framing with a binary protocol supporting multiplexed streams and header compression (HPACK) over a single TCP connection, greatly reducing latency. HTTP/3 (RFC 9114, 2022) moved from TCP to QUIC — a UDP-based transport standardised by the IETF in RFC 9000, evolved from Google’s earlier gQUIC — eliminating TCP-level head-of-line blocking and enabling faster connection establishment via 0-RTT resumption.

Data is curated from the canonical IETF RFCs. The rfc field shows the original defining document for each version. Several have since been replaced: RFC 2068 by RFC 2616 (1999), RFC 2616 by RFCs 7230–7235 (2014), and those in turn by RFC 9110 (HTTP semantics) and RFC 9112 (HTTP/1.1 messaging) in 2022; RFC 7540 was obsoleted by RFC 9113 in 2022.

Versioning

URLs under /v1/ are stable: field names and types will not change in a way that breaks consumers. Values can be corrected or records added when the upstream source changes; schema-incompatible updates ship under a new version path. See the http-versions changelog for this dataset's history.

Related datasets

More Web datasets