Accept
Content negotiation between client and server begins with the Accept request header, which indicates the media types a client prefers to receive.
Usage
The Accept header drives content negotiation. A client sends a list of media types ranked by preference, and the server selects the best match from the representations available for the requested resource.
Browsers set this header automatically based on the
request context. A navigation request typically asks for
text/html, while an image element asks for common image
formats. API clients often send
application/json or application/xml.
When the server has no representation matching any listed type, the expected response is 406 Not Acceptable. In practice, many servers ignore the header and return the default representation instead.
Note
The Accept header is not required. Omitting
the header implies the client accepts any media
type (*/*). Browsers send */* as a fallback,
and many servers ignore Accept entirely,
returning a fixed Content-Type
regardless of client preference.
Directives
media-type/subtype
A specific media type such as
text/html or
application/json. The server treats the full
type/subtype pair as a concrete preference.
media-type/*
A wildcard subtype. image/* signals acceptance of
any image format, whether image/png, image/webp,
or image/avif.
\*/\*
Accepts any media type. This wildcard acts as a fallback when no other type matches.
;q= (quality value)
A weight between 0 and 1 expressing relative
preference. Higher values indicate stronger preference.
When omitted, the default weight is 1.0. A value of
0 means the type is not acceptable.
Example
A browser requesting an HTML page sends several media types ranked by quality value. The highest-weighted type the server supports wins.
Accept: text/html, application/xhtml+xml, */*;q=0.8
An API client requesting JSON with an XML fallback assigns a lower quality value to XML.
Accept: application/json, application/xml;q=0.9
An AI agent requesting a page in Markdown to reduce token consumption, with an HTML fallback.
Accept: text/markdown, text/html;q=0.9
AI agents and content negotiation
CDN providers like Cloudflare convert HTML pages to
Markdown on the fly when a request includes
Accept: text/markdown. The conversion reduces
token count by up to 80%, making content negotiation
a practical optimization for LLM-based agents and
crawlers.
An API client requesting structured error responses
uses application/problem+json alongside the
regular content type. The server returns
problem details for errors and
JSON for successful responses.
Accept: application/problem+json, application/json
A request listing multiple text formats with explicit
priorities. text/html carries the default weight of
1.0, text/plain follows at 0.9, any other text
format at 0.8, and everything else at 0.7.
Accept: text/html, text/plain;q=0.9, text/*;q=0.8, */*;q=0.7
Note
When two types share the same quality value, the
more specific type takes precedence. If both
text/html and text/* carry a weight of 1.0,
the server selects text/html.
See also
- RFC 9110: HTTP Semantics
- Content-Type
- HTTP media types
- 406
- Content negotiation
- Problem details
- HTTP headers