當(dāng)前位置:首頁(yè) > IT技術(shù) > 數(shù)據(jù)庫(kù) > 正文

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

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

?

解決該問(wèn)題的思路:

  • 有可能配置了多處跨域,可以將所有后端服務(wù)的跨域處理都去除,交網(wǎng)關(guān)統(tǒng)一處理
  • 可以將網(wǎng)關(guān)的處理去除(那么后端所有服務(wù)都需要添加)
  • 在網(wǎng)關(guān)做去重處理,只保留一個(gè)值響應(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多個(gè)值時(shí)的處理方式,三種規(guī)則可選(RETAIN_FIRST(保留第一個(gè))|RETAIN_UNIQUE(保留獨(dú)特的)|RETAIN_LAST(保留最后的))
spring.cloud.gateway.default-filters[0]=DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRST

?

?

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

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