解决AJAX跨域请求Java后端收不到cookie

因为规则为了安全的原因,ajax跨域请求默认是不发送cookie的,首先要搞清楚什么是跨域请求。
根据百度百科的解释是:AJAX 跨域访问是用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面。
说人话举个例子:
网站A:a.test.com 通过ajax请求网站B:b.test.com上的接口,很明显网站A和网站B 是两个不同的域,而处于安全机制,JS只能访问与所在页面同一个域(相同协议、域名、端口)的内容,但是我们在项目开发时,经常遇到一个页面的js代码,通过AJAX 去访问另一个服务器并返回数据,这就是AJAX 跨域访问的由来。
跨域访问一般是被阻止的,因为在安全上有个规则:同源策略要求客户端和服务端都必须在一个域内才能通信。所谓同源也就是网站A和网站B必须是相同的域名。
怎么解决这个问题呢?

解决方案:

1、在ajax请求里加上xhrFields: {withCredentials: true}, crossDomain: true。

$.ajax({
            type: "post",
            url:url,
            beforeSend: function(xhr) {
                xhr.withCredentials = true;
            }
            crossDomain:true,
            dataType:"json",
           ..........(略)
          
        });

2、服务端需配置Access-Control-Allow-Credentials为true

response.setHeader("Access-Control-Allow-Credentials", "true");

3、服务端需配置Access-Control-Allow-Origin

response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));

猜你喜欢

转载自blog.csdn.net/ldkjsdty/article/details/84329384