同源策略和跨域

MaChao發表於2020-10-28
URL 說明 是否允許通訊
www.a.com/a.js www.a.com/b.js 同一域名下 允許
www.a.com/lab/a.js www.a.com/script/b.js 同一域名下不同資料夾 允許
www.a.com:8000/a.js www.a.com/b.js 同一域名,不同埠 不允許
www.a.com/a.js www.a.com/b.js 同一域名,不同協議 不允許
www.a.com/a.js 70.32.92.74/b.js 域名和域名對應ip 不允許
www.a.com/a.js script.a.com/b.js 主域相同,子域不同 不允許
www.a.com/a.js a.com/b.js 同一域名,不同二級域名(同上) 不允許(cookie這種情況下也不允許訪問)
www.cnblogs.com/a.js www.a.com/b.js 不同域名 不允許

特別注意兩點:

  • 如果是協議和埠造成的跨域問題“前臺”是無能為力的,
  • 在跨域問題上,域僅僅是通過“URL的首部”來識別而不會去嘗試判斷相同的ip地址對應著兩個域或兩個域是否在同一個ip上。

“URL的首部”指window.location.protocol +window.location.host,也可以理解為“Domains, protocols and ports must match”。

比較常見的解決方案

  • 方式一:使用ajax的jsonp
  • 方式二:使用jQuery的jsonp外掛
  • 方式三:使用cors
  • 方式四:配置nginx
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章