为什么我的Ajax请求突然报CORS错误?之前还能正常工作?
我在用Vue写一个表单提交功能,突然发现用axios发POST请求到后端PHP接口时,浏览器直接报CORS错误,明明昨天还能正常工作…
前端代码没改过,就是普通的axios配置:axios.post('/api/save', formData)。检查控制台错误显示:”Failed to load http://old-domain.com/api/save. No ‘Access-Control-Allow-Origin’ header present.”
尝试过:1. 确认请求头里有Content-Type 2. 在vue.config.js里配了devServer.proxy 3. 清除浏览器缓存 但都没用。奇怪的是这个接口在Postman里能正常返回数据。
后端同学说没动过CORS设置,但发现请求域名从http://new-domain.com变成了http://old-domain.com,可能是DNS缓存问题?或者代理配置哪里漏了?
// 报错的请求头示例
Request URL: http://old-domain.com/api/save
Referrer Policy: strict-origin-when-cross-origin
Origin: http://new-domain.com
Access-Control-Request-Method: POST
首先建议确认一下是不是DNS缓存或者代理配置的问题,因为你说之前能正常工作,突然出问题大概率是环境变化导致的。可以尝试以下几步:
1. 在前端代码里明确指定完整的API地址,比如改成
axios.post('http://new-domain.com/api/save', formData),看看是否能解决问题。如果这样可以,那基本就是代理配置有问题。2. 如果你用的是vue.config.js里的devServer.proxy,建议改成类似这样的配置:
注意这里的
changeOrigin: true很重要,它会让请求的Origin头变成目标服务器的域名,避免跨域问题。3. 让后端同学检查一下PHP接口的CORS设置,确保允许http://new-domain.com的请求。可以在PHP里加一段类似这样的代码:
4. 最后,清除一下本地的DNS缓存。在命令行里执行
ipconfig /flushdns(Windows)或者sudo dscacheutil -flushcache(Mac),确保你的开发环境解析的是最新的域名配置。其实这类问题挺常见的,尤其是前后端分离的项目,域名切换的时候最容易踩坑。建议你们团队统一一个开发环境的域名规则,避免频繁变动。另外,代理配置和CORS设置最好文档化,省得每次都要折腾一遍。
header('Access-Control-Allow-Origin: http://new-domain.com');和header('Access-Control-Allow-Methods: POST');。你这情况是域名变了但后端没更新允许的Origin,前端代理配置再怎么弄也绕不过浏览器的预检检查。