跨域问题是浏览器的同源策略导致的。目的是为了保护一个源的数据不会被另一个源获取。
同源,得保证协议、域名、端口都一样。
对于跨域请求,浏览器不会拦截请求,请求能到达服务端,当响应从服务端返回时,浏览器如果发现响应头里没有允许跨域的字段就会把响应拦截下来。
Spring项目,两种常用的解决方案:
- 增加跨域配置或使用跨域注解。(在响应返回时,自动加上跨域相关的响应头。)
- 代理服务器,如nginx。借助代理服务器重定向,或配置在代理服务器返回响应时加上跨域相关响应头。
多重跨域问题:
场景:服务自身配置了跨域响应头,然后经过代理服务器时又添加了跨域响应头。这样返回浏览器的响应中就会重复设置跨域响应头,导致报错。
参考:
【跨域】使用CorsConfig和注解,解决跨域
跨域请求产生错误的原因及处理方法
一文搞懂跨域的所有问题,生活从此669~
GateWay跨域问题解决(双重)
网友评论