HTTP協議發展歷史

0.什麼是HTTP?


HTTP(HyperText Transfer Protocol): 超文本傳輸協議。是互聯網上應用最普遍的一種網絡協議。
全部www文件都必須遵照的一個標準,是以 ASCII 碼傳輸,創建在 TCP/IP 協議之上的應用層規範。
簡單點說就是一種固定的通信規則。
css

1.HTTP/0.9版本


這是最先定稿的HTTP版本,這個版本中它的內容很是地簡單。html

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

  • 它沒有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的發送就是並行的而不是串行的,總體的傳輸效率和性能就提升了很多。


這就是HTTP的發展歷史,除此以外還包含了HTTPS協議。HTTPS實際上是一個安全版本的HTTP協議,實際使用與HTTP/1.1區別不大。

相關文章
相關標籤/搜索