【跨域】跨域原理 + springboot跨域配置(万能版)
先上配置
这个配置是个万能药,配上之后就没有任何跨域问题了。
@Configuration
public class MvcConfig implements WebMvcConfigurer {@Beanpublic CorsFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();config.setAllowCredentials(true);config.addAllowedOriginPattern("*");config.addAllowedMethod("*");config.addAllowedHeader("*");UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();configSource.registerCorsConfiguration("/**", config);return new CorsFilter(configSource);}}
有兴趣的就再看看下面的原理吧。
什么是跨域?
首先需要明确一点,只有ajax请求才会涉及到跨域。
有些解释是这样子的:你当前在a.com
域名下通过ajax请求b.com
域名下的某个接口,这时候浏览器会认为你在进行非法操作,并且将你拦截下来。
这个说法没有错,但还不够,因为浏览器怎么会做这种傻事,居然限制我只能访问一个域名,这不鬼扯吗???其实浏览器会不会拦截你不是它自己决定的,而是默默地和服务端做了些交流。大致的过程是这样子的:
- 浏览器:服务器,我这有个xxx.com域名下的小弟想要访问你,你同不同意。(浏览器发起一个option请求,携带必要内容)
- 服务器:等等我查一下有没有登记(服务器端合法域名配置)… 查到了让他来吧(没查到,让他滚!)。
- 浏览器:服务器允许你去了,快去吧(人家说你是黑牌,不给你去!行驶证驾驶证出示一下!!!)
OK,大概是说明白了吧,追求准确细节的小伙伴可以去查一查CORS(Cross-Origin Resource Sharing)跨域资源共享:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS
解释下上面的配置
config.setAllowCredentials(true);
允许前端传递包括cookie等在内的验证信息。否则前端传不了cookie.config.addAllowedOriginPattern("*");
允许哪些域名访问,这里的*表示允许所有域名访问。config.addAllowedMethod("*");
允许哪些HTTP方法。GET/POST/PUT/DELETE等config.addAllowedHeader("*");
允许哪些请求头(HTTP header)。configSource.registerCorsConfiguration("/**", config);
哪些接口可以被跨域访问。
写在最后
你可能在其他资料上看到有这样的限制,返回给前端的header头,当Access-Control-Allow-Credentials: true
时,Access-Control-Allow-Origin
必须为具体的域名。而这里配置的addAllowedOriginPattern
是*,其实这是springboot给你做了一些自动化的处理,当你配置的是*时,springboot会自动的将返回头修改为对应的请求域名。
【跨域】跨域原理 + springboot跨域配置(万能版)相关推荐
- ajax跨域请求原理,Ajax跨域请求的原理(图文教程)
这篇文章主要为大家详细介绍了Ajax跨域请求的原理,Ajax怎么样做跨域请求?具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Ajax跨域请求的具体实现过程,供大家参考,具体内容 ...
- springboot 跨域配置cors
撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 1 跨域的理解 跨域是指:浏览器A从服务器B获取的静态资源,包括Html.Css.Js,然后在Js中通过Ajax ...
- JavaScript 九种跨域方式实现原理
前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及有哪几种跨域方式,这是本文要探讨的内容. 一.什么是跨域? 1.什么是同源策略及其限制内容? 同源策略是一种约定,它是浏览器最核心也最基本的安全 ...
- SpringBoot跨域请求
在软件开发过程中,尤其是现在的前后端分离开发,跨域请求是很普通的事情,我这个只是简单的将所有的跨域请求都接受,如若有大佬有更好的解决方案欢迎分享 问题: 在请求的时候,前端使用js进行ajax请求未能 ...
- 九种跨域方式实现原理
前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及有哪几种跨域方式,这是本文要探讨的内容. 本文完整的源代码请猛戳github 博客 一.什么是跨域? 1.什么是同源策略及其限制内容? 同源策略 ...
- JavaScript 九种跨域方式实现原理 1
前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及有哪几种跨域方式,这是本文要探讨的内容. 一.什么是跨域? 1.什么是同源策略及其限制内容? 同源策略是一种约定,它是浏览器最核心也最基本的安全 ...
- 关于使用代理解决跨域问题的原理
关于使用代理解决跨域问题的原理 参考文章: (1)关于使用代理解决跨域问题的原理 (2)https://www.cnblogs.com/itgezhu/p/11933399.html (3)https ...
- springBoot跨域注解@CrossOrigin
Spring Framework 4.2 GA为CORS提供了第一类支持,使您比通常的基于过滤器的解决方案更容易和更强大地配置它.所以springMVC的版本要在4.2或以上版本才支持@CrossOr ...
- MPLS virtual private network 跨域方案实现原理
概述: 随着MPLS技术的成熟,其应用越来越流行,尤其是在VPN方面.通过运营商提供的VPN服务,将分布在各地的站点通过运营商的网络连接起来,避免了租用专线,节省了大量的成本.近年来,由于MPLS V ...
最新文章
- [ZT]如何取得客户端的Windows登录用户名?
- Bootstrap 简洁、直观、强悍、移动设备优先的前端开发框架,让web开发更迅速、简单。...
- Django—模板渲染
- c++ string分割字符串split_python 字符串和文本处理
- verilator编译 更新文件的规则
- Tensorboard--模型可视化工具
- 自动化的NSX网络交付
- 理解 CMOS IMAGE Sensor
- 图扑软件以轻量化建模构建智慧城市
- 【论文制图】chemdraw安装与使用
- 如何用ChemDraw Prime 绘制任意弧线箭头
- C++函数参数省略号
- 支持C/C++、Java、python、Matlab等语言的第三方机器学习库汇总
- 哈工大计算机考研复试指南
- 7:第三章:电商工程分析:2:电商工程业务解读与微服务拆分;
- 主机托管的优势,为什么要选择主机托管
- keil可以连接jlink,但是jlink不能识别芯片
- 移动端框架之JQuery WeUI
- R语言 数据挖掘:R语言实战 第六章 关联分析
- String 对象 与 StringBuilder 对象的比较.....