HTTP 406 Not Acceptable โ Meaning, Causes & How to Fix
The resource cannot produce a response matching the Accept headers sent in the request.
- Code
- 406
- Name
- Not Acceptable
- Class
- 4xx Client Error
- Specification
- RFC 9110 ยง15.5.7
- Cacheable by default
- Only with explicit Cache-Control / Expires
What HTTP 406 means
406 Not Acceptable is a content-negotiation failure: the client asked (via Accept, Accept-Language or Accept-Encoding) for a format the server cannot produce. Most servers prefer to send a default format instead of a 406.
Common causes
- An API client sending
Accept: application/xmlto a JSON-only API. - Some security modules (such as mod_security) returning 406 for blocked requests.
How to fix it
For site owners
- Consider falling back to a default representation.
- If a WAF is producing it, review the rule that fired.
For visitors & developers
- Send an
Acceptheader the API supports, e.g.application/json.
SEO impact
Rare for pages; crawlers send broad Accept headers. A WAF returning 406 to crawlers keeps those pages out of the index.
Example 406 response
HTTP/1.1 406 Not Acceptable
Content-Type: application/json
{"error":"supported types: application/json"}
Related status codes
Check or look up another code
Search and filter every code in the HTTP Status Codes tool, browse the full list by class, or read HTTP status codes explained: the complete developer guide.
Open HTTP Status Codes tool โAll status codesFrequently asked questions
What does HTTP 406 mean?
HTTP 406 Not Acceptable is a 4xx Client Error status code. The resource cannot produce a response matching the Accept headers sent in the request.
What is the difference between 406 and 415?
406 is about the response format the client wants (Accept); 415 is about the request body format the client sent (Content-Type).
Which specification defines 406?
It is defined in RFC 9110 ยง15.5.7.
Is a 406 response cacheable?
Not by default. A 406 response is only stored by caches when it carries explicit freshness information such as Cache-Control: max-age or Expires.