You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无法从本地React应用向WordPress Rest API发送POST请求(ERR_EMPTY_RESPONSE)

解决本地React应用调用WordPress REST API的网络错误问题

嘿,我之前也碰到过类似的情况——Postman和Node脚本都能正常创建文章,但React本地应用里直接报错,服务器还没收到请求,这说明请求大概率被浏览器的安全机制或者本地环境给拦截了。既然你已经配置了CORS,那可以试试下面这些方案:

1. 搞定混合内容问题

如果你的WordPress站点是HTTPS的,而本地Create-React-App默认跑在HTTP上,浏览器会因为混合内容的安全规则直接拦截请求。你可以:

  • 启动本地服务时强制开启HTTPS:终端运行 HTTPS=true npm start(Windows系统用 set HTTPS=true && npm start
  • 这样本地应用就用HTTPS运行,和WordPress站点的协议一致,就能绕过这个限制

2. 再核对下Authorization头

虽然Postman里能用,但浏览器环境下有时候字符串格式会出问题:

  • 确保Bearer和你的token之间有一个空格,比如"Authorization": 'Bearer YOUR_TOKEN'(你的代码里看起来格式是对的,但可以再检查下token有没有复制错,比如末尾有没有多余空格)
  • 也可以把token单独存变量,用模板字符串拼接,避免手动输入出错:
    const wpToken = 'YOUR_HIDDEN_TOKEN';
    axios({
      method: 'post',
      headers: { "Authorization": `Bearer ${wpToken}` },
      url: 'YOUR_WP_SITE_URL/wp-json/wp/v2/posts',
      data: { title: "Test" }
    })
    

3. 检查浏览器插件的拦截

很多隐私保护、广告拦截插件会自动拦截带有Authorization头的跨域请求:

  • 先把浏览器所有插件暂时禁用,再测试请求
  • 如果禁用后正常,找到对应的插件,把你的WordPress站点和本地开发地址(比如https://localhost:3000)加入白名单

4. 用CRA代理绕过浏览器跨域

Create-React-App自带代理功能,能让本地服务器帮你转发请求,直接绕过浏览器的CORS检查:

  • 在项目的package.json里添加一行:
    "proxy": "https://your-wordpress-site-url.com"
    
  • 然后把Axios的请求URL改成相对路径:
    axios({
      method: 'post',
      headers: { "Authorization": 'Bearer HIDDEN' },
      url: '/wp-json/wp/v2/posts',
      data: { title: "Test" }
    })
    
  • 重启本地开发服务器,这样请求会先经过CRA的代理服务器转发,浏览器就不会触发跨域限制了

5. 排查WordPress的安全插件

像Wordfence、iThemes Security这类安全插件,会默认拦截陌生来源的REST API请求,尤其是带Bearer token的:

  • 暂时禁用WordPress上的所有安全插件,再测试请求
  • 如果禁用后正常,在安全插件的设置里,把本地开发的IP地址或者CORS允许的域名加入白名单
  • 另外别忘了确认你的token对应的WordPress用户有创建文章的权限(需要edit_posts权限)

6. 检查Axios的全局配置

如果你在应用里加了Axios的全局拦截器,可能无意中修改了请求头或者阻止了请求发送:

  • 先移除所有Axios的全局拦截代码,只保留当前的请求测试
  • 检查有没有全局配置的baseURL和你的请求URL冲突

最后,你可以打开浏览器开发者工具的Network标签,看看请求状态:如果请求显示(canceled)或者根本没记录,那就是浏览器端拦截了;如果有请求记录但返回4xx/5xx,再看响应内容具体排查。

内容的提问来源于stack exchange,提问作者Robert_mk

火山引擎 最新活动