成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

跨域問(wèn)題的根本解決方案CORS

Joonas / 1170人閱讀

摘要:介紹關(guān)于跨域問(wèn)題有很多的解決方案,這里我們總結(jié)一下目前最通用最強(qiáng)大的解決方案。的工作組推薦了一種新的機(jī)制,即跨域資源共享,簡(jiǎn)稱。預(yù)檢請(qǐng)求用的請(qǐng)求方法是,表示這個(gè)請(qǐng)求是用來(lái)詢問(wèn)的。頭信息里面,關(guān)鍵字段是,表示請(qǐng)求來(lái)自哪個(gè)源。

介紹

關(guān)于跨域問(wèn)題有很多的解決方案,這里我們總結(jié)一下目前最通用最強(qiáng)大的解決方案:CORS。

W3C 的 Web 工作組推薦了一種新的機(jī)制,即跨域資源共享(Cross-origin Resource Sharing),簡(jiǎn)稱CORS。其實(shí)這個(gè)機(jī)制就是實(shí)現(xiàn)了跨站訪問(wèn)控制,使得安全地進(jìn)行跨站數(shù)據(jù)傳輸成為可能。

跨源資源共享標(biāo)準(zhǔn)( cross-origin sharing standard) 使得以下場(chǎng)景可以使用跨站 HTTP 請(qǐng)求:

使用 XMLHttpRequest 或 Fetch發(fā)起跨站 HTTP 請(qǐng)求。

Web 字體 (CSS 中通過(guò) @font-face 使用跨站字體資源),因此,網(wǎng)站就可以發(fā)布 TrueType 字體資源,并只允許已授權(quán)網(wǎng)站進(jìn)行跨站調(diào)用。

WebGL 貼圖

使用drawImage繪制

Images/video 畫(huà)面到canvas.

樣式表(使用 CSSOM)

Scripts (for unmuted exceptions)

CORS分為簡(jiǎn)單請(qǐng)求復(fù)雜請(qǐng)求,處理方法也是有不同的,所以我們分別總結(jié)。

簡(jiǎn)單請(qǐng)求

什么是簡(jiǎn)單請(qǐng)求呢?同時(shí)滿足以下兩個(gè)條件,就是簡(jiǎn)單請(qǐng)求:

請(qǐng)求是下列之一:
HEAD
GET
POST

HTTP的頭信息不超出以下幾種字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三個(gè)值application/x-www-form-urlencoded、multipart/form-data、text/plain

實(shí)現(xiàn)方法非常簡(jiǎn)單,只需要把服務(wù)器的響應(yīng)報(bào)文里的Access-Control-Allow-Origin設(shè)置為*或者包含由 Origin指明的站點(diǎn)。

Access-Control-Allow-OriginHTTP響應(yīng)報(bào)文中的一個(gè)字段,OriginHTTP請(qǐng)求報(bào)文中的以一個(gè)字段,如果不清楚這兩個(gè)字段的話,可以自行查閱關(guān)于HTTP報(bào)文的知識(shí),比如HTTP | MDN。

復(fù)雜請(qǐng)求

如果不是簡(jiǎn)單請(qǐng)求,那就是復(fù)雜請(qǐng)求,比如請(qǐng)求的方法是PUT或者DELETE,比如Content-Type字段的類型是application/json,比如設(shè)置了自定義頭信息。

復(fù)雜請(qǐng)求就是比簡(jiǎn)單請(qǐng)求多了個(gè)預(yù)檢請(qǐng)求(preflight)而已。

預(yù)檢請(qǐng)求就是瀏覽器先詢問(wèn)服務(wù)器,當(dāng)前網(wǎng)頁(yè)所在的域名是否在服務(wù)器的許可名單之中,以及可以使用哪些HTTP動(dòng)詞和頭信息字段。只有得到肯定答復(fù),瀏覽器才會(huì)發(fā)出正式的XMLHttpRequest請(qǐng)求,否則就報(bào)錯(cuò)。

預(yù)檢請(qǐng)求用的請(qǐng)求方法是OPTIONS,表示這個(gè)請(qǐng)求是用來(lái)詢問(wèn)的。頭信息里面,關(guān)鍵字段是Origin,表示請(qǐng)求來(lái)自哪個(gè)源。除了Origin字段,還有兩個(gè)字段非常重要:Access-Control-Request-MethodAccess-Control-Request-Headers,分別表示允許的請(qǐng)求方法和請(qǐng)求頭。

舉一個(gè)具體的例子:

現(xiàn)在,我們有一個(gè)頁(yè)面向服務(wù)器發(fā)送了一個(gè)POST請(qǐng)求,并且我們自己定義了一個(gè)請(qǐng)求頭字段My-HEADER,這時(shí)候?yàn)g覽器就會(huì)首先發(fā)送一個(gè)OPTION請(qǐng)求來(lái)做預(yù)檢請(qǐng)求,請(qǐng)求頭里有以下字段:

Access-Control-Request-Method: POST
Access-Control-Request-Headers: My-HEADER

如果預(yù)檢請(qǐng)求成功的話,響應(yīng)頭里的內(nèi)容如下:

