>

跨域财富分享CO奔驰G级S,跨域财富分享

- 编辑:www.bifa688.com -

跨域财富分享CO奔驰G级S,跨域财富分享

内需注意的是,假设要发送Cookie,Access-Control-Allow-Origin就无法设为星号,必须钦命鲜明的、与央浼网页一致的域名。相同的时候,Cookie照旧依照同源政策,独有用劳动器域名设置的Cookie才会上传,其余域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也敬敏不谢读取服务器域名下的库克ie。

(图片表明:摄于阿拉伯联合共合国酋艾因(Al Ain)的绿洲花园)

三、简单央浼

全副COLacrosseS通讯进度,皆以浏览器自动已毕,无需用户插足。对于开垦者来讲,COSportageS通讯与同源的AJAX通讯未有异样,代码完全平等。浏览器一旦发觉AJAX诉求跨源,就会自动抬高级中学一年级些附加的头消息,不经常还有也许会多出三遍附加的乞求,但用户不会有痛感。

一、简介

CO奥迪Q3S必要浏览器和服务器同临时间支持。近年来,全部浏览器都协理该功能,IE浏览不可能低于IE10.

整个COCR-VS通讯进度,都以浏览器自动完结,无需用户加入。对于开拓者说,CO卡宴S通讯与同源的AJAX通信一点差别也没有,代码完全同样。浏览器一旦开掘AJAX诉求跨域,就能够自行抬高级中学一年级些叠合的头消息,一时还有大概会多出一遍附加的呼吁,但用户不会有感觉

据此,达成CO奥迪Q5S通讯的主借使服务器。只要服务器完结了COXC90S接口,就足以跨域央求

3.1 基本流程

对于简易央求,浏览器直接发生COSportageS央求。具体来讲,就是在头音信之中,扩充二个Origin字段。

下边是贰个例子,浏览器开采本次跨源AJAX供给是不难伏乞,就自动在头音信之中,加多三个Origin字段。

GET /cors HTTP/1.1Origin: http://api.bob.comHost: api.alice.comAccept-Language: en-USConnection: keep-aliveUser-Agent: Mozilla/5.0...

地点的头新闻中,Origin字段用来注解,这一次央求来自哪个源(协议 域名 端口)。服务器依据那个值,决定是或不是允许此番需要。

如果Origin钦命的源,不在许可限制内,服务器会重临二个平常化的HTTP回应。浏览器开掘,这么些回答的头音讯尚未包括Access-Control-Allow-Origin字段(详见下文),就驾驭出错了,进而抛出贰个错误,被XMLHttpRequestonerror回调函数捕获。注意,这种不当无法通过情状码识别,因为HTTP回应的状态码有极大概率是200。

如果Origin点名的域名在批准范围内,服务器重返的响应,会多出几个头音信字段。

Access-Control-Allow-Origin: http://api.bob.comAccess-Control-Allow-Credentials: trueAccess-Control-Expose-Headers: FooBarContent-Type: text/html; charset=utf-8

地方的头新闻之中,有多少个与CO福特ExplorerS央浼相关的字段,都以Access-Control-开头。

(1)Access-Control-Allow-Origin

该字段是必须的。它的值要么是央浼时Origin字段的值,要么是三个*,表示接受自便域名的伸手。

(2)Access-Control-Allow-Credentials

该字段可选。它的值是二个布尔值,表示是不是允许发送库克ie。暗中认可情状下,Cookie不满含在CO昂科拉S乞请之中。设为true,即意味着服务器明确准许,Cookie能够分包在伸手中,一齐发给服务器。那个值也不得不设为true,如若服务器不要浏览器发送库克ie,删除该字段即可。

(3)Access-Control-Expose-Headers

该字段可选。COWranglerS乞请时,XMLHttpRequest对象的getResponseHeader()艺术只可以得到6个着力字段:Cache-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPragma。假若想得到别的字段,就必须在Access-Control-Expose-Headers里头钦点。下面的事例钦命,getResponseHeader('FooBar')能够回来FooBar字段的值。

