# 11-跨域问题
浏览器的跨域访问,浏览器的跨域问题的根源是:浏览器的同源策略
比如一个网站A,一个网站B,它们有不同的域名,部署在不同的服务器上,如果A某个页面向B的某个URL发送了ajax请求,就会因为同源策略被阻止,原因是:浏览器为了能保证我们网站能足够的安全,试想一下,如果没有同源策略的保护,那么任何一个网站都可以向其他的网站发送请求,假设我是一个黑客,我在我自己的javascript里面模拟了10万个人对通一个网站同时发起ajax请求,那另外的那个网站瞬间就会因为来了大量的请求,可能造成瘫痪。所以同源策略是对我们网站的保护。所以页面的请求或者ajax只能对同页面或者同一个域名下的另外的资源进行访问,不能跨域名去访问其他的资源
# 导航
# 浏览器的同源策略
- 同源策略阻止从一个域加载的脚本去获取另一个域上的资源
- 只要协议、域名、端口有任何一个不同,都被当作是不同的域
- 浏览器Console看到Access-Control-Allow-Origin就代表跨域了
# HTML中允许跨域的标签
- img - 显示远程图片
- script - 加载远程JS
- link - 加载远程CSS
# Spring MVC跨域访问
- CORS跨域资源访问
# CORS跨资源访问
- CORS是一种机制,使用额外的HTTP头通知浏览器可以访问其他域
- CORS附加的信息:需要在URL响应头包含 Access-Control-*指明请求允许跨域
# Spring MVC解决跨域访问
- @CrossOrigin - Controller跨域注解(这是局部的处理)
- <mvc:cors> - Spring MVC 全局跨域配置
增加了注解之后,其根本就是在响应头里增了Access-Control-Request-Method||Access-Control-Request-Headers这些信息,也就是说:远程的url允许跨域访问,所以浏览器就会把结果正常的显示
# @CrossOrigin局部跨域解决
//origins = "*":允许所有域名访问,实际项目中不推荐
//maxAge = 3600:设置预检请求的缓存时间,单位秒。非简单请求每次都会有两次请求(预检请求和实际请求),maxAge就是将预检请求的结果缓存起来,下次再次访问,就直接将结果返回
@CrossOrigin(origins = "*",maxAge = 3600)
//@CrossOrigin
//允许部分域名访问
//@CrossOrigin(origins = {"http:localhost:8080","https:www.baidu.com"})
@GetMapping("/users")
public List<User> findByUserId() {
User user = new User();
user.setAge(18);
user.setName("小红");
user.setBirthday(new Date());
User user2 = new User();
user2.setAge(21);
user2.setName("小明");
user2.setBirthday(new Date());
List<User> users = new ArrayList<User>();
users.add(user);
users.add(user2);
return users;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# CORS全局配置
打开applicationContext.xml文件,配置如下:
<mvc:cors>
<!--/restful/**: 含义是:只要是远程的域名访问到/restful为前缀的URI上,都会被这个策略管理-->
<mvc:mapping path="/restful/**" allowed-origins="http://localhost:8080,http://www.baidu.com" max-age="3600"/>
</mvc:cors>
1
2
3
4
2
3
4
# 注意:CORS跨域浏览器访问,指针对浏览器
CORS跨域访问,只是针对浏览器,也就是说以上的设置,只对浏览器生效,如果是对APP、微信小程序这些是不生效的
# 导航,上一页,下一页
# 支持我-微信扫一扫-加入微信公众号
# 赞赏作者
# 种一棵树,最好的时间是十年前,其次是现在
立志用功,如种树然。方其根芽,犹未有干;及其有干,尚未有枝;枝而后叶,叶而后花、实。初种根时,只管栽培灌溉,勿作枝想,勿作实想。悬想何益?何不忘栽培之功,怕没有枝叶花实?