目录
一、SpringMVC跨域请求_同源策略
同源策略是浏览器的一个安全功能。同源,指的是两个URL的协议,域名,端口相同。浏览器出于安全方面的考虑,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。
哪些不受同源策略限制:
1.页面中的<a>标签跳转,表单提交不会受到同源策略限制的。2.静态资源引入也不会受到同源策略限制。如嵌入到页面中的<script src="">,<img src="">,<link href="">等。最容易受到同源策略影响的是Ajax请求。
二、SpringMVC跨域请求_跨域请求
当请求URL的协议、域名、端口三者中任意一个与当前页面URL不同时即为跨域。浏览器执行JavaScript脚本时,会检查当前请求是否同源,如果不是同源资源,就不会被执行。
当前页面URL | 被请求页面URL | 是否跨域 | 原因 |
http://www.itbaizhan.com/
|
http://www.itbaizhan.com/index.h
tml
| 否 | |
http://www.itbaizhan.com/
|
https://www.itbaizhan.com/index.
html
|
跨域
|
协议不同
|
http://www.itbaizhan.com/
|
http://www.baidu.com/
|
跨域
|
主域名不
同
|
http://www.itbaizhan.com/
|
http://itbz.itbaizhan.com/
|
跨域
|
子域名不
同
|
http://www.itbaizhan.com:8
080/
|
http://www.itbaizhan.com:7001/
|
跨域
|
端口号不
同
|
比如:
1.编写控制器方法MyController3
@Controller
public class MyController3 {
@RequestMapping("/m3")
@ResponseBody
public String m3(Model model){
System.out.println("测试跨域请求");
return "success";
}
}
2.编写JSP页面,发送异步请求
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>跨域请求</title>
<script src="/js/jquery-2.1.1.min.js"></script>
<script>
$(function () {
$("#btn").click(function () {
$.get("http://localhost:8080/m3",function (data) {
console.log(data);
})
})
})
</script>
</head>
<body>
<button id="btn">异步请求</button>
</body>
</html>
结果:
当浏览器通过 http://localhost:8080/cross.jsp 访问 JSP 页面时http://localhost:8080/m3 能发送异步请求;http://127.0.0.1:8080/m3 由于同源无法发送异步请求,报以下异常:
三、SpringMVC跨域请求_控制器接收跨域请求
SpringMVC提供了注解@CrossOrigin解决跨域问题。用法如下:
@Controller
public class MyController3 {
@RequestMapping("/m3")
@ResponseBody
//如果请求从http://localhost:8080发出,则允许跨域访问
@CrossOrigin("http://localhost:8080")
public String m3(Model model){
System.out.println("测试跨域请求");
return "success";
}
}