當前位置:首頁 > IT技術(shù) > 數(shù)據(jù)庫 > 正文

Spring Cloud Gateway 處理重復(fù)Header的方法(CORS policy: The ‘Access-Control-Allow-Origin‘ header has a……
2022-05-11 11:02:30

問題現(xiàn)狀
首先發(fā)現(xiàn)問題的原始點是瀏覽器進行 ajax 請求的時候出現(xiàn)跨域問題,經(jīng)查看請求報文和錯誤確定是 Access-Control-Allow-Origin 出現(xiàn)了多個值(瀏覽器目前是不允許的),其原因是是在 gateway 中配置過了 Access-Control-Allow-Origin,后端服務(wù)的開發(fā)人員也配置了 Access-Control-Allow-Origin,導(dǎo)致 response 在響應(yīng)的時候 Access-Control-Allow-Origin 出現(xiàn)了多個值(不管兩個值相同還是不同瀏覽器目前都會報錯),截圖如下:

?

解決該問題的思路:

  • 有可能配置了多處跨域,可以將所有后端服務(wù)的跨域處理都去除,交網(wǎng)關(guān)統(tǒng)一處理
  • 可以將網(wǎng)關(guān)的處理去除(那么后端所有服務(wù)都需要添加)
  • 在網(wǎng)關(guān)做去重處理,只保留一個值響應(yīng)給瀏覽器(這是本文選擇的處理方法)

解決方法:在application.properties或bootstrap.properties配置文件中添加如下的配置

# 這一段配置是處理跨域的
spring.cloud.gateway.globalcors.cors-configurations.[/**].allow-credentials=true
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-headers[0]=*
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-methods[0]=*
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-origins[0]=http://localhost:8080
spring.cloud.gateway.globalcors.cors-configurations.[/**].max-age=1800
# 相同header多個值時的處理方式,三種規(guī)則可選(RETAIN_FIRST(保留第一個)|RETAIN_UNIQUE(保留獨特的)|RETAIN_LAST(保留最后的))
spring.cloud.gateway.default-filters[0]=DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRST

?

?

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務(wù)立即開通 >