跨域

同源策略: 同源策略限制從一個源加載的文檔或腳本如何與來自另一個源的資源進行交互。這是一個用于隔離潛在惡意文件的關鍵的安全機制。

如果協議,端口(如果指定了一個)和域名對于兩個頁面是相同的,則兩個頁面具有相同的源。

IE 例外

當涉及到同源策略時,Internet Explorer有兩個主要的例外

  • 授信范圍(Trust Zones):兩個相互之間高度互信的域名,如公司域名(corporate domains),不遵守同源策略的限制。
  • 端口:IE未將端口號加入到同源策略的組成部分之中,因此 http://company.com:81/index.htmlhttp://company.com/index.html 屬于同源并且不受任何限制。

這些例外是非標準的,其它瀏覽器也未做出支持,但會助于開發基于window RT IE的應用程序。

CORS(IE11+)

瀏覽器一旦發現AJAX請求跨源,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求,但用戶不會有感覺。

對于簡單請求,瀏覽器直接發出CORS請求。具體來說,就是在頭信息之中,增加一個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指定的域名在許可范圍內,服務器返回的響應,會多出幾個頭信息字段。

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

jsonp

function handleResponse(response){
  alert("You're at IP address " + response.ip + ", which is in" +
      response.city + ", "+ response.region_name);
}
var script = document.CreatElement("script");
script.src = "http://freegeoip.net/json/?callback=handleResponse"
document.body.insertBefore(script,body.firstElement);

參考:瀏覽器的同源策略
跨域資源共享 CORS 詳解

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容