上边的头消息中,Origin字段用来证明,此次央求来自哪个源(协议 域名 端口)。服务器依据那么些值,决定是还是不是允许这一次诉求。

4.1 预检必要

非轻巧须求是这种对服务器有特殊供给的呼吁,比如央求方法是PUTDELETE,或者Content-Type字段的种类是application/json.

非轻易伏乞的CO奇骏S央浼,会在专门的学问通讯以前,扩张一回HTTP查询乞请,称为“预检”伏乞(preflight)

浏览器先了然服务器,当前网页所在的域名是不是在服务器的批准名单之中,以及能够运用那三个HTTP动词和头音信字段。独有取得一定答应,浏览器才会生出正式的XMLHttpRequest要求,不然就报错

上面是一段浏览器的JavaScript脚本

var url = 'http://api.alice.com/cors';
var xhr = new XMLHttpRequest();
xhr.open('PUT', url, true);
xhr.setRequestHeader('X-Custom-Header', 'value');
xhr.send();

地点代码中,HTTP乞求的办法是PUT,并且发送三个自定义头新闻X-Custom-Header

浏览器发掘,那是三个非轻易供给,就自动发出一个“预检”央浼,须求服务器确认能够这么诉求。上边是其一“预检”要求的HTTP头新闻

OPTIONS /cors HTTP/1.1
Origin: http://api.bob.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: X-Custom-Header
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...

“预检”哀告用的乞请方法是OPTIONS,表示那几个诉求时用来打听的。头新闻里面,关键字段是Origin,表示央浼来自那么些源

除了origin字段,"预检"要求的头新闻包罗八个奇特字段。
(1)Access-Control-Request-Method
该字段是必须的。用来列出浏览器的COKoleosS央求
会用到那么些HTTP方法,上例是PUT
(2)Access-Control-Request-Headers
内定浏览器CO凯雷德S伏乞会额外发送的头音信字段,上例是X-Custom-Header

四、非轻松央浼

如果Origin点名的源,不在许可限制内,服务器会再次回到二个常常的HTTP回应。浏览器发掘,那一个回答的头音讯未有包罗Access-Control-Allow-Origin字段(详见下文),就清楚出错了,进而抛出贰个荒谬,被XMLHttpRequestonerror回调函数捕获。注意,这种不当不可能通过情形码识别,因为HTTP回应的状态码有极大大概是200。

4.2 预检须求的答应

服务器收到“预检”央求现在,检查了originAccess-Control-Request-MethodAccess-Control-Request-Headers字段今后,确认允许跨域央浼,就足以做出回应

HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 01:15:39 GMT
Server: Apache/2.0.61 (Unix)
Access-Control-Allow-Origin: http://api.bob.com
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: X-Custom-Header
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Content-Length: 0
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: text/plain

地点的HTTP回应中,关键的是Access-Control-Allow-Origin字段,表示http;//api.bob.com能够须求数据。该字段也得以设为星号,表示同意任性跨域要求

Access-Control-Allow-Origin: *

万一服务器否定了“预检”要求,会回来一个正常的HTTP回应,不过尚未其余CORS相关的头音讯字段。那时,浏览器就能够确认,服务器不一致意预检诉求,由此触发三个错误,被XMLHttpRequest对象的onerror回调函数捕获。调控台会打字与印刷出如下的报错音信,

XMLHttpRequest cannot load http://api.alice.com.
Origin http://api.bob.com is not allowed by Access-Control-Allow-Origin.

接下去介绍,服务器回应的别的CO库罗德S相关字段

Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: X-Custom-Header
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 1728000

(1)Access-Control-Allow-Methods
非得。它的值是逗号分隔的二个字符串,注明服务器帮衬的具有跨域央求的主意。注意,重返的是装有帮忙的诀要,而不单是浏览器央求的要命格局。那是为着制止频繁“预检”须要

(2)Access-Control-Allow-Headers
只要浏览器必要满含Access-Control-Request-Headers字段,则Access-Control-Allow-Headers字段是不能够的。它也是一个逗号分隔的字符串,注脚服务器扶助的装有头音信字段,不限于浏览器在“预检”中呼吁的字段

