然后通过检查浏览器的请求信息(Windows系统在浏览器中按F12即可打开,或者用右键点击[检查]也可以打开),发现两个比较关键的信息:
1、Fetch/XHR(旧版浏览器好像叫做XHR)中,Response.Headers 里面有关键信息
......
Access-Control-Allow-Origin:*
Access-Control-Allow-Origin:http://xxx:88
......
(ps:图片是已经解决好了的情况下,我截的图,有问题的时候,下面还有一个重复配置)
2、Console中,有明显的错误提示信息:(敏感信息用xxx代替)
Access to XMLHttpRequest at 'http://xxx:8880/xxx/xxx?xxx=1' from origin 'http://xxx:88' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values '*, http://xxx:88', but only one is allowed.
原因分析:通过上述的两个关键点,可以很明显知道,出现跨域问题的原因,就是存在了两个Access-Control-Allow-Origin配置导致的。而Access-Control-Allow-Origin这个配置参数,就是跨域问题解决的方案。(这个参数的具体解释,有比较多的文章,我在这里就不作赘述了)
原因排查:知道了本次问题的原因,就要分析,到底是哪里设置了这个参数,导致了重复设置了。
然后发现在gateway中,有这样一段代码:
很明显这里有配置,且设置的是*(表示允许所有请求进行跨域操作),
再然后,经过确认,发现了 有一个SecurityConfig(重写Spring的WebSecurityConfigurerAdapter)中,有重写配置,并设置了cors的配置
然后把这里做了调整,即可解决此次问题
问题总结:1、出现跨域的问题原因:要具体分析,针对这次就是重复配置导致的;
2、跨域问题的通常解决,是调整cors的配置,或者在nginx、或者在后端代码配置(大部分都是在后端)Access-Control-Allow-Origin的参数设置;
3、对于http请求相关知识,还是需要去补强的,这样再面对这种类似的问题,才会比较快速的定位问题和解决问题。



