通信 / HTTP 详解
一、基本信息
1、英文簡稱
HyperText Transfer Protocol
2、一種網絡協議,在網絡中傳輸的特定格式的字符串。所以該協議并沒有強調下層協議的類型,即承載方,所以不必須為 TCP/IP,只要是可靠的協議就行,因為 HTTP 協議通信僅僅是交互特定格式的字符串,只要保質保量能夠傳輸雙方的字符串即可,故對底層協議無過多要求。
3、一般 HTTP 底層網絡使用 TCPIP,提供 HTTP 服務的服務器提供的端口號為 80 。
4、HTTP 協議是基于請求 / 響應模型的協議。請求和響應必須成對,先有請求后有響應。
5、HTTP 協議可以傳輸任何類型的數據,例如 JSON,XML等,其格式的說明由 Content-Type 加以標記。
6、面向無連接,即:每個連接只能處理一個客戶端的請求,服務器處理完該請求并收到客戶端的應答之后,就斷開了連接。
7、版本
- HTTP / 1.0,發送請求,創建一次連接,獲得一個 web 資源,連接斷開。
- HTTP / 1.1,發送請求,創建一次連接,獲得多個 web 資源,連接斷開。
二、誕生原因
提供一種發布和接收?HTML?頁面的方法,該 HTML 頁面在網絡中就是特定格式的字符串。
三、協議組成
http 請求包括:請求行、請求頭、請求體。
http 響應包括:響應行、響應頭、響應體。
1、請求協議
(1)請求行?
格式:請求方式? ? ? 資源路徑? ? ? 協議 + 版本
注意:請求行必須在http請求格式的第一行。
栗子:POST /chapter17/user.html HTTP/1.1
| 請求方式 | 作用 | 優點 | 缺陷 | 其他 |
| get | 請求從服務器中獲取數據 | ? | 參數位于 URL 中,有安全隱患; URL 長度限制 get 請求方式數據的大小。 | ? |
| post | 向服務器中提交數據, 數據位于請求體中 | ? | ? | ? |
| HEAD | 服務器只返回響應行和響應頭 | 較 get 速度快,節省帶寬 | ? | ? |
| DELETE | 刪除服務器上資源 | ? | ? | ? |
| OPTIONS | 用于獲取當前URL所支持的方法。 若請求成功,會在HTTP頭中包含一個名為“Allow”的頭,值是所支持的方法,如“GET, POST”。 | ? | ? | ? |
| PUT | 把一個資源存放在指定的位置上。 | ? | ? | 與 POST 相似,區別在于 PUT 指定了資源的存放位置,而 post 上傳的數據由服務器決定存放位置。 |
| TRACE | 回顯服務器收到的請求,主要用于測試或診斷。 | ? | ? | ? |
(2)請求頭?
① Accept:告訴服務端,該請求所能支持的響應數據類型,采用 MIME 格式(文件類型的一種描述方式)。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
栗子:
text / html,html 文件
text / css,css 文件
text / javascript,js 文件
image/*,所有圖片文件
② User-Agent:瀏覽器通知服務器,客戶端瀏覽器與操作系統相關信息。
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
③?Connection:表示客戶端與服務連接類型;Keep-Alive 表示持久連接,close 短鏈接。
Connection: keep-alive
④?Content-Length:請求體的長度。
POST http://39.108.107.149:8080/vk/app/rest/ddp/iModelServiceImpl/findModelByType HTTP/1.1 User-Agent: Fiddler Host: 39.108.107.149:8080 Content-Length: 11name=城市⑤?Content-Type:請求的與實體對應的MIME信息。如果是 post 請求,會有這個屬性,默認值為 application/x-www-form-urlencoded,表示請求體內容使用 url 編碼。
Content-Type: application/x-www-form-urlencoded⑥?Accept-Encoding:瀏覽器通知服務器,瀏覽器支持的數據壓縮格式。如 GZIP 壓縮。
Accept-Encoding: gzip, deflate⑦?Accept-Language:瀏覽器通知服務器,瀏覽器支持的語言。各國語言(國際化 i18n )
Accept-Language: zh-CN,zh;q=0.9?
更多請求頭屬性可以參考這篇文章:HTTP響應頭和請求頭信息對照表?。
(3)請求體
當請求方式是 post 時,請求體會有請求的參數,格式如下:
username=zhangsan&password=123
2、響應協議
(1)響應行
① 報文協議及版本;
例如:
HTTP/1.1 200 OK② 狀態碼及狀態描述;
狀態碼:由3位數字組成,第一個數字定義了響應的類別
1xx:指示信息,表示請求已接收,繼續處理。
2xx:成功,表示請求已被成功接受并處理。
- 200 OK:客戶端請求成功
- 204 No Content:無內容。服務器成功處理,但未返回內容。一般用在只是客戶端向服務器發送信息,而服務器不用向客戶端返回什么信息的情況。不會刷新頁面。
- 206 Partial Content:服務器已經完成了部分GET請求(客戶端進行了范圍請求)。響應報文中包含Content-Range指定范圍的實體內容
3xx:重定向
-
301 Moved Permanently:永久重定向,表示請求的資源已經永久的搬到了其他位置。
-
302 Found:臨時重定向,表示請求的資源臨時搬到了其他位置
-
303 See Other:臨時重定向,應使用GET定向獲取請求資源。303功能與302一樣,區別只是303明確客戶端應該使用GET訪問
-
307 Temporary Redirect:臨時重定向,和302有著相同含義。POST不會變成GET
-
304 Not Modified:表示客戶端發送附帶條件的請求(GET方法請求報文中的IF…)時,條件不滿足。返回304時,不包含任何響應主體。雖然304被劃分在3XX,但和重定向一毛錢關系都沒有
4xx:客戶端錯誤
- 400 Bad Request:客戶端請求有語法錯誤,服務器無法理解。
- 401 Unauthorized:請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用。
- 403 Forbidden:服務器收到請求,但是拒絕提供服務
- 404 Not Found:請求資源不存在。比如,輸入了錯誤的url
- 415 Unsupported media type:不支持的媒體類型
5xx:服務器端錯誤,服務器未能實現合法的請求。
- 500 Internal Server Error:服務器發生不可預期的錯誤。
- 503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間后可能恢復正常,
(2)響應頭
服務器通過響應頭來控制瀏覽器的行為,不同的頭瀏覽器操作不同。
響應頭屬性可以參考這篇文章:HTTP響應頭和請求頭信息對照表
(3)響應體
?響應體是服務器回寫給客戶端的頁面正文,瀏覽器將正文加載到內存,然后解析渲染并顯示。
四、長連接和短鏈接區別
1、當請求頭中的?Connection 為 keep-alive 時該連接為長連接(默認)。
2、當請求頭中的?Connection 為 close 時該鏈接為短鏈接。
?
(SAW:Game Over!)?
總結
以上是生活随笔為你收集整理的通信 / HTTP 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C/Cpp / 野指针和悬空指针
- 下一篇: 编码方式 / Base 64