HTTP協議的發展歷史 HTTP/0.9 0.9版本是第一個定稿的HTTP版本,相對較為簡陋。它有以下特點: 只有一個命令GET 沒有header等描述數據的信息 伺服器發送完畢,就關閉TCP連接 註意一點,0.9版本的HTTP協議只要伺服器發送完畢,就直接關閉TCP連接,也就是說,一次TCP連接只 ...
HTTP協議的發展歷史
HTTP/0.9
0.9版本是第一個定稿的HTTP版本,相對較為簡陋。它有以下特點:
- 只有一個命令GET
- 沒有header等描述數據的信息
- 伺服器發送完畢,就關閉TCP連接
註意一點,0.9版本的HTTP協議只要伺服器發送完畢,就直接關閉TCP連接,也就是說,一次TCP連接只能發送一次HTTP請求。
HTTP/1.0
1.0版本在0.9版本上做出了很多創新和優化,該版本:
- 增加了新的命令(POST命令和HEADER命令)
- 增加status code(狀態碼)和header
- 增加多字元集支持、多部分發送、authorization(許可權)、cache(緩存)等
在這個版本,基本實現了HTTP協議的框架。
HTTP/1.1
1.1版本解決了大量1.0版本的痛點,該版本新增了以下功能:
- 持久連接(keep alive)
- 管道化(pipeline)
- host和其他一些命令
在1.1版本以前,每次HTTP請求,都會重新建立一次TCP連接,伺服器響應後,就立刻關閉。眾所周知,建立TCP連接的新建成本很高,因為需要三次握手,並且有著慢啟動的特性導致發送速度較慢。而1.1版本添加的持久連接功能可以讓一次TCP連接中發送多條HTTP請求,值得一提的是預設是,控制持久連接的Connection
欄位預設值是keep-alive
,也就是說是預設打開持久連接,如果想要關閉,只需將該欄位的值改為close
。
而管道化則賦予了客戶端在一個TCP連接中連續發送多個請求的能力,而不需要等到前一個請求響應,這大大提高了效率。值得一提的是,雖然客戶端可以連續發送多個請求,但是伺服器返回依然是按照發送的順序返回。
host
欄位指定了伺服器的功能變數名稱,這允許一個物理伺服器上可以建立多個虛擬伺服器。
HTTP/1.1是使用最廣泛的HTTP協議。
HTTP2
- 所有數據都以二進位傳輸
- 同一個連接裡面發送多個請求不再需要按照順序來
- 頭信息壓縮以及推送等提高效率的功能
這裡提下推送功能,眾所周知,伺服器推送一直是web開發的一大難點,原因就在於在HTTP2之前的版本都不支持伺服器推送。而HTTP2允許伺服器未經請求,主動向客戶端發送資源。也就是說,當你向伺服器請求html的時候,伺服器可以直接將css和js一起推送給你,而不需要解析html再請求css和js,這大大提高了效率。