同源策略: 同源策略限制從一個源加載的文檔或腳本如何與來自另一個源的資源進行交互拖陆。這是一個用于隔離潛在惡意文件的關鍵的安全機制踏堡。
如果協(xié)議,端口(如果指定了一個)和域名對于兩個頁面是相同的锦担,則兩個頁面具有相同的源镀岛。
IE 例外
當涉及到同源策略時,Internet Explorer有兩個主要的例外
- 授信范圍(Trust Zones):兩個相互之間高度互信的域名渺氧,如公司域名(corporate domains)棱烂,不遵守同源策略的限制。
- 端口:IE未將端口號加入到同源策略的組成部分之中阶女,因此 http://company.com:81/index.html 和http://company.com/index.html 屬于同源并且不受任何限制颊糜。
這些例外是非標準的,其它瀏覽器也未做出支持秃踩,但會助于開發(fā)基于window RT IE的應用程序衬鱼。
CORS(IE11+)
瀏覽器一旦發(fā)現(xiàn)AJAX請求跨源,就會自動添加一些附加的頭信息憔杨,有時還會多出一次附加的請求鸟赫,但用戶不會有感覺。
對于簡單請求消别,瀏覽器直接發(fā)出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字段用來說明,本次請求來自哪個源(協(xié)議 + 域名 + 端口)蛇券。服務器根據(jù)這個值缀壤,決定是否同意這次請求。
如果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);