HTTP Headers

Explains any HTTP header — category, originating specification, and related headers.

96 of 96 headers
Request — sent by the client
Headers the client (browser, app, script) sends to the server along with the request.

Lists the media types (MIME) the client will accept as a response, in preference order — the server uses this to pick the body format (e.g. JSON vs. XML) when more than one is available.

Specification: RFC 9110

Lists the compression encodings the client knows how to decompress (e.g. gzip, br, deflate) — the server compresses the body with one of them and reports which via Content-Encoding.

Specification: RFC 9110

Lists the client's preferred languages, in order — used by servers that serve translated content to automatically pick the response language.

Specification: RFC 9110

Sends back to the server every cookie already saved for that domain, one after another — the request side of the pair with Set-Cookie, added automatically by the browser.

Specification: RFC 6265
Related headers:
Set-Cookie

Asks the server for confirmation before the client sends the request body — the most common use is Expect: 100-continue, to avoid sending a large body the server would reject anyway.

Specification: RFC 9110

Reports the contact email of whoever is making the request — used almost exclusively by crawlers/bots, so the site's administrator knows who to report an issue to.

Specification: RFC 9110

Says which domain the request is meant for — required since HTTP/1.1, it's what lets a single server/IP host several different domains (virtual hosting).

Specification: RFC 9110

Limits how many intermediate proxies/hops can still forward the request — used mainly with the TRACE and OPTIONS methods, to debug a chain of proxies.

Specification: RFC 9110

Signals a request's relative priority (urgency, and whether it should be processed incrementally) — gives the server a hint about which resources to deliver first, especially useful over HTTP/2 and HTTP/3.

Specification: RFC 9218

Reports the URL of the page that originated the request — the name keeps the original specification's historical misspelling (it should be "Referrer"), preserved for compatibility. Referrer-Policy controls what this header reveals.

Specification: RFC 9110
Related headers:
Referrer-Policy

Identifies the client software that made the request — browser and version, operating system, or the name of a bot/tool. Used both for statistics and to serve adapted content.

Specification: RFC 9110
Response — sent by the server
Headers the server sends back to the client along with the response.

Reports which media types the server accepts in a PATCH body for that resource — usually sent in an OPTIONS response, as part of negotiating how to partially edit the resource.

Specification: RFC 5789

Same idea as Accept-Patch, but for the POST method — reports which media types the server accepts in a POST request body for that resource.

Lists the HTTP methods supported by that resource (e.g. GET, POST, HEAD) — required in a 405 Method Not Allowed response, also common in responses to OPTIONS.

Specification: RFC 9110

Describes a relationship between the current response and another resource (e.g. rel="next" for pagination, rel="preload" to get a asset loading earlier) — the header version of what the HTML <link> tag does.

Specification: RFC 8288

Points to the URL the client should go to — used in redirects (3xx) to give the new address, and in resource creation (201 Created) to point at the newly created resource.

Specification: RFC 9110
Related headers:
Refresh

Instructs the browser to reload the current page, or navigate to another URL, after a number of seconds — the header equivalent of <meta http-equiv="refresh">.

Says how long the client should wait before trying again — used with 429 Too Many Requests and 503 Service Unavailable, as a number of seconds or as a date.

Specification: RFC 9110

Identifies the server software that generated the response — advertising the exact version is often discouraged for security, since it makes it easier to target a known vulnerability in that version.

Specification: RFC 9110

Carries server-side performance metrics (e.g. database query time) that become visible in the browser's developer tools — useful for diagnosing where response time is being spent.

Specification: W3C Server Timing

Creates or updates a cookie on the client — a response can have several Set-Cookie headers, one per cookie. The attributes (Secure, HttpOnly, SameSite, Max-Age...) control where and for how long the cookie gets sent back.

Specification: RFC 6265
Related headers:
Cookie

Instructs search engines on how to index that page (e.g. noindex, nofollow) — the header version of what the <meta name="robots"> tag does in HTML, useful for files that aren't HTML (PDF, image).

