1. 程式人生 > 其它 >http1.0 http1.1 http2.0

http1.0 http1.1 http2.0

http 超文字傳輸協議

http 協議是基於Tcp協議的;

影響一個http請求的因素主要有兩個:頻寬、延遲;

  1 頻寬:

  2 延遲:1、DNS查詢:當發起一個請求時,要先建立tcp連線;要建立Tcp連線必須知道伺服器Ip地址;通過DNS查詢(DNS系統)對URL中域名進行解析;可以通過使用

        DNS快取來減少解析時間;

      2 、瀏覽器阻塞:瀏覽器對於同一個域名·,同時只能有4個連線(TCP通道);瀏覽器不同,限制也不一樣;超過限制;後續請求將會被阻塞;

        這也是為啥同一站點有多個靜態資源CDN域名的原因;變相解決了一個域名請求限制的問題;http1.0

      3、建立連線(TCP):建立連線是需要三次握手的,費時;

http1.0和http1.1區別;

  1 快取處理:http1.0中在第一次響應頭header中增加了Expriess、last-modified(if-modified-since)來處理快取;htpp1.1中新增了Etags(if-none -match)

來處理快取;

  2 Host頭處理:在HTTP1.0中認為每臺伺服器都繫結一個唯一的IP地址,因此,請求訊息中的URL並沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一臺物理伺服器上可以存在多個虛擬主機(Multi-homed Web Servers),並且它們共享一個IP地址。HTTP1.1的請求訊息和響應訊息都應支援Host頭域,且請求訊息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)。

  3 長連線:http1.1中一個tcp通過 在HTTP1.1中預設開啟Connection: keep-alive,在一個連線中可以序列方式的傳遞多個請求、響應;來減少建立連線和關閉連線帶來的延遲;

但是會存線上頭阻塞問題,即如果上一個請求超時;下一個請求也會一直等待;

https 和 http區別:

  http執行在tcp之上的;所有傳輸的內容是都是明文;https執行在SSL/TSL之上的;而SSL/TSL是執行在TCP之上的;所有傳輸內容都是密文的;

  兩者採用的是不一樣的連線方式;埠也不一樣;http是80;https是433;

  https需要申請CA證書;付費;

http2.0;

  多路複用:http2.0新增多路複用功能;指一個連線(tcp通道)可以並行發起多個請求;

  請求優先順序:給重要的請求設定較高的優先順序;比如載入首頁內容;先是首頁內容的請求,然後是靜態資源的載入;js檔案等;

  header壓縮:http1.1中很多header都是重複的;

  服務端推送:就是在請求一些檔案時,在響應時,將一些相關檔案一併推送出去;這樣就不用再次請求相關檔案;直接快取讀取;

      服務端推送能把客戶端所需要的資源伴隨著index.html一起傳送到客戶端,省去了客戶端重複請求的步驟。正因為沒有發起請求,建立連線等操作,所以靜態資源通

      過服務端推送的方式可以極大地提升速度。

http2.0的多路複用補充:

  tcp連線存在慢啟動的;當建立連線之初;資料傳輸是緩慢的,存在自我調節的一種功能;當時間變長;相當於確定這個通道穩固了;就開始快速的傳遞資料;

但是一旦通道銷燬;斷開連線;下一個請求開始;又會經歷慢啟動的過程;費時;http2.0的多路複用則解決了這個問題

注意:

  http2.0 是可以支援明文傳輸的;也就是不加SSL/TSL;但是現在主流瀏覽器chrome,火狐等只支援基於TSL部署的http2.0協議;所以要升級到http2.0;還得先進行TSL部署;才會有好的相容性