同源策略: 同源策略限制從一個源加載的文檔或腳本如何與來自另一個源的資源進行交互。這是一個用于隔離潛在惡意文件的關鍵的安全機制。
如果協議,端口(如果指定了一個)和域名對于兩個頁面是相同的,則兩個頁面具有相同的源。
IE 例外
當涉及到同源策略時,Internet Explorer有兩個主要的例外
- 授信范圍(Trust Zones):兩個相互之間高度互信的域名,如公司域名(corporate domains),不遵守同源策略的限制。
- 端口:IE未將端口號加入到同源策略的組成部分之中,因此 http://company.com:81/index.html 和http://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);