先決條件是客戶端發送 HTTP 請求時,必需要知足的一些預設條件。一個好的例子就是 If-None-Match 頭,常常用在 GET 請求中。若是指定了 If-None-Match ,那麼客戶端只在響應中的 ETag 改變後纔會從新接收回應。html
先決條件的另一個例子是 If-Match 頭,通常用在 PUT 請求上,用於指示只更新但沒有被改變的資源。這在多個客戶端使用 HTTP 服務時用來防止彼此間覆蓋相同內容的狀況。服務器
當服務器端使用 428 Precondition Required 狀態碼時,表示客戶端必須發送上述的請求頭才能執行該請求操做。這個方法爲服務器提供一種有效的方法來阻止 「lost update」問題的出現。網絡
當你須要限制客戶端請求某個服務的數量,也就是限制請求速度時,該狀態碼就會很是有用。在此以前,有一些相似的狀態碼。例如「509 Bandwidth Limit Exceeded」。網站
若是你但願限制客戶端對服務的請求數,可以使用 429 狀態碼,同時包含一個 Retry-After 響應頭用於告訴客戶端多長時間後能夠再次請求服務。ui
某些狀況下,客戶端發送 HTTP 請求頭會變得很大,那麼服務器可發送 431 Request Header Fields Too Large 來指明該問題。htm
我不太清楚爲何沒有 430 狀態碼,而是直接從 429 跳到 431,我嘗試搜索但沒有結果。惟一的猜想是 430 Forbidden 跟 403 Forbidden 太像了,爲了不混淆才這麼作的,天知道!資源
對我來講這個狀態碼頗有趣,若是你在開發一個 HTTP 服務器,你不必定須要處理該狀態碼,但若是你在編寫 HTTP 客戶端,那這個狀態碼就很是重要。開發
若是你頻繁使用筆記本和智能手機,你可能會注意到大量的公用 Wifi 服務要求你必須接受一些協議或者必須登陸後才能使用,這是經過攔截HTTP流量實現的。當用戶試圖訪問網絡返回一個重定向和登陸,這很討厭,可是實際狀況就是這樣的。文檔
使用這些「攔截」客戶端,會有一些討厭的反作用。在 RFC 中提到如下這兩個的例子:get
而 511 狀態碼的提出就是爲了解決這個問題。所以,若是你正在編寫 HTTP 的客戶端,你最好仍是檢查 511 狀態碼以確認是否須要認證後才能訪問。