(3)Access-Control-Allow-Credentials
该字段与简便央浼时的含义一样。

(4)Access-Control-Max-Age
可选。用来钦定此次预检需要的保质期,单位为秒。上面结果中,保藏期是20天(1727000秒),即允许缓存该条回应172八千秒(即20天),在此时期,不用发出另一条预检央求。

正文详细介绍CO宝马X3S的中间机制。

(1)Access-Control-Allow-Origin

3.1宗旨流程

对于简易诉求,浏览器直接发生COQashqaiS央求。具体来讲,就是在头音信之中,则多加三个origin字段

GET /cors HTTP/1.1
Origin: http://api.bob.com
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...

上边的头音讯中,origin字段用来阐明,此番伏乞来自特别源(协议 域名 端口)。服务器依据那一个值,决定是不是同意此番央浼

如果origin点名的源,不再批准范围内,服务器会重返贰个常规的HTTP回应。浏览器开采,那个答复的头音信未有富含Access-Control-Allow-Origin字段(详见下文),就掌握出错了,进而抛出一个荒唐,被XMLHttpRequest的onerror回调函数捕获。注意,这种错误无法通过情状码识别,因为HTTP回应的状态码有相当大希望是200.

如果origin点名的域名在获准限制内,服务器重返的响应,会多出多少个头消息字段

Access-Control-Allow-Origin: http://api.bob.com
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: FooBar
Content-Type: text/html; charset=utf-8

必发88官网,上边包车型大巴头新闻之中,有八个与CO奔驰M级S央求相关的字段,都以Access-Control开头

(1)Access-Control-Allow-Origin
该字段必须。它的值要么是呼吁时origin字段的值,要么是一个*,表示接受任性域名的乞请

(2)Access-Control-Allow-Credentials
字段可选。它的值是二个布尔值,表示是还是不是同意发送cookie.私下认可情况下,Cookie不包罗在CO昂科威S央求之中。设为true,即表示服务器鲜明批准,Cookie能够分包在伸手中,一同发给服务器。那个值只好设为true,如若服务器不要浏览器发送Cookie,删除该字段就能够。

(3)Access-Control-Expose-Headers
字段可选。CO君越S央求时,XMLHttpRequest对象的getResponseHeader()办法只好得到6个主导字段:Cache-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPragma。假若想获得别的字段,就必須在Access-Control-Expose-Headers裏面钦赐。上边的事例内定,getResponseHeader('FooBar')能够重临FooBar字段的值

一、简介

COCRUISERS要求浏览器和服务器同期帮助。近日,全部浏览器都扶助该意义,IE浏览器不可能低于IE10。

一体CO奥迪Q5S通讯进程,都以浏览器自动达成,无需用户插手。对于开荒者来说,COEvoqueS通讯与同源的AJAX通讯未有距离,代码千篇一律。浏览器一旦发觉AJAX诉求跨源,就能够自行抬高级中学一年级些增大的头消息,临时还有或然会多出贰回附加的央浼,但用户不会有以为。

于是,落成COPAJEROS通讯的第一是服务器。只要服务器完毕了CO智跑S接口,就能够跨源通信。

该字段必需,它的值是逗号分隔的三个字符串,注明服务器扶助的具备跨域诉求的主意。注意,再次来到的是负有援救的秘技,而不单是浏览器供给的万分格局。那是为了防止频仍"预检"诉求。

三、轻易供给

二、二种央浼

浏览器将CO奥迪Q5S央浼分成两类:轻便哀告(simple request)和非轻便乞求(not-so-simple request)。

要是同有的时候间满意以下两大口径,就属于简单央浼。

(1) 恳求方法是以下二种艺术之一:

  • HEAD

  • GET

  • POST

(2)HTTP的头消息不超越以下三种字段:

  • Accept

  • Accept-Language

  • Content-Language

  • Last-Event-ID

  • Content-Type:只限于八个值application/x-www-form-urlencodedmultipart/form-datatext/plain

举凡不一致一时间知足上边七个标准,就属于非简单伏乞。

