代理IP服務(wù)器遇到的HTTP狀態(tài)碼有:1、428狀態(tài)碼,表示客戶端必須發(fā)送對(duì)應(yīng)的請(qǐng)求頭才能執(zhí)行請(qǐng)求操作,能有效阻止 lost update問題的出現(xiàn);2、429狀態(tài)碼,表示限制客戶端對(duì)服務(wù)的請(qǐng)求數(shù),同時(shí)包含客戶端多長時(shí)間后可以再次請(qǐng)求服務(wù);3、431狀態(tài)碼,表示指明請(qǐng)求頭問題,如客戶端發(fā)送HTTP請(qǐng)求頭過大,服務(wù)器可以發(fā)送431狀態(tài)碼;4、511狀態(tài)碼,在編寫HTTP客戶端時(shí),能解決客戶端解析錯(cuò)誤并導(dǎo)致客戶端運(yùn)行異常的問題。
具體內(nèi)容如下:
1、428 Precondition Required
先決條件是客戶端發(fā)送 HTTP 請(qǐng)求時(shí),必須要滿足的一些預(yù)設(shè)條件。一個(gè)好的例子就是 If-None-Match 頭,經(jīng)常用在 GET 請(qǐng)求中。如果指定了 If-None-Match ,那么客戶端只在響應(yīng)中的 ETag 改變后才會(huì)重新接收回應(yīng)。
先決條件的另外一個(gè)例子是 If-Match 頭,一般用在 PUT 請(qǐng)求上,用于指示只更新但沒有被改變的資源。這在多個(gè)客戶端使用 HTTP 服務(wù)時(shí)用來防止彼此間覆蓋相同內(nèi)容的情況。當(dāng)服務(wù)器端使用 428 Precondition Required 狀態(tài)碼時(shí),表示客戶端必須發(fā)送上述的請(qǐng)求頭才能執(zhí)行該請(qǐng)求操作。這個(gè)方法為服務(wù)器提供一種有效的方法來阻止 “l(fā)ost update”問題的出現(xiàn)。
2、429 Too Many Requests
當(dāng)你需要限制客戶端請(qǐng)求某個(gè)服務(wù)的數(shù)量,也就是限制請(qǐng)求速度時(shí),該狀態(tài)碼就會(huì)非常有用。在此之前,有一些類似的狀態(tài)碼。例如“509 Bandwidth Limit Exceeded”。如果你希望限制客戶端對(duì)服務(wù)的請(qǐng)求數(shù),可使用 429 狀態(tài)碼,同時(shí)包含一個(gè) Retry-After 響應(yīng)頭用于告訴客戶端多長時(shí)間后可以再次請(qǐng)求服務(wù)。
3、431 Request Header Fields Too Large
某些情況下,客戶端發(fā)送 HTTP 請(qǐng)求頭會(huì)變得很大,那么服務(wù)器可發(fā)送 431 Request Header Fields Too Large 來指明該問題。IP代理服務(wù)器軟件我不太清楚為什么沒有 430 狀態(tài)碼,而是直接從 429 跳到 431,我嘗試搜索但沒有結(jié)果。唯一的猜測是 430 Forbidden 跟 403 Forbidden 太像了,為了避免混淆才這么做的。
4、511 Network Authentication Required
對(duì)我來說這個(gè)狀態(tài)碼很有趣,如果你在開發(fā)一個(gè) HTTP 服務(wù)器,你不一定需要處理該狀態(tài)碼,但如果你在編寫 HTTP 客戶端,那這個(gè)狀態(tài)碼就非常重要。如果你頻繁使用筆記本和智能手機(jī),你可能會(huì)注意到大量的公用 Wifi 服務(wù)要求你必須接受一些協(xié)議或者必須登錄后才能使用,這是通過攔截HTTP流量實(shí)現(xiàn)的。當(dāng)用戶試圖訪問網(wǎng)絡(luò)返回一個(gè)重定向和登錄,這很討厭,但是實(shí)際情況就是這樣的。
使用這些“攔截”客戶端,會(huì)有一些討厭的副作用。
如果你在登錄Wifi前訪問某個(gè)網(wǎng)站,網(wǎng)絡(luò)設(shè)備將會(huì)攔截首個(gè)請(qǐng)求,這些設(shè)備往往也有自己的網(wǎng)站圖標(biāo)“favicon.ico”。登錄后你會(huì)發(fā)現(xiàn),有一段時(shí)間內(nèi)你訪問的網(wǎng)站圖標(biāo)一直是Wifi登錄網(wǎng)站的圖標(biāo)。
如果客戶端使用HTTP請(qǐng)求來查找文檔,網(wǎng)絡(luò)將會(huì)響應(yīng)一個(gè)登錄頁,這樣你的客戶端就會(huì)解析錯(cuò)誤并導(dǎo)致客戶端運(yùn)行異常,在現(xiàn)實(shí)中這種問題非常常見。而 511 狀態(tài)碼的提出就是為了解決這個(gè)問題。因此,如果你正在編寫 HTTP 的客戶端,你最好還是檢查 511 狀態(tài)碼以確認(rèn)是否需要認(rèn)證后才能訪問。