文章目錄
- 前言
- 一、認識響應狀態碼
- 1. 什么是HTTP響應狀態碼
- 2. Http響應狀態碼的作用
- 3. 優化和調試HTTP請求的建議
- 二、1xx 信息響應
- 1. 認識http信息響應
- 2. 常見的信息響應狀態碼
- 三、2xx 成功響應
- 1. 認識HTTP成功響應
- 2. 常見的成功響應狀態碼
- 四、3xx 重定向
- 1. 認識http重定向
- 2. 常見的重定向狀態碼
- 五、4xx 客戶端響應
- 1. 認識http客戶端響應
- 2. 常見的客戶端響應狀態碼
- 六、5xx 服務端響應
- 1. 認識HTTP服務端響應
- 2. 常見的服務端響應狀態碼
- 總結
前言
為了鞏固所學的知識,作者嘗試著開始發布一些學習筆記類的博客,方便日后回顧。當然,如果能幫到一些萌新進行新技術的學習那也是極好的。作者菜菜一枚,文章中如果有記錄錯誤,歡迎讀者朋友們批評指正。
(博客的參考源碼可以在我主頁的資源里找到,如果在學習的過程中有什么疑問歡迎大家在評論區向我提出)
一、認識響應狀態碼
1. 什么是HTTP響應狀態碼
HTTP狀態碼是由服務器在響應客戶端請求時返回的三位數字代碼。它們用于表示HTTP請求的處理狀態和結果。每個狀態碼都具有特定的含義,用于向客戶端傳達有關請求處理情況的信息。
2. Http響應狀態碼的作用
-
提供請求處理結果信息:HTTP狀態碼告知客戶端請求的處理情況,包括成功、重定向、客戶端錯誤和服務器錯誤等。通過狀態碼,客戶端可以了解請求是否成功處理,以及如何進一步處理響應數據。
-
識別請求錯誤原因:狀態碼可以幫助客戶端定位請求出錯的原因。例如,當客戶端發送了無效的請求或請求的資源不存在時,服務器會返回相應的錯誤狀態碼,使客戶端能夠了解到具體的錯誤原因,從而采取適當的措施。
-
支持協議擴展和升級:HTTP狀態碼的范圍留有一定的空間,以支持未來的協議擴展和升級。通過定義新的狀態碼,可以為新的協議功能或處理情況提供準確的表示。
-
用于調試和故障排除:狀態碼在調試和故障排除過程中起到重要的作用。通過查看狀態碼,開發人員可以追蹤請求處理的過程并確定出現問題的具體環節,以便進行修復和改進。
-
幫助構建良好的用戶體驗:正確使用狀態碼有助于提供良好的用戶體驗。例如,合理使用重定向狀態碼可以引導用戶到正確的頁面,而準確的錯誤狀態碼可以向用戶提供友好的錯誤提示,提高用戶滿意度。
3. 優化和調試HTTP請求的建議
-
使用適當的HTTP方法:選擇正確的HTTP方法來匹配請求的目的。常見的方法包括GET、POST、PUT、DELETE等。確保使用最適合的方法來執行特定的操作,以提高效率和安全性。
-
減少請求次數:減少不必要的請求次數可以顯著提高性能。考慮使用請求合并、緩存、批量操作等技術來減少請求的數量,盡量減少服務器和網絡的負載。
-
最小化請求大小:減少請求的大小可以降低網絡傳輸成本和請求處理時間。優化請求的體積,例如通過壓縮、減少冗余數據、合并請求等方式來減小請求的大小。
-
使用HTTP緩存:利用HTTP緩存可以減少對服務器的請求。合理設置緩存頭,包括Cache-Control、Expires等,以及驗證緩存是否仍然有效的機制,如ETag和Last-Modified。
-
壓縮響應數據:使用壓縮算法(如Gzip)對響應數據進行壓縮,以減小響應的大小。客戶端可以通過設置Accept-Encoding頭來指示對壓縮響應的支持,服務器則可以通過設置Content-Encoding頭來指示響應數據的壓縮方式。
-
使用合適的數據格式:選擇適合數據交換的格式,如JSON、XML等。根據需求和場景選擇合適的數據格式,以提高數據傳輸的效率和易用性。
-
監控和日志記錄:使用適當的工具和技術來監控和記錄HTTP請求和響應的信息。通過記錄日志和分析監控數據,可以幫助發現潛在的性能問題和錯誤,以及進行調試和優化。
-
使用合適的工具和庫:使用優秀的HTTP請求庫或框架,如cURL、HttpClient等,可以簡化開發過程并提供更高效的請求處理和調試功能。
-
進行性能測試:對HTTP請求進行性能測試,可以評估系統的性能并找出瓶頸。使用工具如Apache JMeter、LoadRunner等進行負載測試和壓力測試,以確定性能瓶頸并進行優化。
-
仔細分析錯誤信息:對于出現的錯誤,仔細分析錯誤信息和狀態碼,以了解問題的根本原因。結合日志和其他調試工具,追蹤請求的處理過程,找出錯誤所在并采取相應的修復措施。
二、1xx 信息響應
1. 認識http信息響應
HTTP信息響應是指當客戶端向服務器發送HTTP請求后,服務器返回給客戶端的響應消息
2. 常見的信息響應狀態碼
100 Continue | 這個臨時響應表明,迄今為止的所有內容都是可行的,客戶端應該繼續請求,如果已經完成,則忽略它 |
101 Switching Protocol | 該代碼是響應客戶端的 Upgrade 標頭發送的,并且指示服務器也正在切換的協議 |
102 Processing(WebDAV) | 此代碼表示服務器已收到并正在處理該請求,但沒有響應可用 |
103 Early Hints | 此狀態代碼主要用于與 Link 鏈接頭一起使用,以允許用戶代理在服務器仍在準備響應時開始預加載資源 |
三、2xx 成功響應
1. 認識HTTP成功響應
HTTP狀態碼成功響應是指服務器成功處理了客戶端的請求,并返回了符合預期的響應
2. 常見的成功響應狀態碼
200 OK | 請求成功,成功的含義取決于 HTTP 方法:
|
201 Created | 該請求已成功,并因此創建了一個新的資源。這通常是在 POST 請求,或是某些 PUT 請求之后返回的響應 |
202 Accepted | 請求已經接收到,但還未響應,沒有結果。意味著不會有一個異步的響應去表明當前請求的結果,預期另外的進程和服務去處理請求,或者批處理 |
203 Non-Authoritative Information |
|
204 No Content |
|
205 Reset Content |
|
206 Partial Content |
|
207 Multi-Status (WebDAV) | 由 WebDAV(RFC 2518)擴展的狀態碼,代表之后的消息體將是一個 XML 消息,并且可能依照之前子請求數量的不同,包含一系列獨立的響應代碼 |
208 Already Reported(WebDAV) | 在 DAV 里面使用:propstat 響應元素以避免重復枚舉多個綁定的內部成員到同一個集合 |
226 IM Used(HTTP Delta encoding) | 服務器已經完成了對資源的 GET 請求,并且響應是對當前實例應用的一個或多個實例操作結果的表示 |
四、3xx 重定向
1. 認識http重定向
HTTP狀態碼重定向是在服務器接收到客戶端的請求后,返回一個特定的狀態碼,指示客戶端需要采取進一步的操作以完成請求
2. 常見的重定向狀態碼
300 Multiple Choice | 被請求的資源有一系列可供選擇的回饋信息,每個都有自己特定的地址和瀏覽器驅動的商議信息。用戶或瀏覽器能夠自行選擇一個首選的地址進行重定向 |
301 Moved Permanently |
|
302 Found | 請求的資源現在臨時從不同的 URL 響應請求。由于這樣的重定向是臨時的,客戶端應當繼續向原有地址發送以后的請求。只有在 Cache-Control 或 Expires 中進行了指定的情況,這個響應才是可緩存的 |
303 See Other | 對應當前的響應可以在另一個 URL 上被找到,而且客戶端應當采用 GET 的方式訪問那個資源。這個方法的存在主要是為了允許由腳本激活的 POST 請求輸出重定向到一個新的資源 |
304 Not Modified | 如果客戶端發送一個帶條件的 GET 請求且該請求已被允許,而文檔的內容(自上次訪問以來或者根據請求的條件)并沒有改變,則服務器應當返回這個狀態碼。304 響應禁止包含消息體,因此始終以消息頭的第一個空行結尾 |
305 Use Proxy | 被請求的資源必須通過指定的代理才能訪問。Location 域中將給出指定的代理所在的 URL 信息,接受這需要重復發送一個單獨的請求,通過這個代理才能訪問相應資源。只有原始服務器才能建立 305 響應 |
306 unused | 在最新版的規范中,306 狀態碼已經不再被使用 |
307 Temporary Redirect | 請求的資源現在臨時從不同的 URL 響應請求。由于這樣的重定向是臨時的,客戶端應當繼續向原有地址發送以后的請求。只有在 Cache-Control 或 Expires 中進行了指定的情況下,這個響應才是可緩存的 |
308 Permanent Redirect |
|
五、4xx 客戶端響應
1. 認識http客戶端響應
- HTTP客戶端是指發起HTTP請求的客戶端應用程序或設備。當HTTP客戶端發送請求到服務器端時,服務器會返回HTTP響應。HTTP客戶端會負責接收和處理這個HTTP響應
- HTTP客戶端響應是指服務器返回給客戶端的HTTP響應報文
2. 常見的客戶端響應狀態碼
400 Bad Request | **
|
401 Unauthorized |
|
402 Payment Required | 此響應碼保留以便將來使用,創造此響應碼的最初目的是用于數字支付系統 |
403 Forbidden |
|
404 Not Found |
|
405 Method Not Allowed |
|
406 Not Acceptable | 請求的資源的內容特性無法滿足請求頭中的條件,因而無法生成響應實體 |
407 Proxy Authentication Required | 與 401響應相似,只不過客戶端必須在代理服務器上進行身份驗證。代理服務器必須返回一個 Proxy-Authenticate 用以進行身份詢問。客戶端可以返回一個 Proxy-Authorization 信息頭用以驗證 |
408 Request Timeout | 請求超時。客戶端沒有在服務器預備等待的時間內完成一個請求的發送。客戶端可以隨時再次提交這個請求而無需進行任何更改 |
409 Conflict | 由于和被請求的資源的當前狀態之間存在沖突,請求無法完成。這個代碼只允許用在這樣的情況才能被使用:用戶被認為能夠解決沖突,并且會重新提交新的請求。該響應應當包含足夠的信息以便用戶發現沖突的源頭 |
410 Gone |
|
411 Length Required | 服務器拒絕在沒有定義 Content-Length 頭的情況下接受請求。在添加了標明請求消息體長度的有效 Content-Length 頭后,客戶端可以再次提交該請求 |
412 Precondition Failed | <font size=“3” >服務器在驗證在請求的頭字段中給出先決條件時,沒能滿足其中的一個或者多個。這個狀態碼允許客戶端在獲取資源的請求的元信息(請求頭字段數據)中設置先決條件,以此來避免該請求方法被應用到其希望的內容以外的資源上 |
413 Payload Too Large |
|
414 URL Too Long | 請求的 URL 長度超過了服務器能夠解釋的長度,因此服務器拒絕對該請求提供服務。這比較少見,通常情況包括:本應使用 POST 方法的表單提交變成了 GET 方法,導致查詢字符串(Query String)過長 |
415 Unsupported Media Type | 對于當前請求的方法和所請求的資源,請求中提交的實體并不是服務器所支持的格式,因此請求被拒絕 |
416 Range Not Satisfiable | 如果請求中包含了 Range 請求頭,并且 Range 中指定的任何數據范圍都與當前資源的可用范圍不重合,同時請求中又沒有定義 If-Range 請求頭,那么服務器就應當返回 416 狀態碼 |
417 Expectation Failed | 此響應代碼意味著服務器無法滿足 Expect 請求標頭字段指示的期望值 |
418 I’m a teapot | 服務器拒絕嘗試用“茶壺沖泡咖啡”(愚人節玩笑) |
421 Misdirected Request | 該請求針對的是無法產生響應的服務器。這可以由服務器發送,該服務器為配置為針對包含在請求 URL 中的方案和權限的組合產生響應 |
422 Unprocessable Entity(WebDAV) | 請求格式良好,但由于語義錯誤而無法遵循 |
423 Locked(WebDAV) | 正在訪問的資源被鎖定 |
424 Failed Dependency(WebDAV) | 由于先前的請求失敗,所以這次請求失敗 |
425 Too Early | 服務器不愿意冒著風險去處理可能重播的請求 |
426 Upgrade Required | 服務器拒絕使用當前協議執行請求,但可能在客戶機升級到其他協議后愿意這樣做。服務器在 426 響應中發送 Upgrade 頭一直是所需的協議 |
428 Precondition Required | 原始服務器要求該請求是有條件的。旨在防止“丟失更新”問題,即客戶端獲取資源狀態,修改改狀態并將其返回服務器,同時第三方修改服務器上的狀態,從而導致沖突 |
429 Too Many Requests | 用戶在給定時間內發送了太多請求(“限制請求速率”) |
431 Request Header Fields Too Large | 服務器不愿意處理請求,因為他的請求頭字段太大。請求可以在減少請求頭字段的大小后重新提交 |
451 Unavailable For Legal Reasons | 用戶請求非法資源,例如:由政府審查的網頁 |
六、5xx 服務端響應
1. 認識HTTP服務端響應
HTTP服務端響應是指服務器對客戶端的HTTP請求做出的響應。服務器接收到客戶端的請求后,會根據請求的內容和服務器端的處理邏輯生成一個HTTP響應,然后將該響應發送回客戶端
2. 常見的服務端響應狀態碼
500 Internal Server Error | 服務器遇到了不知道如何處理的情況 |
501 Not Implemented | 此請求方法不被服務器支持且無法被處理。只有 GET 和 HEAD 時要求服務器支持的,他們必定不會返回次錯誤代碼 |
502 Bad Gateway | 此錯誤響應表明服務器作為網關需要得到一個處理這個請求的響應,但是得到一個錯誤的響應 |
503 Service Unavailable |
|
504 Gateway Timeout | 當服務器作為網關,不能及時得到響應時返回此錯誤代碼 |
505 HTTP Version Not Supported | 服務器不支持請求中所使用的 HTTP 協議版本 |
506 Variant Also Negotiates | 服務器有一個內部配置錯誤:對請求的透明內容協議導致循環引用 |
507 Insufficient Storage | 服務器有內部配置錯誤:所選的變體資源被配置為參與透明內容協商本身,因此不是協商過程中的適當端點 |
508 Loop Detected(WebDAV) | 服務器在處理請求時檢測到無限循環 |
510 Not Extended | 客戶端需要對請求進一步擴展,服務器才能實現它。服務器會回復客戶端發出擴展請求所需的所有信息 |
511 Network Authentication Required | 511 狀態碼指示客戶端需要進行身份驗證才能獲得網絡訪問權限 |
總結
歡迎各位留言交流以及批評指正,如果文章對您有幫助或者覺得作者寫的還不錯可以點一下關注,點贊,收藏支持一下。
(博客的參考源碼可以在我主頁的資源里找到,如果在學習的過程中有什么疑問歡迎大家在評論區向我提出)