# HTTP/Minimal **Version:** 0.1.0-draft **Status:** Proposal ## Abstract HTTP/Minimal is a constrained version of HTTP designed for serving human-readable documents without tracking, scripting, or behavioral manipulation. It is not a new protocol - it is a voluntary restriction on how HTTP is used, enforceable by clients and verifiable by automated tools. ## Goals 1. **Radical simplicity.** A document is text and links. Maybe images. 2. **Privacy by architecture.** No cookies, no auth headers, no state. 3. **Zero JavaScript.** Not "minimal scripts" - none. 4. **Works today.** Any static file server can serve compliant content. 5. **Human-writable source.** Content is authored in Markdown, not markup soup. ## Non-Goals - Replacing HTTP for applications, APIs, or dynamic content - Defining a new transport protocol - Competing with Gemini (this is HTTP; use Gemini if you want Gemini) --- ## 1. Transport Requirements ### 1.1 TLS Required All HTTP/Minimal content MUST be served over HTTPS (TLS 1.2+, TLS 1.3 RECOMMENDED). Plain HTTP requests SHOULD receive a 301 redirect to the HTTPS equivalent and nothing else. ### 1.2 HTTP Version HTTP/1.1, HTTP/2, and HTTP/3 are all acceptable. Servers SHOULD support HTTP/2 at minimum. --- ## 2. Request Constraints Compliant clients MUST NOT send the following headers: | Header | Reason | |--------|--------| | `Cookie` | State tracking | | `Authorization` | Implies authenticated content | | `DNT` | Unnecessary - tracking is minimized by design | | `X-Requested-With` | AJAX patterns not applicable | | Any `X-` header | Custom headers are a slippery slope | Compliant clients MUST use only these methods: - `GET` - Retrieve a document - `HEAD` - Check if a document exists or has changed All other methods (`POST`, `PUT`, `DELETE`, etc.) are non-compliant. ### 2.1 Query Strings Query strings are PERMITTED but SHOULD be limited to: - Pagination (`?page=2`) Query strings MUST NOT be used for: - Session tracking - User identification - Analytics parameters (utm_*, fbclid, etc.) Compliant servers SHOULD ignore or strip unrecognized query parameters. --- ## 3. Response Constraints ### 3.1 Forbidden Response Headers Compliant servers MUST NOT send: | Header | Reason | |--------|--------| | `Set-Cookie` | State tracking | | `WWW-Authenticate` | Implies auth-gated content | | `Content-Security-Policy` | Implies executable content to policy | | `X-Frame-Options` | Embedding restrictions suggest app behavior | | `Refresh` | Client-side redirects enable tracking | ### 3.2 Permitted Response Headers Servers SHOULD send: | Header | Purpose | |--------|---------| | `Content-Type` | Required (`text/markdown; charset=utf-8`) | | `Content-Length` | Required for HTTP/1.1 | | `Last-Modified` | Caching | | `ETag` | Caching | | `Cache-Control` | Caching (SHOULD be generous; `max-age=3600` or higher) | | `Link` | Discovery (see Section 6) | ### 3.3 Status Codes Compliant servers SHOULD limit responses to: | Code | Meaning | |------|---------| | `200` | OK | | `301` | Moved Permanently | | `304` | Not Modified | | `400` | Bad Request | | `404` | Not Found | | `410` | Gone (content deliberately removed) | | `500` | Server Error | Codes `302`, `303`, and `307` are NOT RECOMMENDED as they enable tracking redirects. --- ## 4. Content Format HTTP/Minimal uses **Markdown** as its content format, served with Content-Type `text/markdown; charset=utf-8`. ### 4.1 Markdown Variant HTTP/Minimal uses [CommonMark](https://commonmark.org/) as the base specification, with the following extensions PERMITTED: - **Tables** - GitHub Flavored Markdown (GFM) pipe tables - **Strikethrough** - `~~text~~` - **Autolinks** - GFM automatic URL linking - **Footnotes** - `[^1]` reference-style footnotes ### 4.2 Permitted Syntax All standard CommonMark elements: - Headings (`#`, `##`, etc.) - Paragraphs - Emphasis (`*italic*`, `**bold**`) - Links (`[text](url)` or `[text][ref]`) - Images (`![alt](url)`) - Blockquotes (`>`) - Code spans (`` `code` ``) - Code blocks (fenced or indented) - Lists (ordered and unordered) - Horizontal rules (`---`) - Hard line breaks ### 4.3 Forbidden Syntax The following MUST NOT appear in HTTP/Minimal documents: | Syntax | Reason | |--------|--------| | Raw HTML blocks | Enables script injection, tracking pixels, forms | | Raw HTML inline | Same | | `