RFC 6585 最近剛剛發布,該文檔描述了 4 個新的 HTTP 狀態碼。
HTTP 協議還在變化?是的,HTTP 協議一直在演變,新的狀態碼對于開發 REST 服務或者說是基于 HTTP 的服務非常有用,下面我們為你詳細介紹這四個新的狀態碼以及是否應該使用。
428 Precondition Required (要求先決條件)
先決條件是客戶端發送 HTTP 請求時,如果想要請求能成功必須滿足一些預設的條件。
一個好的例子就是 If-None-Match 頭,經常在 GET 請求中使用,如果指定了 If-None-Match ,那么客戶端只在響應中的 ETag 改變后才會重新接收回應。
先決條件的另外一個例子就是 If-Match 頭,這個一般用在 PUT 請求上用于指示只更新沒被改變的資源,這在多個客戶端使用 HTTP 服務時用來防止彼此間不會覆蓋相同內容。
當服務器端使用 428 Precondition Required 狀態碼時,表示客戶端必須發送上述的請求頭才能執行請求,這個方法為服務器提供一種有效的方法來阻止 'lost update' 問題。
429 Too Many Requests (太多請求)
當你需要限制客戶端請求某個服務數量時,該狀態碼就很有用,也就是請求速度限制。
在此之前,有一些類似的狀態碼,例如 '509 Bandwidth Limit Exceeded'. Twitter 使用 420 (這不是HTTP定義的狀態碼)
如果你希望限制客戶端對服務的請求數,可使用 429 狀態碼,同時包含一個 Retry-After 響應頭用于告訴客戶端多長時間后可以再次請求服務。
431 Request Header Fields Too Large (請求頭字段太大)
某些情況下,客戶端發送 HTTP 請求頭會變得很大,那么服務器可發送 431 Request Header Fields Too Large 來指明該問題。
我不太清楚為什么沒有 430 狀態碼,而是直接從 429 跳到 431,我嘗試搜索但沒有結果。唯一的猜測是 430 Forbidden 跟 403 Forbidden 太像了,為了避免混淆才這么做的,天知道!
511 Network Authentication Required (要求網絡認證)
對我來說這個狀態碼很有趣,如果你在開發一個 HTTP 服務器,你不一定需要處理該狀態碼,但如果你在編寫 HTTP 客戶端,那這個狀態碼就非常重要。
如果你頻繁使用筆記本和智能手機,你可能會注意到大量的公用 WIFI 服務要求你必須接受一些協議或者必須登錄后才能使用。
這是通過攔截HTTP流量,當用戶試圖訪問網絡返回一個重定向和登錄,這很討厭,但是實際情況就是這樣的。
使用這些“攔截”客戶端,會有一些討厭的副作用。在 RFC 中有提到這兩個的例子:
如果你在登錄WIFI前訪問某個網站,網絡設備將會攔截首個請求,這些設備往往也有自己的網站圖標 ‘favicon.ico'。登錄后您會發現,有一段時間內你訪問的網站圖標一直是WIFI登錄網站的圖標。
如果客戶端使用HTTP請求來查找文檔(可能是JSON),網絡將會響應一個登錄頁,這樣你的客戶端就會解析錯誤并導致客戶端運行異常,在現實中這種問題非常常見。
因此 511 狀態碼的提出就是為了解決這個問題。
如果你正在編寫 HTTP 的客戶端,你最好還是檢查 511 狀態碼以確認是否需要認證后才能訪問。
本文來源于成都網站建設公司與成都網站設計制作公司-創新互聯成都公司!
文章名稱:新的四個http狀態碼
當前地址:http://m.newbst.com/news4/314904.html
成都網站建設公司_創新互聯,為您提供網站建設、移動網站建設、網站設計公司、App開發、響應式網站、ChatGPT
廣告
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源:
創新互聯