文章目录
- 1. 前置知识
- 2. 原理和解决方案总结
- 2.1. 跨域不通过原理流程图
- 2.2. 实现原理:添加以下http响应头
- 2.3. 四种跨域实现方式及优先级(从高到低)
- 3. 具体实现代码
- 3.1. 跨域全局配置方式-Filter(全适用)
- 3.2. 跨域全局配置方式-SpringMvc
- 3.3. 跨域单个配置方式-WebServlet
- 3.4. 跨域单个配置方式-SpringMvc
- 4.非java实现方式
- 4.1. nginx代理
- 9. 参考文章
1. 前置知识
2. 原理和解决方案总结
2.1. 跨域不通过原理流程图
2.2. 实现原理:添加以下http响应头
序号 | 响应头 | 含义 |
1 | Access-Control-Allow-Origin | 允许的源 |
2 | Access-Control-Allow-Methods | 允许的方法 |
3 | Access-Control-Allow-Headers | 允许的自定义头 |
4 | Access-Control-Max-Age | 预检请求的结果缓存时间(可选) |
2.3. 四种跨域实现方式及优先级(从高到低)
- 跨域全局配置方式-Filter(全适用): 重写 Filter.doFilter(),设置 res.setHeader(“Access-Control-Allow-Origin”, “*”) 等响应头参数
- 跨域全局配置方式-SpringMvc : 重写 WebMvcConfigurer.addCorsMappings(),设置 registry.addMapping(“/**”).allowedOrigins(“*”)等响应头参数(只对SpringMvc写法生效,对原生Servlet不生效)
- 跨域单个配置方式-WebServlet: 设置 res.addHeader(“Access-Control-Allow-Origin”, “*”) 等响应头参数
- 跨域单个配置方式-SpringMvc : 添加 @CrossOrigin注解,设置origins等响应头参数(只对SpringMvc写法生效,对原生Servlet不生效)
3. 具体实现代码
3.1. 跨域全局配置方式-Filter(全适用)
- 重写
Filter.doFilter()
,设置res.setHeader("Access-Control-Allow-Origin", "*")
等响应头参数
3.2. 跨域全局配置方式-SpringMvc
- 重写 WebMvcConfigurer.addCorsMappings(),设置 registry.addMapping(“/**”).allowedOrigins(“*”)等响应头参数(只对SpringMvc写法生效,对原生Servlet不生效)
3.3. 跨域单个配置方式-WebServlet
- 设置 res.addHeader(“Access-Control-Allow-Origin”, “*”) 等响应头参数
3.4. 跨域单个配置方式-SpringMvc
- 添加 @CrossOrigin注解,设置origins等响应头参数(只对SpringMvc写法生效,对原生Servlet不生效)
4.非java实现方式
4.1. nginx代理
- 优点:不用侵入java代码
- 配置nginx反向代理。在配置文件
nginx.conf
的http
中添加一个server
- 将
AJAX
请求通过nginx
转发。本例中,将AJAX
请求发给58080
端口,然后转发给8080
端口
9. 参考文章