1xx 和 2xx 系列狀態碼

2021-08-29 21:28:46 字數 3029 閱讀 7834

1xx 系列

1xx 系列一般是用在伺服器與**之間,表示一些資訊,這在我們寫服務端程式時並不常用,並且 1xx 系列狀態碼是在 http 1.1 中才加入的,按照 w3c 的說法,除非在實驗性的環境下,不要傳送 1xx 系列狀態碼到使用 http 1.0 協議的客戶端。

如果需要了解兩個 1xx 系列的狀態 100 continue 和 101 switching protocols 的作用,可以在 rfc2616 第10節external link中找到相關資料。

2xx 系列

2xx 系列表示成功的響應,最為人所知的就是 200 ok 了,它表示一下正確響應了客戶端所傳送過來的請求,那麼在客戶端,也就需要以「正確」的態度來對待服務端過來的響應內容。

4.1 200 ok

呃,200 ok 是最最常見的狀態碼了,每次我們在瀏覽器輸入乙個**按下回車後,就會收到一堆 200 ok,就是一堆 200 ok,呈現給我們了乙個豐富多彩的頁面。

因此,通常情況下,在編寫服務端程式時,也應該返回乙個 200 ok 的狀態碼。但是也因為 200 ok 是如此的普通,如此的常用,可能在一些特殊的情況下,開發人員沒有注意到 200 ok 並不是乙個可取的狀態碼,而這個特殊的情況,最明顯的乙個就是採用了 自定義錯誤頁 或 url rewrite 的時候。

在使用了自定義錯誤頁或者 url rewrite 時,如果碰到了乙個並不存在的資源,伺服器會將請求重定向到指定的頁面,而這時伺服器會認為請求得到了正確的響應,響應狀態碼會被設定為 200 ok,如果在程式中不另加設定,客戶端就會請求乙個不存在的資源時得到了 200 ok 這個本該只在得到正確響應時才能得到的狀態碼。這對於一般使用者來說,可能沒有多大的影響,但對於搜尋引擎卻是不友好的,搜尋引擎會不斷的索引這些並不存在的資源。

所以,如果使用了自定義錯誤頁或 url rewrite,那麼需要在程式中根據實際情況來設定狀態碼是 200 ok 還是 404 not found。

4.2 201 created

201 created 通常用來表示請求的資源不存在,但是已經被建立了。一般可以用於一些發布協議,如 atom publishing protocolexternal link 等,你在使用 atom 協議去發布一篇 blog 時,服務端可能會返回乙個 201 created 的狀態碼,表示你傳送的請求已經被接受了,並且你的文章也已經成功建立了。

如果服務端要返回乙個 201 created 狀態碼,那麼同時也應該在響應體頭部的 location 欄位中指出新建立資源的位置,例如如果是發布一篇 blog,那麼服務端在返回 201 狀態碼的時候,同時在 location 欄位中指出這篇新的 blog 的 uri 是什麼,這樣客戶端可以根據這個 uri 立即去訪問這篇 blog。

4.3 202 accepted

在 201 created 中提到,使用發布協議時,服務端可以返回乙個 201 的狀態碼,提示客戶所傳送的請求已經被正確響應,並且資源也已經被正確建立了。但是在某些時候,客戶所請求的資源並不是可以立即建立,可能需要被審核,可能在乙個佇列當中等等,在這時,服務端並不能直接返回乙個 201 created 狀態碼,因為返回這個狀態碼時,客戶端認為它所傳送的請求已經被正確處理了,但事實中,這個請求仍舊在處理過程之中。

這個時候,202 accepted 狀態碼就是乙個更好的選擇。 202 accepted 可以理解為:你的請求我收到了,但是還沒有處理完成,請稍候。更實際一點,你可以理解為你去某個 google group 申請了成員資格,google group 系統接受了你的申請,但是這個 group 是需要管理員審核的,於是,你得到了乙個 202 accepted 的狀態,表示你的請求已經被收到了,但是還沒有處理完成,你需要等待。

202 accepted 要求客戶端等待服務端的處理完成,但是 http 協議是無狀態的,因此服務端並不會也不能主動去通知客戶商,說「哎,你的請求已經處理好了,位址是 ***」。那麼,跟蹤請求狀態這個任務就需要客戶端去做。但是客戶端要跟蹤,也得有個物件,那個這個物件就是服務端該提供給客戶端的了。

服務端在返回 202 accepted 狀態碼的同時,應該給出當前請求的狀態,或者給出乙個狀態監視器的位址。

服務端直接在響應 202 accepted 狀態碼的同時給出請求處理的狀態就相當於我們打**去訂餐,第一次打**給餐廳,餐廳響應乙個 202 accepted:「啊,我們收到你的訂單了,一會兒就給您送去。」,那麼等了一會,怎麼還沒來,再打**過去,餐廳接著響應乙個 202,並告訴我們:「您的訂單已經在路上了,過會就能收到了,請稍等。」,於是,我們可以通過不斷地傳送請求來知道我們的訂單到底怎麼樣了。

而另外一種方式,服務端返回乙個狀態監視器的位址則相當在我們在申請某個 google group 成員資格時,提交申請之後,我們要做的就是看看郵箱,看看有沒有來自 google group 的審核郵件。

當然,客戶端與服務端對 202 accepted 所返回的響應體應該有乙個共同的規範,這樣才能通過這個響應來了解請求的處理程序。

4.4 203 non-authoritative information

203 表示非權威應答,說明這個響應頭可能並不是原始伺服器的響應頭,在中間傳輸過程中附加了一些其他的資訊,諸如通過了一些**,加了一些額外的頭部資訊等等。

4.5 204 no content

服務端返回 204 no content 這個狀態碼時,表示客戶端傳送的已經正確響應了,但是並不會返回響應實體,只會更新頭部資訊。客戶端在收到 204 no content 時,當前顯示的內容不會變化,顯示的內容還是之前的文件,只是位址列裡的位址已經變成新的**。

4.6 205 reset content

4.7 206 partial content

按照 rfc2616 說明,在返回 206 partial content 狀態碼時,服務端需要在頭部中指定一些必需的字段,如 date、 content-length 等,這些頭部欄位的使用都有一定的條件及限制,如 content-length 必須與響應體的實際大小一致,如果在響應 200 ok 時服務端傳送了 etag 或者 content-location 的頭部字段,在響應 206 partial content 時也必須傳送同樣的頭部字段,具體可以參考 rfc2616 section 10.2.7external link。

[url]

2xx狀態碼詳解

2xx狀態碼詳解 2xx 成功 以下狀態都是基於2xx狀態 200 成功 伺服器已成功處理了請求。如果是對您的 robots.txt 檔案顯示此狀態碼,則表示 googlebot 已成功檢索到該檔案。201 建立 表示伺服器執行成功,並且建立了新的資源 202 已接受 伺服器接受請求,但未處理 20...

XX2Vec演算法彙總

xx2vec embed insup unsup algorithms used char2vec character sentence unsupervised cnn lstm word2vec word sentence unsupervised annglove word sentence ...

安裝vnpy2 x x版本

在pycharm中指定python編譯器為vnstudio中的python 建立自己的虛擬環境,其中python為anaconda3中的python建立自己的虛擬環境 python m venv virtual name 啟用虛擬環境 source vir name bin activate 進入v...