由 Credentials 引起的cors跨域问题

Access-Control-Allow-Credentials

首先介绍一下Access-Control-Allow-Credentials这个响应头字段:

Access-Control-Allow-Credentials,标志是否允许客户端请求携带Credentials(凭证)Credentials可以是 cookies, authorization headersTLS client certificates.(一般可能携带cookies的情况比较多)。该响应头只能是true或者不设置!

当作为对预检请求(Option请求)的响应的一部分时,它指示是否可以使用Credentials(凭证)进行实际请求。请注意,简单的GET请求是没有预检的,所以若一个对资源的请求带了Credentials,如果这个响应头(Access-Control-Allow-Credentials)没有随资源返回,响应就会被浏览器忽视,不会返回到web内容,预检请求也会因此抛出不能通过预检的error。

需知

Access-Control-Allow-Credentials头 工作中与XMLHttpRequest.withCredentialsFetch API中的Request() 构造器中的credentials 选项结合使用。Credentials必须在前后端都被配置(即the Access-Control-Allow-Credentials headerXHRFetch request中都要配置)才能使带credentialsCORS请求成功. 必需请求和response header都支持!!!

使用方式

XHR 使用 Credentials

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/', true); 
xhr.withCredentials = true;  // 设置withCredentials为true
xhr.send(null);

JQ 使用 Credentials

使用的话则设置withCredentialstrue不使用则为false,MDN中明确指出withCredentials默认值为false,但是根据阮一峰的一篇相关文章中评论似乎实际情况中默认值不生效,

$.ajax({
    type:"POST",
    url: 'http://example.com/',
    data: {},
    xhrFields: {
        withCredentials: true // 设置withCredentials为true
    },
    crossDomain: true,
    dataType: 'json',
    success: successHandler
});

fetch 使用 Credentials

fetch控制Credentials的选项有三个:

  • 请求时携带凭证:credentials: 'include'
  • 仅在同源时请求时携带凭证:credentials: 'same-origin'(浏览器默认值,在旧版本浏览器,例如safari 11依旧是omit,safari 12已更改)
  • 不在请求中包含凭证,credentials: 'omit'
fetch(url, {
  credentials: 'include'  
})

response header

Access-Control-Allow-Credentials: true

注意

要注意,当设置了 Access-Control-Allow-Credentialstrue 时,Access-Control-Allow-Origin 不能为*,也是出于一种安全策略,比如:在cookie中存取的是用户的登录信息,又不限制客户端的请求来源,他人获取到cookie以后则可随意发起请求,登录该用户账号,损害用户权益

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

衣乌安、

嘿嘿,好心人赏俩钱儿~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值