前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XHR对象中的withCredentials

XHR对象中的withCredentials

作者头像
19组清风
发布2021-11-15 15:14:16
2.5K0
发布2021-11-15 15:14:16
举报
文章被收录于专栏:Web Front EndWeb Front End

MDN

XMLHttpRequest.withCredentials 属性是一个Boolean类型,它指示了是否该使用类似cookies,authorization headers(头部授权)或者TLS客户端证书这一类资格证书来创建一个跨站点访问控制(cross-site Access-Control)请求。在同一个站点下使用withCredentials属性是无效的。

此外,这个指示也会被用做响应中cookies 被忽视的标示。默认值是false。

如果在发送来自其他域的XMLHttpRequest请求之前,未设置withCredentials 为true,那么就不能为它自己的域设置cookie值。而通过设置withCredentials 为true获得的第三方cookies,将会依旧享受同源策略,因此不能被通过document.cookie或者从头部相应请求的脚本等访问。

讲人话

有些时候我们会发一些跨域请求,比如 domain-a.com 站点发送一个 api.domain-b.com/get 的请求,默认情况下,浏览器会根据同源策略限制这种跨域请求,但是可以通过 CORS (opens new window)技术解决跨域问题。

widthCredentials在同源下(相同域下是无效的),也就是相同域下都会请求写在cookie。

在同域的情况下,我们发送请求会默认携带当前域下的 cookie,但是在跨域的情况下,默认是不会携带请求域下的 cookie 的,比如 domain-a.com 站点发送一个 api.domain-b.com/get 的请求,默认是不会携带 api.domain-b.com 域下的 cookie,如果我们想携带(很多情况下是需要的),只需要设置请求的 xhr 对象的 withCredentials 为 true 即可。

跨域情况下,需要携带请求域下的cookie那么就需要配置xhr对象的withCredentials。

需要额外注意的是
  1. 当配置了xhr.withCredentials = true时,必须在后端增加 response 头信息Access-Control-Allow-Origin(CORS),且必须指定具体域名,而不能指定为*。
  2. 设置了widthCredentials为true的请求中会包含远程域的所有cookie,但这些cookie仍然遵循同源策略,所以你是访问不了这些cookie的。
  3. Access-Control-Allow-Credentials: true

如果服务端不设置响应头,响应会被忽略不可用

默认情况下,标准的跨域请求是不会发送cookie等用户认证凭据的,XMLHttpRequest 2的一个重要改进就是提供了对授信请求访问的支持。也就是withCredentials配置。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020年11月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 讲人话
  • 需要额外注意的是
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档