withCredentials(简单说:带不带凭证)

发布于:2025-08-30 ⋅ 阅读:(21) ⋅ 点赞:(0)

一、withCredentials是什么?

  withCredentials 是浏览器 XMLHttpRequest 或 Fetch API(以及 axios 等基于它们的库)中的一个配置项,作用是控制跨域请求时是否携带 Cookie、HTTP 认证信息等凭证

用更通俗的方式解释:

二、核心作用

它就像一个 "通行证开关":

  • 当设为 true 时:跨域请求会带上当前域名下的 Cookie、HTTP 认证信息(如用户名密码)等 "身份凭证"
  • 当设为 false 时(默认值):跨域请求会自动忽略这些凭证,服务器无法识别你的身份

三、适用场景

  1. 跨域登录状态维持
    比如你的前端在 a.com,后端接口在 b.com

    • 登录成功后,后端会在 b.com 域名下种一个 Cookie 作为登录凭证
    • 后续发请求时,如果 withCredentials: true,浏览器会把这个 Cookie 带给 b.com 服务器,证明 "我已经登录过"
    • 如果不开启,服务器会把你当成未登录用户
  2. 跨域需要认证的接口
    对于需要 HTTP 基础认证(账号密码)、或依赖 Cookie 做权限校验的接口,必须开启这个配置才能正常访问。

四、注意事项

  1. 后端必须配合
    服务器响应头必须包含 Access-Control-Allow-Credentials: true,否则即使前端开了 withCredentials,浏览器也会拒绝接收响应。

  2. 影响跨域范围
    当使用 withCredentials 时,后端 Access-Control-Allow-Origin 不能设为 *(通配符),必须指定具体的前端域名(如 https://a.com)。

  3. 同域请求不受影响
    只有跨域请求时这个配置才起作用,同域名下的请求会自动携带凭证,无需手动设置。

        简单说,withCredentials 就是为了解决 "跨域场景下如何证明我是谁" 的问题,是实现跨域登录状态共享的关键配置。

五、Cookie是什么时候携带上去的

当你设置 withCredentials: true 后,Cookie 的携带是自动的,不需要你手动写任何代码去附加 Cookie

具体来说:

  1. Cookie 由服务器种下
    比如登录成功时,服务器会通过响应头 Set-Cookie: xxx=xxx 把 Cookie 存到浏览器里(这一步是服务器做的,前端不用管)。

  2. 浏览器自动携带
    当你下次用 withCredentials: true 发请求到同一个服务器域名时,浏览器会自动找出该域名下的 Cookie,偷偷加到请求头里发给服务器。

举个例子:

  • 你登录 api.xxx.com 后,浏览器保存了服务器给的 token=abc123 Cookie
  • 之后你用 axios 发请求:
    axios.post('https://api.xxx.com/data', data, {
      withCredentials: true  // 关键配置
    })
    

  • 浏览器会自动在请求头里加 Cookie: token=abc123,你不用手动写这行代码

你只需要保证两点:

  1. 前端请求时打开 withCredentials: true 开关
  2. 服务器之前已经给浏览器种下了该域名的 Cookie

剩下的携带工作,浏览器会自动完成,不用你手动处理 Cookie 内容。

六、大白话阐述(更好理解)

  withCredentials 就是用来控制 axios 发送请求时,是否带上 Cookie 信息 的开关。

举个例子:

  • 当你登录某个网站后,服务器会给你一个 Cookie 作为 "身份凭证"
  • 之后你再发请求时,如果 withCredentials: trueaxios 就会自动带上这个 Cookie,服务器就能认出你是谁
  • 如果是 false(默认值),就不会带 Cookie,服务器可能会把你当成未登录的新用户

这个参数主要用在 跨域请求 场景,比如你的前端和后端不在同一个域名下时,需要显式设置 withCredentials: true 才能让 Cookie 正常传递,否则跨域请求会丢失 Cookie 信息。


网站公告

今日签到

点亮在社区的每一天
去签到