重新學習web後端開發-004-瞭解http響應
一個人必須知道該說什麼,一個人必須知道什麼時候說,一個人必須知道對誰說,一個人必須知道怎麼說。——現代管理之父德魯克
1. http 響應
"/hello"介面的響應內容如下:
HTTP/1.1 200 OK Content-Type: text/plain; charset=utf-8 Date: Tue, 15 Jan 2019 02:56:59 GMT Content-Length: 12 hello, world
其中,第1行是狀態行,第2-4行都是響應頭,第5行是一個空行,第6行是響應的訊息體。
一個http響應包括三個部分:
- 狀態行
- 響應頭
- 訊息體(body)[可選]
1.1狀態行
HTTP/1.1 200 OK
包括三個部分:
- http版本,這裡是1.1
- 狀態碼,這裡是200,代表成功
- 狀態碼簡短描述,這裡是ok
上面的狀態行行,簡單理解就是:採用http 1.1協議,向GET /hello請求進行響應,響應狀態為成功。
這裡,我們要重點了解下狀態碼 。
1.1.1 狀態碼
客戶端處理響應的結果優先根據狀態碼,其次根據響應頭部來進行的。狀態嗎主要分成5個部分:
- 1xx (Informational response),以1開頭的狀態碼,表明服務端已收到請求,告訴客戶端等待請求的結果。
- 2xx (Success),以2開頭的狀態碼,表明服務端已收到並接收了請求。例如常見的200,代表請求被成功處理。
- 3xx (Redirection),以3開頭的狀態碼,表明服務端需要進行額外的處理來完成該請求。很多3xx的狀態碼被用在url重定向中。
- 4xx (Client errors),以4開頭的狀態碼,表明客戶端引起的錯誤。例如常見的404,表示客戶端訪問了一個不存在的資源。
- 5xx (Server errors),以5開頭的狀態碼,表明服務端處理請求時發生了錯誤。例如常見的500錯誤,表示服務端處理請求時發生了內部錯誤。
狀態碼包括標準定義的官方狀態碼,還有非官方的狀態碼。非官方的狀態碼主要是由第三方軟體系統自己定義的。比如Nginx伺服器定義的494,表示客戶端請求頭資料太多。
1.1.1.1 常見的2xx標準狀態碼
狀態碼 | 描述 | 備註 |
---|---|---|
200 | ok | 最常見的狀態碼,表示服務端處理請求成功 |
201 | Created | 請求處理成功,同時新建了一個新的資源 |
204 | No Content | 請求處理成功,但是不返回任何主體資料(body) |
205 | Reset Content | 與204類似,但是要求客戶端重置表單資料 |
1.1.1.2 常見的3xx標準狀態碼
狀態碼 | 描述 | 備註 |
---|---|---|
301 | Moved Permanently | 請求永久重定向到給定的url |
304 | Not Modified |
根據請求頭If-Modified-Since或If-None-Match判斷, 資源未發生改變,客戶端可以使用之前請求的資源副本。 |
1.1.1.3 常見的4xx標準狀態碼
狀態碼 | 描述 | 備註 |
---|---|---|
400 | Bad Request | 客戶端請求錯誤,例如:請求引數不對,資料太大,引數格式錯誤等 |
401 | Unauthorized | 類似403,未通過驗證,或者是未提供必須的使用者資訊,比如使用者名稱和密碼等 |
403 | Forbidden | 服務端拒絕請求,比如使用者沒有方法該資源的許可權 |
404 | Not Found | 訪問的資源不存在 |
405 | Method Not Allowed |
請求方法不支援。比如,客戶端對某個url發起了一個GET請求, 而服務端對於該url必須使用POST請求。 |
429 | Too Many Requests | 請求數量超過了服務端的限制 |
1.1.1.4 常見的5xx標準狀態碼
狀態碼 | 描述 | 備註 |
---|---|---|
500 | Internal Server Error | 服務端內部錯誤 |
502 | Bad Gateway | 服務端器作為閘道器時或代理時,從上游收到了不正確的響應 |
503 | Service Unavailable | 服務暫時不可用。這是一個臨時狀態。 |
504 | Gateway Timeout | 服務端器作為閘道器時或代理時,從一定的時間內未收到上游的響應 |
1.2 響應頭
響應頭位於狀態行之後,與請求頭一樣,使用key-value的格式,並以CRLF結尾。也就是說每行都是一個鍵值對。響應頭可以包括多個鍵值對。最後使用一個空行,來表明整個響應頭的結束。
標準響應頭欄位有76個,非標準的有十多個。作為後端開發人員,需要了解一些常見的響應頭。我們首先介紹下'hello,world'中的響應頭,後續出現其它的響應頭欄位時再一一說明。
1.2.1 hello, world 響應頭
Content-Type: text/plain; charset=utf-8 Date: Tue, 15 Jan 2019 02:56:59 GMT Content-Length: 12
欄位 | 描述 | 例子 | 備註 |
---|---|---|---|
Content-Type | 媒體型別(MIME type) |
Content-Type: text/plain; charset=utf-8 表示響應的訊息體內容格式是純文字,採用utf-8編碼 |
|
Date | 響應時間 | Date: Tue, 15 Jan 2019 02:56:59 GMT | |
Content-Length | 訊息體(body)內容的長度,以位元組為單位 |
Content-Length: 12 比如:hello, world正是12個位元組長度 |
1.3 訊息體-body部分
hello, world
該訊息體返回了文字"hello, world",其長度為12個位元組。
在正式的專案中,就是返回該介面對應的資料。通常這些資料都是來自於資料庫或其它儲存中,根據業務需求,處理後返回給客戶端。實際上,作為web後端開發人員,熟悉瞭解業務需求,可以有助於提高專案質量和降低專案週期風險。在作者帶團隊時,寧願多花點時間和成員溝通業務需求和相關流程,在此基礎上,後續的開發會變得順暢多了。
2. 小結
本節主要介紹了http響應的主要內容,介紹了響應格式,常見的狀態碼等。下節將介紹前後端分離的開發模式和實踐中經常會出現的問題,以及如何處理這些問題的經驗和方法。
本文為作者原創作品,屬於《重新學習web後端開發 》專輯中的一篇,轉載時請備註作者資訊及來源。本文原文地址:https://www.donnyzhang.com/20...