axios跨域_再遇CORS -- 自定义HTTP header的导致跨域

当在Vue应用中使用Axios并添加token到HTTP header时,出现了跨域问题,尽管Flask已配置了CORS。问题在于Flask的CORS配置未包含自定义header。解决方案是在Flask的CORS配置中添加自定义header,或者删除不必要的配置。此问题在Postman中不会复现,因为Postman不受同源策略限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

813a2e35fe80da65bbc7595da16ad1f3.png

指路牌

  • 后端配置好了跨域,但是前端在HTTP header添加token后,又产生跨域的问题
  • Flask、Vue(Axios)、跨域

适用场景

  • 前后端分离,想要使用token来管理登录状态,或调用后台接口

环境

  • 平台无关

参考博客

  • axios 在header中配置token信息后,向后端请求会报跨域的问题。但是用postman测试的时候没有什么问题。
这个问题的回答其实没有给出直接性的帮助,甚至回答的有点奇怪,但是帮我打开了思路。

背景

出于多种考虑,放弃了使用类似WordPress这种现成博客解决方案,准备自己搭建一个博客系统,技术选型为:后端:Flask,前端:Vue。登录状态管理放弃cookie,采用token。开发进行到路由保护处时出现了CORS的问题,具体情形是Vue将从后台获取的token添加到HTTP请求的header中,调用相应接口时出现跨域。


在此次跨域出现前实际上已经在Flask通过flask_cors配置了跨域解决方案,因此跨域的产生是让我十分不解的,又由于问题比较奇特在搜索引擎中没有找到很好的解决方案(也可能是

### 解决 Axios 请求中的 'Access-Control-Allow-Origin' Header 缺失问题 当遇到 `No 'Access-Control-Allow-Origin' header` 错误时,这表明客户端发起的请求被浏览器阻止了,因为响应中缺少必要的 CORS (资源共享) 头信息。这类错误通常发生在前后端分离的应用程序架构中。 #### 后端解决方案 最根本的方法是在后端服务中正确配置 CORS 响应头。对于大多数 Web 应用框架而言,可以通过中间件来实现这一点: - **Node.js/Express**: 使用 cors 中间件可以轻松处理请求[^1]。 ```javascript const express = require('express'); const cors = require('cors'); const app = express(); app.use(cors({ origin: function (origin, callback) { // 可以在这里定义允许哪些名访问资源 if (!origin || whitelist.indexOf(origin) !== -1) { callback(null, true); } else { callback(new Error('Not allowed by CORS')); } }, credentials: true, })); ``` - **Spring Boot**: Java 开发者可以在 Spring Security 或 Controller 层面通过注解方式开启 CORS 支持[^2]。 ```java @CrossOrigin(origins = "http://localhost:9080", allowCredentials = "true") @RestController public class MyController {} ``` #### 浏览器插件临时方案 为了方便开发调试,在生产环境之外可考虑安装 Chrome 插件如「Allow CORS」来绕过浏览器的安全策略限制[^3]。不过这种方法仅适用于本地测试阶段,并不适合正式部署。 #### JSONP 替代方法 如果无法修改服务器端代码,则可以选择使用 JSONP 来代替 AJAX 进行 GET 类型的数据获取操作。需要注意的是,JSONP 存在安全风险并且只支持 GET 方法调用[^4]。 ```html <script> function handleResponse(data){ console.log(data); } </script> <!-- 将回调函数名传递给服务器 --> <script src="https://example.com/api?callback=handleResponse"></script> ``` #### Proxy Server 方案 创建一个代理服务器作为中介转发请求也是一个有效的解决途径。比如利用 Nginx 设置反向代理规则将特定路径下的请求重定向到目标 API 地址上[^5]。 ```nginx location /api/ { proxy_pass http://backend_server; add_header Access-Control-Allow-Origin $http_origin always; ... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值