多种方法解决浏览器跨域问题

一、是什么请求跨域?

跨域问题的体现:
在这里插入图片描述
什么是同源策略?- 假设有两个url,如果这两个url的协议、ip(域名)、端口完全一样,则这两个url就称这为同源。

什么是跨域问题?- 如果一个页面发送一个请求,请求的url和当前页面本身的url不同源,就会发生所谓的跨域问题。
注意:
1、跨域是浏览器的限制行为,和服务器没有关系
2、浏览器的部分标签,是可以进行跨域访问的form、a、img、script、link标签
3、通常来说请求跨域都发生在ajax请求上
4、一般来说,跨域问题都发生在前后端分离的项目,或者后端的分布式项目上(没有路由网关)

在这里插入图片描述
二、如何解决跨域问题

1、通过路由网关将多个服务的地址变成同源
2、页面先发送ajax给同源的服务器,服务器再去请求目标服务器,获得结果后返回给页面
3、jquery的jsonp方案

客户端:
$.ajax({
    url: "http://localhost:8081/stu/list",
    success: function(data){
        alert("返回值:" + data);
    },
    dataType: "jsonp",
    jsonpCallback: "method"
});
服务端:
@RequestMapping("/list")
public String list(String callback){
    System.out.println("controller接收到ajax请求!");
    return callback != null ? callback + "('学生列表!')" : "学生列表!";
}

4、SpringMVC的注解

@RequestMapping("/list")
@CrossOrigin
public String list(){
    System.out.println("controller接收到ajax请求!");
    return "学生列表!";
}

原理:就是给响应头中添加属性Access-Control-Allow-Origin:*,告诉浏览器这个请求不要拦截跨域

三、Cookie跨域

什么是cookie的跨域?

在Cookie规范上说,一个cookie只能用于一个域名,不能够发给其它的域名。因此,如果在浏览器中对一个域名设置了一个cookie,这个cookie对于其它的域名将无效。如果你想让你的用户从你的站点中的其中一个进行登录,同时也可以在其它域名上进行登录,这是一个难题。这就是跨域问题。在这里插入图片描述
Cookie的跨域设置:
在这里插入图片描述
基于Cookie的常见攻击行为:

1)跨域脚本攻击(XSS):

在这里插入图片描述
2)跨域请求访问:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41936224/article/details/106854572