“小王,这个接口需要加个X-Auth-Token
的header,你调一下!” 后端同事丢过来一句话。
小王自信满满地在Ajax请求里加了一行:
headers: { 'X-Auth-Token': '123456' }
结果浏览器无情报错:
Access to XMLHttpRequest at 'https://api.example.com/data' from origin 'http://localhost:3000' has been blocked by CORS policy: Request header field x-auth-token is not allowed by Access-Control-Allow-Headers in preflight response.
😱 “什么鬼?我明明加了header,为什么被拦截了?!”
别急,这其实是前端开发中常见的CORS预检请求(Preflight)问题,今天我们就来彻底解决它!
当浏览器发送跨域请求时,如果请求包含自定义header或非简单请求方法(如PUT、DELETE),浏览器会先发送一个OPTIONS
预检请求,询问服务器是否允许这些操作。
报错的关键点:
X-Auth-Token
)没有被服务器明确允许。 OPTIONS
请求,导致浏览器拦截了后续的真实请求。 后端需要在响应OPTIONS
预检请求时,返回以下header:
Access-Control-Allow-Origin: http://localhost:3000 # 允许的源 Access-Control-Allow-Methods: GET, POST, PUT, DELETE # 允许的方法 Access-Control-Allow-Headers: X-Auth-Token, Content-Type # 允许的自定义header
以Node.js(Express)为例:
app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', 'http://localhost:3000'); res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); res.header('Access-Control-Allow-Headers', 'X-Auth-Token, Content-Type'); next(); });
✅ 效果:预检请求通过后,浏览器会正常发送带X-Auth-Token
的请求。
如果后端暂时无法修改,可以尝试:
改用简单请求:
GET
、POST
方法 Accept
、Content-Type
等) 将token放在URL参数或Body中(不推荐,安全性较低):
// 放在URL参数 fetch('/api/data?token=123456'); // 或放在POST的body中 fetch('/api/data', { method: 'POST', body: JSON.stringify({ token: '123456' }) });
⚠️ 注意:这种方式可能不符合接口规范,仅作临时解决方案。
如果你用webpack-dev-server
或vite
,可以配置代理绕过浏览器CORS限制:
vite.config.js示例:
export default { server: { proxy: { '/api': { target: 'https://api.example.com', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') } } } }
✅ 效果:请求发送到本地服务器,由服务器转发,避免浏览器直接跨域。
为什么会有CORS限制?
浏览器出于安全考虑,默认禁止跨域请求,防止恶意网站窃取数据。
哪些操作会触发预检请求?
X-
开头的字段) Content-Type: application/json
PUT
、DELETE
等方法 临时关闭浏览器CORS(仅限本地调试)
--disable-web-security
(⚠️ 不要用于日常浏览!) 问题场景 | 解决方法 | 适用场景 |
---|---|---|
自定义header被拦截 | 后端配置Access-Control-Allow-Headers |
生产环境 |
临时本地调试 | 前端代理或修改请求方式 | 开发环境 |
紧急绕过限制 | 将token放在URL/body中 | 临时方案 |
最终建议:长远来看,一定要让后端正确配置CORS,这是最规范的做法!
🚀 现在你可以自信地对后端说:“老哥,加个Access-Control-Allow-Headers
吧!”
本文由 谬艳 于2025-07-31发表在【云服务器提供商】,文中图片由(谬艳)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/497348.html
发表评论