Access-Control-Allow-Origin: http://example.com //表明服務(wù)器允許http://example.com的請(qǐng)求
Access-Control-Allow-Methods: POST, GET, OPTIONS //表明服務(wù)器可以接受POST, GET和 OPTIONS的請(qǐng)求方法
Access-Control-Allow-Headers: My-HEADER //傳遞一個(gè)可接受的自定義請(qǐng)求頭列表
Access-Control-Max-Age: 3000000 //告訴瀏覽器,本次預(yù)檢請(qǐng)求的響應(yīng)結(jié)果有效時(shí)間是多久
總結(jié)

以上就是CORS方法解決跨域問(wèn)題的流程,CORS支持所有類型的HTTP請(qǐng)求,是目前跨域問(wèn)題的根本解決方案。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107485.html

相關(guān)文章

  • 一篇文章搞明白CORS跨域

    摘要:跨域?qū)嵲谑敲嬖嚬僖粋€(gè)人的利器。首先,什么是是一個(gè)標(biāo)準(zhǔn),全稱是跨域資源共享。它的值是一個(gè)布爾值,表示是否允許發(fā)送。設(shè)為,即表示服務(wù)器明確許可,可以包含在請(qǐng)求中,一起發(fā)給服務(wù)器。 面試問(wèn)到數(shù)據(jù)交互的時(shí)候,經(jīng)常會(huì)問(wèn)跨域如何處理。大部分人都會(huì)回答JSONP,然后面試官緊接著就會(huì)問(wèn):JSONP缺點(diǎn)是什么?。窟@個(gè)時(shí)候坑就來(lái)了,如果面試者說(shuō)它支持GET方式,然后面試官就會(huì)追問(wèn),那如果POST方式發(fā)送...

    tanglijun 評(píng)論0 收藏0
  • 前端跨域解決方案

    摘要:但是如果是一級(jí)域名相同,二級(jí)及以上域名不同的網(wǎng)頁(yè)可以通過(guò)設(shè)置來(lái)共享。設(shè)置有兩種方式前端腳本中設(shè)置服務(wù)器接口設(shè)置時(shí)指定所屬的域名為一級(jí)域名。服務(wù)器檢查過(guò)預(yù)檢請(qǐng)求頭之后,確認(rèn)允許跨域請(qǐng)求,就可以做出回應(yīng)。 一、跨域問(wèn)題產(chǎn)生的原因 根本原因是由于瀏覽器的同源政策。 1.1.同源政策 同源政策由網(wǎng)景公司(Netscape)1995年引入瀏覽器。目前所有瀏覽器都實(shí)行這個(gè)政策。所謂同源是指三個(gè)相同...

    wayneli 評(píng)論0 收藏0
  • AJAX 跨域解析

    摘要:這里只講解了兩種常見(jiàn)的跨域方式,因?yàn)榇嬖谝恍┍锥耍虼送扑]使用等方式來(lái)解決跨域問(wèn)題。 一、什么是 AJAX 跨域問(wèn)題 同源策略規(guī)定,AJAX 請(qǐng)求(XMLHttpRequest)只能發(fā)給同源的網(wǎng)址,否則就會(huì)出錯(cuò)。所謂的同源策略是指 3 個(gè)相同:協(xié)議相同、域名相同、端口相同。 比如 http://www.example.com/index.html 這個(gè)網(wǎng)址,協(xié)議是http ,域名是 w...

    tinylcy 評(píng)論0 收藏0
  • 淺談前端跨域

    摘要:一什么是跨域跨域簡(jiǎn)單的理解就是同源策略的限制。同源策略限制的內(nèi)容請(qǐng)求不能正常進(jìn)行。同源策略默認(rèn)地址是網(wǎng)頁(yè)的本身。 一、什么是跨域? 跨域簡(jiǎn)單的理解就是JavaScript同源策略的限制。是出于安全的考慮,a.com域名下的js不能操作b.com或者c.com域名下的對(duì)象。 當(dāng)協(xié)議、子域名、主域名、端口號(hào)中任意一個(gè)不相同時(shí),都算作不同域。不同域之間相互請(qǐng)求資源,就算叫跨域。 一個(gè)正常...

    dunizb 評(píng)論0 收藏0
  • 跨域理解

    摘要:什么是跨域個(gè)人一句話解釋如果與不同源,那么頁(yè)面不能獲取頁(yè)面的資源。所以用同源策略來(lái)限制跨域是必須的。它是標(biāo)準(zhǔn),是跨源請(qǐng)求的根本解決方法。 本文整理了一些有關(guān)跨域的基礎(chǔ)知識(shí)和細(xì)節(jié)問(wèn)題。 什么是跨域 個(gè)人一句話解釋:如果 url A 與 url B 不同源,那么頁(yè)面A不能獲取頁(yè)面B的資源。這里有兩個(gè)關(guān)鍵詞:url 和 同源,瀏覽器的同源策略就是針對(duì)兩個(gè)url,它們滿足以下三個(gè)條件,才是同源...

    zhongmeizhi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<