1.概念:
????????http協(xié)議:超文本傳輸協(xié)議
????????超文本:文字、圖片、視頻、超鏈接
????????傳輸:雙向(也可以是服務(wù)器到服務(wù)器)
2.狀態(tài)碼:
????????1XX:提示信息,是協(xié)議處理中的一種中間狀態(tài)
? ? ? ? 2XX:服務(wù)器成功處理了客戶端的請(qǐng)求
? ? ? ? 3XX:客戶端請(qǐng)求的資源發(fā)送了變動(dòng),重定向
? ? ? ? 4XX:? ?客戶端發(fā)送的報(bào)文有誤
? ? ? ? 5XX:???服務(wù)器處理時(shí)內(nèi)部發(fā)生了錯(cuò)誤
3.http常見字段:
? ??????Request:由請(qǐng)求行,請(qǐng)求頭,空行(回車+換行符,告知請(qǐng)求頭結(jié)束),請(qǐng)求主體組成
? ? ? ? ? ? Host:指定服務(wù)器的域名
? ??????????Accept:聲明自己可以接受哪些數(shù)據(jù)格式
????????????Connection :客戶端要求服務(wù)器使用 TCP 持久連接,以便其他請(qǐng)求復(fù)用。但是為了兼容老版本的 HTTP,需要指定?Connection?首部字段的值為?Keep-Alive。

? ??????Response:由狀態(tài)行,響應(yīng)頭,空行(回車+換行符,告知響應(yīng)頭結(jié)束),響應(yīng)主體組成
????????????Content-Length:本次回應(yīng)的數(shù)據(jù)長(zhǎng)度
????????????Content-Type?字段用于服務(wù)器回應(yīng)時(shí),告訴客戶端,本次數(shù)據(jù)是什么格式。
????????????Content-Encoding字段說明數(shù)據(jù)的壓縮方法。表示服務(wù)器返回的數(shù)據(jù)使用了什么壓縮格式

4.http特性:
? ? ? ? 優(yōu)點(diǎn):
? ? ? ? ? ? 1.簡(jiǎn)單
? ? ? ? ? ? 2.靈活和易于擴(kuò)展
? ? ? ? ? ? 3.應(yīng)用廣泛和跨平臺(tái)
? ? ? ? 缺點(diǎn):
? ? ? ? ? ? 1.無狀態(tài)雙刃劍:服務(wù)器不用額外記憶http狀態(tài),但是關(guān)聯(lián)操作很麻煩(使用cookie)
? ? ? ? ? ? 2.明文傳輸雙刃劍:方便可讀,但是容易泄露個(gè)人隱私
? ? ? ? ? ? 3.不安全
5.HTTP/1.1 的性能如何?
????????1.長(zhǎng)鏈接:早期 HTTP/1.0 性能上的一個(gè)很大的問題,那就是每發(fā)起一個(gè)請(qǐng)求,都要新建一次 TCP 連接(三次握手),而且是串行請(qǐng)求。HTTP/1.1 提出了長(zhǎng)連接的通信方式。減少了 TCP 連接的重復(fù)建立和斷開所造成的額外開銷,減輕了服務(wù)器端的負(fù)載。
? ? ? ? 2.管道網(wǎng)絡(luò)傳輸:在同一個(gè) TCP 連接里面,客戶端可以發(fā)起多個(gè)請(qǐng)求,只要第一個(gè)請(qǐng)求發(fā)出去了,不必等其回來,就可以發(fā)第二個(gè)請(qǐng)求出去,可以減少整體的響應(yīng)時(shí)間。
? ? ? ? 3.隊(duì)頭阻塞:盡管瀏覽器的請(qǐng)求是同時(shí)發(fā)送的,但是服務(wù)器還是會(huì)按照順序先回應(yīng)A,再回應(yīng)B,如果某一個(gè)回應(yīng)特別慢,后面就會(huì)有很多請(qǐng)求排隊(duì)等候。這就被稱為隊(duì)頭阻塞。
6.HTTP/1.1、HTTP/2、HTTP/3 演變:
????????HTTP/1.1:?
????????????使用 TCP 長(zhǎng)連接的方式改善了 HTTP/1.0 短連接造成的性能開銷。
????????????支持 管道網(wǎng)絡(luò)傳輸
????????HTTP/2:
? ? ? ? ? ? 1. 頭部壓縮:服務(wù)器和客戶端共同維護(hù)一個(gè)頭部信息表,同樣的字段發(fā)送索引號(hào)即可
????????????2. 二進(jìn)制格式:頭信息和數(shù)據(jù)體都是二進(jìn)制,并且統(tǒng)稱為幀(frame):頭信息幀和數(shù)據(jù)幀。