浏览器对那三种乞求的拍卖,是不一致样的。

(3)Access-Control-Expose-Headers

五、与JSONP的比较

CO中华VS与JSONP的运用目标一样,不过比JSONP更有力
JSONP只支持GET恳请,COLANDS补助具有品类的HTTP诉求。JSONP的优势在于协助老式留啦你去,以及能够向不协理CO奇骏S的网站呼吁数据

4.1 预检必要

非简单乞求是这种对服务器有特殊须求的伸手,举例供给方法是PUTDELETE,或者Content-Type字段的项目是application/json

非轻松乞请的COLANDS诉求,会在标准通讯从前,扩展二遍HTTP查询哀求,称为"预检"乞求(preflight)。

浏览器先明白服务器,当前网页所在的域名是不是在服务器的准予名单之中,以及能够动用什么HTTP动词和头音讯字段。独有得到一定回应,浏览器才会时有爆发正式的XMLHttpRequest呼吁,不然就报错。

上边是一段浏览器的JavaScript脚本。

var url = 'http://api.alice.com/cors';var xhr = new XMLHttpRequest();xhr.open('PUT', url, true);xhr.setRequestHeader('X-Custom-Header', 'value');xhr.send();

地点代码中,HTTP央浼的主意是PUT,並且发送二个自定义头消息X-Custom-Header

浏览器开采,那是一个非轻松央求,就活动发出三个"预检"诉求,供给服务器确认能够那样诉求。上边是其一"预检"央求的HTTP头新闻。

OPTIONS /cors HTTP/1.1Origin: http://api.bob.comAccess-Control-Request-Method: PUTAccess-Control-Request-Headers: X-Custom-HeaderHost: api.alice.comAccept-Language: en-USConnection: keep-aliveUser-Agent: Mozilla/5.0...

"预检"央浼用的呼吁方法是OPTIONS,表示这一个央求是用来询问的。头音讯里面,关键字段是Origin,表示央求来自哪个源。

除了Origin字段,"预检"须要的头音讯包罗五个特别字段。

(1)Access-Control-Request-Method

该字段是必须的,用来列出浏览器的COKugaS诉求会用到何以HTTP方法,上例是PUT

(2)Access-Control-Request-Headers

该字段是一个逗号分隔的字符串,内定浏览器CO昂科威S央求会十三分发送的头消息字段,上例是X-Custom-Header

非轻巧央浼是这种对服务器有特殊须求的伸手,例如诉求方法是PUTDELETE,或者Content-Type字段的品种是application/json

4.3 浏览器的正规须求和应对

假如服务器通过了“预检”伏乞,以往每一回浏览器正常的COEnclaveS要求,就都跟简单伏乞同样,会有多少个origin头新闻字段。服务器的答问,也都会有贰个Access-Control-Alllow-Origin头音讯字段

上边是"预检"供给之后,浏览器的常规COENVISIONS央求。

PUT /cors HTTP/1.1
Origin: http://api.bob.com
Host: api.alice.com
X-Custom-Header: value
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...

地点偷心的origin字段是服务器自动抬高的。
上边是服务器常规的回应

Access-Control-Allow-Origin: http://api.bob.com
Content-Type: text/html; charset=utf-8

地点头信息中,Access-Control-Allow-Origin字段是历次回应都必将包括的。

4.2 预检央求的对答

服务器收到"预检"央浼现在,检查了OriginAccess-Control-Request-MethodAccess-Control-Request-Headers字段现在,确认允许跨源须求,就能够做出答复。

HTTP/1.1 200 OKDate: Mon, 01 Dec 2008 01:15:39 GMTServer: Apache/2.0.61 (Unix)Access-Control-Allow-Origin: http://api.bob.comAccess-Control-Allow-Methods: GET, POST, PUTAccess-Control-Allow-Headers: X-Custom-HeaderContent-Type: text/html; charset=utf-8Content-Encoding: gzipContent-Length: 0Keep-Alive: timeout=2, max=100Connection: Keep-AliveContent-Type: text/plain

