什麼是跨域?
JavaScript出於安全方面的考慮,不允許跨域調用其他頁面的對象。
跨域簡單來說就是受JavaScript同源策略的限制,A網站域名下的js無法操作B網站域名下的對象。
什麼是同源策略及其限制內容?
同源策略是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到XSS、CSRF等攻擊。所謂同源是指"協議+域名+端口"三者相同,即便兩個不同的域名指向同一個ip地址,也非同源。
一個域名的組成是:
http://www.abc.com:8080/scripts/jquery.js
協議//子域名.主域名:端口號/請求資源地址
同源策略限制的內容有:
- Cookie、LocalStorage、IndexedDB 等存儲性內容
- DOM 節點
- AJAX 請求發送後,結果被瀏覽器攔截了
但是有三個標籤允許跨域加載資源:
<img src=XXX>
<link href=XXX>
<script src=XXX>
跨域的幾種解決方式
-
jsonp
1)jsonp原理
利用<script>
標籤沒有跨域限制的漏洞,網頁可以得到從其他來源動態產生的 JSON 數據。JSONP請求一定需要對方的服務器做支持纔可以。 -
cors
-
postMessage
-
websocket
-
node中間件代理
-
Nginx反向代理