[面試題]HTTP和HTTPS的區別/HTTP1.0和HTTP1.1的區別

 

問題引入:面試題http和https的區別

1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用

2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。

3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443

4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

分析:

1HTTP和HTTPS

1.1HTTP

a.HTTP協議是超文本傳輸協議。

b.是一種請求/響應式協議,

c.是一個客戶端和服務器端請求和應答的標準(TCP)

本機與服務端傳輸:

本機與服務器端建立連接後就可以向服務器端發送請求,www服務端接收到請求後會返回HTTP響應到本地瀏覽器。

作用:它可以使瀏覽器更加高效,使網絡傳輸減少。

1.1.1HTTP特點

a.支持客戶/服務器模式。(C/S模式)

b.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。

c.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

d.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。

e.無狀態:HTTP協議是無狀態協議。缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快

1.1.2HTTP工作流程

a.建立TCP/IP連接,客戶端與服務器通過Socket三次握手進行連接

b.客戶端向服務端發起HTTP請求(例如:POST/login.html http/1.1)

c.客戶端發送請求頭信息,請求內容,最後會發送一空白行,標示客戶端請求完畢

d.服務器做出應答,表示對於客戶端請求的應答,例如:HTTP/1.1 200 OK

e.服務器向客戶端發送應答頭信息

f.服務器向客戶端發送請求頭信息後,也會發送一空白行,標示應答頭信息發送完畢,接着就以Content-type要求的數據格式發送數據給客戶端

g.服務端關閉TCP連接,如果服務器或者客戶端增Connection:keep-alive就表示客戶端與服務器端繼續保存連接,在下次請求時可以繼續使用這次的連接

1.2HTTPS:

是以安全爲目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。

1.2.1作用:

一種是建立一個信息安全通道,來保證數據傳輸的安全;

另一種就是確認網站的真實性。

1.2.2HTTPS特點

HTTPS是HTTP協議的修改,它加密數據並確保其機密性。其配置可保護用戶在與網站交互時免於竊取個人信息和計費數據。

1優點

相比於http,https可以提供更加優質保密的信息,保證了用戶數據的安全性,此外https同時也一定程度上保護了服務端,使用惡意攻擊和僞裝數據的成本大大提高。

2缺點

a.https的技術門檻較高,多數個人或者私人網站難以支撐,CA機構頒發的證書都是需要年費的,此外對接Https協議也需要額外的技術支持

b.https加重了服務端的負擔,相比於http其需要更多的資源來支撐,同時也降低了用戶的訪問速度

1.2.3HTTPS工作流程

a.客戶使用https的URL訪問Web服務器,要求與Web服務器建立SSL連接。

b.Web服務器收到客戶端請求後,會將網站的證書信息(證書中包含公鑰)傳送一份給客戶端。

c.客戶端的瀏覽器與Web服務器開始協商SSL連接的安全等級,也就是信息加密的等級。

d.客戶端的瀏覽器根據雙方同意的安全等級,建立會話密鑰,然後利用網站的公鑰將會話密鑰加密,並傳送給網站。

e.Web服務器利用自己的私鑰解密出會話密鑰。

f.Web服務器利用會話密鑰加密與客戶端之間的通信。

2.HTTP1.0 和 HTTP1.1和HTTP2.0

問題引入:面試題:HTTP1.0和HTTP1.1有什麼區別?

  • a.長連接

HTTP1.0默認使用短連接,每次請求都需要建立新的TCP連接,連接不能複用。

HTTP1.1支持持久連接和請求的流水線處理,在一個TCP連接上可以傳送多個HTTP請求和響應,減少建立和關閉TCP連接的消耗和延遲,提高效率。HTTP1.1默認開啓“Connection:Keep-Alive”,使用長連接,加入“Connection:close”才關閉。

  • b.host字段

在HTTP1.0中爲每臺服務器綁定一個唯一的IP地址,因此,請求消息中的URL並沒有傳遞主機名(hostname)。但是隨着虛擬主機技術的發展,在一臺物理服務器上可以存在多個虛機主機,並且它們共享一個IP地址。

HTTP1.1的請求消息和響應消息都應支持Host頭域,且請求消息中如果沒有Host頭域,會報400 Bad Request錯誤。

  • c.緩存處理