上面的HTTP回应中,关键的是Access-Control-Allow-Origin字段,表示http://api.bob.com能够央求数据。该字段也得以设为星号,表示同意放肆跨源伏乞。

Access-Control-Allow-Origin: *

假诺浏览器否定了"预检"哀告,会重回一个例行的HTTP回应,但是从未任何CO路虎极光S相关的头音讯字段。那时,浏览器就能够分明,服务器分歧意预检央浼,因而触发多个谬误,被XMLHttpRequest对象的onerror回调函数捕获。调控台会打字与印刷出如下的报错音信。

XMLHttpRequest cannot load http://api.alice.com.Origin http://api.bob.com is not allowed by Access-Control-Allow-Origin.

服务器回应的别样COSportageS相关字段如下。

Access-Control-Allow-Methods: GET, POST, PUTAccess-Control-Allow-Headers: X-Custom-HeaderAccess-Control-Allow-Credentials: trueAccess-Control-Max-Age: 1728000

(1)Access-Control-Allow-Methods

该字段必需,它的值是逗号分隔的贰个字符串,声明服务器帮忙的具备跨域央浼的艺术。注意,重临的是富有援救的不二秘诀,而不单是浏览器须要的那一个格局。那是为了幸免频仍"预检"央求。

(2)Access-Control-Allow-Headers

借使浏览器央求富含Access-Control-Request-Headers字段,则Access-Control-Allow-Headers字段是必备的。它也是一个逗号分隔的字符串,评释服务器协理的保有头新闻字段,不压制浏览器在"预检"中呼吁的字段。

(3)Access-Control-Allow-Credentials

该字段与简短须求时的含义一样。

(4)Access-Control-Max-Age

该字段可选,用来内定此次预检央浼的保藏期,单位为秒。上面结果中,保质期是20天(172八千秒),即允许缓存该条回应172八千秒(即20天),在此期间,不用发出另一条预检恳求。

(1)Access-Control-Request-Method

3.2 withCredentials属性

下边聊起,COLANDS诉求暗中认可不发送Cookie和HTTP认证新闻。假使把Cookie发送到服务器。一方面要服务器统一,钦定Access-Control-Allow-Credentials字段

//服务器
Access-Control-Allow-Credentials: true

一面,开垦者必须在AJAX乞请中开垦withCredentials属性

//浏览器
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

不然,固然服务器同意发送Cookie,浏览其也不会发送。可能,服务器必要安装Cookie,浏览器也不会管理

不过,即使轻松withCredentials设置,有的浏览器依然会联手发送Cookie。那是,能够展现关系withCredentials

xhr.withCredentials = false;

亟需专注的是,假诺要发送Cookie,Access-Control-Allow-Origin,就无法设为星号,必须钦赐鲜明的、与要求网页一贯的域名。同一时间,Cookie依然依照同源政策,独有用劳动器域名设置的库克ie才会上擦混,其余域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无从读取服务器域名下的Cookie

3.2 withCredentials 属性

上边提起,CO昂科威S央求暗中同意不发送Cookie和HTTP认证消息。如若要把Cookie发到服务器,一方面要服务器同意,钦命Access-Control-Allow-Credentials字段。

Access-Control-Allow-Credentials: true

一边,开采者必须在AJAX央求中开垦withCredentials属性。

var xhr = new XMLHttpRequest();xhr.withCredentials = true;

不然,尽管服务器同意发送Cookie,浏览器也不会发送。大概,服务器必要安装Cookie,浏览器也不会管理。

只是,如若轻便withCredentials设置,有的浏览器依旧会联合发送Cookie。这时,能够显式关闭withCredentials

xhr.withCredentials = false;

须要注意的是,假设要发送Cookie,Access-Control-Allow-Origin就不能够设为星号,必须钦命明显的、与央求网页一致的域名。同有时候,Cookie如故依照同源政策,只有用服务器域名设置的Cookie才会上传,别的域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也束手无策读取服务器域名下的Cookie。

(1)Access-Control-Allow-Methods

本文详细介绍COLacrosseS的内部机制

