Http請求與Http響應詳解
一、Http請求
Http協議是超文字傳輸協議,用於在網際網路請求資源。
1、請求方法Url/版本
現有Http協議支援7種請求方法GET\POST\HEAD\OPTIONS\PUT\DELETE\TARCE
- GET 請求獲取由Request-URI所標識的資源。
- POST 在Request-URI所標識的資源後附加新的資料。
- HEAD 請求獲取由Request-URI所標識的資源的響應訊息報頭。
- OPTIONS 請求查詢伺服器的效能,或查詢與資源相關的選項和需求。
- PUT 請求伺服器儲存一個資源,並用Request-URI作為其標識。
- DELETE 請求伺服器刪除由Request-URI所標識的資源。
- TRACE 請求伺服器回送收到的請求資訊,主要用語測試或診斷。
- Location:響應報頭域用於重定向接受者到一個新的位置。
- Server: 響應報頭域包含了伺服器用來處理請求的軟體資訊。
- Content-Encoding:實體報頭域被使用作媒體型別的修飾符,它的值指示了已經被應用到實體正文的附加內容編碼,因而要獲得Content- Type報頭域中所引用的媒體型別,必須採用相應的解碼機制。
- Content-Language:實體報頭域描述了資源所用的自然語言。Content-Language允許使用者遵照自身的首選語言來識別和區分實體。
- Content-Length:實體報頭域用於指明正文的長度,以位元組方式儲存的十進位制數字來表示,也就是一個數字字元佔一個位元組,用其對應的ASCII碼儲存傳輸。
- Content-Type:實體報頭域用語指明發送給接收者的實體正文的媒體型別。例如:
- Content-Type: text/html;charset=ISO-8859-1
- Set-Cookie:設定Cookie,記錄狀態用於下次訪問。
- Accept-Language: zh-cn,zh;q=0.5 (瀏覽器支援的語言型別)
- Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7(瀏覽器支援的字元編碼)
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8(瀏覽器支援的MIME型別)
- Accept-Encoding: gzip, deflate(瀏覽器支援的壓縮編碼)
- User-Agent: Mozilla/5.0 (使用的使用者代理)
- Host: 域名
- Connection: Keep-Alive
- Content-type:內容的MIME型別,如果要請求json資料則可以設定application/json
username=jinqiao&password=1234
以下是用chorme做的一個http請求的截圖
由圖可以看出,第一行是請求頭資訊,其中請求方法、請求url、請求協議分別被空格隔開,剩下的為請求頭資訊,包括了編碼,主機、Cookie等資訊。而請求正文資訊,因為這個是Get請求,其請求引數直接接在Url後面。若為Post請求,那麼在頭資訊結束之後還有一個請求正文資訊,用於傳遞請求得引數。
4、Post請求和Get 請求的區別
1、傳遞引數長度
由於Get 請求的請求引數是在Url後面接著的,所以其引數長度收Url長度的限制,而Post 請求的引數可以放在請求正文當中,所以其長度一般來說都不受限制(受限於傳輸最大資料的大小)。
2、資訊的安全性
Get請求的引數編碼在Url上,所以可以直接看Url就能看到請求資訊,所以其對於私密資訊來說不太安全,而Post方法放在請求體當中,所以相對安全一些,當然對於密碼等資訊,傳輸過程中最好還是加密。
3、冪等性
冪等性的定義(Http1.1原文):Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.
從定義上看,HTTP方法的冪等性是指一次和多次請求某一個資源應該具有同樣的副作用。
HTTP GET方法用於獲取資源,不應有副作用,所以是冪等的。
HTTP POST方法用於建立資源,會改變伺服器資源,所以不是冪等的。
二、Http響應
Http響應與Http請求類似,也包括三個部分,分別是狀態行、響應頭、響應體。
1、狀態行(HTTP/1.1 200 OK)
狀態行包括協議版本號、狀態碼、狀態描述。
狀態程式碼:狀態程式碼由3位數字組成,表示請求是否被理解或被滿足。
狀態描述:狀態描述給出了關於狀態程式碼的簡短的文字描述。
狀態程式碼的第一個數字定義了響應的類別,後面兩位沒有具體的分類。
第一個數字有五種可能的取值:
- 1xx: 指示資訊—表示請求已接收,繼續處理。
- 2xx: 成功—表示請求已經被成功接收、理解、接受。
- 3xx: 重定向—要完成請求必須進行更進一步的操作。
- 4xx: 客戶端錯誤—請求有語法錯誤或請求無法實現。
- 5xx: 伺服器端錯誤—伺服器未能實現合法的請求。
狀態程式碼 狀態描述 說明
200 OK 客戶端請求成功
400 Bad Request 由於客戶端請求有語法錯誤,不能被伺服器所理解。
401 Unauthonzed 請求未經授權。這個狀態程式碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden 伺服器收到請求,但是拒絕提供服務。伺服器通常會在響應正文中給出不提供服務的原因
404 Not Found 請求的資源不存在,例如,輸入了錯誤的URL。
500 Internal Server Error 伺服器發生不可預期的錯誤,導致無法完成客戶端的請求。
503 Service Unavailable 伺服器當前不能夠處理客戶端的請求,在一段時間之後,伺服器可能會恢復正常。
2、響應頭
- Location:響應報頭域用於重定向接受者到一個新的位置。
- Server: 響應報頭域包含了伺服器用來處理請求的軟體資訊。
- Content-Encoding:實體報頭域被使用作媒體型別的修飾符,它的值指示了已經被應用到實體正文的附加內容編碼,因而要獲得Content- Type報頭域中所引用的媒體型別,必須採用相應的解碼機制。
- Content-Language:實體報頭域描述了資源所用的自然語言。Content-Language允許使用者遵照自身的首選語言來識別和區分實體。
- Content-Length:實體報頭域用於指明正文的長度,以位元組方式儲存的十進位制數字來表示,也就是一個數字字元佔一個位元組,用其對應的ASCII碼儲存傳輸。
- Content-Type:實體報頭域用語指明發送給接收者的實體正文的媒體型別。例如:
- Content-Type: text/html;charset=ISO-8859-1
- Set-Cookie:設定Cookie,記錄狀態用於下次訪問。
如圖所示:
Http請求有三個部分組成,分別是請求方法/版本、請求頭資訊、請求正文資訊。
請求頭和請求正文之間是一個空行,這個行非常重要,它表示請求頭已經結束,接下來的是請求正文。請求正文中可以包含客戶提交的查詢字串資訊。