什麼情況下會遇到跨域的問題?
前端做數據交互,比如在數據獲取的時候經常會遇到跨域的問題。
- 跨域
跨域是指一個域下的文檔或腳本試圖請求另一個域下的資源。
廣義跨域有以下的情況:
(1) 資源跳轉:a鏈接,表單提交;
(2) 資源嵌入:link標籤、script標籤、img標籤等dom標籤,還有樣式中background:url()等文件外鏈;
(3) 腳本請求:js發起的ajax請求、dom和js對象的跨域操作。
我們經常所遇到的跨域往往是狹義跨域,即由瀏覽器同源策略限制的一類請求場景。
同源策略:同源指“協議+域名+端口”三者全部相同;是瀏覽器最核心最基本的安全功能,如果缺少了同源策略,那麼瀏覽器很容易受到XSS、CSFR等攻擊。 - 跨域解決方案
(1) 通過json跨域
我們可以通過動態去創建script,再請求一個帶參網址實現跨域通信;
jquery ajax:
$.ajax({
url:'http://www.xxx.com',
type:'get',
datatype:'jsonp',
//自定義回調函數
jsonpCallback:'dataCallback'
data:{ }
})
注意jsonp的缺點:只能實現get一種請求。
(2) WebSocket協議跨域
WebSocket protocol是HTML5一種新的協議,實現了瀏覽器與服務器全雙工通信,同時允許跨域通信。