它同意浏览器向跨源服务器,发出XMLHttpRequest伸手,进而克制了AJAX只可以同源行使的限量。

浏览器发掘,那是一个非简单诉求,就机关发出二个"预检"央求,必要服务器确认能够这么央求。上面是以此"预检"请求的HTTP头音讯。

它同意浏览器向跨源服务器,发出XMLHttpRequest,进而制服AJAX只好同源利用的界定。

正文转载:

Access-Control-Allow-Credentials: true

摘要

一、简介
二、三种需要
三、轻巧诉求
四、非简单央浼
五、与JSONP的比较

COWranglerS是几个W3C规范,全称是"跨域能源分享"(Cross-origin resource sharing)。

你或然感兴趣的篇章:

  • Apache中布署帮衬CO奥迪Q5S(跨域资源分享)实例
  • js完毕跨域的二种方法汇总(图片ping、JSONP和COENVISIONS)
  • JS跨域化解方案之使用CO牧马人S完毕跨域
  • 应用CO凯雷德S完成JavaWeb跨域央浼难点的方法
  • 跨域央求的全面消除办法(JSONP, CO传祺S)
  • Node.js设置CO福特ExplorerS跨域乞请中多域名白名单的秘技

四、非简单要求

4.3 浏览器的寻常化央求和应对

一旦服务器通过了"预检"央求,未来每趟浏览器常常的COWranglerS诉求,就都跟轻巧要求同样,会有二个Origin头消息字段。服务器的答问,也都会有二个Access-Control-Allow-Origin头音讯字段。

上边是"预检"央浼之后,浏览器的例行COENVISIONS央浼。

PUT /cors HTTP/1.1Origin: http://api.bob.comHost: api.alice.comX-Custom-Header: valueAccept-Language: en-USConnection: keep-aliveUser-Agent: Mozilla/5.0...

地方头新闻的Origin字段是浏览器自动抬高的。

上面是服务器常规的回应。

Access-Control-Allow-Origin: http://api.bob.comContent-Type: text/html; charset=utf-8

地点头音讯中,Access-Control-Allow-Origin字段是历次回应都一定包蕴的。

该字段是必须的,用来列出浏览器的COXC60S央求会用到怎么HTTP方法,上例是PUT

必发88官网 1

五、与JSONP的比较

CORAV4S与JSONP的利用指标同样,然而比JSONP更加强有力。

JSONP只支持GET呼吁,COENVISIONS支持具有类型的HTTP要求。JSONP的优势在于援救老式浏览器,以及能够向不帮忙COKugaS的网址呼吁数据。

必发88官网 2

CO凯雷德S是三个W3C标准,全称是“跨域能源共享”(Cross-origin resource sharing)。

GET /cors HTTP/1.1Origin: http://api.bob.comHost: api.alice.comAccept-Language: en-USConnection: keep-aliveUser-Agent: Mozilla/5.0...

二、三种乞请

浏览器将CO本田UR-VS乞求分成两类:轻易央浼(simple request)和非简单央浼(not-so-simple request)

假定同期知足以下两大原则,就属于简单供给

(1)恳求方法是弹指间几种方法之一

  • HEAD
  • GET
  • POST

(2)HTTP的头消息不高于一下二种字段

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-type:只限于八个值application/x-www-form-urlencoded、multipart/form-data、text/plain

任何差别的时候满意上边多个原则,便是非简单乞请
浏览器对这两种伏乞的拍卖,是不一致等的

Access-Control-Allow-Methods: GET, POST, PUTAccess-Control-Allow-Headers: X-Custom-HeaderAccess-Control-Allow-Credentials: trueAccess-Control-Max-Age: 1728000

下边是服务器常规的应对。

(2)HTTP的头音讯不当先以下两种字段:

JSONP只支持GET恳请,CO君越S扶助具备品类的HTTP央求。JSONP的优势在于帮忙老式浏览器,以及能够向不扶助COOdysseyS的网址呼吁数据。

五、与JSONP的比较

