先上配置

这个配置是个万能药,配上之后就没有任何跨域问题了。

@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

解释下上面的配置

  1. config.setAllowCredentials(true);允许前端传递包括cookie等在内的验证信息。否则前端传不了cookie.
  2. config.addAllowedOriginPattern("*");允许哪些域名访问,这里的*表示允许所有域名访问。
  3. config.addAllowedMethod("*");允许哪些HTTP方法。GET/POST/PUT/DELETE等
  4. config.addAllowedHeader("*");允许哪些请求头(HTTP header)。
  5. configSource.registerCorsConfiguration("/**", config);哪些接口可以被跨域访问。

写在最后

你可能在其他资料上看到有这样的限制,返回给前端的header头,当Access-Control-Allow-Credentials: true时,Access-Control-Allow-Origin必须为具体的域名。而这里配置的addAllowedOriginPattern是*,其实这是springboot给你做了一些自动化的处理,当你配置的是*时,springboot会自动的将返回头修改为对应的请求域名。

【跨域】跨域原理 + springboot跨域配置(万能版)相关推荐

  1. ajax跨域请求原理,Ajax跨域请求的原理(图文教程)

    这篇文章主要为大家详细介绍了Ajax跨域请求的原理,Ajax怎么样做跨域请求?具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Ajax跨域请求的具体实现过程,供大家参考,具体内容 ...

  2. springboot 跨域配置cors

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 1 跨域的理解 跨域是指:浏览器A从服务器B获取的静态资源,包括Html.Css.Js,然后在Js中通过Ajax ...

  3. JavaScript 九种跨域方式实现原理

    前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及有哪几种跨域方式,这是本文要探讨的内容. 一.什么是跨域? 1.什么是同源策略及其限制内容? 同源策略是一种约定,它是浏览器最核心也最基本的安全 ...

  4. SpringBoot跨域请求

    在软件开发过程中,尤其是现在的前后端分离开发,跨域请求是很普通的事情,我这个只是简单的将所有的跨域请求都接受,如若有大佬有更好的解决方案欢迎分享 问题: 在请求的时候,前端使用js进行ajax请求未能 ...

  5. 九种跨域方式实现原理

    前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及有哪几种跨域方式,这是本文要探讨的内容. 本文完整的源代码请猛戳github 博客 一.什么是跨域? 1.什么是同源策略及其限制内容? 同源策略 ...

  6. JavaScript 九种跨域方式实现原理 1

    前言 前后端数据交互经常会碰到请求跨域,什么是跨域,以及有哪几种跨域方式,这是本文要探讨的内容. 一.什么是跨域? 1.什么是同源策略及其限制内容? 同源策略是一种约定,它是浏览器最核心也最基本的安全 ...

  7. 关于使用代理解决跨域问题的原理

    关于使用代理解决跨域问题的原理 参考文章: (1)关于使用代理解决跨域问题的原理 (2)https://www.cnblogs.com/itgezhu/p/11933399.html (3)https ...

  8. springBoot跨域注解@CrossOrigin

    Spring Framework 4.2 GA为CORS提供了第一类支持,使您比通常的基于过滤器的解决方案更容易和更强大地配置它.所以springMVC的版本要在4.2或以上版本才支持@CrossOr ...

  9. MPLS virtual private network 跨域方案实现原理

    概述: 随着MPLS技术的成熟,其应用越来越流行,尤其是在VPN方面.通过运营商提供的VPN服务,将分布在各地的站点通过运营商的网络连接起来,避免了租用专线,节省了大量的成本.近年来,由于MPLS V ...

最新文章

  1. [ZT]如何取得客户端的Windows登录用户名?
  2. Bootstrap 简洁、直观、强悍、移动设备优先的前端开发框架,让web开发更迅速、简单。...
  3. Django—模板渲染
  4. c++ string分割字符串split_python 字符串和文本处理
  5. verilator编译 更新文件的规则
  6. Tensorboard--模型可视化工具
  7. 自动化的NSX网络交付
  8. 理解 CMOS IMAGE Sensor
  9. 图扑软件以轻量化建模构建智慧城市
  10. 【论文制图】chemdraw安装与使用
  11. 如何用ChemDraw Prime 绘制任意弧线箭头
  12. C++函数参数省略号
  13. 支持C/C++、Java、python、Matlab等语言的第三方机器学习库汇总
  14. 哈工大计算机考研复试指南
  15. 7:第三章:电商工程分析:2:电商工程业务解读与微服务拆分;
  16. 主机托管的优势,为什么要选择主机托管
  17. keil可以连接jlink,但是jlink不能识别芯片
  18. 移动端框架之JQuery WeUI
  19. R语言 数据挖掘:R语言实战 第六章 关联分析
  20. String 对象 与 StringBuilder 对象的比较.....

热门文章

  1. 计算机考研英语自我介绍范文,考研复试英语自我介绍范文
  2. 07年10大IT名言出炉 微软CEO鲍尔默独占2席
  3. 百分百医学论文发表网是个骗子网站
  4. 你也能成为手机摄影高手之教程分享
  5. 电脑插座,电脑专用插座如何接线?电脑专用插座如何挑选?
  6. 无法验证到服务器的安全证书,打开outlook提示…无法验证的安全证书……
  7. 产学融合如何促进技术创新,英特尔打了个样
  8. CMU 15-445/645-Note4-执行篇-Sort
  9. 网闸——物理隔离网闸常见技术问题解答
  10. python正则表达式匹配所有顶级域名