? ? ? ? ? ? 3. 數(shù)據(jù)流:一個(gè)完整的請(qǐng)求或響應(yīng)(稱一個(gè)數(shù)據(jù)流stream,每個(gè)數(shù)據(jù)流都有一個(gè)獨(dú)一無二的編號(hào))可能會(huì)分成非連續(xù)多次發(fā)送。數(shù)據(jù)包發(fā)送的時(shí)候,都必須標(biāo)記所屬的數(shù)據(jù)流ID,用來區(qū)分它屬于哪個(gè)數(shù)據(jù)流。另外還規(guī)定,客戶端發(fā)出的數(shù)據(jù)流,ID一律為奇數(shù),服務(wù)器發(fā)出的,ID為偶數(shù)。
? ? ? ? ? ? 4. 多路復(fù)用:一個(gè)連接中并發(fā)多個(gè)請(qǐng)求或回應(yīng),而不用按照順序一一對(duì)應(yīng)。舉例來說,在一個(gè) TCP 連接里,服務(wù)器收到了客戶端 A 和 B 的兩個(gè)請(qǐng)求,如果發(fā)現(xiàn) A 處理過程非常耗時(shí),于是就回應(yīng) A 請(qǐng)求已經(jīng)處理好的部分,接著回應(yīng) B 請(qǐng)求,完成后,再回應(yīng) A 請(qǐng)求剩下的部分。
? ? ? ? ? ?5. 服務(wù)器推送:HTTP/2 還在一定程度上改善了傳統(tǒng)的「請(qǐng)求 - 應(yīng)答」工作模式,服務(wù)不再是被動(dòng)地響應(yīng),也可以主動(dòng)向客戶端發(fā)送消息。舉例來說,在瀏覽器剛請(qǐng)求 HTML 的時(shí)候,就提前把可能會(huì)用到的 JS、CSS 文件等靜態(tài)資源主動(dòng)發(fā)給客戶端,減少延時(shí)的等待,也就是服務(wù)器推送
? ??????HTTP/3:
? ??????????HTTP/3 把 HTTP 下層的 TCP 協(xié)議改成了 UDP!
????????????HTTP/2 主要的問題在于:多個(gè) HTTP 請(qǐng)求在復(fù)用一個(gè) TCP 連接,下層的 TCP 協(xié)議是不知道有多少個(gè) HTTP 請(qǐng)求的。所以一旦發(fā)生了丟包現(xiàn)象,就會(huì)觸發(fā) TCP 的重傳機(jī)制,這樣在一個(gè) TCP 連接中的所有的 HTTP 請(qǐng)求都必須等待這個(gè)丟了的包被重傳回來。
7.在瀏覽器地址欄輸入U(xiǎn)RL按回車后經(jīng)歷的流程:
????????1、瀏覽器向 DNS 服務(wù)器請(qǐng)求解析該 URL 中的域名所對(duì)應(yīng)的 IP 地址;
????????2、解析出 IP 地址后,根據(jù)該 IP 地址和默認(rèn)端口 80,和服務(wù)器建立TCP連接;
????????3、瀏覽器發(fā)出讀取文件(URL中域名后面部分對(duì)應(yīng)的文件)的HTTP 請(qǐng)求,該請(qǐng)求報(bào)文作為TCP三次握手的第三個(gè)報(bào)文的數(shù)據(jù)發(fā)送給服務(wù)器;
????????4、服務(wù)器對(duì)瀏覽器請(qǐng)求作出響應(yīng),并把對(duì)應(yīng)的 html 文本發(fā)送給瀏覽器;
????????5、釋放TCP連接;
????????6、瀏覽器將該 html 文本并顯示內(nèi)容;