因爲規則爲了安全的原因,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"));