Java跨域请求cooking共享_允许跨域资源共享(CORS)携带 Cookie (转载)

如何让CORS携带Cookie

CORS 是一个 W3C 标准,全称是“跨域资源共享”(Cross-origin resource sharing)。

默认浏览器为了安全,遵循“同源策略”,不允许 Ajax 跨域访问资源,而为了允许这种操作,服务器端和客户端都要遵循一些约定。

服务器端需设置以下响应头:

Access-Control-Allow-Origin: | * // 授权的访问源

Access-Control-Max-Age: // 预检授权的有效期,单位:秒

Access-Control-Allow-Credentials: true | false // 是否允许携带

Cookie Access-Control-Allow-Methods: [, ]* // 允许的请求动词

Access-Control-Allow-Headers: [, ]* // 额外允许携带的请求头

Access-Control-Expose-Headers: [, ]* // 额外允许访问的响应头

我们看到,Access-Control-Allow-Credentials 响应头会使浏览器允许在 Ajax 访问时携带 Cookie。其对应了ASP.NET Core的如下中间件设置:

app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().AllowCredentials());

此外在客户端浏览器中,我们仍然需要对 XMLHttpRequest 设置其 withCredentials 参数,才能实现携带 Cookie 的目标。示例代码如下:

var xhr = newXMLHttpRequest();

xhr.withCredentials= true;

注意,为了安全,标准里不允许Access-Control-Allow-Origin: *,必须指定明确的、与请求网页一致的域名。同时,Cookie 依然遵循“同源策略”,只有用目标服务器域名设置的 Cookie 才会上传,而且使用 document.cookie 也无法读取目标服务器域名下的 Cookie。

如何让Jquery的AJAX使用CORS时携带Cookie

跨域请求想要带上cookies必须在请求头里面加上xhrFields: {withCredentials: true}设置。

$.ajax({

url:"http://localhost:8080/orders",

type:"GET",

xhrFields: {

withCredentials:true},

success:function(data) {

render(data);

}

});

参考文献:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值