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.
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
min: 1.4 KB · /v1/http-versions.min.json
- CSV 1.2 KB
/v1/http-versions.csv
- TypeScript 1.8 KB
/v1/http-versions.ts
export const httpVersions
type HttpVersion = (typeof httpVersions)[number]
Schema
Each record in the dataset has the following shape.
| 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.
| version | name | year | rfc | description |
|---|---|---|---|---|
| 0.9 | HTTP/0.9 | 1991 | The original one-line protocol. Supports only GET requests with no headers, status codes, or versioning. Responses are raw HTML only. | |
| 1.0 | HTTP/1.0 | 1996 | RFC 1945 | Introduced request/response headers, status codes, content types, and support for methods beyond GET. Each request opens a new TCP connection. |
| 1.1 | HTTP/1.1 | 1997 | RFC 2068 | 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. |
| 2 | HTTP/2 | 2015 | RFC 7540 | Binary 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. |
| 3 | HTTP/3 | 2022 | RFC 9114 | Replaces 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. |
Fetch examples
Drop-in snippets in five languages.
curl -sSL https://staticdata.dev/v1/http-versions.json | jq '.[0]' 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]); 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]) 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])
} 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
- aria-attributes
- aria-roles
- character-encodings
- csp-directives
- credit-card-types
- dns-record-types
- dom-events
- emoji
- emoji-shortcodes
- html-elements
- html-entities
- html-attributes
- input-types
- http-auth-schemes
- http-cache-directives
- http-content-codings
- iframe-sandbox-tokens
- ip-protocol-numbers
- keyboard-event-codes
- link-relations
- media-type-suffixes
- mime-types
- oauth-grant-types
- ports
- referrer-policies
- ip-special-blocks
- svg-elements
- tcp-flags
- tlds
- tls-cipher-suites
- tls-versions
- uri-schemes
- well-known-uris