問題現(xiàn)狀
首先發(fā)現(xiàn)問題的原始點是瀏覽器進行 ajax 請求的時候出現(xiàn)跨域問題,經(jīng)查看請求報文和錯誤確定是 Access-Control-Allow-Origin 出現(xiàn)了多個值(瀏覽器目前是不允許的),其原因是是在 gateway 中配置過了 Access-Control-Allow-Origin,后端服務的開發(fā)人員也配置了 Access-Control-Allow-Origin,導致 response 在響應的時候 Access-Control-Allow-Origin 出現(xiàn)了多個值(不管兩個值相同還是不同瀏覽器目前都會報錯),截圖如下:
?
解決該問題的思路:
- 有可能配置了多處跨域,可以將所有后端服務的跨域處理都去除,交網(wǎng)關統(tǒng)一處理
- 可以將網(wǎng)關的處理去除(那么后端所有服務都需要添加)
- 在網(wǎ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/