Zuul關於跨域問題的解決方案之一

2021-09-24 20:01:31 字數 2278 閱讀 7584

最近兩天遇到了前端請求後端的跨域問題,傳統的jsonp不能滿足更多的請求方式,因此了解一下cors的方式跨域是必要的。

個人摸索理解,如果需要改正,請指出。多謝。

為什麼需要跨域

瀏覽器的同源策略來起到安全的作用。

需要同協議,同網域名稱/ip,同埠才能直接請求。

這個協議的存在,我們無法正常跨域請求。

跨域請求會先傳送乙個預請求options

預請求成功後需要返回給前端乙個成功的狀態碼

預請求通過,進行真正的請求,實現跨域

前端正常傳送ajax/axios請求

// 設定傳輸內容的型別和編碼

withcredentials:

true

// 指定某個請求應該傳送憑據。允許客戶端攜帶跨域cookie,也需要此配置})

;// 查詢樣例使用者列表 用於測試

export

const

testuser

=(params)

=>

)}後端zuul閘道器處理跨域問題

@component

public

class

tokenfilter

extends

zuulfilter

@override

public

intfilterorder()

@override

public

boolean

shouldfilter()

@override

public object run()

// 第二次請求(非驗證,eg:get請求不會進到上面的if) 會走到這裡往下進行

// 不需要token認證

ctx.

setsendzuulresponse

(true);

//對請求進行路由

}}

第乙個options請求:

第二個正常請求:

請求到的資料

上面是可以成功訪問的**。

當我們注釋掉if 讓options 直接請求路由,會發生什麼?

會出現下面的提示,大概意思就是 options沒有返回 乙個成功的狀態碼,但是上面**確實有

這是卡我一下午一直很疑惑的地方,而且zuul也沒有報錯,除錯發現只有乙個options請求,沒有收到get請求,可能就是他繼續路由出現了異常,沒有返回狀態碼,即使調換**順序也還是下面的錯誤。

下面這個錯誤就是後端什麼都沒有配置,出現的錯誤,大概意思就是

請求的資源上不存在「access-control-allow-origin」標頭。

就是這些沒有配置,後端不認你的遠端請求位址

那今天就到這裡吧,如果有問題,在繼續研究完善。

跨域問題的解決方案

首先了解下瀏覽器的同源策略 同源策略 sop same origin policy 是一種約定,由netscape公司1995年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到xss csfr等攻擊。所謂同源是指 協議 網域名稱 埠 三者相同,三者有乙個不相同那麼...

跨域解決方案

因為瀏覽器出於安全考慮,有同源策略。也就是說,如果協議 網域名稱或者埠有乙個不同就是跨域,ajax 請求會失敗。那麼是出於什麼安全考慮才會引入這種機制呢?其實主要是用來防止 csrf 攻擊的。簡單點說,csrf 攻擊是利用使用者的登入態發起惡意請求。也就是說,沒有同源策略的情況下,a 可以被任意其他...

跨域解決方案

瀏覽器端的同源策略 如果兩個頁面的協議,埠和網域名稱中的其中任意乙個不相同,它們就是不同源的,瀏覽器會限制他們之間的資源互動 跨域 跨域的安全限制只針對瀏覽器,伺服器是沒有跨域的安全限制的 原理 由於伺服器沒有跨域限制,所以在需要跨域訪問時,在中間設定乙個中間層 舉例 192.168.10.1 80...