本地网站Fetch调用WordPress旧版JSON API失败原因排查
问题:本地Fetch调用WordPress旧版JSON API失败(v2正常)
本地网站通过Fetch调用WordPress的JSON API v2时完全正常,但调用旧版JSON API时提示无法获取数据(直接在浏览器访问该接口无问题)。
正常调用v2 API的代码
fetch('https://example.com/wp-json/wp/v2/pages/', { method: 'GET', headers: { 'content-type': 'application/json' } } )
调用旧版API的代码(无法获取数据)
fetch('https://example.com/?json=get_page_index&custom_fields=*&dev=1&count=800', { method: 'GET', headers: { 'content-type': 'plain/text' } } )
网络调试面板显示的信息
provisional headers are shown Learn more
application/json: application/json
DNT: 1
Referrer: http://localhost:8080/
User-Agent: Mozilla/5.0 (iPad; CPU OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/87.0.4280.7
可能的原因分析
- 请求头冗余设置:GET请求不需要手动设置
content-type头,旧版API可能对这个额外的头不兼容。浏览器直接访问时不会携带该头,Fetch添加后可能触发服务器的解析逻辑错误或验证拦截。 - CORS配置差异:虽然v2 API支持跨域,但旧版API可能未正确配置CORS响应头。浏览器直接访问不触发跨域检查,而Fetch跨域请求会严格校验
Access-Control-Allow-Origin等字段,若服务器未返回这些头,请求会被浏览器拦截。 - 服务器端的Referrer/UA限制:服务器可能设置了规则,拦截来源为
localhost:8080的请求,或者对特定UA做了限制。可以尝试移除Referrer头,或者调整UA后再测试。 - 旧版API参数兼容性:旧版API对
custom_fields=*或count=800的参数处理可能存在问题,虽然浏览器访问正常,但Fetch请求的参数解析方式可能触发服务器的异常逻辑(不过这个可能性较低,因为浏览器访问没问题)。
内容的提问来源于stack exchange,提问作者bluelemonade
相关产品推荐
相关产品推荐

