一我的必須知道該說什麼,一我的必須知道何時說,一我的必須知道對誰說,一我的必須知道怎麼說。——現代管理之父德魯克html
"/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響應包括三個部分:後端
HTTP/1.1 200 OK
複製代碼
包括三個部分:服務器
上面的狀態行行,簡單理解就是:採用http 1.1協議,向GET /hello請求進行響應,響應狀態爲成功。前後端分離
這裏,咱們要重點了解下狀態碼。編碼
客戶端處理響應的結果優先根據狀態碼,其次根據響應頭部來進行的。狀態嗎主要分紅5個部分:url
狀態碼包括標準定義的官方狀態碼,還有非官方的狀態碼。非官方的狀態碼主要是由第三方軟件系統本身定義的。好比Nginx服務器定義的494,表示客戶端請求頭數據太多。spa
狀態碼 | 描述 | 備註 |
---|---|---|
200 | ok | 最多見的狀態碼,表示服務端處理請求成功 |
201 | Created | 請求處理成功,同時新建了一個新的資源 |
204 | No Content | 請求處理成功,可是不返回任何主體數據(body) |
205 | Reset Content | 與204相似,可是要求客戶端重置表單數據 |
狀態碼 | 描述 | 備註 |
---|---|---|
301 | Moved Permanently | 請求永久重定向到給定的url |
304 | Not Modified | 根據請求頭If-Modified-Since或If-None-Match判斷, 資源未發生改變,客戶端可使用以前請求的資源副本。 |
狀態碼 | 描述 | 備註 |
---|---|---|
400 | Bad Request | 客戶端請求錯誤,例如:請求參數不對,數據太大,參數格式錯誤等 |
401 | Unauthorized | 相似403,未經過驗證,或者是未提供必須的用戶信息,好比用戶名和密碼等 |
403 | Forbidden | 服務端拒絕請求,好比用戶沒有方法該資源的權限 |
404 | Not Found | 訪問的資源不存在 |
405 | Method Not Allowed | 請求方法不支持。好比,客戶端對某個url發起了一個GET請求, 而服務端對於該url必須使用POST請求。 |
429 | Too Many Requests | 請求數量超過了服務端的限制 |
狀態碼 | 描述 | 備註 |
---|---|---|
500 | Internal Server Error | 服務端內部錯誤 |
502 | Bad Gateway | 服務端器做爲網關時或代理時,從上游收到了不正確的響應 |
503 | Service Unavailable | 服務暫時不可用。這是一個臨時狀態。 |
504 | Gateway Timeout | 服務端器做爲網關時或代理時,從必定的時間內未收到上游的響應 |
響應頭位於狀態行以後,與請求頭同樣,使用key-value的格式,並以CRLF結尾。也就是說每行都是一個鍵值對。響應頭能夠包括多個鍵值對。最後使用一個空行,來代表整個響應頭的結束。代理
標準響應頭字段有76個,非標準的有十多個。做爲後端開發人員,須要瞭解一些常見的響應頭。咱們首先介紹下'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個字節長度 |
hello, world
複製代碼
該消息體返回了文本"hello, world",其長度爲12個字節。
在正式的項目中,就是返回該接口對應的數據。一般這些數據都是來自於數據庫或其它存儲中,根據業務需求,處理後返回給客戶端。實際上,做爲web後端開發人員,熟悉瞭解業務需求,能夠有助於提升項目質量和下降項目週期風險。在做者帶團隊時,寧願多花點時間和成員溝通業務需求和相關流程,在此基礎上,後續的開發會變得順暢多了。
本節主要介紹了http響應的主要內容,介紹了響應格式,常見的狀態碼等。下節將介紹先後端分離的開發模式和實踐中常常會出現的問題,以及如何處理這些問題的經驗和方法。