跨域的知識點
同源策略
- 瀏覽器故意設置的功能限制
CORS
- 突破瀏覽器限制的一個方法
JSONP
- IE時代的妥協(xié)
同源定義
源
- window.origin或location.origin可以得到當前源
- 源 = 協(xié)議 + 域名 + 端口號
如果兩個url的
- 協(xié)議
- 域名
- 端口號
- 完全一致间狂,那么兩個url就是同源
同源策略
瀏覽器規(guī)定
- 如果js運行在源A里蜒简,那么就只能獲取源A的數據
- 不能獲取源B的數據店归,即不允許跨域
例子
- test.com/index.html引用了cdn.com/1.js
- 那么說1.js運行在test.com里
- 注意cdn.com沒有關系施掏,雖然1.js從它那下載
- 所以1.js就只能獲取test.com的數據
- 不能cdn.com的數據
這就是瀏覽器的功能
- 瀏覽器故意這樣設計的
目的
保護用戶
為什么a.test.com和test.com算跨域
- 因為歷史上,出現不同公司共用域名憔杨,a.qq.com和qq.com不一定是同一個網站趁啸,瀏覽器認為這是不同的源
不同端口也是跨域
- 有可能一個公司一個端口
為什么可以跨域使用css巨缘、js和圖片
- 同源策略限制是數據訪問尿赚,我們引用css散庶、js和圖片的時候,其實并不知道內容凌净,只是在引用悲龟。
解決方法
cors
問題根源
- 瀏覽器默認不同源之間不能互相訪問數據
使用cors
- 需要共享數據,需要提前聲明
- Access-Control-Allow-Origin: 可以跨域網站
JSONP
定義
- JSONP和JSON沒有關系
問題
- 需要跨域冰寻,但是不能使用cors
- 通過js包含數據
缺點
- 只支持get請求须教,不支持post請求
- 不知道返回的狀態(tài)碼