HTTP協議發展歷史

HTTP協議發展歷史

1、什麼是HTTP?

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

HTTP協議發展歷史

2、HTTP/0.9版本

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

  • 首先它只有一個命令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鏈接裏面進行發送的,

3、HTTP/1.0版本

這個版本和如今廣泛使用的HTTP/1.1差很少,在HTTP/0.9版本基礎上進行了改進。web

  • 增長了不少命令。好比:POST、PUT、HEADER這些命令。
  • 增長了status code和header相關的內容。status code是用來描述服務器端處理某一個請求以後的狀態的;header主要包含:請求和發送數據的描述以及對這部分數據進行操做的方法。
  • 增長了多字符集支持、多部分發送、權限、緩存等相關的內容。這些內容有利於更好地使用http請求去實現WEB服務。

4、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服務來,提升了物理服務器的使用效率。

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

6、HTTP/2與HTTP/1.1性能對比

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

HTTP協議發展歷史

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

    HTTP協議發展歷史

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

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

本文做者:AhuntSun
原文連接:http://www.javashuo.com/article/p-etexyxxy-ms.html

相關文章
相關標籤/搜索