從新學習web後端開發-004-瞭解http響應

004-01.jpg

一我的必須知道該說什麼,一我的必須知道何時說,一我的必須知道對誰說,一我的必須知道怎麼說。——現代管理之父德魯克html

1. http 響應

"/hello"接口的響應內容以下:web

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響應包括三個部分:後端

  1. 狀態行
  2. 響應頭
  3. 消息體(body)[可選]

1.1 狀態行

HTTP/1.1 200 OK
複製代碼

包括三個部分:服務器

  1. http版本,這裏是1.1
  2. 狀態碼,這裏是200,表明成功
  3. 狀態碼簡短描述,這裏是ok

上面的狀態行行,簡單理解就是:採用http 1.1協議,向GET /hello請求進行響應,響應狀態爲成功。前後端分離

這裏,咱們要重點了解下狀態碼編碼

1.1.1 狀態碼

客戶端處理響應的結果優先根據狀態碼,其次根據響應頭部來進行的。狀態嗎主要分紅5個部分:url

  • 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,表示客戶端請求頭數據太多。spa

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響應的主要內容,介紹了響應格式,常見的狀態碼等。下節將介紹先後端分離的開發模式和實踐中常常會出現的問題,以及如何處理這些問題的經驗和方法。

相關文章
相關標籤/搜索