Http中Retry After的使用方式

2021-10-09 14:14:03 字數 1084 閱讀 2979

http是一種協議,對於header、請求方法、內容傳送方式等給出了相關定義和推薦用法,但並不會要求你強制遵循的。我們只所以要把一些細節掌握好是因為「專業性」,要把約定俗成的一些細節用好。

流量入口到統一接入api閘道器層,當突發洪峰時雖然後端服務具有彈性能力,但畢竟資源的啟動和應用預熱都需要時間,所以服務能力的擴容具有延後性。使用者越是接收不到預期的返回越是會瘋狂重試,最終導致洪峰放大n倍後後端雪崩。如果我們想徹底解決這個問題,需要做兩手準備。第一,做好後端的限流保護,當服務能力超過預期時保證能力內的請求正常返回,限流的策略一般分為訊號量和併發數兩種思路,這個不在我們本期retry-after討論範圍內。第二,當後端被限流後要讓客戶端明確感知到,並採取一些措施防止使用者重試,避免造成更多無效的請求。

我們將第二點需求拆分成兩個:1,讓客戶端知道限流了;2:限制它們重試。

需要協商乙個非200的狀態碼,具體使用哪個狀態碼呢?這裡先賣個關子,其實可以自定義,當然作為http協議專業用法我們還是用推薦的code。

需要用到我們這裡的主角retry-after,它有兩種使用方法:

retry-after:

retry-after:

例如:retry-after: wed, 21 oct 2015 07:28:00 gmt

retry-after: 120

根據案例很好理解,第一種表示別人在某個時間點之前都不要再發起重試了,第二種表示多少秒只能不要發起重試。個人推薦使用第二種,這個對資源開銷最小,否則還需要消耗計算資源去計算時間。

ok,我們訂好了要用retry-after頭資訊後我們的返回狀態碼也隨之有著落了。

場景一:表示因為服務端服務能力不足引起的限流,推薦使用503,當然503不僅只應用於限流場景。

場景二:表示因客戶端請求太過頻繁引起的限流,薦使用429,這個是客戶端被限流專用的狀態碼。

方案定好後後面就是客戶端的研發工作了,需要找到禁用重試的點,例如下拉列表框、按鈕等,當然在體驗之上的網際網路時代有些ui還是需要好好設計下,如何友好的提示使用者。

再次強調下,http只是個協議,你可以不用它推薦的使用方式,回到我們這個場景完全可以自己定義乙個header自己定義乙個code,照樣可以達到目的,但是我們要用還是要盡量用的專業些。

HTTP協議?HTTP協議中POST GET H

head to inde x.html not supported.invalid method in request head htp 1.1 apache 1.3.12 server at www.fudan.edu.cn port 80 關於實體頭部的內容還可以有 last modified ...

Android Android中的Http通訊

配置網路許可權,在androidmanifest.xml註冊 初始化webview,請求並且執行網路操作。mwebview webview findviewbyid r.id.mwebview msendurltask new sendurltask msendurltask.execute 在se...

http中請求型別

序號 方法備註 1get 請求指定的頁面資訊並返回實體主體 2head 類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 3post 向指定資源提交資料進行處理請求 4put 5delete 請求伺服器刪除指定頁面 6connect http 1.1協議中預留給能夠將連線改為管道方式...