HTTP
-
HTTP 超文本傳輸協(xié)議
,它定義了客戶端和服務(wù)器之間交換報(bào)文的格式和方式,它使用 TCP 作為傳輸層協(xié)議,保證了數(shù)據(jù)傳輸?shù)目煽啃浴?/li> -
特點(diǎn)
無狀態(tài)的協(xié)議
傳輸?shù)臄?shù)據(jù)都是未加密的,信息是明文傳輸,存在安全問題
默認(rèn)使用 80 端口 -
連接模式
非持續(xù)的連接
是服務(wù)器必須為每一個(gè)請(qǐng)求的對(duì)象建立和維護(hù) 一個(gè)全新的連接,HTTP/1.0 以前使用的非持續(xù)的連接,但是可以在請(qǐng)求時(shí),加上Connection: keep-alive
來要求服務(wù)器不要關(guān)閉 TCP 連接。
持續(xù)連接
TCP 連接默認(rèn)不關(guān)閉,可以被多個(gè)請(qǐng)求復(fù)用。采用持續(xù)連接的好處是可以避免每次建立 TCP 連接三次握手時(shí)所花費(fèi)的時(shí)間。HTTP1.1 以后默認(rèn)采用的是持續(xù)的連接。目前對(duì)于同一個(gè)域,大多數(shù)瀏覽器支持 同時(shí)建立 6 個(gè)持久連接。 -
HTTP/1.1 協(xié)議缺點(diǎn)
HTTP/1.1 默認(rèn)使用了持久連接,多個(gè)請(qǐng)求可以復(fù)用同一個(gè) TCP 連接,但是在同一個(gè) TCP 連接里面,數(shù)據(jù)請(qǐng)求的通信次序是固定的。服務(wù)器只有處理完一個(gè)請(qǐng)求的響應(yīng)后,才會(huì)進(jìn)行下一個(gè)請(qǐng)求的處理,如果前面請(qǐng)求的響應(yīng)特別慢的話,就會(huì)造成許多請(qǐng)求排隊(duì)等待的情況,這種情況被稱為隊(duì)頭堵塞
。隊(duì)頭阻塞會(huì)導(dǎo)致持久連接在達(dá)到最大數(shù)量時(shí),剩余的資源需要等待其他資源請(qǐng)求完成后才能發(fā)起請(qǐng)求。
為了避免這個(gè)問題,一個(gè)是減少請(qǐng)求數(shù),一個(gè)是同時(shí)打開多個(gè)持久連接。這就是我們對(duì)網(wǎng)站優(yōu)化時(shí),使用雪碧圖、合并腳本的原因。
HTTP/2
-
二進(jìn)制協(xié)議
HTTP/2 是一個(gè)二進(jìn)制協(xié)議。在 HTTP/1.1 版中,報(bào)文的頭信息必須是文本(ASCII 編碼),數(shù)據(jù)體可以是文本,也可以是二進(jìn)制。HTTP/2 則是一個(gè)徹底的二進(jìn)制協(xié)議,頭信息和數(shù)據(jù)體都是二進(jìn)制,并且統(tǒng)稱為幀
,可以分為頭信息幀和數(shù)據(jù)幀。 幀的概念是它實(shí)現(xiàn)多路復(fù)用的基礎(chǔ)。 -
多路復(fù)用
HTTP/2 實(shí)現(xiàn)了多路復(fù)用,HTTP/2 仍然復(fù)用 TCP 連接,但是在一個(gè)連接里,客戶端和服務(wù)器都可以同時(shí)發(fā)送多個(gè)請(qǐng)求或回應(yīng),而且不用按照順序依次發(fā)送,這樣就避免了隊(duì)頭堵塞
的問題。 -
數(shù)據(jù)流
HTTP/2 使用了數(shù)據(jù)流的概念,因?yàn)?HTTP/2 的數(shù)據(jù)包是不按順序發(fā)送的,同一個(gè)連接里面連續(xù)的數(shù)據(jù)包,可能屬于不同的請(qǐng)求。因此,必須要對(duì)數(shù)據(jù)包做標(biāo)記,指出它屬于哪個(gè)請(qǐng)求。HTTP/2 將每個(gè)請(qǐng)求或回應(yīng)的所有數(shù)據(jù)包,稱為一個(gè)數(shù)據(jù)流。每 個(gè)數(shù)據(jù)流都有一個(gè)獨(dú)一無二的編號(hào)。數(shù)據(jù)包發(fā)送的時(shí)候,都必須標(biāo)記數(shù)據(jù)流 ID ,用來區(qū)分它屬于哪個(gè)數(shù)據(jù)流。 -
頭信息壓縮
HTTP/2 實(shí)現(xiàn)了頭信息壓縮,由于 HTTP 1.1 協(xié)議是無狀態(tài)的,每次請(qǐng)求都必須附上所有信息。所以,請(qǐng)求的很多字段都是重復(fù)的,比如 Cookie 和 User Agent ,一模一樣的內(nèi)容,每次請(qǐng)求都必須附帶,這會(huì)浪費(fèi)很多帶寬,也影響速度。
HTTP/2 對(duì)這一點(diǎn)做了優(yōu)化,引入了頭信息壓縮機(jī)制。一方面,頭信息使用 gzip 或 compress 壓縮后再發(fā)送;另一方面, 客戶端和服務(wù)器同時(shí)維護(hù)一張頭信息表,所有字段都會(huì)存入這個(gè)表,生成一個(gè)索引號(hào),以后就不發(fā)送同樣字段了,只發(fā)送索引號(hào),這樣就能提高速度了。 -
服務(wù)器推送
HTTP/2 允許服務(wù)器未經(jīng)請(qǐng)求,主動(dòng)向客戶端發(fā)送資源,這叫做服務(wù)器推送
。使用服務(wù)器推送,提前給客戶端推送必要的資源 ,這樣就可以相對(duì)減少一些延遲時(shí)間。這里需要注意的是 HTTP/2 下服務(wù)器主動(dòng)推送的是靜態(tài)資源,和 WebSocket 以及使用 SSE 等方式向客戶端發(fā)送即時(shí)數(shù)據(jù)的推送是不同的。
HTTPS
-
HTTPS 超文本傳輸安全協(xié)議
,HTTPS 是基于 HTTP 協(xié)議的,不過它會(huì)使用 TLS/SSL 來對(duì)數(shù)據(jù)加密。使用 TLS/ SSL 協(xié)議,所有的信息都是加密的,第三方?jīng)]有辦法竊聽。并且它提供了一種校驗(yàn)機(jī)制,信息一旦被篡改,通信的雙方會(huì)立刻發(fā)現(xiàn)。它還配備了身份證書,防止身份被冒充的情況出現(xiàn)。 -
特點(diǎn)
HTTPS 協(xié)議是由 HTTP + SLL 協(xié)議構(gòu)建的,安全性高于 HTTP
默使用 443 端口 -
HTTPS 協(xié)議的工作原理
- 客戶端使用 HTTPS 的 url 訪問 web 服務(wù)器,要求與服務(wù)器建立 SLL 連接
- web 服務(wù)器收到客戶端請(qǐng)求后,會(huì)將網(wǎng)站的證書(包含公鑰)傳送一份給客戶端
- 客戶端收到網(wǎng)站證書后會(huì)檢查證書的頒發(fā)機(jī)構(gòu)以及過期時(shí)間,如果沒有問題就隨機(jī)產(chǎn)生一個(gè)秘鑰
- 客戶端利用公鑰將會(huì)話秘鑰加密,并傳送給服務(wù)端,服務(wù)端利用自己的私鑰解密出會(huì)話秘鑰
- 之后服務(wù)器與客戶端使用秘鑰加密傳輸
-
HTTPS 協(xié)議的優(yōu)點(diǎn)
傳輸穩(wěn)定
傳輸完整
傳輸安全
利于SEO -
HTTPS 協(xié)議的缺點(diǎn)
費(fèi)時(shí),HTTPS 握手階段比較費(fèi)時(shí),會(huì)使頁面加載時(shí)間延長 50%,增加 10%~20%的耗電
費(fèi)性能,HTTPS 緩存不如 HTTP 高效,會(huì)增加數(shù)據(jù)開銷
費(fèi)錢,SSL 證書( ca 證書)也需要錢,功能越強(qiáng)大的證書費(fèi)用越高
SSL 證書需要綁定 IP,不能在同一個(gè) IP 上綁定多個(gè)域名,IPV4 資源支持不了這種消耗
SSL
- SSL(Secure Sockets Layer 安全套接字協(xié)議),是網(wǎng)景公司率先采用的網(wǎng)絡(luò)安全協(xié)議,它是在傳輸通信協(xié)議上實(shí)現(xiàn)的一種安全協(xié)議,采用公開密鑰技術(shù)。SSL廣泛支持各種類型的網(wǎng)絡(luò),同時(shí)提供三種基本的安全服務(wù),他們都使用公開密鑰技術(shù)
- SSL的優(yōu)勢(shì)在于它是與應(yīng)用層協(xié)議獨(dú)立無關(guān)的,高層的應(yīng)用層協(xié)議能透明的建立于SLL協(xié)議之上,SSL協(xié)議在應(yīng)用層協(xié)議通信之前就以及完成加密算法,通信密鑰的協(xié)商以及服務(wù)器認(rèn)證工作。在此之后,應(yīng)用層協(xié)議所傳送的數(shù)據(jù)都會(huì)被加密,從而保證通信的私密性
- TLS(Transport Layer Security 傳輸層安全,SSL繼任者)是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議,TLS與SSL在傳輸層與應(yīng)用層之間對(duì)網(wǎng)絡(luò)連接進(jìn)行加密