406 Not Acceptable 报错破解指南:网站拒绝显示内容怎么办?
前言:你的网站突然“拒绝回答”了
身为站长, 极其害怕的便是用户开启网页时, 映入眼帘的并非内容, 却是一连串冷冰冰的英文报错。当中, 406 Not Acceptable属于一个常见的“拦截者”, 它所代表的意思是服务器回绝了你的请求, 原因在于你所发送的“Accept”头信息跟服务器能够提供的资源无法匹配。
什么是 406 Not Acceptable?
从简略角度来讲, HTTP 协议里的有关“内容协商”的那种机制出现了状况。你所使用的浏览器也就是客户端向服务器传达这样的意思: “我仅仅接纳 JSON 格式的响应”, 然而服务器却仅仅能够返回 HTML, 所以服务器就返回了 406 错误, 这意味着“我没办法达成你的需求”。
常见原因与解决方案
1. 服务器配置问题 (Nginx / Apache)
这是最常见的原因。
Nginx: 要是你的 site 配置文件里存在 if ($http_accept 并非匹配"text/html") { 返回 406; } 这样的规则, 那就得进行检查以及调整。更为平常的情形是使用了 fastcgi_pass 之际, 并未准确传输 Accept 头。
修复办法是, 将相关规则进行注释或者予以修改, 举例说明, 在Nginx配置里, 要保证proxy_set_header或者fastcgi_param把HTTP_ACCEPT正确进行了传递。
# 示例:在 location 块中
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 确保 Accept 头被透传
proxy_set_header Accept $http_accept;
}
Apache, 当运用 mod_negotiation 这个模块之际, 倘若配置出现不恰当的状况, 就有可能致使 406 这种情形出现。要去核查 .htaccess 文件里的 DirectoryIndex 或者 AddHandler 指令。
修复办法呈现: 先暂且去禁用内容协商模块, 或者再对Options指令作出调整。
# 禁用内容协商
Options -MultiViews
2. 浏览器插件或扩展干扰
部分安全插件, 或者广告拦截器, 又或者开发工具扩展, 有可能会对请求头作出修改, 从而致使Accept头出现异常。
排查的方式为, 借助 Chrome 的“无痕模式”, 或者 Firefox 的“安全模式”去访问网站。要是情况正常, 那就逐个将插件禁用进行排查。
找寻到确切无误的具体插件之后, 针对该插件去添加上白名单规则以此展开疾病根源予以根除。
3. CDN 或反向代理设置
倘若你运用了Cloudflare, 或阿里云CDN等, 其有可能进行缓存, 又或者修改头部信息。
查看方式如下: 于CDN控制台里边, 去查看“缓存规则”, 或者去查看“回源设置”, 进而仔细确认, 并没有强行对Accept - Encoding进行修改, 也没有强行对Accept头进行修改。
针对受到影响的URL, 去设置“绕过缓存”的规则, 或者去设置“透传Header”的规则, 以此来进行修复。
如何检查并调试
1. 通过按下 F12 这个按键, 将浏览器内供开发者使用的那种工具装置给进行打开, 接着寻找到名为网络的那个部分, 再点去找其中带有 Network 字样的那个标签。
2. 刷新页面,找到返回 406 的请求。
3. 看一下发送请求那会儿的头部信息, 也就是请求头 (Request Headers) , 去瞅瞅当中那个 Accept 这一项所对应的的值, 就像这样的一串内容(如 text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8)。
4. 查看响应头, 也就是 Response Headers, 在这个过程里, 服务设备往往会返回一个 X-Varnish 或者 Server 头, 旨在借助此来对问题进行定位, 这是一种方式。
实战案例:WordPress 站点 406 错误
不少WordPress站长, 于运用REST API之际, 碰见406错误。
理由是, WordPress 的 REST API 端点, 像 /wp-json/wp/v2/posts 这样的, 预期返回的是 application/json, 然而, 某些安全插件, 比如说 Wordfence, 或者 SEO 插件, 更改了 Accept 头, 又或者服务器配置强制只给出 HTML。
遇到问题要解决, 在wp-config.php里临时添加define('WP_DEBUG', true);以此查看详细错误, 或者将最近安装的插件禁用掉用于排查一番。还能够尝试去修改.htaccess文件, 添加如下规则:
Header always set Access-Control-Allow-Origin ""
Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header always set Access-Control-Allow-Headers "Content-Type, Accept"
总结
一种并非服务器故障, 而是展现着内容协商失败之意态宣告的信号, 名为406 Not Acceptable。要处理这个疑难状况, 其关键核心要点在于深入领会请求与服务器二者之间存在的那种“沟通协议”。着手解决是从服务器配置、插件干扰、CDN 优化这三个不同的层面维度开始切入, 如此这般, 基本上能够化解90% 以上的相关情形。
否玩代码编辑 https://www.fouwan.com


