http協(xié)議的前世今生

一: 結(jié)構(gòu)圖:


二 : http特性

狀態(tài)碼:

1: http響應(yīng)報(bào)文中狀態(tài)碼的意義: 不僅作為錯(cuò)誤碼使用, 而且有指示客戶端下一步如何行動(dòng)的用途. 有點(diǎn)像連麥服務(wù)器: 推流過載時(shí)返回客戶端(“嘗試下一個(gè)ip”)

2:狀態(tài)碼不見得只有200是正確的, 204也是ok的

3:實(shí)際項(xiàng)目中可以用狀態(tài)碼, 作為客戶端是否可以繼續(xù)重試的標(biāo)準(zhǔn)

重要頭部字段學(xué)習(xí)

1:accept語義: 希望我這邊接受什么數(shù)據(jù)類型,Content-Type: 對(duì)方應(yīng)該按什么類型解析

http傳輸大文件的方法

1: 壓縮

2: 化整為零: 分塊傳輸:chunk

3: 范圍請(qǐng)求: accept-range

總結(jié):以上3中方法, 可以混合使用

http連接管理

1: 短連接: 效率慢

2: 長(zhǎng)鏈接: 解決1的問題, 提高傳輸效率

3: pipeline: 解決4問題: 但是有缺點(diǎn): 可以發(fā)送一批請(qǐng)求, 某種意義上做到了并發(fā). ?但是有限制: 就是不能立即回復(fù), 按請(qǐng)求順序發(fā)送回復(fù). 嚴(yán)格意義并沒有解決隊(duì)頭阻塞問題, 本質(zhì)原因: 沒有辦法將請(qǐng)求和響應(yīng)用序號(hào)對(duì)應(yīng)起來. 所以必須按順序發(fā)送回復(fù)

4: 隊(duì)頭阻塞: 只有前面的請(qǐng)求處理處理完之后收到回復(fù)才會(huì)發(fā)送下一個(gè)請(qǐng)求

解決方案: 1: 并發(fā)連接 ?2: {3}

http中的重定向

應(yīng)用場(chǎng)景: 網(wǎng)站變更, 域名變更, 服務(wù)器臨時(shí)維護(hù)

http中的cookie機(jī)制

1: 彌補(bǔ)無狀態(tài)的缺點(diǎn)

2: 增加記憶能力

3: 使用第三方cookie: 意味無論你在那里服務(wù)器都會(huì)認(rèn)識(shí)你, 實(shí)現(xiàn)廣告的精準(zhǔn)投放

4: ?服務(wù)器生成, 瀏覽器緩存

http中的緩存機(jī)制

1: 服務(wù)器告訴瀏覽器是否可以緩存, 并且可以告訴緩存的時(shí)間大小

2: 瀏覽器也可以強(qiáng)制刷新數(shù)據(jù), 無視緩存

http代理

1: http代理如果想要知道客戶端的真實(shí)IP地址,可以使用字段“X-Forwarded-For”和“X-Real-IP“.

2: 專門的“代理協(xié)議”可以在不改動(dòng)原始報(bào)文的情況下傳遞客戶端的真實(shí)IP。

http緩存服務(wù)器:

1: 類似于代理服務(wù)器

2: 需要cache-control和purge的控制

http優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

1:簡(jiǎn)單, 靈活, 易于擴(kuò)展,

2:無狀態(tài)

缺點(diǎn):

1: head用明文傳輸, 用抓包工具可以看到, 不安全

2:隊(duì)頭阻塞

三: http/2

1: 主要目標(biāo): 對(duì)http做性能優(yōu)化

2: 頭部壓縮: ?http/1主要的壓縮是對(duì)body進(jìn)行的, 但卻忽視了header: 采用hpack算法

3: 采用二進(jìn)制形式: 體積小, 速度快, 原來的header和body變成二進(jìn)制幀

4: 虛擬化stream概念: 同消息往返的幀有相同唯一的stream_id, 可以理解為里面流動(dòng)的有許多steam, 但是同stream的幀是有先后順序的. 從stream層面看, 二進(jìn)制幀是有順序的, 但是從連接層面的, 是無序的; 由于有了streamid, 可以將請(qǐng)求和回復(fù)對(duì)應(yīng)在一起, 也就沒有了隊(duì)頭阻塞問題

5: 改變了請(qǐng)求-應(yīng)答模型, 服務(wù)器可以主動(dòng)push消息

在概念上,?個(gè)HTTP/2的流就等同于?個(gè)HTTP/1?的“請(qǐng)求-應(yīng)答”。在HTTP/1??個(gè)“請(qǐng)求-響應(yīng)”報(bào)?來回是?次HTTP通信,在HTTP/2??個(gè)流也承載了相同的功能。


四: http3.0

1:完全解決了隊(duì)頭阻塞的問題: 將底層的tcp換成udp, 因?yàn)閠cp的有序性天然存在隊(duì)頭阻塞問題

2:使用quic協(xié)議: ?支持連接遷移 比如網(wǎng)絡(luò)切換不需要重新建立連接

五: Cdn

1: 可以加速訪問http服務(wù)

2: 解決跨網(wǎng)訪問慢的問題

3: cdn運(yùn)行原理: 全局負(fù)載均衡 + 緩存系統(tǒng)

全局負(fù)載均衡: 尋找邊緣節(jié)點(diǎn), 按地理位置, 運(yùn)營(yíng)商網(wǎng)絡(luò), 負(fù)載能力.

六: Websocket

1: 解決http實(shí)時(shí)通信難的問題

2: 全雙工, http是半雙工

3: 采用二進(jìn)制幀結(jié)構(gòu)

七: http性能優(yōu)化

1: cdn解決了中間一公里的問題

2:企業(yè)應(yīng)該致力于解決第一公里的問題

3:最后一公里無法控制

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容