Representation/Content — describe the body
Headers that describe the message body — format, size, language, byte range — present in both requests and responses that carry a body.

Announces that the server supports partial byte-range requests for that resource (e.g. Accept-Ranges: bytes) — what allows resuming an interrupted download or jumping straight to a point in a video.

Specification: RFC 9110
Related headers:
Range
Content-Range

Says how the body should be handled by the client — displayed inline (default) or downloaded as an attachment, with a suggested filename.

Specification: RFC 6266

Says which compression encoding was applied to the body (e.g. gzip, br) — the client needs to decompress with the indicated algorithm before interpreting the content.

Specification: RFC 9110

Says the language of the body's content (e.g. en-US) — information for whoever consumes the response, different from Accept-Language, which is the client's preference.

Specification: RFC 9110

Says the exact size of the body in bytes — lets the client know when the message has ended and show download progress; absent when the body uses Transfer-Encoding: chunked.

Specification: RFC 9110

Points to an alternate URL where the same response content can also be accessed directly — common when the response results from content negotiation (e.g. it came from /doc but also exists at /doc.en-us).

Specification: RFC 9110

Indicates which byte range of the full resource is being delivered in that partial response (206 Partial Content), and the resource's total size — the return of what Range asked for.

Specification: RFC 9110
Related headers:
Range
Accept-Ranges

Says the media type (MIME) of the body (e.g. application/json, text/html; charset=utf-8) — the most fundamental header for the client to know how to interpret the bytes received.

Specification: RFC 9110
Related headers:
Content-Disposition

Makes a partial-range request (Range) conditional — only returns the requested chunk if the resource hasn't changed since a given ETag/date; otherwise returns the entire resource, avoiding a file assembled from pieces of different versions.

Specification: RFC 9110
Related headers:
Range
ETag

Requests only a byte range of the resource, not the whole thing (e.g. bytes=200-999) — the basis for resumable downloads and seekable video streaming.

Specification: RFC 9110
Related headers:
Accept-Ranges
Content-Range
Cache — reuse and validation
Headers that control whether and for how long a response can be reused, and how to validate that it's still fresh.

Says how many seconds ago the response was generated by the origin server and is being served from an intermediate cache — helps the client know how "fresh" the cached copy really is.

Specification: RFC 9111

Controls whether, where, and for how long a response can be stored in cache and reused — directives like max-age, no-store, private/public, and must-revalidate. It's the recommended caching mechanism today, taking priority over Expires when both appear.

Specification: RFC 9111
Related headers:
Expires
ETag

Instructs the browser to delete stored data for that origin — cookies, cache, local storage — typically sent in a logout response, to make sure nothing from the previous session survives on the device.

Specification: W3C Clear Site Data

An opaque identifier (a kind of "hash") for a resource's current version — the client sends this value back in If-None-Match/If-Match on a future request, and the server responds 304 Not Modified if nothing changed, without resending the body.

Specification: RFC 9110
Related headers:
If-None-Match
If-Match
Cache-Control

An absolute date after which the cached response is considered stale — an older caching mechanism than Cache-Control, and since it's a date (not a relative value), it's sensitive to clock drift between client and server.

Specification: RFC 9111
Related headers:
Cache-Control

Makes the request conditional on a specific ETag — only executes if the resource on the server still has that ETag, preventing an unnoticed overwrite of a newer version (protection against "lost update").

Specification: RFC 9110
Related headers:
ETag

Makes the request conditional on a date — the server only resends the body if the resource was modified after the given date; otherwise it responds 304 Not Modified. The date-based version of what If-None-Match does with an ETag.

Specification: RFC 9110
Related headers:
If-None-Match
Last-Modified

Makes the request conditional on the given ETag — the server only resends the body if the resource's current ETag differs from the one sent; it's the most precise cache-revalidation mechanism, preferred over If-Modified-Since when both are available.

