406 Not Acceptable 表示目标资源没有任何表示形式符合客户端的协商请求头(例如 Accept、Accept-Language 或 Accept-Encoding),而服务器也不愿发送默认的表示形式。响应体应列出可用的表示形式,供用户或客户端选择。
实际上,大多数服务器会忽略无法满足的偏好,直接发送默认表示形式,RFC 9110 也明确允许这样做。因此,406 主要出现在只提供特定媒体类型的 API 中,例如收到 Accept: application/xml 的 JSON API。
有些主机商会把 ModSecurity 等安全模块配置为用 406 响应被拦截的请求,所以 406 也可能是防火墙的决定,而不是内容协商问题。
响应示例
HTTP
HTTP/1.1 406 Not Acceptable
Date: Fri, 06 Nov 2026 10:15:32 GMT
Vary: Accept
Content-Type: application/json
Content-Length: 57
{"error":"Available formats: application/json, text/csv"} SEO 与重定向检测
爬虫发送的 Accept 请求头范围很宽,因此不应收到 406;如果收到了,该 URL 会被当作 4xx 错误处理,不会被编入索引。如果重定向检测返回 406,而页面在浏览器中可以正常加载,应检查自己添加的自定义 Accept 请求头,或者是否有安全规则匹配了该 User-Agent 或 URL。
常见原因与使用场景
- API 只支持 JSON,但客户端请求的是 XML 或其他格式。
- 严格的
Accept-Language配置中没有匹配的翻译版本,也没有后备语言。 - 共享主机上的 ModSecurity 或 WAF 规则用 406 拦截了请求。