解決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"));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章