問(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/