比如說瀏覽器打開了一個單頁面(SPA)應(yīng)用,過了一段時間token(或者session)過期了,這個時候頁面上發(fā)起 Ajax請求之后,后端返回302狀態(tài)碼跳轉(zhuǎn)到login頁面。 我這是使用的是 Vue + axios ,發(fā)現(xiàn) axios 無法攔截到 302請求,下面是處理的過程。
站在用戶的角度思考問題,與客戶深入溝通,找到陸川網(wǎng)站設(shè)計與陸川網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋陸川地區(qū)。思考
google axios 302 handle 看到 axios github 上的兩個討論
• https://github.com/axios/axios/issues/932
• https://github.com/axios/axios/issues/980
得到的結(jié)論就是:瀏覽器發(fā)送的ajax請求,服務(wù)端返回了302狀態(tài)碼,瀏覽器會自行跳轉(zhuǎn),我們無法通過 js 庫(jquery, axios) 直接得到并自定義處理流程,只能等到瀏覽器重定向之后的url獲取相應(yīng)信息。
axios 發(fā)送ajax -->
server 返回302和location -->
瀏覽器請求新的url -->
服務(wù)端返回200 -->axios 獲取結(jié)果
那么怎么解決呢?需要服務(wù)端配合解決
Brower (ajax and not auth) -->
server判斷是ajax請求,未登陸,返回 401狀態(tài)碼 -->
瀏覽器 axios 攔截401,并且通過js 跳轉(zhuǎn)到 /login
解決
瀏覽器端, axios 增加攔截器
axios.interceptors.response.use((response) => { return response; }, function (error) { if (401 === error.response.status) { window.location = '/login'; } else { return Promise.reject(error); } }); axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。