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

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",它对获取资源的操作将会浏览器拒绝。

现在用的华为荣耀8X,下一步换哪部手机最合适?8x用了三年了,就是人为将屏摔坏了二次,第一次是售后服务,第二次是三百元换了个屏,目前并没有感觉有问题,还和当初用的一样流畅,各项功能正常。手机功能再多,对于某些人来说无非是为了通如何看待荣耀50全系都采用的高频PWM调光?这个与其他家调光有什么差别?首先我们要明白OLED屏幕伤眼的原理,然后再去比较高频PWM调光和DC调光的差异,伤眼的主要原因就是屏幕闪烁的问题。目前OLED屏幕的亮度控制往往是通过PWM技术来实现的,通过控制微软彻底解决蓝屏问题?死机界面变为黑色随着微软Win11开发者预览版的发布,其各项改变都成为用户的关注重点。近日就有媒体发现,在这个新的开发者预览版中,经典的微软蓝屏界面变成了黑屏。除了背景从蓝色变成黑色之外,其他的内人脸识别时一定要穿上衣服,这是来自内部人员的忠告人脸识别时一定要穿上衣服,这是来自内部人员的忠告。最近,有一名技术公司的内部人事曝出了一个行业内幕,并引来了众多网友的激烈讨论。这位内部人事劝告用户在使用人脸识别的时候一定要穿好衣小米MIUI13有望7月16日发布分布式菜单是一大亮点随着大量丰富功能的加入,曾经以优秀体验流畅著称的MIUI系统如今却成了小米旗舰的最大累赘,系统过于臃肿导致BUG出现的概率非常高,并且常有卡顿发热情况出现,被用户不少吐槽。因此,小事关华为鸿蒙OS系统!外媒再次传来好消息格力董大姐表态接入鸿蒙7月8日讯相信大家都知道,华为鸿蒙OS系统发布至今已经有一个多月时间了,在这短短一个月时间内,已经有很多华为手机用户升级了鸿蒙OS系统,并且我们从首批升级鸿蒙OS系统公测版用户反馈你现在用的什么手机?再换机还用这个品牌的吗?谢邀!其实因为过去一年半之间,因为职业属性的机缘巧合,让我连续使用了两代vivoX系列的产品,包括上一代的vivoX50Pro以及这一代的vivoX60Pro,而现在,vivoX6滴滴是寂静的,热闹是别人的,网约车市场大战一触即发网约车,是基于个人将自己暂时闲置的资源服务他人并获取相应回报的经济模式,一直被视为共享经济的代表。随着近年来各地司机对滴滴等大型网约车平台高抽点的不满,以及三四线城市互联网市场的崛996的时代要过去了?7月9日字节跳动宣布,将在8月1号取消大小周,有需求的团队和个人,可以通过系统提交加班申请。来自新浪微博从腾讯宣布强制6点下班开始,到快手取消大小周,字节跳动成为了第三家调整工作时我用的是邻家wifi,买一个wifi信号放大器,能有用吗?我用的是邻家wifi,买一个wifi信号放大器有用吗?这种做法是很好的一种方法,wifi信号放大器相当于一个无线wifi扩展器,它可以接收邻居家里的无线wifi信号进行扩展范围。不国产光刻机即将下线,日本却紧急断供光刻胶,国企不负众望点击关注,每天精彩不断!导读国产光刻机即将下线,日本却紧急断供光刻胶,国企不负众望!如今半导体芯片已经成为了国内科技企业发展的重中之重,作为现代科技发展的最顶级智慧结晶,虽然说半导
中国经济一季报亮点丨绿色转型稳步推进今年一季度,我国绿色低碳产品消费增长较快,新能源汽车太阳能电池产量分别增长140。8和24。3。清洁能源消费占比继续提升,天然气水核风光电等清洁能源消费比重上升,单位GDP能耗继续论未来中低速电动汽车含二手中低速电动汽车的继续生存空间我在网络小视频平台曾看到有别人的视频作品说过这样一句话未来淘汰手动档汽车的不是自动档汽车,而是新能源汽车。这句话是有一定正确性和预见性的,而且现在也的确听说有燃油车企业将在以后正式全球首个月壤数字藏品发布(来源北京日报)昨天(4月24日),2022年中国航天日线上启动,以一首AI编曲版东方红致敬中国航天历史。在航天日期间,探月工程重磅发布了全球首个月壤数字藏品,通过前沿科技与航天技分享5款windows必装的黑科技软件,款款都很实用,错过就太可惜啦哈喽大家好呀,我是分享科技小达人。我们的电脑上有非常多的好用软件,只是很少被人们发现,今天给大家分享5款电脑必装的windows软件,黑科技十足,一起来看看吧。第一款AIRPLAY电商还有出路吗现在的电商已经开始走下坡路。这是行业发展的必然趋势,电商虽然快捷,发展迅速,但是电商破坏了整体商业流程。商业如同一个人营养的摄取过程,先经过口腔咀嚼,在经过胃的分解吸收,然后肠道的京东生鲜果蔬肉禽蛋可满足45天周转APP刷不出菜怎么办?莫慌!北京日报客户端记者获悉,由于订单持续高涨,京东生鲜已紧急成立应急小组,继续协调支援提升产能清理生鲜订单,同时启用智慧排产控单。据了解,截至目前,其重点民苹果AppStore将下架长期不更新的应用程序,此举背后都有哪些原因月24日消息,据TechWeb报道,苹果似乎将要开始逐渐下架长期不更新的App。在发送给受影响开发者的电子邮件中,苹果警告称,它将从应用程序商店中删除长时间内没有更新的应用程序,并华为的鸿蒙产品设计师,请不要堆砌功能乔布斯的苹果出来之前,是手机比拼功能的时代,而华强北的山寨,那速度和灵感,跑马灯大喇叭保时捷等各式外形把一众品牌踩在地上蹂躏,手机变成庸俗的玩具。直到乔布斯出来,拿把刀大砍,方方正在手机严重的内卷之下看各家手机厂商是如何破防的现在手机已经发展到了一个瓶颈各家的硬件水平都差不多在靠着推料出来更高的新颖的东西已经不太可能所以今年我们会看到很多手机厂家都在纷纷找别的出路。首先我们看到去年华为在美国的打压之下硬苹果商店或将下架长期不更新App4月24日消息,苹果正在开始打击长期不更新的App。苹果在发送给受影响开发者的电子邮件中警告称,它将从应用程序商店中删除长时间内没有更新的应用程序,并给开发者30天的时间进行更新,消息称苹果拟明年发布iMacPro和iMac鞭牛士4月25日消息,据新浪科技消息,消息称苹果有可能在2023年发布iMacPro和搭载M3芯片的iMac。预计苹果将在今年推出使用了M2芯片的新款Mac电脑产品,然而有消息称,