跨域操作的解决方法
1.什么是跨域
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
2.跨域的解决方案
一、SpringBoot 通过注解解决跨域
可以在我们的控制器类或控制器方法上添加,添加在类上表示里面所有方法都可跨域,添加在方法上表示指定方法可以跨域,具体代码如下:
1 | import org.springframework.web.bind.annotation.*; |
二、SpringBoot 配置 CORS 解决跨域
即在我们所有响应头配置允许跨域访问,CORS也已经成为主流的跨域解决方案。
- 在项目中创建一个新的配置文件
- 添加
@Configuration
注解实现WebMvcConfigurer
接口 - 重写
addCorsMappings
方法并设置允许跨域的代码
三、SpringBoot 通过 CorsFilter 解决跨域
这种方式和上面的方式类似,但是主要是通过过滤器进行跨域,也是通过Java Config
的方式配置跨域访问,具体代码如下:
1 | java复制代码import org.springframework.context.annotation.Bean; |
四、通过 nginx 配置 CORS 解决跨域
如果我们项目有用 nginx
做反向代理服务器时,也可以在nginx
中配置CORS
来解决跨域
问:什么是nginx反向代理?如何实现跨域的?
正向代理 :a->b->c a是客户端想访问c,通过代理服务器b来访问外网服务器c
–所以,正向代理,其实是”代理服务器”代理了”客户端”,去和”目标服务器”进行交互。–
正向代理的好处有:
1.可以突破访问自身ip限制
2.由于代理服务器中有较大的硬盘缓存区,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。
3.隐藏客户端真实IP
反向代理:a->b–冒充–c a想访问c ,但是b代理了c,给a返回结果
–所以,反向代理,其实是”代理服务器”代理了”目标服务器”,去和”客户端”进行交互。–
反向代理的好处:
1.实现负载均衡,根据所有真实服务器的负载情况,将客户端请求分发到不同的真实服务器上。
2.提高访问速度, 反向代理服务器可以对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务,提高访问速度。
3.隐藏服务器真实ip
3.综合比较
- 简便性:注解方式最为简单,适合快速开发或小型项目。
- 集中管理与控制力:通过配置文件或
CorsFilter
能更集中地管理跨域策略,适合中大型项目。 - 性能与透明性:nginx配置最优,适合需要高性能和有nginx环境的项目。
选择哪种方案取决于项目的具体需求、开发与维护成本以及预期的控制精度。通常,小型或初期项目可能更倾向于使用注解或简单配置,而中大型项目则可能需要更细粒度的控制,如通过CorsFilter
或nginx配置来满足复杂的跨域需求。