为什么我的Ajax请求突然报CORS错误?之前还能正常工作?

公孙洪滨 阅读 22

我在用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
我来解答 赞 5 收藏
二维码
手机扫码查看
2 条解答
UX-士轩
UX-士轩 Lv1
从你描述的情况来看,问题的核心其实是前后端的域名不一致导致的CORS错误。前端请求的Origin是http://new-domain.com,而后端接口的域名变成了http://old-domain.com。这种跨域问题是浏览器的安全机制触发的,Postman能正常访问是因为它不受同源策略限制。

首先建议确认一下是不是DNS缓存或者代理配置的问题,因为你说之前能正常工作,突然出问题大概率是环境变化导致的。可以尝试以下几步:

1. 在前端代码里明确指定完整的API地址,比如改成axios.post('http://new-domain.com/api/save', formData),看看是否能解决问题。如果这样可以,那基本就是代理配置有问题。

2. 如果你用的是vue.config.js里的devServer.proxy,建议改成类似这样的配置:
module.exports = {
devServer: {
proxy: {
'/api': {
target: 'http://new-domain.com',
changeOrigin: true,
pathRewrite: { '^/api': '' }
}
}
}
};

注意这里的changeOrigin: true很重要,它会让请求的Origin头变成目标服务器的域名,避免跨域问题。

3. 让后端同学检查一下PHP接口的CORS设置,确保允许http://new-domain.com的请求。可以在PHP里加一段类似这样的代码:
header("Access-Control-Allow-Origin: http://new-domain.com");
header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type");


4. 最后,清除一下本地的DNS缓存。在命令行里执行ipconfig /flushdns(Windows)或者sudo dscacheutil -flushcache(Mac),确保你的开发环境解析的是最新的域名配置。

其实这类问题挺常见的,尤其是前后端分离的项目,域名切换的时候最容易踩坑。建议你们团队统一一个开发环境的域名规则,避免频繁变动。另外,代理配置和CORS设置最好文档化,省得每次都要折腾一遍。
点赞 2
2026-02-16 15:05
UX-克培
UX-克培 Lv1
省事的话,直接让后端加上CORS头:在PHP接口开头加 header('Access-Control-Allow-Origin: http://new-domain.com');header('Access-Control-Allow-Methods: POST');。你这情况是域名变了但后端没更新允许的Origin,前端代理配置再怎么弄也绕不过浏览器的预检检查。
点赞 4
2026-02-12 20:04