Specification: RFC 9110
Related headers:
ETag
If-Modified-Since

Makes the request conditional on a date — only executes if the resource hasn't been modified since then; used mostly in edits (PUT/PATCH) to avoid overwriting a more recent change.

Specification: RFC 9110
Related headers:
If-Match

Says the date the resource was last modified — used together with If-Modified-Since/If-Unmodified-Since for date-based cache revalidation, a simpler (though less precise) alternative to ETag.

Specification: RFC 9110
Related headers:
If-Modified-Since
If-Unmodified-Since

A holdover from HTTP/1.0 — Pragma: no-cache was meant to prevent caching, but was only reliably honored on requests, never on responses. Cache-Control: no-cache is the direct replacement and works in both directions.

Specification: RFC 9111
Related headers:
Cache-Control

Lists which other request headers (e.g. Accept-Encoding, Accept-Language) influence which version of the response gets served — essential so a cache doesn't mistakenly return the version in another language, or the uncompressed one, to someone who asked for something different.

Specification: RFC 9110

Used to carry extra warnings about the cache's state (e.g. a potentially stale response) alongside a response — deprecated by the current caching specification itself, with no real adoption among browsers.

Specification: RFC 9111
Security — browser protection policies
Headers that instruct the browser to enforce protection policies — where to load resources from, whether the page can be framed, and more.

Defines which origins the page can load scripts, styles, images, and other resources from — the most effective defense against XSS, by restricting what an injected script could even try to load. Evaluated live by the Security Headers Analyzer.

Specification: W3C CSP Level 3See the live analysis in the Security Headers Analyzer
Related headers:
Content-Security-Policy-Report-Only

Same syntax as Content-Security-Policy, but only reports violations (via a report endpoint) instead of blocking them — used to test a new policy in production without risking breaking the page.

Specification: W3C CSP Level 3
Related headers:
Content-Security-Policy

Requires every resource embedded in the page (images, iframes, scripts from another origin) to explicitly opt in to being embedded — a prerequisite for enabling cross-origin isolation, needed for example for SharedArrayBuffer.

Specification: WHATWG HTML

Isolates the page's window/tab from other windows of different origins that opened it or that it opened — prevents a malicious tab from keeping a script reference to the page and reading its state.

Specification: WHATWG HTML

Controls whether other origins can load that specific resource (image, script, font) via HTML tags — a simpler, more granular protection than CORS, from the side of whoever serves the resource.

Specification: WHATWG Fetch

Required a site's TLS certificate to be publicly logged in a Certificate Transparency log, with failure reporting — removed by major browsers because that requirement is now enforced directly at certificate issuance, without depending on a header.

Specification: RFC 9163

Controls which browser features and APIs the page (and iframes within it) can use — camera, microphone, geolocation, and dozens more. Successor to the old Feature-Policy. Evaluated live by the Security Headers Analyzer.

Specification: W3C Permissions PolicySee the live analysis in the Security Headers Analyzer

Controls how much information from the origin URL (Referer) gets sent when navigating to another site or loading a resource — from "nothing" to "full URL", balancing privacy against how useful that information is to the receiver. Evaluated live by the Security Headers Analyzer.

Specification: W3C Referrer PolicySee the live analysis in the Security Headers Analyzer

