vue跨域问题:The value of the ‘Access-Control-Allow-Credentials‘ header in the response is...

"博客探讨了在前端使用axios进行跨域请求时遇到的问题,指出设置`withCredentials=true`会导致后端`Access-Control-Allow-Origin`不能为通配符"*",而必须指定源地址。这是出于安全考虑,避免任意域名获取敏感的cookie信息。解决方案是精确配置后端的CORS策略,确保源地址与前端一致。"

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

跨域报错如下:

由于我在封装axios时,设置了这个:

//允许跨域携带cookie信息
axios.defaults.withCredentials = true; 

这一条允许在请求头里带上cookie信息。

如果前端配置了withCredentials=true,后端设置Access-Control-Allow-Origin不能为 " * ",而必须是你的源地址。

header("Access-Control-Allow-Origin","源地址";
header("Access-Control-Allow-Credentials", "true");

后来查询得知:可能是处于安全性考虑,*是所有的域名都可以读取到数据,可能会读取到cookie等敏感数据。

### 解决CORS策略阻止请求的问题 当遇到`Access-Control-Allow-Origin`头部设置为通配符`*`而无法满足凭证模式为`include`的情况时,可以通过调整服务器端配置以及客户端行为来解决问题。 #### 1. 修改服务器端响应头 为了支持带有凭证的请求(即`withCredentials=true`),服务器必须显式指定允许的源地址而非使用通配符`*`。具体做法如下: - **修改`Access-Control-Allow-Origin`** 将其值替换为具体的名或IP地址,而不是通用的`*`。例如: ```bash Access-Control-Allow-Origin: http://localhost:8081 ``` - **启用`Access-Control-Allow-Credentials`** 设置此头部以允许携带凭证的请求通过。例如: ```bash Access-Control-Allow-Credentials: true ``` 上述两步操作可以确保浏览器能够接受来自特定源的信任连接[^2]。 #### 2. 配置Nginx反向代理处理CORS 如果前端运行于不同的主机上,则可通过Nginx作为中间层实现资源共享。以下是典型的Nginx配置片段: ```nginx server { listen 80; server_name localhost; location /api/ { add_header 'Access-Control-Allow-Origin' 'http://localhost:8081'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type'; add_header 'Access-Control-Allow-Credentials' 'true'; proxy_pass http://backend_server/; if ($request_method = OPTIONS) { return 204; } } } ``` 这段代码定义了一个API路径映射到后端服务的同时设置了必要的CORS相关HTTP头部信息[^1]。 #### 3. 调整Vue Axios默认选项 对于基于Axios库发起网络调用的应用程序来说,需注意以下几点设定: - 如果启用了`withCredentials`属性,则目标URL所在的资源应当返回精确匹配当前页面来源的信息给定字段; - 同样地,在开发阶段可能还需要额外关注预检请求(`OPTIONS`)是否被正确回应并放行实际业务逻辑执行流程。 示例代码展示如何全局应用这些参数至所有实例化对象之上: ```javascript import axios from 'axios' const instance = axios.create({ baseURL: 'http://192.168.0.103:8080', timeout: 5000, withCredentials: true // Enable cookies etc. }); // Add a request interceptor instance.interceptors.request.use(config => { config.headers['Content-Type'] = 'application/json;charset=UTF-8' return config; }, error => Promise.reject(error)); export default instance; ``` 以上脚本创建了一个新的HTTP client,并强制开启随附身份验证机制的功能开关[^3]。 --- ### 总结 综上所述,要彻底消除因CORS政策引发的错误提示消息——“Access-Control-Allow-Origin header must not be the wildcard”,就需要从以下几个方面入手改进现有架构设计思路:一是更改web service所提供的回复报文中关于origin的部分;二是借助流行的web servers比如Apache或者NGINX来做进一步优化工作;最后一点就是针对前端框架内部组件做出相应的适配改动措施。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值