關於跨域的幾種場景
阿新 • • 發佈:2018-12-29
什麼是跨域
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”。