HTTP協議發展歷史


0.什么是HTTP?


HTTP(HyperText Transfer Protocol): 超文本傳輸協議。是互聯網上應用最廣泛的一種網絡協議。
所有www文件都必須遵守的一個標准,是以 ASCII 碼傳輸,建立在 TCP/IP 協議之上的應用層規范。
簡單點說就是一種固定的通訊規則。
image-20200117095129267

1.HTTP/0.9版本


這是最早定稿的HTTP版本,這個版本中它的內容非常地簡單。

  • 首先它只有一個命令GET。對應到現在的GET請求和POST請求,這些叫做HTTP的命令或者方法。

  • 它沒有HEADER等描述數據的信息。因為這個時候的請求非常簡單,它需要達到的目的也非常簡單,沒有那么多數據格式。

  • 服務器發送完內容之后,就關閉TCP連接。這里需要注意一點,這里的TCP連接和http請求是不一樣的。http請求和TCP連接不是一個概念。一個http請求通過TCP連接發送,
    而一個TCP連接里面可以發送很多個http請求(HTTP/0.9不能這么做,但是HTTP/1.1可以這么做,而且在HTTP/2這方面會更大程度地優化,來提高HTTP協議傳輸的效率以及服務器的性能)
    所以一個TCP連接對應的是多個http請求,一個http請求肯定是在某一個TCP連接里面進行發送的,

2.HTTP/1.0版本


這個版本和現在普遍使用的HTTP/1.1差不多,在HTTP/0.9版本基礎上進行了改進。

  • 增加了很多命令。比如:POST、PUT、HEADER這些命令。

  • 增加了status code和header相關的內容。status code是用來描述服務器端處理某一個請求之后的狀態的;header主要包含:請求和發送數據的描述以及對這部分數據進行操作的方法。

  • 增加了多字符集支持、多部分發送、權限、緩存等相關的內容。這些內容有利於更好地使用http請求去實現WEB服務。

3.HTTP/1.1版本


這個版本是在HTTP/1.0的基礎上增加了一些功能來優化網絡連接的過程。

  • 在這個版本支持了持久連接。在HTTP/1.0版本里面,一個http請求要發送就要先在客戶端和服務器端之間創建一個TCP連接,創建完這個TCP連接之后,等服務器端返回完數據之后,這個TCP連接就關閉了。
    這個成本是相對比較高的,因為在建立一個TCP連接的過程中要進行http的三次握手,這一部分是通過TCP來完成的,在創建這個連接的過程中消耗是比較高的,延遲也會比較高。
    所以如果在建立完一個連接之后,它可以不關閉,之后新的http請求就可以一直在這個連接里面進行數據發送的話,它的性能和效率肯定會提升很多,HTTP/1.1已經實現了這個功能。

  • 增加了pipeline。可以在同一個TCP連接里面發送多個http請求,就是上面說的那樣。但是在HTTP/1.1里面,雖然是可以在同一個TCP連接里面發送多個http請求,但是服務器端對於進來的請求,是要按照順序進行數據返回的。
    因此,如果前一個請求等待時間非常長,而后一個請求處理得比較快。這個時候后一個請求不能先發送,而是要等第一個請求數據全部發送完成之后,才能進行發送,即是串行的。等待的這部分時間就體現出了與並行傳輸性能之間的差距。
    而這個在HTTP/2里面得到了優化。

  • 增加了HTTP的頭host和其他一些命令。其中比較重要的就是host,有了host之后就可以在同一台服務器(物理服務器)上同時跑多個web服務。比如說一個Node.js的web服務,一個Java的web服務。
    通過host這個字段來表示兩個服務都是請求到同一個物理服務器上,但是我要請求的是里面哪一個軟件服務,Node.js還是Java?
    這就是通過host來進行判斷的。這個host頭增加的好處就是,在同一個物理服務器或者同一個集群里面可以部署很多不同的web服務來,提高了物理服務器的使用效率。

4.HTTP/2版本


雖然現在還沒有普及,但是毫無疑問是未來的趨勢。

  • 所有數據都是以二進制進行傳輸的。在HTTP/1.1里面大部分的數據傳輸是通過字符串,所以數據的分片方式是不太一樣的。在HTTP/2里面所有的數據都是以幀進行傳輸的。

  • 正是因為有了這個好處,同一個連接里面發送多個請求時,服務器端不再需要按照順序來返回處理后的數據了。而是可以在返回第一個請求里面數據的時候,同時返回第二個請求里面的數據。這樣的並行傳輸能夠更大限度地提高web應用的傳輸效率。

  • 新增頭信息壓縮以及推送等功能,提高了傳輸效率。HTTP/2其實主要就是改善了HTTP/1.1里面造成性能低下的一些問題。

第一個頭信息的壓縮。在HTTP/1.1里面每一次發送請求和返回請求,很多http頭都是必須要進行完整的發送和返回的,但是這一部分頭信息里面有很多的內容比如說:Headers字段、Content-Type、accept等字段是以字符串的形式保存的。
所以占用較大的帶寬量。所以HTTP/2里面對頭信息進行了壓縮,可以有效地減少帶寬使用;

第二個是推送的功能。指的是HTTP/2之前,只能由客戶端發送數據,服務器端返回數據。客戶端是主動方,服務器端永遠是被動方。在HTTP/2里面有了”推送”的概念,也就是說服務器端可以主動向客戶端發起一些數據傳輸。
舉個例子:我們知道一個web頁面加載時會要求一些html、css、js等文件,css和js文件是以鏈接的形式在html文本里面顯示的,只有通過瀏覽器解析了html里面的內容之后,才能根據鏈接里面包含的URL地址去請求對應的css和js文件。
在HTTP/2之前,這個傳輸過程會包含順序問題,需要先請求到html的文件,通過瀏覽器運行解析這個html文件之后,才能去發送css的請求和js的請求。
HTTP/2中有了推送功能之后,在請求html的同時,服務器端可以主動把html里面所引用到的css和js文件推送到客戶端,這樣html、css和js的發送就是並行的而不是串行的,整體的傳輸效率和性能就提高了不少。

5.HTTP/2與HTTP/1.1性能對比


官方測試網站 https://http2.akamai.com/demo/http2-lab.html
官網提供了多種版本的對比測試有HTTP1.1與HTTP2的比較,還有服務器端推送(server-push)不同個數之間的比較:(由於網絡延遲不同,測試結果或有差異)

  • HTTP1.1與HTTP2的對比:Compare HTTP1.1 (HTTP) vs HTTP2 (HTTPS):

    可以看到分別使用HTTP/1.1和HTTP/2加載同一張由多張小圖片組成的大圖片:HTTP/1.1用了7.41s,而HTTP/2只用了1.47s。HTTP2比HTTP/1.1快了將近5倍。
    因為為了加載這張大圖,需要請求許多的小圖,HTTP/1.1采用的是串行地請求,所以速度要比采用並行請求的HTTP/2要慢上許多。

這就是HTTP的簡要發展歷史,除此之外還包含了HTTPS協議。HTTPS實際上是附加了安全屬性的HTTP協議,實際使用與HTTP/1.1區別不大。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM