允许跨域资源共享(CORS)携带 Cookie (转载)

摘要:
默认浏览器遵循安全性的“同源策略”,不允许Ajax跨域访问资源。为了允许这种操作,服务器端和客户端都应该遵循一些约定。它对应于ASP。NETCore:app.UseCors;此外,在客户端浏览器中,我们仍然需要在XMLHttpRequest上设置其withCredentials参数,以实现承载cookie的目标。同时,cookie仍然遵循“同源政策”。只能上载用目标服务器的域名设置的cookie,并且不能使用document.cookie读取目标服务器域名下的cookie。

如何让CORS携带Cookie


CORS 是一个 W3C 标准,全称是“跨域资源共享”(Cross-origin resource sharing)。
默认浏览器为了安全,遵循“同源策略”,不允许 Ajax 跨域访问资源,而为了允许这种操作,服务器端和客户端都要遵循一些约定。
服务器端需设置以下响应头:

Access-Control-Allow-Origin: <origin> | * // 授权的访问源 
Access-Control-Max-Age: <delta-seconds> // 预检授权的有效期,单位:秒 
Access-Control-Allow-Credentials: true | false // 是否允许携带 
Cookie Access-Control-Allow-Methods: <method>[, <method>]* // 允许的请求动词 
Access-Control-Allow-Headers: <field-name>[, <field-name>]* // 额外允许携带的请求头 
Access-Control-Expose-Headers: <field-name>[, <field-name>]* // 额外允许访问的响应头

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

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

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

var xhr = new XMLHttpRequest();
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);
    }
});

参考文献:

允许跨域资源共享(CORS)携带 Cookie

Jquery Ajax设置withCredentials解决跨域请求

免责声明:文章转载自《允许跨域资源共享(CORS)携带 Cookie (转载)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android Glide加载视频封面GRPC在NET上的应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用Jquery Ajax请求 下载压缩文件

使用第三方组件:ICSharpCode.SharpZipLib 给按钮绑定一个点击事件 后台处理: 1 public ActionResult DownZip(stringids) 2 { 3 if (string.IsNullOrEmpty(ids)) 4 return Content("请选择要操...

PHP curl函数模拟爬虫(操作cookie)

curl函数.操作cookie,模拟爬虫 模拟cookie刷贴实例: 1 <?php 2 $ch = curl_init(); 3 //保存该次请求的cookie内容到文件cookie.txt 4 curl_setopt($ch, CURLOPT_COOKIEJAR, ”E:/cookie.txt”); 5...

nodejs什么值得买自动签到自动评论定时任务

本项目是基于nodejs开发,实现的功能是,什么值得买自动签到,自动评论功能,自动发邮件,支持多人多账号运行 目的是为了,解放双手,轻松获取什么值得买的经验和积分,得到更高的等级,从而突破很会员等级限制,如领取部分紧俏的优惠券 项目运行即执行签到和评论 目前规则:每天6:10 执行签到和评论功能,17:30执行签到结果邮件发送功能,执行间隔为随机时间,可...

python 获取cookie,发送请求

获取cookie思路: 1、确认登录login接口,及登录所需参数(包括用户名、密码、uuid等参数); 2、确认uuid等参数的获取接口(一般是get请求); 3、凭借uuid等参数向login接口发起请求,获取响应报文中的cookie(不同的网站平台可能表示方法不一样,需区别对待); 示例代码: # -*- coding:UTF-8 -*- impor...

jquery ajax请求后台 的简单例子

jQuery.ajax(url,[settings]) 概述 通过 HTTP 请求加载远程数据。 jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该函数,除非你需要操作不常用的选项,以获得更多的灵活性。 最简单的情况下...

javaweb之Cookie篇

  Cookie是在浏览器访问某个Web资源时,由Web服务器在Http响应消息头中通过Set-Cookie字段发送给浏览器的一组数据。   一个Cookie只能表示一个信息对,这个信息对有一个信息名(Name)和一个信息值(Value)组成。Web服务器可以给一个Web浏览器发送多个Cookie,但每个Cookie的大小一般被限制为4KB。   在Ser...