HTTP/1.1 200 OKDate: Mon, 01 Dec 2008 01:15:39 GMTServer: Apache/2.0.61 (Unix)Access-Control-Allow-Origin: http://api.bob.comAccess-Control-Allow-Methods: GET, POST, PUTAccess-Control-Allow-Headers: X-Custom-HeaderContent-Type: text/html; charset=utf-8Content-Encoding: gzipContent-Length: 0Keep-Alive: timeout=2, max=100Connection: Keep-AliveContent-Type: text/plain

XMLHttpRequest cannot load http://api.alice.com.Origin http://api.bob.com is not allowed by Access-Control-Allow-Origin.

下边是"预检"央求之后,浏览器的例行CO翼虎S央求。

浏览器对这两种须求的拍卖,是不平等的。

它同意浏览器向跨源服务器,发出XMLHttpRequest呼吁,进而打败了AJAX只可以同源使用的限量。

AcceptAccept-LanguageContent-LanguageLast-伊夫nt-IDContent-Type:只限于四个值application/x-www-form-urlencodedmultipart/form-datatext/plain

二、两种诉求

四、非简单央浼4.1 预检乞求

var url = 'http://api.alice.com/cors';var xhr = new XMLHttpRequest();xhr.open('PUT', url, true);xhr.setRequestHeader('X-Custom-Header', 'value');xhr.send();

除了Origin字段,"预检"诉求的头音信包罗三个例外字段。

(4)Access-Control-Max-Age

借使同不日常候满足以下两大规格,就属于轻便央求。

三、轻易供给3.1 基本流程

服务器收到"预检"央浼未来,检查了OriginAccess-Control-Request-MethodAccess-Control-Request-Headers字段今后,确认允许跨源央浼,就足以做出回复。

var xhr = new XMLHttpRequest();xhr.withCredentials = true;

举凡分化临时候满意上面七个规范化,就属于非轻松伏乞。

如果Origin点名的域名在批准限制内,服务器重回的响应,会多出多少个头信息字段。

上边的头音信之中,有三个与COOdysseyS伏乞相关的字段,都是Access-Control-开头。

该字段是一个逗号分隔的字符串,钦赐浏览器CORS央求会万分发送的头音信字段,上例是X-Custom-Header

不然,尽管服务器同意发送Cookie,浏览器也不会发送。只怕,服务器供给安装Cookie,浏览器也不会管理。

地点代码中,HTTP央求的法子是PUT,并且发送一个自定义头音讯X-Custom-Header

(3)Access-Control-Allow-Credentials

Access-Control-Allow-Origin: http://api.bob.comAccess-Control-Allow-Credentials: trueAccess-Control-Expose-Headers: FooBarContent-Type: text/html; charset=utf-8

Access-Control-Allow-Origin: http://api.bob.comContent-Type: text/html; charset=utf-8

浏览器将COPAJEROS央求分成两类:简单乞求(simple request)和非简单央浼(not-so-simple request)。

HEADGETPOST

PUT /cors HTTP/1.1Origin: http://api.bob.comHost: api.alice.comX-Custom-Header: valueAccept-Language: en-USConnection: keep-aliveUser-Agent: Mozilla/5.0...

就此,完毕COOdysseyS通讯的首要是服务器。只要服务器达成了CO奥迪Q5S接口,就可以跨源通讯。

一、简介

该字段是必须的。它的值要么是呼吁时Origin字段的值,要么是三个*,表示接受大肆域名的央浼。

该字段可选。COENVISIONS央求时,XMLHttpRequest对象的getResponseHeader()艺术只好得到6个着力字段:Cache-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPragma。假若想得到任何字段,就非得在Access-Control-Expose-Headers内部钦定。上面包车型客车事例钦命,getResponseHeader('FooBar')能够回到FooBar字段的值。

xhr.withCredentials = false;

(图片表达:摄于阿拉伯联合共合国酋艾因(Al Ain)的绿洲庄园)

地点头音信的Origin字段是浏览器自动抬高的。

地方的HTTP回应中,关键的是Access-Control-Allow-Origin字段,表示http://api.bob.com能够必要数据。该字段也能够设为星号,表示同意任性跨源乞求。

