XMLHttpRequest.withCredentials 解决跨域请求头无Cookie的问题

本文介绍了XMLHttpRequest.withCredentials属性在处理跨域请求时的作用,如何通过设置为true来允许携带Cookie。当此属性为false时,跨站请求无法设置域的Cookie,而设置为true后,第三方Cookie仍受限于同源策略。同时提供了POST和GET请求的示例,以及相关Ajax应用。
摘要由CSDN通过智能技术生成

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

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

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

注: 永远不会影响到同源请求

Note: 不同域下的XmlHttpRequest 响应,不论其Access-Control- header 设置什么值,都无法为它自身站点设置cookie

在jQuery的`$.post()`函数中,如果你想要发送HTTP请求并带上cookies,通常情况下默认情况下,jQuery会自动处理浏览器的cookie,并将其包含在请求中。然而,有时候可能需要手动设置某些选项才能确保cookies被发送。 如果你发现cookies没有请求一起发送,可能是以下几个原因: 1. **默认配置**:如果在你的代码中设置了`$.ajaxSetup()`,可能覆盖了默认的cookie传递行为。检查是否有对`beforeSend`或`xhrFields`的自定义配置。 2. **跨域限制**:如果目标服务器有同源策略限制(CORS),只有在同一域名下的请求才会自动携带cookies。你需要确保目标地址与你的网站属于同一域名。 3. **异步特性**:`$.post()`默认是异步请求cookies只会在同步请求(`async: false`)下才被发送。如果不是同步请求,可能不会看到cookie。 4. **`.withCredentials`属性**:对于跨域请求,如果开启了`$.ajax`的`.withCredentials`属性,jQuery会将cookies包括在请求里。如果没设置cookies可能不会发送。 你可以尝试添加额外的配置项,例如: ```javascript $.post('your-url', data, function(response) { // ... }, { xhr: function() { var xhr = new window.XMLHttpRequest(); xhr.withCredentials = true; // 如果是跨域且需带cookie return xhr; }, crossDomain: true, cache: false // 避免缓存影响 }); ``` 然后检查是否cookies已成功添加到请求中。如果还有问题,请检查浏览器的开发者工具网络面板查看详细的请求信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值