Added automatically by the browser (can't be overridden via JavaScript) — says what purpose the resource was requested for: document, image, script, style, and others. Servers use it to block requests outside the expected context.

Specification: W3C Fetch Metadata
Related headers:
Sec-Fetch-Mode
Sec-Fetch-Site

Added automatically by the browser — says the mode of the fetch request: navigate, cors, no-cors, same-origin. Together with Sec-Fetch-Site, it helps the server tell legitimate navigation apart from a cross-site attack.

Specification: W3C Fetch Metadata
Related headers:
Sec-Fetch-Dest
Sec-Fetch-Site

Added automatically by the browser — says the relationship between the requesting origin and the target origin: same-origin, same-site, cross-site, or none (typed directly into the address bar). The basis of a modern CSRF defense that doesn't rely on a token.

Specification: W3C Fetch Metadata
Related headers:
Sec-Fetch-Dest
Sec-Fetch-Mode

Instructs the browser to only connect to that domain over HTTPS, for the given duration — even if the user types http:// or clicks an old link. Protects against downgrade attacks that try to force an insecure connection. Evaluated live by the Security Headers Analyzer.

Specification: RFC 6797See the live analysis in the Security Headers Analyzer

Signals that the client prefers to receive the HTTPS version of any resource referenced on the page, even if the original link points to HTTP — the browser automatically rewrites those requests.

Specification: W3C Upgrade Insecure Requests

With the only valid value nosniff, prevents the browser from trying to guess ("sniff") a file's type differently from what Content-Type declared — blocks a classic XSS vector where a file disguised as an image was interpreted as a script. Evaluated live by the Security Headers Analyzer.

See the live analysis in the Security Headers Analyzer

Turns the browser's automatic DNS prefetching for the page's links on or off, before the user even clicks — turning it off reduces a small leak surface of which domains the user is about to visit.

Controls whether the page can be displayed inside an <iframe> from another site — DENY blocks it always, SAMEORIGIN only allows it from the same domain. Protects against clickjacking; the frame-ancestors directive in Content-Security-Policy is the more modern, flexible replacement. Evaluated live by the Security Headers Analyzer.

Specification: RFC 7034See the live analysis in the Security Headers Analyzer

Controls whether Flash and Adobe Reader readers (essentially extinct today) can load a cross-domain policy file from that site — relevant almost only to very old sites still hosting that kind of content.

Discloses the technology behind the server (e.g. Express, PHP/8.2) — the common security recommendation is to remove this header, not configure it, so as not to make it easier for an attacker to pick exploits targeted at that technology/version.

Used to switch on the reflected-XSS filter built into older browsers — removed by modern browsers because the filter itself created attack vectors; Content-Security-Policy solves the same problem more safely.

Related headers:
Content-Security-Policy
CORS — cross-origin resource sharing
Headers that control whether a page from one origin can access resources from another origin.

Says whether the response can be read when the request was made with credentials (cookies, an Authorization header) — without this header set to true, the browser discards the response of a cross-origin request made with credentials: "include".

Specification: WHATWG Fetch

Lists which request headers, beyond the ones allowed by default, the server accepts on a cross-origin request — the answer to the question asked by the preflight's Access-Control-Request-Headers.

Specification: WHATWG Fetch

Lists which HTTP methods the server accepts on a cross-origin request for that resource — the answer to the question asked by the preflight's Access-Control-Request-Method.

Specification: WHATWG Fetch

Says which origins are allowed to read the response of a cross-origin request — a specific domain, or * for any origin (incompatible with credentials). The most fundamental CORS header; without it, the browser blocks reading the response.

Specification: WHATWG Fetch

Lists which response headers, beyond a small safe default set, the client's JavaScript can actually read on a cross-origin request.

Specification: WHATWG Fetch

Says for how many seconds the browser can reuse the result of a preflight (the verification OPTIONS request) without repeating it — reduces the extra latency CORS adds to subsequent requests.

Specification: WHATWG Fetch

Sent by the browser in the preflight (OPTIONS) request — lists the headers the real request intends to send, asking the server whether it accepts them.

Specification: WHATWG Fetch

Sent by the browser in the preflight (OPTIONS) request — says which method the real request will use, asking the server whether it accepts it.

Specification: WHATWG Fetch

Says which origin (scheme + domain + port) the request came from — sent automatically by the browser on cross-origin requests, and what the server compares against its CORS policy to decide the response's Access-Control-Allow-Origin.

Specification: RFC 6454
Related headers:
Access-Control-Allow-Origin

Says which origins are allowed to read detailed timing metrics (via the Resource Timing API) for a resource loaded cross-origin — without it, scripts from another origin only see zeroed-out timestamps for privacy.

Specification: W3C Resource Timing
Authentication — access credentials
Headers used to authenticate the client to the server, or to a proxy along the way.

Carries the client's credentials for authentication — a scheme (Basic, Bearer, Digest...) followed by the value (e.g. Bearer eyJhbGci...). The standard header for sending an API token or a JWT.

Specification: RFC 9110
Related headers:
WWW-Authenticate

Sent by a proxy (not the final server) alongside 407 Proxy Authentication Required, indicating which authentication scheme the proxy requires before forwarding the request.

Specification: RFC 9110
Related headers:
Proxy-Authorization

Carries the client's credentials to authenticate to an intermediate proxy — same idea as Authorization, but addressed to the proxy, not the final server.

Specification: RFC 9110
Related headers:
Proxy-Authenticate

Sent by the server alongside 401 Unauthorized, indicating which authentication scheme it requires — the client responds on a following request with the matching Authorization header.

Specification: RFC 9110
Related headers:
Authorization
Connection and Transport — connection-level
Headers about the connection itself, not the content exchanged — keep-alive, protocol upgrade, proxies along the way.

Announces that the same resource is also available over an alternate protocol/host/port (e.g. an HTTP/3 version over QUIC) — lets the browser migrate to the alternative on future connections, at no cost to the current request.

Specification: RFC 7838

Sent by the client to report which alternative service (previously announced via Alt-Svc) is actually being used for that request — helps the server monitor adoption of an alternate route.

Specification: RFC 7838

Controls options specific to that TCP connection, most commonly keep-alive (keeps the connection open for more requests) or close (closes after this response) — over HTTP/2 and HTTP/3 this header stops making sense, since the connection is always multiplexed.

Specification: RFC 9110

Says the date and time the message originated, in the GMT timezone — used, among other things, as the time reference for relative cache calculations (Age, Expires).

Specification: RFC 9110

Standardizes the information proxies and load balancers add about the original request — client IP, original protocol and host — into a single structured header, formally replacing the non-standard X-Forwarded-* trio.

Specification: RFC 7239
Related headers:
X-Forwarded-For
X-Forwarded-Host
X-Forwarded-Proto

Adjusts parameters of a persistent connection (e.g. how long to stay idle before closing) — never formally part of the HTTP/1.1 standard, but still sent by many servers as a holdover from HTTP/1.0.

Sent by the server to confirm the WebSocket upgrade handshake — a value computed from the client's Sec-WebSocket-Key, proving the response came from a server that actually understands the WebSocket protocol.

Specification: RFC 6455

Sent by the client in the WebSocket upgrade handshake — a random value the server must transform in a specific way and return in Sec-WebSocket-Accept, to confirm it accepted the protocol.

Specification: RFC 6455

Negotiates which application subprotocol will run over the WebSocket connection (e.g. "chat", "graphql-ws") — the client lists the ones it supports, the server responds with the one it picked.

Specification: RFC 6455

Says which version of the WebSocket protocol the client is using — today essentially always 13, the final version standardized by RFC 6455.

Specification: RFC 6455

Lists the transfer codings (not to be confused with Content-Encoding) the client accepts besides chunked, and whether it accepts trailers — used almost exclusively to negotiate end-to-end vs. hop-by-hop compression.

Specification: RFC 9110

Announces, at the start of the message, which headers will still arrive after the body (in the trailer of a chunked message) — useful for headers whose value is only known after the whole body has been processed, like a checksum.

Specification: RFC 9110

Says how the body was encoded for transfer between the two ends of the connection (typically chunked, in variable-sized pieces) — different from Content-Encoding, which is about the content itself, not how it traveled.

Specification: RFC 9112

Asks to switch the current connection's protocol to another one (e.g. to websocket, or from HTTP/1.1 to HTTP/2) — the basis of the handshake that promotes a plain HTTP connection to WebSocket.

Specification: RFC 9110

Records every proxy or gateway the message passed through, in order — used to trace a request/response's path through intermediaries, and to avoid forwarding loops.

Specification: RFC 9110

Records the chain of client/proxy IPs the request passed through before reaching the final server — essential for a server behind a proxy/load balancer to know the real IP of whoever made the request, since the direct TCP connection comes from the proxy.

Related headers:
Forwarded

Records the request's original Host, before passing through a proxy that might rewrite it — used by the application to know which domain the user actually visited.

Related headers:
Forwarded

Records whether the original request reached the proxy over http or https — essential when TLS terminates at the proxy/load balancer and the application behind it only ever sees plain HTTP traffic, but still needs to know the user is on a secure connection.

Related headers:
Forwarded

The header categories

HTTP headers fall into eight functional groups in this reference: Request (sent by the client), Response (sent by the server), Content (describe the message body), Cache (control reuse and validation), Security (browser protection policies), CORS (cross-origin resource sharing), Authentication (access credentials), and Transport (connection-level). The same topic can show up in more than one group — Cookie, for instance, is sent by the client (Request) and handed back by the server as Set-Cookie (Response); the category here reflects where the header normally appears, not an official classification from any specification.

Standard, deprecated, and non-standard

Standard means the header is defined by a current specification (RFC, WHATWG Fetch/HTML, or W3C) and in active use. Deprecated means it once had a formal specification, but its use is discouraged today — usually because another mechanism replaced it (Pragma → Cache-Control, X-XSS-Protection → Content-Security-Policy). Non-standard means the header was never formalized by any specification, but remains widely used in practice — X-Forwarded-For is the most common example. Using a non-standard header isn't a mistake, just a choice made without a guarantee of interoperability across implementations.

Using this reference day to day

Search by the header's name (e.g. "content-type") or by a keyword for what it does (e.g. "cors", "cache"). Every entry shows its originating specification, clickable related headers to jump between them, and — for the six headers that also appear in the Security Headers Analyzer — a direct link to evaluate that header against a real URL. Share a specific header by copying the page link — it already opens with the right item expanded.

Frequently asked questions

Content-Type says what kind of data the body contains (e.g. image/png, application/json) — it's about format. Content-Disposition says how the browser should handle that body — display it inline or download it as a file, with a suggested filename. The two usually show up together in a download response.

Cookie is a request header — the browser sends it automatically with every request to the domain, with every already-saved cookie packed one after another. Set-Cookie is a response header — the server uses it to create or update a cookie, one Set-Cookie per cookie (a response can have several). It's essentially the same information seen from the two sides of the connection.

Forwarded (RFC 7239) is the standardized header, and if you control both the proxy and the application, it's the technically correct choice. In practice, though, X-Forwarded-For remains what the vast majority of proxies, load balancers, and CDNs send by default — so most applications need to understand both, even while preferring one to configure.

Almost — both control how long a response can be reused without revalidating with the server, but Cache-Control (with max-age) is relative to the time of the request and takes priority when both appear together; Expires is an absolute date, older, and more sensitive to clock drift between client and server. Cache-Control is the current recommendation; Expires survives mostly for compatibility with HTTP/1.0 clients.

They're headers the browser itself adds automatically to every request (the client can't override them via JavaScript), describing the context of the request — Sec-Fetch-Site says whether the request is same-origin, same-site, or cross-site; Sec-Fetch-Mode says the mode (navigate, cors, no-cors...); Sec-Fetch-Dest says the destination (document, image, script...). Servers use them to block requests that don't make sense in the expected context — one more layer of defense against CSRF.

The X- prefix used to be the convention for "experimental/non-standard header" — anyone could create an X-Something-New without registering anything. The practice was formally discouraged by RFC 6648 (2012), because once an X-Header becomes a de facto standard (as several did), it carries the prefix forever for compatibility. That's why this catalog has both X- headers that are de facto standard (even without an RFC) and X- headers already deprecated in favor of an alternative without the prefix.