ajax 跨域

爲何會發生 ajax跨越 nginx

 

1, 瀏覽器限制了ajax

由於 服務器 已經處理並響應了 請求。 可是瀏覽器禁止json

2,  跨域後端

域名或者端口不一致跨域

3, XHR (XMLHttpRequest) 請求瀏覽器

好比  將地址放入 <img src ="地址"> src 裏面。服務器

就不是 xhr請求,瀏覽器不會爆跨越請求cookie

好比 json 類型的請求。不會產生跨域mvc

 

也就是以上 3種條件 都知足了 纔可能產生 跨域問題app

 

解決思路

1,瀏覽器改動不讓它禁止跨域意義不大。不可能每一個客戶端都改。

2, 將XHR請求 換成 JSONP (不通用)

3, 跨域: 被調用方 容許跨域(zhi'shi瀏覽器能夠跨域), 調用方 隱式跨域(好比經過代理改爲同一域名)

 

jsonp

jsonp 是什麼?

jsonp 是對json 方式的補充, 使用 動態建立script標籤 ,  鏈接方式 爲 script   來解決跨域。

接收內容會解析爲js代碼, content-type : application/script

使用jsonp 後臺是須要改動代碼的

 

jsonp的 弊端

1, 服務器須要改動代碼支持

2, 只支持 get 請求

3. 發送的不是XHR請求,沒有XHR的特性和功能

 

解決

 

被調用方解決

便可修改的是被調用方的 http服務器

1,  服務器端實現, nginx 配置

瀏覽器是先執行後判斷

後端代碼,可使用 filter 設置容許跨域。 

若是是spirngmvc 加上 @CrossOrigin 便可

 

調用方解決: 修改的是 調用方的 http服務器。

也就是 看起來 域名仍是 同一個域名,可是 最終都會去訪問到 跨域的域名

在調用方的後臺使用nginx 代理到其餘域

 

 

簡單請求, 非簡單請求

簡單請求,瀏覽器會先發送請求後判斷,非簡單請求就先校驗,發送 options 預檢命令給後臺。

聽過了纔會再次發送請求

 

 

若是是 帶cookie的跨域請求,那麼必須是在同一個瀏覽器下的保存的cookie才能夠帶給後端的。

 

以上來自 慕課網 Ajax跨域視頻

相關文章
相關標籤/搜索