跨域 Cookie 共享

跨域请求经常遇到需要携带 cookie 的场景,为了确保跨域请求能够携带用户的认证信息或其他状态,浏览器提供了 withCredentials 这个属性。

如何在 Axios 中使用 withCredentials

为了在跨域请求中携带 cookie,需要在 Axios 配置中设置 withCredentials 为 true。

全局设置:

bash 复制代码
import axios from 'axios';

// 配置 axios 默认选项
axios.defaults.withCredentials = true; // 启用跨域请求时携带 cookie

// 或者在单独的请求中设置
axios.get('https://api.example.com/data', {
  withCredentials: true,  // 也可以在请求中单独设置
})
.then(response => {
  console.log(response.data);
})
.catch(error => {
  console.error(error);
});

局部设置:

bash 复制代码
import axios from 'axios';

axios.get('https://api.example.com/data', {
  withCredentials: true,  // 确保跨域请求时携带 cookie
})
.then(response => {
  console.log('响应数据:', response.data);
})
.catch(error => {
  console.error('请求错误:', error);
});

后端:如何配置 CORS 以支持跨域请求携带 cookie:

前端配置好 withCredentials 后,后端需要确保响应头正确配置,以允许跨域请求携带 cookie。

  1. 设置 Access-Control-Allow-Origin
    Access-Control-Allow-Origin 头告诉浏览器哪些域是被允许跨域访问的。如果要支持跨域携带 cookie,这个头不能设置为 *,而必须指定一个明确的域。
bash 复制代码
Access-Control-Allow-Origin: https://www.example.com
  1. 设置 Access-Control-Allow-Credentials
    Access-Control-Allow-Credentials 头需要设置为 true,以允许浏览器在跨域请求中携带 cookie。
bash 复制代码
Access-Control-Allow-Credentials: true
  1. 设置 SameSite 和 Secure 属性
    为了确保 cookie 在跨域请求中能正常发送,服务器设置的 cookie 必须带上合适的 SameSite 和 Secure 属性:

SameSite=None:确保 cookie 在跨站请求时也会被发送。

Secure:要求 cookie 只能通过 HTTPS 协议发送。

bash 复制代码
Set-Cookie: user=JohnDoe; SameSite=None; Secure; domain=.example.com; path=/;
相关推荐
前端人类学几秒前
深入解析JavaScript中的null与undefined:区别、用法及判断技巧
前端·javascript
带刺的坐椅2 分钟前
SolonCode v0.0.20 发布 - 编程智能体(新增子代理和浏览器能力)
java·ai·agent·solon·solon-ai·claude-code·openclaw
会员源码网1 小时前
数字格式化陷阱:如何优雅处理 NumberFormatException
java
孔明click332 小时前
Sa-Token v1.45.0 发布 🚀,正式支持 Spring Boot 4、新增 Jackson3/Snack4 插件适配
java·sa-token·开源·springboot·登录·权限认证
程序猿阿越2 小时前
Kafka4源码(二)创建Topic
java·后端·源码阅读
进击的尘埃2 小时前
Vitest 自定义 Reporter 与覆盖率卡口:在 Monorepo 里搞增量覆盖率检测
javascript
进击的尘埃2 小时前
E2E 测试里的网络层,到底该怎么 Mock?
javascript
悟空码字2 小时前
Spring Boot 整合 MongoDB 最佳实践:CRUD、分页、事务、索引全覆盖
java·spring boot·后端
省长2 小时前
Sa-Token v1.45.0 发布 🚀,正式支持 Spring Boot 4、新增 Jackson3/Snack4 插件适配
java·后端·开源
DevUI团队3 小时前
🚀 【Angular】MateChat V20.2.2版本发布,新增8+组件,欢迎体验~
前端·javascript·人工智能