一 同源策略与跨域请求
首先,跨域不是问题。是一种安全机制
1. 同源策略介绍
跨域是浏览器加载了与当前域名、协议、端口不同另一站点下的资源,这与各大支持JavaScript的浏览器的同源策略是违背的。
所谓 同源策略 ,它是由Netscape提出的一个著名的安全策略。是防止外网的脚本恶意攻击服务器的一种措施。
现在所有支持JavaScript 的浏览器都会使用这个策略。
所谓同源是指,域名,协议,端口相同。
2. 跨域请求的问题
– 前后端分离的开发环境下
跨域并不会阻止请求的发出,也不会阻止请求的接受,跨域是浏览器为了保护当前页面,你的请求得到了响应,浏览器不会把响应的数据交给页面上的回调,取而代之的是去提示你这是一个跨域数据。提示就是一个报错提醒
知道了浏览器是如何处理的了,才能对症下药来解决这个问题,下面介绍几种常用的跨域解决方法
二 解决跨域请求的问题
1. 跨域资源共享CORS
这是最靠谱也是非常科学的解决方案,通过Access-Control-Allow-Origin
响应头,告诉浏览器如果请求我的资源的页面
是 我这个响应头里记录了的"源"
,则不要拦截此响应,允许数据通行。
header头字段 | 含义 | 取值 |
---|---|---|
Access-Control-Allow-Credentials | 响应头表示是否可以将对请求的响应暴露给页面。返回true则可以,其他值均不可以。 | true/false |
Access-Control-Allow-Headers | 表示此次请求中可以使用那些header字段 | 符合请求头规范的字符串 |
Access-Control-Allow-Methods | 表示此次请求中可以使用那些请求方法 | GET/POST(多个使用逗号隔开) |
2. 跨域请求与Cookie
3. 前端解决方案JSONP
当服务端没有返回Access-Control-Allow-Origin
这样的字段时,是否就意味着不能使用此资源了吗?不!只能说不建议使用此资源了。但我们还有另一种办法,那就是通过JSONP。
三 SpringBoot跨域配置
java解决CORS跨域请求的方式,主要有以下几种方式可供选择:
- 返回新的CorsFilter
- 重写 WebMvcConfigurer
- 使用注解 @CrossOrigin
- 自定义web filter 实现跨域 (手动设置响应头 :HttpServletResponse)
1. CorsFilter★★★
返回新的CorsFilter(全局跨域)