跨域解决方案之CORS
1.什么是CORS?
CORS (Corss-Orign Resource Sharing):跨域资源共享。跨域资源共享是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。
2.使用场景
简单请求
条件:
- 请求方法满足之一:GET、POST、HEAD
- Content-Type满足之一:text/plain、multipart/form-data、application/x-www-form-urlencoded
Ps:服务端会检查Origin携带的源是否在许可范围,并返回一个正常的HTTP响应。浏览器会检查服务器响应是否携带Access-Control-Allow-Origin字段,没有则控制台报错。因此不可通过响应的状态码来判断请求是否成功。
预检请求
条件:
- 请求方法满足之一:PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH
- Content-Type不满足之一:text/plain、multipart/form-data、application/x-www-form-urlencoded
Ps:预检请求要求必须首先使用 OPTIONS 方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求。
3.附带凭证的请求
对应附带凭证的请求,服务器不可将Access-Control-Allow-Origin设置为"*",需要将Access-Control-Allow-Origin设置为具体的值,不然请求会失败。
4.SpringBoot对CORS跨域支持
SpringBoot2以及SpringMVC4.2后支持CORS
错误:
Access to XMLHttpRequest at 'http://localhost:8080/info/getAllData' from origin 'http://127.0.0.1:8848' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
全局配置:
public void addCorsMappings(CorsRegistry registry){ registry.addMapping("/**") .allowedOrigins("http://127.0.0.1:8848","http://localhost:8848"); }
Ps:之前有一篇讲Restful:https://www.cnblogs.com/lightbc/p/12332378.html,在其中对swagger补充的地方添加上述全局配置即可。
注解实现:
可使用@CrossOrigin注解,注解在Controller上表示整个Controller中的方法都可被跨域访问,注解在方法上表示该方法可以被跨域访问。效果如下:
Ps:
1.其中http://127.0.0.1:8848为请求来源。
2.CORS在低版本的浏览器中并未得到较好的支持。
作者:lightbc
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现