摘要:介紹關于跨域問題有很多的解決方案,這里我們總結一下目前最通用最強大的解決方案。的工作組推薦了一種新的機制,即跨域資源共享,簡稱。預檢請求用的請求方法是,表示這個請求是用來詢問的。頭信息里面,關鍵字段是,表示請求來自哪個源。
介紹
關于跨域問題有很多的解決方案,這里我們總結一下目前最通用最強大的解決方案:CORS。
W3C 的 Web 工作組推薦了一種新的機制,即跨域資源共享(Cross-origin Resource Sharing),簡稱CORS。其實這個機制就是實現了跨站訪問控制,使得安全地進行跨站數據傳輸成為可能。
跨源資源共享標準( cross-origin sharing standard) 使得以下場景可以使用跨站 HTTP 請求:
使用 XMLHttpRequest 或 Fetch發起跨站 HTTP 請求。
Web 字體 (CSS 中通過 @font-face 使用跨站字體資源),因此,網站就可以發布 TrueType 字體資源,并只允許已授權網站進行跨站調用。
WebGL 貼圖
使用drawImage繪制
Images/video 畫面到canvas.
樣式表(使用 CSSOM)
Scripts (for unmuted exceptions)
CORS分為簡單請求和復雜請求,處理方法也是有不同的,所以我們分別總結。
簡單請求什么是簡單請求呢?同時滿足以下兩個條件,就是簡單請求:
請求是下列之一:
HEAD
GET
POST
HTTP的頭信息不超出以下幾種字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三個值application/x-www-form-urlencoded、multipart/form-data、text/plain
實現方法非常簡單,只需要把服務器的響應報文里的Access-Control-Allow-Origin設置為*或者包含由 Origin指明的站點。
Access-Control-Allow-Origin是HTTP響應報文中的一個字段,Origin是HTTP請求報文中的以一個字段,如果不清楚這兩個字段的話,可以自行查閱關于HTTP報文的知識,比如HTTP | MDN。
復雜請求如果不是簡單請求,那就是復雜請求,比如請求的方法是PUT或者DELETE,比如Content-Type字段的類型是application/json,比如設置了自定義頭信息。
復雜請求就是比簡單請求多了個預檢請求(preflight)而已。
預檢請求就是瀏覽器先詢問服務器,當前網頁所在的域名是否在服務器的許可名單之中,以及可以使用哪些HTTP動詞和頭信息字段。只有得到肯定答復,瀏覽器才會發出正式的XMLHttpRequest請求,否則就報錯。
預檢請求用的請求方法是OPTIONS,表示這個請求是用來詢問的。頭信息里面,關鍵字段是Origin,表示請求來自哪個源。除了Origin字段,還有兩個字段非常重要:Access-Control-Request-Method和Access-Control-Request-Headers,分別表示允許的請求方法和請求頭。
舉一個具體的例子:
現在,我們有一個頁面向服務器發送了一個POST請求,并且我們自己定義了一個請求頭字段My-HEADER,這時候瀏覽器就會首先發送一個OPTION請求來做預檢請求,請求頭里有以下字段:
Access-Control-Request-Method: POST Access-Control-Request-Headers: My-HEADER
如果預檢請求成功的話,響應頭里的內容如下:
Access-Control-Allow-Origin: http://example.com //表明服務器允許http://example.com的請求 Access-Control-Allow-Methods: POST, GET, OPTIONS //表明服務器可以接受POST, GET和 OPTIONS的請求方法 Access-Control-Allow-Headers: My-HEADER //傳遞一個可接受的自定義請求頭列表 Access-Control-Max-Age: 3000000 //告訴瀏覽器,本次預檢請求的響應結果有效時間是多久總結
以上就是CORS方法解決跨域問題的流程,CORS支持所有類型的HTTP請求,是目前跨域問題的根本解決方案。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107485.html
摘要:跨域實在是面試官一個人的利器。首先,什么是是一個標準,全稱是跨域資源共享。它的值是一個布爾值,表示是否允許發送。設為,即表示服務器明確許可,可以包含在請求中,一起發給服務器。 面試問到數據交互的時候,經常會問跨域如何處理。大部分人都會回答JSONP,然后面試官緊接著就會問:JSONP缺點是什么啊?這個時候坑就來了,如果面試者說它支持GET方式,然后面試官就會追問,那如果POST方式發送...
摘要:什么是跨域個人一句話解釋如果與不同源,那么頁面不能獲取頁面的資源。所以用同源策略來限制跨域是必須的。它是標準,是跨源請求的根本解決方法。 本文整理了一些有關跨域的基礎知識和細節問題。 什么是跨域 個人一句話解釋:如果 url A 與 url B 不同源,那么頁面A不能獲取頁面B的資源。這里有兩個關鍵詞:url 和 同源,瀏覽器的同源策略就是針對兩個url,它們滿足以下三個條件,才是同源...
閱讀 2508·2021-10-11 10:59
閱讀 2700·2021-09-22 15:49
閱讀 2637·2021-08-13 13:25
閱讀 1284·2019-08-30 13:14
閱讀 2384·2019-08-29 18:45
閱讀 2990·2019-08-29 18:36
閱讀 1481·2019-08-29 13:21
閱讀 1157·2019-08-26 11:44