HTTP協議以及HTTP2.0/1.1/1.0區別

HTTP協議以及HTTP2.0/1.1/1.0區別

一.簡介

摘自百度百科:html

超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲普遍的一種網絡協議。全部的WWW文件都必須遵照這個標準。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。web

  • HTTP屬於OSI網絡七層協議模型中的"最上層":應用層。由請求和響應構成,是一個標準的客戶端服務器模型。HTTP是一個無狀態的協議。
  • HTTP默認端口號爲80。它也能夠承載在TLS和SSL之上,經過加密、認證的方式實現數據傳輸的安全,稱爲HTTPS,HTTPS默認端口號爲443。
  • 早期HTTP用於傳輸網頁HTML文件,發展到如今,應用變得普遍,客戶端軟件(PC,Android,iOS等)大部分經過HTTP傳輸數據。

二.通訊過程

角色:客戶端和服務端算法

  • 首先,客戶端發起一個與服務器的TCP鏈接,創建鏈接以後,A中的瀏覽器進程就能夠經過Socket訪問該TCP鏈接。瀏覽器

  • 客戶端A進程經過該TCP鏈接向服務端B發送一個HTTP請求報文(ASCII碼),報文中包含(百度首頁爲例)安全

    請求行(request line) : 3個字段:方法字段、URL字段和HTTP版本字段
    GET / HTTP/1.1


    請求頭(header line) : 位於請求行以後

    Host www.baidu.com
    Connection keep-alive
    Cache-Control max-age=0

    Upgrade-Insecure-Requests 1

    User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36

    Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8

    Referer https://www.baidu.com/s?wd=Https&rsv_spt=1&rsv_iqid=0xc28e80ff00002ae1&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=0&oq=Http%25E5%258D%258F%25E8%25AE%25AE&rsv_pq=de652d0900004bfb&inputT=691&rsv_sug3=47&rsv_sug1=48&rsv_sug7=100&rsv_sug4=756

    Accept-Encoding gzip, deflate, br

    Accept-Language zh-CN,zh;q=0.9,en;q=0.8


    空行 :
    位於請求頭和請求體之間,必需要有


    請求體(entity body) : 在使用GET方法時,請求體爲空。POST時能夠相似以下格式:

    username=test&password=123123服務器

  • HTTP服務器進程經過Socket接收到該請求報文,從存儲器(內存或磁盤)中獲得URL字段中指定的對象(如:/index.html),而後封裝到響應報文中,經過Socket發送到客戶端。

    響應報文:網絡

    狀態行(status line) :

    HTTP/1.1 200 OK


    響應頭(header line):

    Cache-Control: private

    Connection: Keep-alive

    Content-Encoding: gzip

    Content-Type: text/html;charset=utf-8

    Date: Thu, 29 Mar 2018 16:01:47 GMT

    Expires: Thu, 29 Mar 2018 16:01:46 GMT

    Set-Cookie: BD_HOME=1; path=/


    空行:

    響應體(entity body):
    <html>...</html>app

  • 發送響應報文後,服務器進程通知TCP斷開TCP鏈接(只是通知,此時TCP鏈接不必定關閉),TCP發送完數據後,實際斷開該鏈接。
  • 客戶端收到響應報文後,將響應實體中的文件信息提取出來,用瀏覽器引擎繪製或者經過別的進程處理該數據。性能

實際中,可能一個HTML中有許多資源引用(如CSS文件,圖片,JS文件等),對於每個引用對象,重複該過程(HTTP1.0短鏈接)
編碼

三.HTTP1.0/1.1/2.0區別

  • HTTP1.1默認使用長鏈接,可有效減小TCP的三次握手開銷。
  • HTTP 1.1支持只發送header信息(不帶任何body信息),若是服務器認爲客戶端有權限請求服務器,則返回100,不然返回401。客戶端若是接受到100,纔開始把請求body發送到服務器。這樣當服務器返回401的時候,客戶端就能夠不用發送請求body了,節約了帶寬。另外HTTP還支持傳送內容的一部分。這樣當客戶端已經有一部分的資源後,只須要跟服務器請求另外的部分資源便可。這是支持文件斷點續傳的基礎。
  • HTTP1.0是沒有host域的,HTTP1.1才支持這個參數。
  • HTTP2.0使用多路複用技術(Multiplexing),多路複用容許同時經過單一的 HTTP/2 鏈接發起多重的請求-響應消息。
    "HTTP1.1在同一時間對於同一個域名的請求數量有限制,超過限制就會阻塞請求"。多路複用底層採用"增長二進制分幀層"的方法,使得不改變原來的語義、首部字段的狀況下提升傳輸性能,下降延遲。
    二進制分幀將全部傳輸信息分割爲更小的幀,用二進制進行編碼,多個請求都在同一個TCP鏈接上完成,能夠承載任意數量的雙向數據流。HTTP/2更有效的使用TCP鏈接,獲得性能上的提高。

    網上不錯的一個過程圖片:


  • HTTP/2新增首部壓縮(Header Compression):採用HPACK算法
  • HTTP/2新增服務端推送(Header Compression)

來自這裏

相關文章
相關標籤/搜索