rpc/soa中非常常見的問題,
那麼它是什麼呢?
本質上是client的browser的一種保護機制,客戶端像伺服器a傳送了乙個請求,伺服器a告訴了伺服器b由伺服器b返回了乙個資料,瀏覽器校驗到兩個url不同就會這樣↓
200卻報錯= =!
如何引起的呢?
1這個請求是xhr請求
2這個請求跨域了
怎樣會跨域?
埠,網域名稱,協議只要有乙個不同都算跨域。ps:有一點要注意localhost和127.0.0.1在不同伺服器上指代不同不要覺得他們寫的一樣就覺得沒問題了,不然你會陷入乙個看不見的坑 = =!
舉例
url =
url1 =
url2 =
url3 =
url和url1,url2,url3對比都算跨域。
3瀏覽器開啟了同源策略
以上三個情況同時發生才會發生跨域問題
解決方案
既然發生條件是三種,那解決方案也是從這三點入手,針對
3就是將瀏覽器關閉同源策略,
chrome的話可以通過在命令列,輸入
chrome.exe --allow-file-access-from-files --user-data-dir="c:/chrome dev session" --disable-web-security
但是這個點你無法控制,因為一般來說你的客戶瀏覽器為了安全性都是開啟了同源策略的。
針對1就是jsonp的方式了,本質是將xhr請求方式改變了,瀏覽器會將返回的值當做js來解析。
嘛,,,這樣其實也有弊端,畢竟xhr請求的一些特性你都不能用了。
針對2就是在請求本身身上做文章,拿上面的例子來講,圖中說明已經很清楚了,cors頭缺少'access-control-allow-origin'。在伺服器b返回資料的時候設定這個請求頭就可以了,這個請求頭的意思就是告訴瀏覽器伺服器b允許a呼叫服務,我們返回的資料是安全的。當然也有可能伺服器b是你呼叫的介面,你操作不了人家的**,這樣的話只能給a設定**,讓瀏覽器認為你們兩個看起來一樣。
以上共勉。
SpringMVC跨域請求問題
前言 眾所周知,出於安全考慮,xmlhttpreqeust 物件發起的 http 請求必須滿足同源策略 same origin policy 的規定,否則瀏覽器將會對該請求進行限制。雖然同源策略的實現帶來的web安全的提公升,但是卻為一些正規的跨域需求帶來不便,故此衍生出了若干種繞開同源策略的跨域方...
請求跨域問題詳解
什麼是跨域 產生跨域的原因 以下三者都滿足 解決跨域的思路 解決跨域的方法 被調方過濾器解決方法 在過濾器中給預檢請求響應物件中增加對應頭部資訊告訴請求方這個請求允許跨域 res.addheader access control allow origin 允許跨域的請求源位址 res.addhead...
請求的跨域問題
問題 請求跨域,以前處理過跨域問題,系統做了 後再次出現跨域問題 最初專案單獨部署在一台伺服器上,出現跨域問題,然後在控制類上新增註解 crossorigin 解決了後來專案用nginx做了 又出現了跨域的問題,於是在nginx配置檔案做了如下設定 server 但是請求依然得不到資料,前端看到的請...