1. 程式人生 > >axios 處理 302 狀態碼

axios 處理 302 狀態碼

比如說瀏覽器打開了一個單頁面(SPA)應用,過了一段時間token(或者session)過期了,這個時候頁面上發起 Ajax請求之後,後端返回302狀態碼跳轉到login頁面。 我這是使用的是 Vue + axios ,發現 axios 無法攔截到 302請求,下面是處理的過程。

思考

google axios 302 handle 看到 axios github 上的兩個討論

得到的結論就是:瀏覽器傳送的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) => {
    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';

後端程式碼,使用flask框架,看個流程就行,驗證請求是否是 ajax 和 未登陸,然後返回401狀態碼

from
flask import Blueprint, request, jsonify, make_response, abort from flask_login.utils import current_user, current_app apibp = Blueprint('api', 'api_bp') # 主要邏輯 def bp_login_required(): if not current_user.is_authenticated: if request.is_xhr: abort(401) else: return current_app.login_manager.unauthorized() apibp.before_request(bp_login_required) @apibp.route("/report/domains/<month>/", methods=["GET"]) def monthly_domains(month): return jsonify({})

ref

相關推薦

axios 處理 302 狀態

比如說瀏覽器打開了一個單頁面(SPA)應用,過了一段時間token(或者session)過期了,這個時候頁面上發起 Ajax請求之後,後端返回302狀態碼跳轉到login頁面。 我這是使用的是 Vue + axios ,發現 axios 無法攔截到 302

301和302狀態區別

2.3 font 排名 官方 收錄 302跳轉 永久 span 出現 一、官方解釋 301 redirect: 301 代表永久性轉移(Permanently Moved) 302 redirect: 302 代表暫時性轉移(Temporarily Moved )

REST(三)處理HTTP狀態、異常和響應頭

REST(三)處理HTTP狀態碼、異常和響應頭 之前的內容只是討論了正確的處理結果,而沒有討論當沒有找到資源時的處理或者發生異常時的處理。當發生資源找不到或者處理邏輯發生異常時,需要考慮的時返回給客戶端HTTP抓鬼你太嗎和錯誤訊息的問題。為了簡化這些開發,Spring提供了實體封裝類

android retrofit 單獨處理返回狀態204以及統一處理特殊返回比如401

返回狀態碼比如401,一般表示身份無效,比如token失效之類的,這個時候就需要呼叫介面重新整理token, 肯定不能在每個介面請求回撥那裡去重新整理,要是一個APP有幾百個介面不是很麻煩嗎,那麼retrofit怎麼攔截這個 401做統一處理呢,直接上程式碼: Inte

RestTemplate處理請求狀態為非200的返回資料

一、RestTemplate實踐 RestTemplate是Spring提供的用於訪問Rest服務的客戶端, RestTemplate提供了多種便捷訪問遠端Http服務的方法,能夠大大提高客戶端的編寫效率。 呼叫RestTemplate的預設建構函式,RestTemp

瀏覽器常見狀態403,302

訪問 瀏覽器 內部 不可用 禁止訪問 版本 對象 http 拒絕 301 - 已永久移動302 - 對象已移動。304 - 未修改。400 - 錯誤的請求。401 - 訪問被拒絕。403 - 禁止訪問。404 - 未找到。500 - 內部服務器錯誤。503 - 服務不可用。

Nginx的 HTTP 499 狀態處理

搜索 是什麽 src 多個 客戶端連接 alt nec logs 源碼 1、前言   今天在處理一個客戶問題,遇到Nginx access log中出現大量的499狀態碼。實際場景是:客戶的域名通過cname解析到我們的Nginx反向代理集群上來,客戶的Web服務是由一個

http狀態301、302

doc 索引 永久 原來 sina php .sh 定位 com 301 永久重定位 302 臨時重定位 這兩個狀態作用於搜索引擎,搜索引擎將永久的收錄在重定位後的地址,將臨時的收錄在原來的地址。 http 301 和 302的區別 php實現301永久重定向

HTTP狀態302、303、307區別

狀態碼 blog rec 用戶 存在 保留 temporary 程序 cli HTTP狀態碼3XX表示重定向,表明瀏覽器需要執行某些特殊的處理以正確處理請求。 301 Moved Permanently 永久性定向。該狀態碼表示請求的資源已被分配了新的URI,以後應使用

HTTP 狀態 301 302

一個 允許 客戶 臨時性 這樣的 res RM post請求 規範 301 Moved Permanently被請求的資源已永久移動到新位置,並且將來任何對此資源的引用都應該使用本響應返回的若幹個URI之一。如果可能,擁有鏈接編輯功能的客戶端應當自動把請求的地址修改為從服務

(轉)Http狀態301和302概念簡單區別及企業應用案例

ash BE light div www oldboy dex -i 地址 Http狀態碼301和302的區別及企業應用案例 原文:http://blog.51cto.com/oldboy/1774260 1、什麽是301重定向?   301重定向/跳轉一般,表示本網頁永

axios在後端返回401時,獲取不到error.response和返回的狀態問題

在axios中爬過的坑 專案是後端採用的grails + spring cloud + gorm + es等外掛做的, 前端採用的是element + axios + vue等,身份認證採用的是spring cloud oauth2.0 . 開發採用的是gradle搭建,語言使用的是gr

axios傳送post請求返回400狀態

今天在用 axios 傳送一個跨域的post請求時,遇到了一個坑:Uncaught (in promise) Error: Request failed with status code 400。 前臺程式碼如下: axios({ method: "post", u

HTTP狀態302、303和307的故事

一、狀態碼——302     HTTP1.0在介紹302時說,如果客戶端發出POST請求後,收到服務端的302狀態碼,那麼不能自動的向新的URI傳送重複請求,必須跟使用者確認是否該重發,因為第二次POST時,環境可能已經發生變化(POST方法不是冪等的),POST操作會不符合

關於vue封裝的axios在請求錯誤時獲取不到錯誤狀態的初步發現

我們在寫vue專案的時候,專案有的時候需要自己再次封裝一個網路請求,比如: 由於vue在開發的時候,預設的請求是localhost:8080,一般在請求後端的介面的時候,會有一個跨越的問題,跨越的解決就不寫了,網上一大堆,比如在響應攔截的時候,如果請求錯誤,上面有些錯誤碼,比如404,500之

http狀態301和302詳解及區別——辛酸的探索之路

一直對http狀態碼301和302的理解比較模糊,在遇到實際的問題和翻閱各種資料瞭解後,算是有了一定的理解。這裡記錄下,希望能有新的認識。大家也共勉。 官方的比較簡潔的說明:         301 redirect: 301 代表永久性轉移(Permanently

http狀態301和302

301 redirect: 301 代表永久性轉移(Permanently Moved) 302 redirect: 302 代表暫時性轉移(Temporarily Moved ) 詳細來說,301和302狀態碼都表示重定向,就是說瀏覽器在拿到伺服器返回

處理scrapy爬蟲,返回狀態,ip超時返回請求重新爬取

簡單粗暴些,利用scrapy 框架原理自定義middleware 處理狀態碼異常,ip 超時的異常,重現傳送請求, 這裡需要重寫scrapy 內建的中介軟體 RetryMiddleware, middlewares.py class Process_Proxies(R

HTTP狀態 HTTP狀態 200 302 (臨時移動) 伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。 404 500

HTTP狀態碼 200 (成功) 伺服器已成功處理了請求。 通常,這表示伺服器提供了請求的網頁。 301 (永久移動) 請求的網頁已永久移動到新位置。 伺服器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。 302 (臨時移動) 伺服器目前從不同位置的

Http狀態之:301、302重定向

概念 301 Moved Permanently 被請求的資源已永久移動到新位置,並且將來任何對此資源的引用都應該使用本響應返回的若干個URI之一。如果可能,擁有連結編輯功能的客戶端應當自動把請求的地址修改為從伺服器反饋回來的地址。除非額外指定,否