1、跨域演示:
在端口14199有一個站點1,有一個方法get1,調用結果如下:

源碼如下:

在端口10571也有一個站點2,前端頁面加載完成后點擊按鈕調用站點1的get1方法會發生錯誤,這就是跨域訪問,即一個站點訪問另一個非同源站點
源碼:

訪問結果:被瀏覽器拒絕,如圖

2、為什么會發生跨域問題
1.瀏覽器限制


站點2向站點1發送get1請求后站點1返回200 ok,說明服務器返回成功,但是控制台報錯,說明瀏覽器有限制
2.跨域

發起請求的是站點2(10571),接受請求的是站點1(14199)
3.發出去的請求是XHR(XMLHttpRequest)請求
站點2加一個img標簽並鏈接到站點1方法get1

點擊頁面按鈕:

兩個請求都是站點1的get1方法,但是請求類型不一樣xhr請求報錯,img的沒有
3、解決思路

1.瀏覽器禁止檢查

找到chrome的位置

啟動cmd進入chrome的位置,輸入命令
chrome --disable-web-security --user-data-dir=G:\zhyue\backup\MyChromeDevUserData
MyChromeDevUserData是自己臨時新建的一個文件夾

瀏覽器打開時提示這個說明設置成功

通過站點2訪問站點1成功

2.jsonp解決跨域
實際上就是后台返回的數據改為js代碼
前台添加按鈕和對應的點擊事件

后台添加對應的響應方法

現在發起的請求不再是xhr請求而是script請求


Jsonp弊端:
需要改動服務器代碼,即站點1方法;只接受get類型請求;發送的不是xhr請求,無法使用xhr的特性
3.被調用方修改代碼接受跨域(修改站點1后台代碼)
修改站點1的get1方法, 頁面不再報錯:


允許所有的跨域請求,所有的請求方式

后面還有一種就是調用方也就是站點2發出請求時加一個服務器代理比如nginx,然后把站點2的請求的域名偽裝成站點1的域名,這樣瀏覽器就不會限制了,也就不存在跨域問題,因為這種比較繁瑣,這里就不做記錄了,以后用到再來看。視頻地址:https://www.imooc.com/learn/947
