后端跨域的N种方法
2024-10-08 08:24:09
简单来说,CORS是一种访问机制,英文全称是Cross-Origin Resource Sharing,即我们常说的跨域资源共享,通过在服务器端设置响应头,把发起跨域的原始域名添加到Access-Control-Allow-Origin 即可。
返回新的CorsFilter(全局跨域)
在任意配置类,返回一个新的CorsFilter Bean,并添加映射路径和具体的CORS配置信息。
@Configuration
public class GlobalCorsConfig {
@Bean
public CorsFilter corsFilter() {
//1.添加CORS配置信息
CorsConfiguration config = new CorsConfiguration();
//放行哪些原始域
config.addAllowedOrigin("*");
//是否发送Cookie信息
config.setAllowCredentials(true);
//放行哪些原始域(请求方式)
config.addAllowedMethod("*");
//放行哪些原始域(头部信息)
config.addAllowedHeader("*");
//暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
config.addExposedHeader("*");
//2.添加映射路径
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", config);
//3.返回新的CorsFilter.
return new CorsFilter(configSource);
}
}
使用注解(局部跨域)
在方法上(@RequestMapping)使用注解 @CrossOrigin
@RequestMapping("/hello")
@ResponseBody
@CrossOrigin("http://localhost:8080")
public String index(){
return "Hello World";
}
在控制器(@Controller)上使用注解 @CrossOrigin
@Controller
@CrossOrigin(origins = "http://domain.com", maxAge = 3600)
public class AccountController {
@RequestMapping("/hello")
@ResponseBody
public String index(){
return "Hello World";
}
}
手工设置响应头(局部跨域)
使用HttpServletResponse对象添加响应头(Access-Control-Allow-Origin)来授权原始域,这里Origin的值也可以设置为”*” ,表示全部放行。
@RequestMapping("/hello")
@ResponseBody
public String index(HttpServletResponse response){
response.addHeader("Access-Control-Allow-Origin", "*");
return "Hello World";
}
Nginx配置跨域
upstream server {
server 127.0.0.1:8091;
}
server {
listen 80;
server_name domain.com;
location ^~/api {
//添加跨域请求头
proxy_set_header Access-Control-Allow-Origin *;
proxy_set_header Access-Control-Allow-Methods *;
proxy_set_header Access-Control-Allow-Headers *;
if ($request_method = 'OPTIONS') {
return 204;
}
rewrite ^/api/(.+?)$ /$1 break;
proxy_pass http://server;
}
}
最新文章
- 混合框架中Oracle数据库的还原处理操作
- Java反射机制
- jQuery基本操作
- JavaWeb学习笔记——第一个JSP文件
- 登录到mysql查看binlog日志
- Linux进程内存分析pmap命令(转)
- div+css 定位浅析
- Servlet的一些细节(1)
- sdaf
- [Boost基础]并发编程——asio网络库——同步socket处理
- 【python】入门:打印字符串、简单计算
- 【WebGL】《WebGL编程指南》读书笔记——第4章
- WEB消息推送-原理篇
- Unity3d外包公司|UE4外包公司:谷歌首款Daydream VR设备上手
- MySQL千万级数据库查询怎么提高查询效率
- mumu模拟器安装xposed--如何在android模拟器上进行root
- Emacs 中使用中文插件 eim
- pickle详解
- 001 LRU-缓存淘汰算法
- ubuntu16.04 LTS把下载源改为阿里云的源
热门文章
- Windows 64 位 mysql 5.7以上版本包解压中没有data目录和my-default.ini和my.ini文件以及服务无法启动的解决办法以及修改初始密码的方法
- HDU Queuing(递推+矩阵快速幂)
- TypeScript——基本类型
- SpringBoot安全篇Ⅵ --- 整合Spring Security
- Kotlin Android项目静态检查工具的使用
- leetcode水题题解
- WTL使用双缓冲避免重绘闪烁
- 视觉slam十四讲ch5 joinMap.cpp 代码注释(笔记版)
- 理解POP、OOP、AOP编程
- Go语言实现:【剑指offer】左旋转字符串