在HTTP1.0中主要使用header裏的If-Modified-Since,Expires來做爲緩存判斷的標準。

HTTP1.1則引入了更多的緩存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略。

  • d.帶寬優化及網絡連接的使用

HTTP1.0中存在一些浪費帶寬的現象,例如:(1)客戶端只需要某個對象的一部分,而服務器卻將整個對象發送過來;(2)下載大文件不支持斷點續傳功能,在發生斷連後需要重新下載完整的包。

HTTP1.1則在請求頭中引入range頭域,它允許只請求資源的某個部分,即返回碼是206(Partial Content),這樣就方便了開發者自由的選擇以便於充分利用帶寬和連接。

  • e.新增一些錯誤通知狀態碼

HTTP1.1中新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生衝突。


2.1HTTP1.0

瀏覽器的每次請求都需要與服務器建立一個TCP連接,服務器處理完成後立即斷開TCP連接(無連接),服務器不跟蹤每個客戶端也不記錄過去的請求(無狀態)。

建立連接->發送請求信息->回送響應信息->關閉連接


2.2HTTP1.1

由於HTTP在發送多條信息時,需要建立多次連接影響訪問速度和訪問網頁的速度,所以HTTP1.1應運而生,它支持支持性連接,而且在發送多個請求時不需要等待上一個連接的響應。

HTTP/1.0中默認使用Connection: close。在HTTP/1.1中已經默認使用Connection: keep-alive,避免了連接建立和釋放的開銷,但服務器必須按照客戶端請求的先後順序依次回送相應的結果,以保證客戶端能夠區分出每次請求的響應內容。通過Content-Length字段來判斷當前請求的數據是否已經全部接收。不允許同時存在兩個並行的響應。

2.3HTTP2.0

在一個TCP上進行任意數量HTTP請求

HTTP2.0引入二進制數據幀和流的概念,其中數據進行順序標識,如下圖所示,這樣瀏覽器收到數據之後,就可以按照序列對數據進行合併,而不會出現合併後數據錯亂的情況。同樣是因爲有了序列,服務器就可以並行的傳輸數據,這就是所做的事情。

流(stream)    已建立連接上的雙向字節流
消息    與邏輯消息對應的完整的一系列數據幀
幀    HTTP2.0通信的最小單位,每個幀包含幀頭部,至少也會標識出當前幀所屬的流(stream id)。


2.3.1多路複用:

1、所有的HTTP2.0通信都在一個TCP連接上完成,這個連接可以承載任意數量的雙向數據流。

2、每個數據流以消息的形式發送,而消息由一或多個幀組成。這些幀可以亂序發送,然後再根據每個幀頭部的流標識符(stream id)重新組裝。

每個請求是一個數據流,數據流以消息的方式發送,而消息又分爲多個幀,幀頭部記錄着stream id用來標識所屬的數據流,不同屬的幀可以在連接中隨機混雜在一起。接收方可以根據stream id將幀再歸屬到各自不同的請求當中去。

3、另外,多路複用(連接共享)可能會導致關鍵請求被阻塞。HTTP2.0裏每個數據流都可以設置優先級和依賴,優先級高的數據流會被服務器優先處理和返回給客戶端,數據流還可以依賴其他的子數據流。

4、可見,HTTP2.0實現了真正的並行傳輸,它能夠在一個TCP上進行任意數量HTTP請求。而這個強大的功能則是基於“二進制分幀”的特性。

2.3.2頭部壓縮

在HTTP1.0/1.1中,頭部元數據都是以純文本的形式發送的,通常會給每個請求增加500~800字節的負荷。

HTTP2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache一份header fields表,既避免了重複header的傳輸,又減小了需要傳輸的大小。高效的壓縮算法可以很大的壓縮header,減少發送包的數量從而降低延遲。

服務器推送:

服務器除了對最初請求的響應外,服務器還可以額外的向客戶端推送資源,而無需客戶端明確的請求。

2.3總結:

a.HTTP1.0    無狀態、短連接
b.HTTP1.1    持久連接/請求管道化/增加緩存處理(新的字段如cache-control)/增加Host字段/支持斷點傳輸等(把文件分成幾部分)
c.HTTP2.0    二進制分幀/多路複用(或連接共享)/頭部壓縮/服務器推送

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章