粉丝5434获赞2.4万


这是一个简单的 spring boot 服务,在浏览器访问服务的接口成功返回结果,如果在 console 里面使用 fat 方法来进行请求,把 local hose 换成幺二七点零点零点幺,会发生什么呢?是的, 这里出现了跨域报错。我们知道跨域是浏览器的一种安全策略,在不同域名、不同协议、 不同端口的情况下就会发生跨越。 logo house 和幺二七点零点零点幺在概念上是同一主机,但从浏览器的角度看,他们被认为是不同的域。 下面给大家演示几种常用的跨域方案解决方案。第一种是项目中最常使用的使用 nginx 反向代理。在 nginx 上处理跨域问题 主要就是这几行配置, allow origin 用于设置允许跨域请求原地址。 allow headers 用于设置跨域允许携带的 header 信息。 allow methods 用于设置跨域允许的请求方法, allow credentials 设置是否允许跨域使用 cookies。 另外一个很重要的事,处理预检请求。当发生跨越条件时候,浏览器会先询问服务器,请求方式是 option, 只有得到肯定答复, 浏览器才会发出正式的 http 请求。所以当请求为 option 请求时候,需求返回一个状态码。二零四,保存设置后重启 injinx 测试一下,我们把请求端口改成 injinx 监听的八八八八,让服务 使用 and drinks 的反向代理 local host 请求没有问题, fetch 的一百二十七余名请求也正常返回。结果,除了 end drinks 方案, 也可以使用 spring 框架本身自带的 at cross origin 注解来处理跨越。这里注解的参数, foreign drinks this is page of origin a law hatters a law methods 和 law credentials 不一样,是使用 adcross origin 注解时, spring 框架会自动处理浏览器发送的预检请求, 我们不需要像 in drinks 那样设置响应预检请求。添加注解后重启服务测试一下同样可以解决跨越问题。除了使用 adcross origin 注解解决单一接口的问题,我们也可以使用全 全局 mvc 配置的方式,通过实现 y bmvc configure 接口注册自定义的拦截器配置需要拦截的接口,还有和之前一样的允许配置。 重启测试一下成功解决跨越问题。上面就是给大家演示的三种跨越问题解决方案,希望对你有所帮助。