ajax跨域問題


 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM