范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

CORS跨域资源共享CrossOriginResourceSharing

  一、CORS是如何工作的?
  基于Web的资源共享涉及到两个基本的角色,即资源的提供者和消费者 。针对我们前面演示的应用场景,即显示在浏览器中的某个Web页面通过调用Web API的方式来获取它所需的资源,资源提供者为Web API本身,通过发送Ajax请求来调用Web API的JavaScript程序为资源的消费者。
  CORS旨在定义一种规范让浏览器在接收到从提供者获取的资源时能够正决定是否应该将此资源分发给消费者作进一步处理。CROS利用资源提供者的显式授权来决定目标资源是否应该与消费者共享。换句话说,浏览器需要得到提供者的授权之后才会将其提供的资源分发给消费者。那么,资源的提供者如何进行资源的授权,并将授权的结果告诉浏览器呢?
  具体的实现其实很简单。如果浏览器 自身提供对CROS的支持,由它发送的请求会携带一个名为"Origin "的报头表明请求页面所在的站点。对于前面我们演示实例中调用Web API获取联系人列表的请求来说,它就具有如下一个"Origin"报头。
  1: Origin: http://localhost:9527
  资源获取请求被提供者接收之后,它可以根据该报头确定提供的资源需要共享给谁。资源提供者的授权通过一个名为"Access-Control-Allow-Origin "的响应报头来承载,其报头值表示得到授权的站点。一般来说,如果资源的提供者认可了当前请求的"Origin"报头携带的站点,那么它会将该站点作为"Access-Control-Allow-Origin"响应报头的值。
  除了指定具体的源并对其作针对性授权之外,资源提供者还可以将"Access-Control-Allow-Origin"报头值设置为"*"对所有消费者授权。换言之,如果作了这样的设置,意味着由其提供的是一种公共资源,所以在做此设置之前需要慎重。如果针对请求着的授权不被允许,资源提供者可以将此响应报头值设置为"null",或者让响应不具有此报头。
  当浏览器接收到包含资源的响应之后,会提取此"Access-Control-Allow-Origin"响应报头的值。如果此值为"*"或者包含的源列表包含此前请求的源(即请求的"Origin"报头值),意味着资源的消费者获取了提供者获取和操作资源的权限,所以浏览器会允许JavaScript程序操作获取的资源。如果此响应报头不存在或者其值为"null",客户端JavaScript程序针对资源的操作会被拒绝。
  二、对响应报头的授权
  资源提供者除了通过设置"Access-Control-Allow-Origin"报头对提供的主体资源进行授权之外,还可以通过设置另一个名为"Access-Control-Expose-Headers "的报头对响应报头进行授权。具体来说,此"Access-Control-Expose-Headers"的报头用于设置一组直接暴露给客户端JavaScript程序的响应报头,没有在此列表的响应报头 对于客户端JavaScript程序是不可见的。
  但是由此实现的针对响应报头的授权针对简单响应报头是无效的,客户端JavaScript程序总是具有获取它们的权限。对于CORS规范来说,这里所谓的"简单响应报头(Simple Response Header)"包含如下6种。
  Cache-Control
  Content-Language
  Content-Type
  Expires
  Last-Modified
  Pragma
  我们知道用于实现Ajax请求的XMLHttpRequest具有一个getResponseHeader方法,调用它会返回一组响应报头的列表。按照这里介绍的针对响应报头的授权原则,只有在"Access-Control-Expose-Headers"报头中指定的报头和简单响应报头才会包含在该方法返回的列表中。
  三、预检机制
  W3C的CORS规范将跨域资源请求划分为两种类型,一种被称为"简单请求(Simple Request)"。要弄清楚CORS规范将那些类型的跨域资源请求划分为简单请求的范畴,需要额外了解几个名称的含义,其中包括"简单(HTTP)方法(Simple Method)"、"简单(请求)报头(Simple Header)"和"自定义请求报头(Author Request Header/Custom Request Header)"。
  CORS规范将GET、HEAD和POST这三个HTTP方法视为"简单HTTP方法",而将请求报头Accept, Accept-Language, Content-Language以及采用如下三种媒体类型的报头Content-Type称为"简单请求报头"
  application/x-www-form-urlencoded
  multipart/form-data
  text/plain
  请求的报头包含两种类型,一类是通过浏览器自动生成的报头,另一种则是由JavaScript程序自行添加的报头(比如调用XMLHttpRequest的setRequestHeader方法可以为生成的Ajax请求添加任意报头),后者被称为"自定义报头"。
  CORS规范将服务如下条件的跨域资源请求划分为简单请求:请求采用简单HTTP方法,并且其自定义请求报头空或者所有自定义请求报头均为简单请求报头。之所以作如此划分是因为具有这些特性的请求不是以更新(添加、修改和删除)资源为目的,服务端对请求的处理不会导致自身维护资源的改变。
  对于简单跨域资源请求来说,浏览器将两个步骤(取得授权和获取资源)合二为一,由于不涉及到资源的改变,所以不会带来任何副作用(Side Effect)。如果针对请求的处理过程会涉及到对资源的改变,这样做就会有问题了。按照CORS规范的规定,浏览器应该采用一种被称为"预检(Preflight)"的机制来完成非简单跨域资源请求。
  所谓预检机制就是说浏览器在发送真正的跨域资源请求前,先发送一个预检请求(Preflight Request)。预检请求为一个采用HTTP-OPTIONS方法的请求,这是一个不包含主体的请求,同时用户凭证相关的报头也会被剔除。基于真正资源请求的一些辅助授权的信息会包含在此预检请求的相应报头中。除了代表请求页面所在站点的"Origin"报头之外,如下所示的是两个典型的请求报头。
  Access-Control-Request-Method :真正跨域资源请求采用的HTTP方法。
  Access-Control-Request-Headers :真正跨域资源请求携带的自定义报头列表。
  资源的提供者在接收到预检请求之后,根据其提供的相关报头进行授权检验,具体的检验逻辑即包括确定请求站点是否值得信任,以及请求采用HTTP方法和自定义报头是否被允许。如果预检请求没有通过授权检验,资源提供者一般会返回一个状态为"400, Bad Reuqest"的响应。反之则会返回一个状态为"200, OK"的响应,授权相关信息会包含在响应报头中。除了上面介绍的"Access-Control-Allow-Origin"和"Access-Control-Expose-Headers"报头之外,预检请求的响应还具有如下3个典型的报头。
  Access-Control-Allow-Methods :跨域资源请求允许采用的HTTP方法列表。
  Access-Control-Allow-Headers :跨域资源请求允许携带的自定义报头列表。
  Access-Control-Max-Age :浏览器可以将响应结果进行缓存的时间(单位为秒),这样可以让浏览器避免频繁地发送预检请求。
  浏览器在接收到预检响应之后,会根据响应报头确定后续发送的真正跨域资源请求是否会被接受,相关的检验包括针对服务端允许站点以及HTTP方法和自定义请求报头(利用响应报头"Access-Control-Allow-Methods"和"Access-Control-Allow-Headers")的检验。具体的检验逻辑如下
  通过请求的"Origin"报头表示的源站点必须存在于"Access-Control-Allow-Origin"响应报头标识的站点列表中。
  响应报头"Access-Control-Allow-Methods"不存在,或者预检请求的"Access-Control-Request-Method"报头表示的请求方法在其列表之内。
  预检请求的"Access-Control-Request-Headers"报头存储的报头名称均在响应报头"Access-Control-Allow-Headers"表示的报头列表之内。
  只有在确定服务端一定会接受的情况下,浏览器才会发送真正跨域资源请求。预检响应结果会被浏览器缓存,在"Access-Control-Max-Age"报头设定的时间内,缓存的结果将被浏览器用户进行授权检验,所以在此期间不会再有预检请求发送。
  四、是否支持用户凭证
  在默认情况下,利用XMLHttpReuqest发送的Ajax请求不会携带用户凭证相关的敏感信息,这里的用户凭证类型包括Cookie、HTTP-Authentication报头以及客户端X.509证书(采用支持客户端证书的TLS/SSL)等。如果需要用户凭证附加到Ajax请求上,需要将XMLHttpReuqest的withCredentials 属性设置为True。
  对于CORS来说,是否支持用户凭证也是授权检验的一个环节。换句话说,只有在服务端显式支持用户凭证的情况下,携带了用户凭证的请求才会被认为是有效的。在W3C的CORS规范来说,服务端利用响应报头"Access-Control-Allow-Credentials"来表明自身是否支持用户凭证。
  也就是说,如果客户客户端JavaScript程序利用一个withCredentials属性为true的XMLHttpReuqest发送了一个跨域资源请求,但是浏览器得到的响应中不具有一个值为"true"的响应报头"Access-Control-Allow-Credentials",它对获取资源的操作将会浏览器拒绝。

