记一次跨域问题
springboot项目,后台已经配置好允许跨域,但前台仍是报跨域问题无法通过,追踪源码+debug发现原因,这里记录一下。
案发场景:
- springboot项目。
- 已重写
WebMvcConfigurationSupport的addCorsMappings(CorsRegistry registry)方法,并添加了允许跨域的逻辑。 - 跨域的原因是在http协议下发送https请求,引起的跨域。
找到原因:
查看日志,发现springboot的 DefaultCorsProcessor 这个类对此请求的判断为同源的,没有做处理,就直接放行了。
明明浏览器发出请求是https,而页面是http为什么框架会判断成同源的呢???
据此联想到出,是因为页面是http的,发送https的请求,浏览器判断是跨域的所以添加了origin头表明请求页面的源地址。
然而请求到达nginx后,nginx验证https证书等处理后,使用http协议再次将请求发送给tomcat,后台收到的请求实际上是nginx使用http协议发送的请求。
然后框架处理跨域时发现请求中的origin和host同是http请求不存在跨域问题,也就不做跨域处理。结果返回到浏览器后,浏览器发现没有跨域的响应头,屏蔽掉了结果,导致浏览器报跨域错误。
记一次跨域问题
https://www.huangchaoyu.com/736025888.html