跨域时(cross-origin),XMLHttpRequest.withCredentials对cookie的影响

本文参考了:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

 

概述

XMLHttpRequest.withCredentials不止控制着 browser-->server的request中 是否携带credentials信息,还控制着前端JavaScript如何使用 server-->browser的reponse中 的credentials信息。

这里的“credentials”是指下面三种信息

1. cookies

2. authorization headers

3. TLS client certificates

 

下面,我们以cookie为例,分各种情况看下XMLHttpRequest.withCredentials的具体作用

XMLHttpRequest 不跨域 时

XMLHttpRequest.withCredentials的值没有任何作用。

XMLHttpRequest 跨域 时

// 注意:当前位于domain1上,我们跨域请求domain2的资源
var org = {"p1":201989,"p2":17888889999};
$.ajax(
        {
            url:'http://domain2/wechatpack/test/hi',
            type:'post',
            dateType:'json',
            headers:{'Accept': 'application/json, text/javascript, */*; q=0.01'},
            crossDomain: true,
            xhrFields: {
                  withCredentials: true
            },
            data:JSON.stringify(org),
            success:function(data){console.log("sucess");},
            error:function(data){console.log("error");}
        }
);

上面代码,当前在domain1上,发送跨域请求XMLHttpRequest xhr请求domain2的资源,并得到响应rsp,则:

无论xhr.withCredentials是什么值

  1. xhr永远不携带 domain1的cookie。
  2. rsp永远无法设置 domain1的cookie。

xhr.withCredentials==false时(默认)

  1. xhr中不携带 domain2的cookie(即不携带所请求的域的cookie)。
  2. rsp无法设置 domain2的cookie。

xhr.withCredentials==true

  1. xhr中携带了 domain2的cookie(即携带了所请求的域的cookie)。
  2. rsp可以设置 domain2的cookie。
  3. domain2的cookie,包括返回的rsp中所设置的 domain2的cookie,以及browser已经设置给 domain2的cookie,依然遵循同源策略。也就是说: 
    1. 前端JavaScript代码(注意:当前位于domain1上)无法访问返回的rsp中所设置的 domain2的cookie。 
    2. 前端JavaScript代码(注意:当前位于domain1上)无法通过document.cookie访问到已经设置给 domain2的cookie。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值