别再踩雷了,你不知道的装修知识点,专业人士来为你解答别再踩雷了,你不知道的装修知识点,专业人士为你解答!许多业主在买房的时候都会精心挑选和对比,最后选出了合适的房源,却因为第一次装修,什么都不懂,白白踩了许多雷,要想不踩雷,在装修前装修结束了,心也凉了,这13处小失误不注意,住进去才后悔装修结束了,心也凉了,这13处小失误不注意,住进去才后悔!唉,别提了,就是因为自己的假专业好面子让整个装修变得十分拉胯,再加上自己手头也不是那么宽裕,在自己装修房子之前,满满的自信以美元为主要储备货币而产生的担忧所有国家的中央银行都持有黄金和外汇作为官方储备,这些储备用来清偿对外债务,并在必要的时候干预外汇市场支持本币,在过去80年里美元一直是世界上最主要的储备货币目前美元储备大概占总储备据说,所有人都有一个毛病,越是喜欢谁据说,所有人都有一个毛病,越是喜欢谁,就越爱欺负谁玲子住在乡下,两层的破旧木屋,东北风偶尔会从缝中漏点出来,厨房中也是简简单单的锅碗瓢盆,一只小猫咪爬在房檐,瘦成骡子一样,两眼东倒生死两轮回,青龙伏虎富贵豪的父亲富仁仨,长期盘踞此地。白稚青山,云脉巍峨高耸,虎踞中原,山阴有大河,山阳乃鸽重镇(阳锁城),扼天下咽喉,平川连绵百里,峰峦起伏高峰有七峰,耸高入云,平日里只见白云环绕山上红楼之人定胜天上红楼,游碧海知己甚难侯,寻遍芳踪迟迟夜依旧,满腔心事谁说,唯余惆怅南方的私家园林已如旧家的毛草,湾湾牙挂不到天空的际边,不见了明亮,连空中点点星头少无寥几,南郡硬仗之声不在了。红做一个忙忙碌碌的姑娘平时我们每天都是忙忙碌碌的,为了生活,每天都要早出晚归,要努力去上班赚钱,所有想要享受生活,过上自己心中理想的生活很难。但其实有时候并没有自己想的那么难,现在的很多姑娘生活都是很多喝茅台的冲动,红脸爆空头今天A股喝着小酒,酝酿爆空头国庆期间,贵州茅台一酒难求,甚至交订金都不行。05年前买一瓶80年代黑酱只需要5000左右,现在是350000还多。厂家盈利,及市场对品牌的认可。不外乎2020年10月16日晚,纳斯达克开盘前10医药股占6个今晚美国开盘上来医药股全线飘红,纳斯达斯前10位,医药股占据6位。可以想象美国生病的人有多少?总结起来就是,生病了先去福泰会诊,去亚力克拿药,回到再生元打针,提供拜马林式医疗服务,20世纪末,街头采访谁也没有想到21世纪看中国速度。有一种速度叫中国速度,有一种奇迹叫中国奇迹。1995年记者大街采访采访的问题是你认为中国在21世纪会是什么样子?大街上挂满了青涩的小脸一位女孩接受了278天前,买了2支基金体验今天无意间翻到278天前在华安财富随机买了体验金。这么算来好像是2020年1月份左右购买的,当时也是为了模拟自己对股票基金的判断,当做参考体验一下。当时选择的是华安媒体互联网混合和
魅族究竟有什么魔力,叫人又爱又恨?自智能手机这个概念出世以来,这块市场就从来没有安静过,不断有新的品牌进入,稍有不慎便产生了出局者。前前后后10年,霸主从来没有被谁垄断过,前有苹果三星,后有小米OV华为。但就是在这iPhoneSE3或将采用打孔屏设计,起价3499元,你会喜欢吗?就在去年,苹果终于在长达四年的时间里更新了iPhoneSE系列手机,第二代iPhoneSE2因其小巧的设计和强大的内部芯片,以及低廉的价格而成为人们的最爱。现在,苹果似乎加快了步伐新基建读书摘要1新基建新红利新机遇2区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有不可伪造全程留痕可以追溯公开透明集体维护等特征。基于这些特征,区块蓝色星球预言家,怎样进入未知的领域看着面前的队员和科学家们,刘明有些激动,还有几个小时就要进入黑行星了,人类对于黑行星有持续的研究,但今天将是第一次正式进入。我想听一听您们的看法刘明说道生物学家李力看了一下舰长回道你从什么时候开始意识到中国正在逐渐变强?2000年以后我开始意识到中国真正逐渐变强了。我88年大学毕业后就在一家央企进出口公司工作负责非洲业务。去过非洲30多个国家。我亲身经历感觉到中国在非洲逐渐变强。2000年之前去非宽带连接失败,错误为651怎么回事?出现错误代码651的原因有三种原因一ONUONT光MODEM报告错误。原因二如果是拨号连接,并且正在使用所支持的外置ONUONT光MODEM,请关闭并重新启动ONUONT光MODE小米手机为什么不会被制裁?在制裁这件事上,如果某国制裁小米,限制小米的生产的话,那必然是害人害己!因为小米手机在芯片方面,在很多的配件方面都采购了某国的一些产品,如果说制裁了小米,可能很影响高通的营收,更加顶级性能助听器效果最好吗?顶级机的的性能更优越,对声音的处理更好,可以提高聆听的舒适度。是的,清晰度很高,聆听效果更真实,各功能更加完善你好,不一定。影响佩戴效果的一些因素1听力损失程度1)听力损失程度往往日本维克多公司VICTORPC100可拆卸盒式录音机产品简介制造厂商日本维克多公司(VICTOR品牌)产品型号VICTORPC100产品类型4波段收音机可拆卸盒式录音机可拆卸立体声音响生产日期1985年制造国家日本东京制造音响颜色红年末捡漏老旗舰!三款12256骁龙888跌至3000元以内,你会买吗?年末又是捡漏老旗舰的好时机,因为新旧交替之际,手机厂商为了清库存会大幅下调老旗舰的价格,你现在看到的价格可能并非最终的最低价,也许再过一个月价格还会更低,不过现在以下三款12G25中通快递员遭投诉当客户面踩碎包裹,快递就这样送货上门?来源人民网3日,一态度嚣张快递员冲上热搜近日,上海一快递员把宋女士的快递送错,却要宋女士丈夫自己去邻居家取,宋女士听到这种无理要求后投诉。第二天这名快递员上门送货,但却当着用户的面