axios请求API报CORS policy: Request header field token is not allowed错误求助
错误原因
- CORS是浏览器内置的同源安全限制策略,仅作用于浏览器端发起的跨域请求,Postman等桌面客户端不受该策略约束,因此请求可以正常返回。
- 你的请求属于需要预检的CORS请求:跨域场景下携带了自定义请求头
token,浏览器会先发送OPTIONS类型的预检请求到目标API,校验请求权限。 - 目标API返回的预检响应中,
Access-Control-Allow-Headers字段未将token纳入允许的请求头列表,因此浏览器直接拦截请求,抛出对应错误。
额外注意:你代码中配置的身份头为
Authorization,但你描述接口要求的身份头名为Authentication,如果接口确实要求后者,需要先修正头名配置,避免后续身份校验失败。
解决方案
方案1:调整目标API的CORS配置(最推荐)
如果你有权限修改目标API的服务配置,直接在CORS规则的允许请求头列表中新增token即可:
- 若用Nginx做接口代理,在对应location配置块中添加:
add_header Access-Control-Allow-Headers "Authorization, token, Content-Type, Accept";
- 若后端代码中配置CORS(如Node.js的cors包、Java的CorsRegistry等),同样将
token加入允许的请求头列表即可。
方案2:前端侧绕过CORS限制(无API修改权限时使用)
本地开发场景
用前端构建工具的代理服务转发请求,规避跨域限制,以webpack devServer配置为例:
devServer: { proxy: { '/api': { target: 'https://pay.apiname.com.br', changeOrigin: true, pathRewrite: { '^/api': '' } } } }
修改axios的baseURL为/api,所有请求都会由本地开发服务转发,不会触发CORS。
生产环境场景
- 方案A:将前端页面和目标API部署到同一个域名下,不存在跨域问题。
- 方案B:新增一层后端代理服务,前端先请求你自己的后端服务,再由后端服务转发请求到目标API,服务端之间的请求不受CORS限制。
内容的提问来源于stack exchange,提问作者Fred
相关产品推荐
相关产品推荐

