||
今天我們講講HTTP相關返回值異常如何解決(實例持續更新中)
HTTP(超文本傳輸協議,Hypertext Transfer Protocol)是用于在網絡上進行數據交換的應用層協議。它是萬維網(WWW)的基礎,允許客戶端(通常是網頁瀏覽器)與服務器之間進行通信。以下是對 HTTP 的一些基本介紹:
請求行: 包含請求方法(如 GET、POST)、請求的 URL 和 HTTP 版本。
請求頭: 提供有關客戶端環境的信息(如 User-Agent、Accept 等)。
請求體: 僅在某些請求方法(如 POST)中使用,包含要發送的數據。
響應:
狀態行: 包含 HTTP 版本、狀態碼(如 200、404、500)和狀態描述。
響應頭: 提供有關響應的信息(如 Content-Type、Content-Length 等)。
響應體: 包含實際傳輸的數據(如 HTML 文檔、圖像等)。
HTTP客戶端錯誤狀態碼情況
案例分析以及如何解決
這些狀態碼表示請求已被接收,繼續處理請求。
100 Continue: 客戶端應繼續發送請求的剩余部分。HTTP 狀態碼 100 Continue 是一個信息性狀態碼,表示客戶端應繼續發送請求的剩余部分。它通常是在客戶端發送一個包含 Expect: 100-continue 頭的請求時,服務器響應的。
使用場景:大文件上傳: 當客戶端要上傳一個大文件時,它可以先發送一個請求頭,詢問服務器是否準備好接收文件。這時,服務器可以返回 100 Continue,表示可以繼續上傳文件。
節省帶寬: 如果服務器無法處理請求,返回 100 Continue 可以避免客戶端發送大量數據,從而節省帶寬和資源。
具體工作流程:客戶端發送請求: 客戶端發送一個帶有 Expect: 100-continue 的請求頭。 服務器響應: 如果服務器準備好接收請求,返回 100 Continue,指示客戶端繼續發送請求體。 如果服務器無法處理請求(例如,身份驗證失敗或請求格式不正確),則服務器可以直接返回相應的錯誤狀態碼(如 401 或 403),而不是 100 Continue。
101 Switching Protocols: 服務器已理解客戶端的請求,并將其協議更改為客戶端所請求的協議。HTTP 狀態碼 101 Switching Protocols 是一個信息性狀態碼,表示服務器已經理解了客戶端的請求,并將協議更改為客戶端所請求的協議。這通常用于在 HTTP 協議和其他協議之間進行切換,例如從 HTTP 協議切換到 WebSocket 協議。
使用場景WebSocket 連接: 在建立 WebSocket 連接時,客戶端首先發送一個 HTTP 請求,要求服務器將協議切換到 WebSocket。若服務器支持這一請求并同意切換,它會返回 101 狀態碼。
協議升級: 其他情況下,當客戶端請求服務器使用不同的協議進行通信時(如從 HTTP/1.1 切換到 HTTP/2),也會用到此狀態碼。
具體工作流程客戶端發送請求: 客戶端發送一個帶有 Upgrade 頭的請求,表明希望切換協議。
請求示例:
服務器響應示例:
這些狀態碼表示請求已成功處理。
200 OK: 請求成功,通常返回請求的資源。狀態碼200的含義:HTTP 狀態碼 200 OK 是最常見的成功響應狀態碼,表示請求已成功處理。它通常用于標準的 GET 或 POST 請求,表明服務器已成功接收到請求并返回了所請求的資源。
使用場景
201 Created: 請求成功并創建了新的資源。
狀態碼201的含義:HTTP 狀態碼 201 Created 表示請求已成功處理,并且由于該請求,服務器創建了一個新的資源。這個狀態碼通常用于 POST 請求,特別是在客戶端向服務器提交數據以創建新資源時。
使用場景資源創建: 當客戶端通過 POST 請求向服務器發送數據(例如,提交表單數據)并成功創建一個新資源時,服務器會返回 201 Created。
API 設計: 在 RESTful API 中,201 狀態碼常用于表示新資源的創建成功,并且通常在響應中包含指向該新資源的 URI。
示例創建新資源的 POST 請求示例:
{"name": "John Doe", "email": "john@example.com"} 服務器響應示例:
{"id": 123, "name": "John Doe", "email": "john@example.com"}
關鍵要點HTTP 狀態碼 202 Accepted 表示請求已被接受進行處理,但尚未完成。這意味著請求的處理是異步的,服務器已經接收到請求并將其放入處理隊列中,但尚未提供最終結果。
使用場景異步處理: 202 狀態碼通常用于那些需要較長時間才能完成的操作,例如上傳大文件、復雜的數據處理或與外部服務的交互。
任務排隊: 在某些情況下,服務器會返回 202 狀態碼以指示請求已被接受,但實際的處理將在后續時間內完成。
示例異步請求的 POST 請求示例:
{"data": "large dataset or task details"} 服務器響應示例:
{"message": "Your request is being processed"}
關鍵要點請求已接受: 202 狀態碼表明請求已經被接受,而不是直接表示成功完成。 結果不可用: 由于處理是異步的,客戶端通常需要通過其他機制(如輪詢或回調)來獲取處理結果。
203 Non-Authoritative Information: 服務器成功處理了請求,但返回的信息可能來自另一來源。狀態碼203的含義:HTTP 狀態碼 203 Non-Authoritative Information 表示請求已成功處理,但返回的信息可能不是來自原始服務器,而是來自一個代理服務器或其他中間實體。這意味著響應的內容可能經過了修改或附加了額外的信息。
使用場景代理服務器: 當客戶端通過代理服務器發送請求時,代理可能會返回 203 狀態碼以指示響應的內容不是來自原始服務器。
內容修改: 如果代理對響應進行了某種形式的修改,比如添加了額外的頭信息,服務器可能會返回 203 狀態碼,告知客戶端這部分信息可能不具有權威性。
示例通過代理服務器的請求示例:
代理服務器的響應示例:
{"data": "This data is modified or supplemented by the proxy"}
關鍵要點非權威性信息: 203 狀態碼用于表示返回的信息可能不是最原始或權威的,客戶端應謹慎對待這些信息。
不常用: 在實際應用中,203 狀態碼的使用相對較少,大多數情況下,客戶端和服務器之間的直接通信更為常見。
204 No Content: 請求成功,但沒有返回內容。狀態碼204的含義:HTTP 狀態碼 204 No Content 表示請求已成功處理,但沒有內容返回。這通常用于處理成功的請求,但沒有需要返回給客戶端的實體內容。
使用場景成功處理的請求: 當客戶端發送請求(例如,DELETE 請求)并且服務器成功處理了該請求,但不需要返回任何內容時,可以使用 204 狀態碼。
更新操作: 在某些情況下,客戶端可能發送更新請求(如 PUT),服務器成功處理后,可以返回 204 狀態碼而不返回任何數據。
保持連接: 204 狀態碼可以用于保持與客戶端的連接,而不傳送實際的數據內容。
示例成功刪除資源的 DELETE 請求示例:
服務器響應示例:
關鍵要點
無內容返回: 204 狀態碼明確表示沒有返回的內容,客戶端不應期望任何響應體。
保持連接: 由于沒有內容,204 響應通常具有較小的負擔和較快的處理速度,有助于提高性能。
205 Reset Content: 請求成功,要求客戶端重置文檔視圖。狀態碼205的含義:HTTP 狀態碼 205 Reset Content 表示請求已成功處理,但客戶端需要重置視圖或輸入字段。這通常用于表單提交后,服務器希望客戶端清除或重置其當前的內容。
使用場景表單處理: 當客戶端提交表單后,服務器可能會返回 205 狀態碼,指示客戶端重置表單輸入內容,以便用戶可以進行新的輸入。
UI 狀態重置: 在某些應用程序中,服務器可能希望客戶端清除當前的視圖狀態或數據,以確保用戶體驗的一致性。
示例表單提交的 POST 請求示例:
name=John&email=john@example.com 服務器響應示例:
重置內容: 205 狀態碼明確表示客戶端應該重置其當前的內容或視圖狀態,通常與表單操作相關。
不返回內容: 和 204 狀態碼類似,205 響應通常不包含實體內容。
206 Partial Content: 服務器成功處理了部分 GET 請求,返回的是部分資源。狀態碼206的含義:HTTP 狀態碼 206 Partial Content 表示服務器成功處理了部分 GET 請求。這通常用于當客戶端請求資源的某一部分時,服務器能夠滿足該請求并返回所請求的部分內容。
使用場景范圍請求: 客戶端可能會使用 Range 請求頭來請求資源的特定部分(例如,視頻流、音頻流或大型文件的下載)。服務器根據請求的范圍返回相應的部分內容。
大文件下載: 當用戶下載大文件時,支持恢復下載的客戶端可以請求文件的特定字節范圍,以便在網絡中斷時能夠繼續下載。
示例范圍請求的 GET 請求示例: