08 SpringMVC跨域请求

目录

一、SpringMVC跨域请求_同源策略

二、SpringMVC跨域请求_跨域请求

三、SpringMVC跨域请求_控制器接收跨域请求


一、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";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值