當客戶端把請求發送給服務器後,對方會根據處理結果返回一系列HTTP數據包。其中第一行就用給定格式表明服務器對請求處理的結果。第一行包括三部分信息,第一部分是一個數值,也叫狀態碼,用來表明請求是否成功,第二部分是對狀態碼的字符串解讀,用於說明狀態碼錶示的含義,第三部分就是協議的版本。
第一部分的數值其實是用於機器解讀,因爲機器適用於解讀數值。第二部分字符串其實是爲了方便與人來解讀。狀態碼跟我們前面描述的FTP協議一樣擁有給定形式,它由三位數字組成,其中第一位數字的作用最爲重要,它用於表達狀態的分類,第二和第三位數字能夠組合成100種情況,是對第一位數字所表明的給定分類下的進一步解讀,通常狀態碼以”xyy"的形式給出,我們先看x表示的含義:
狀態碼格式 | 含義 | 說明 |
---|---|---|
1yy | 說明類消息 | 用於說明某些信息,並不表明請求是否成功 |
2yy | 請求成功 | 客戶端發來的請求被服務器正常處理並返回相應結果 |
3yy | 重定向 | 請求沒有成功,需要客戶端採取指定措施來確保請求能得到執行 |
4yy | 客戶端錯誤 | 請求無效,存有語法錯誤或者服務器因爲某些原因無法完成請求,並且服務器認爲原因來自於客戶端 |
5yy | 服務器錯誤 | 客戶請求合法,但是由於服務器原因無法完成請求 |
從上表看出,第一個數字將信息分成了5大類,接下來的yy用於對某一類情況進行具體描述,例如常見的404,第一個數字4表示客戶端請求出錯,接下來的“04”表示服務器沒有客戶端請求的數據。“00”表示通用信息,它不給出具體的說明,通常情況下表明當前情況不屬於任何特定情況,例如“400”只是表示客戶端出錯,但服務器無法詳細說明客戶端出了什麼具體問題。
接下來是狀態碼的字符串說明,這是爲了能夠給人類提供容易讀懂的信息。這部分信息能被服務器的管理員進行調整,它只是簡短的描述相應信息,更多詳細說明可能包含在數據包裏面。我們看看常用的狀態碼及其字符串描述
狀態碼格式 | 字符串 | 說明 |
---|---|---|
100 | Continue | 客戶端可以繼續向服務器發送請求,因爲後面是00,因此它是通用信息 |
101 | Switching Protocols | 客戶端必須Upgrade包頭要求服務器使用新版本協議並且服務器同意了請求 |
200 | OK | 客戶端請求被服務器接受 |
201 | Created | 請求成功同時被請求的資源正在生成,通常情況下該狀態碼用於回覆PUT請求 |
202 | Accepted | 請求被服務器接受但還未被處理 |
203 | No-Authoritative Information | 請求成功,但是返回的某些信息並非來自當前服務器而是其他第三方 |
204 | No Content | 請求成功,但服務器認爲無需返回任何信息給客戶端 |
205 | Reset Content | 請求成功,服務器要求客戶端重置被返回的文本以便防止繼續發送類似請求,該回復通常用於表格提交 |
206 | Partial Content | 請求成功,並部分完成了GET請求,具體內容在後續章節詳解 |
300 | Multiple Choices | 服務器返回多條解釋信息,客戶端從返回的多條信息中選擇最適合自己的一條 |
更多的信息在我們後續實現協議時再進行解讀。這裏我們再看看返回碼100。通常情況下客戶端發送給服務器一個完整請求然後等待服務器的處理結果,但是某些情況下客戶端會先試探服務器是否願意接收客戶端要發送的請求,如果服務器願意,客戶端再發送請求。在特殊情況下,客戶端可能會向服務器發送含有大量數據的請求。
這種情況下客戶端就得實現看看服務器是否願意接收請求,它會發生一個特殊請求包頭:“Expect : 100-continue”,如果服務器支持這種包頭,它就會處理該請求包頭,然後會返回"100 Continue"作爲初始迴應,這等於告訴客戶端繼續發送餘下的請求,然後客戶端服務器進入正常的請求迴應流程,具體情況在代碼實踐時再進行詳細研究。
更詳細的講解和代碼調試演示過程,請點擊鏈接](https://study.163.com/provider/7600199/course.htm?share=2&shareId=7600199)
更多技術信息,包括操作系統,編譯器,面試算法,機器學習,人工智能,請關照我的公衆號: