axios 處理 302 狀態碼的解決方法

2021-09-04 11:05:43 字數 926 閱讀 9807

問題描述:瀏覽器開啟了乙個單頁面(spa)應用,過了一段時間token(或者session)過期了,這個時候頁面上發起 ajax請求之後,後端返回302狀態碼前端控制跳轉到login頁面。 我這是使用的是 vue + axios ,發現 axios 無法攔截到 302請求,下面是處理的過程。(因為是單頁面的原因,路由切換的時候並不能重新整理頁面,然而session失效後,切換路由並不能重定向,必須要重新整理頁面後才會跳轉到登入頁面,所以需要前端發起ajax請求後,攔截到後台返回的狀態碼,前端控制跳轉到login頁)

瀏覽器傳送的ajax請求,服務端返回了302狀態碼,瀏覽器會自行跳轉,我們無法通過 js 庫(jquery, axios) 直接得到並自定義處理流程,只能等到瀏覽器重定向之後的url獲取相應資訊。

axios 傳送ajax --> 

server 返回302和location --> 

瀏覽器請求新的url --> 

服務端返回200 -->

axios 獲取結果

那麼怎麼解決呢?需要服務端配合解決

brower (ajax and not auth) --> 

server判斷是ajax請求,未登陸,返回 401狀態碼 --> 

瀏覽器 axios 攔截401,並且通過js 跳轉到 /login  

瀏覽器端, axios 增加***

axios.interceptors.response.use((response) => , function (error)  else 

});axios.defaults.headers.common['x-requested-with'] = 'xmlhttprequest';

後端需要判斷是不是請求是不是ajax和未登入,然後返回401

302狀態碼 小結HTTP狀態碼

作為乙個web開發工程師,我們平時都會和諸如200,304,404,501等狀態碼打交道,那麼它們是什麼意思呢?今天,我們來聊聊 http狀態碼是服務端返回給客戶端 因為這裡是web開發,這裡的客戶端指瀏覽器客戶端 的3位數字 這些狀態碼相當於瀏覽器和伺服器之間的對話資訊。它們相互溝通兩者之間的事情...

302狀態碼 HTTP 4 狀態碼

狀態碼以3位數字和原因短語組成,第一位指定了響應類別,後兩位無分類。僅記錄在rfc2616上的http狀態碼就達40種,實際上常用的就14種。表示從客戶端發來的請求在伺服器端被正常處理了。表示伺服器端接受的請求已成功處理,但是返回的響應報文中不含實體的主體部分。另外也不允許返回任何實體的主體。比如,...

301和302狀態碼區別

一 官方解釋 301 redirect 301 代表永久性轉移 permanently moved 302 redirect 302 代表暫時性轉移 temporarily moved 301表示舊位址a的資源已經被永久地移除了 這個資源不可訪問了 搜尋引擎在抓取新內容的同時也將舊的 交換為重定向之...