因为规则为了安全的原因,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"));