爲何會發生 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跨域視頻