1. 程式人生 > >關於跨域的幾種場景

關於跨域的幾種場景

什麼是跨域

JavaScript出於安全方面的考慮,不允許跨域呼叫其他頁面的物件。但在安全限制的同時也給注入iframe或是ajax應用上帶來了不少麻煩。這裡把涉及到跨域的一些問題簡單地整理一下:

首先什麼是跨域,簡單地理解就是因為JavaScript同源策略的限制,a.com 域名下的js無法操作b.com或是c.a.com域名下的物件。更詳細的說明可以看下錶:

URL說明是否允許通訊
http://www.a.com/a.js
http://www.a.com/b.js
同一域名下允許
http://www.a.com/lab/a.js
http://www.a.com/script/b.js
同一域名下不同資料夾允許
http://www.a.com:8000/a.js
http://www.a.com/b.js
同一域名,不同埠不允許
http://www.a.com/a.js
https://www.a.com/b.js
同一域名,不同協議不允許
http://www.a.com/a.js
http://70.32.92.74/b.js
域名和域名對應ip不允許
http://www.a.com/a.js
http://script.a.com/b.js
主域相同,子域不同不允許
http://www.a.com/a.js
http://a.com/b.js
同一域名,不同二級域名(同上)不允許(cookie這種情況下也不允許訪問)
http://www.cnblogs.com/a.js
http://www.a.com/b.js
不同域名不允許
特別注意兩點:
第一,如果是協議和埠造成的跨域問題“前臺”是無能為力的,
第二:在跨域問題上,域僅僅是通過“URL的首部”來識別而不會去嘗試判斷相同的ip地址對應著兩個域或兩個域是否在同一個ip上。
“URL的首部”指window.location.protocol +window.location.host,也可以理解為“Domains, protocols and ports must match”。