"预检"诉求用的乞请方法是OPTIONS,表示那么些伏乞是用来明白的。头消息里面,关键字段是Origin,表示央浼来自哪个源。

浏览器先明白服务器,当前网页所在的域名是或不是在服务器的认同名单之中,以及可以采取什么HTTP动词和头消息字段。唯有得到肯定回答,浏览器才会发生正式的XMLHttpRequest伸手,不然就报错。

该字段与简短央浼时的意思同样。

(完)

非轻易诉求的COCRUISERS乞请,会在专门的学问通讯从前,扩大三次HTTP查询需要,称为"预检"乞求(preflight)。

下边是二个例子,浏览器开采这一次跨源AJAX央求是轻易哀告,就自动在头新闻之中,加多八个Origin字段。

只要浏览器诉求包含Access-Control-Request-Headers字段,则Access-Control-Allow-Headers字段是少不了的。它也是二个逗号分隔的字符串,声明服务器帮助的具备头新闻字段,不防止浏览器在"预检"中呼吁的字段。

3.2 withCredentials 属性

(2)Access-Control-Allow-Credentials

就算浏览器否定了"预检"乞请,会回来贰个正规的HTTP回应,但是尚未别的CO奥迪Q7S相关的头新闻字段。那时,浏览器就会确认,服务器差别意预检乞求,由此触发一个错误,被XMLHttpRequest对象的onerror回调函数捕获。调节台会打字与印刷出如下的报错音信。

另一方面,开拓者必须在AJAX诉求中开发withCredentials属性。

正文详细介绍CO索罗德S的中间机制。

CO本田UR-VS须求浏览器和服务器同不平日候帮忙。方今,全数浏览器都帮衬该意义,IE浏览器不能够低于IE10。

该字段可选。它的值是二个布尔值,表示是还是不是允许发送Cookie。私下认可情形下,Cookie不包涵在CO瑞虎S央求之中。设为true,即意味着服务器分明准予,Cookie能够包括在央浼中,一齐发给服务器。那么些值也只可以设为true,要是服务器不要浏览器发送Cookie,删除该字段就可以。

(1) 央浼方法是以下二种情势之一:

该字段可选,用来钦赐此次预检央求的有效期,单位为秒。下面结果中,保藏期是20天(172七千秒),即允许缓存该条回应172七千秒(即20天),在此时期,不用发出另一条预检供给。

对于简易诉求,浏览器直接发生CO迈凯伦720SS央求。具体来讲,正是在头音信之中,扩张多少个Origin字段。

4.2 预检央求的作答

地点头新闻中,Access-Control-Allow-Origin字段是每一遍回应都必将满含的。

若果服务器通过了"预检"央浼,今后每一趟浏览器正常的COLacrosseS诉求,就都跟轻松须求同样,会有四个Origin头新闻字段。服务器的回答,也都会有三个Access-Control-Allow-Origin头音信字段。

地方说起,CO兰德途睿欧S央求暗中同意不发送Cookie和HTTP认证音讯。若是要把Cookie发到服务器,一方面要服务器同意,钦命Access-Control-Allow-Credentials字段。

4.3 浏览器的正规哀告和回答

OPTIONS /cors HTTP/1.1Origin: http://api.bob.comAccess-Control-Request-Method: PUTAccess-Control-Request-Headers: X-Custom-HeaderHost: api.alice.comAccept-Language: en-USConnection: keep-aliveUser-Agent: Mozilla/5.0...

唯独,要是轻松withCredentials安装,有的浏览器依旧会共同发送Cookie。那时,能够显式关闭withCredentials

服务器回应的别的CO奥德赛S相关字段如下。

CO揽胜极光S与JSONP的利用指标一样,不过比JSONP越来越强硬。

(2)Access-Control-Allow-Headers

(2)Access-Control-Request-Headers

上边是一段浏览器的JavaScript脚本。

Access-Control-Allow-Origin: *

本文由必发88官网发布,转载请注明来源:跨域财富分享CO奔驰G级S,跨域财富分享