當(dāng)我們輸入www.baidu.com的時(shí)候,其實(shí)是先將baidu.com的域名進(jìn)行DNS解析,轉(zhuǎn)換成對(duì)應(yīng)的ip地址,然后開(kāi)始進(jìn)行基于TCP構(gòu)建三次握手的連接,目前使用的是1.1 默認(rèn)是開(kāi)啟了keep-Alive??梢栽诙啻握?qǐng)求中進(jìn)行連接復(fù)用。
HTTP 請(qǐng)求的構(gòu)建
連接建立之后,就要發(fā)送HTTP的請(qǐng)求了,
整體其實(shí)就是三部分,請(qǐng)求行,請(qǐng)求首部,請(qǐng)求正文。
請(qǐng)求行
請(qǐng)求行其實(shí)就是一個(gè)是請(qǐng)求的域名,然后對(duì)應(yīng)的請(qǐng)求方法,get一般是獲取資源,post是修改或者添加資源,delete是修改資源。
首部字段
首部字段中主要是以key:value的形式存儲(chǔ)的,
Accept-Charset,表示客戶端可以接受的字符集
Content-Type:正文的格式
對(duì)于一個(gè)web網(wǎng)頁(yè)來(lái)說(shuō)的話,其實(shí)有很多是靜態(tài)資源,所以一般使用CDN進(jìn)行加速處理,或者使用專(zhuān)門(mén)的靜態(tài)資源處理器進(jìn)行處理。
對(duì)于靜態(tài)資源,有Vanish緩存層,緩存過(guò)期的時(shí)候,才會(huì)訪問(wèn)真正的Tomcat應(yīng)用集群。
Cache-control是用來(lái)控制緩存的,當(dāng)客戶端發(fā)送的請(qǐng)求包含max-age指令的時(shí)候,判斷在緩存層中,資源的緩存時(shí)間數(shù)值比指定時(shí)間的數(shù)值小,客戶端可以接收緩存,當(dāng)max-age=0,就需要請(qǐng)求到真是的數(shù)據(jù)層。
If-Modified-Since,如果服務(wù)器的某個(gè)資源在某個(gè)時(shí)間之后更新了,那么客戶端就需要下載最新的資源,如果沒(méi)有更新,返回304,客戶端不用下載。
當(dāng)數(shù)據(jù)都準(zhǔn)備好的時(shí)候,就會(huì)通過(guò)socket將數(shù)據(jù)發(fā)送出去到TCP層。
HTTP 請(qǐng)求的發(fā)送
HTTP因?yàn)槭腔赥CP協(xié)議的,所以會(huì)將數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制方式,變成一個(gè)一個(gè)的報(bào)文段。
HTTP是不知道數(shù)據(jù)丟失的,所以需要TCP這一層進(jìn)行維護(hù),比如數(shù)據(jù)沒(méi)有ACK,就需要重傳保證。TCP在發(fā)送的時(shí)候,會(huì)將自己的源IP地址和目標(biāo)IP地址寫(xiě)上,一層層的傳下去,然后通過(guò)服務(wù)端進(jìn)行處理,最后返回結(jié)果。
HTTP 返回的構(gòu)建
狀態(tài)碼會(huì)反應(yīng)HTTP請(qǐng)求的結(jié)果,200意外著大吉大利。
Retry-After 表示客戶端多久應(yīng)該在嘗試下,Content-Type對(duì)應(yīng)的數(shù)據(jù)格式
HTTP 2.0
HTTP1.1 其實(shí)是一收一發(fā)的模式,在實(shí)時(shí)性和并發(fā)性上存在問(wèn)題,
HTTP2的特性
傳輸?shù)臄?shù)據(jù)量的大幅減少,以二進(jìn)制方式傳輸,標(biāo)頭壓縮。
多路復(fù)用及相關(guān)功能,消息優(yōu)先級(jí)。
服務(wù)器消息推送,并行推送。
如果是接收 一個(gè)jpg,js,css 在1.1其實(shí)是串行的,但是在2.0中 在一個(gè)連接里,客戶端和服務(wù)端可以同時(shí)發(fā)送多個(gè)請(qǐng)求和回應(yīng)。
HTTP2 解決了HTTP1.1的隊(duì)首阻塞問(wèn)題,不需要pipeline機(jī)制用多條TCP連接實(shí)現(xiàn)并行請(qǐng)求與響應(yīng),減少TCP連接數(shù)對(duì)服務(wù)器性能的影響。同時(shí)可以通過(guò)在一個(gè)連接中進(jìn)行數(shù)據(jù)傳輸。提升傳輸速度。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-735012.html
小結(jié)
HTTP 協(xié)議雖然很常用,也很復(fù)雜,重點(diǎn)記住 GET、POST、 PUT、DELETE 這幾個(gè)方法,以及重要的首部字段;
HTTP 2.0 通過(guò)頭壓縮、分幀、二進(jìn)制編碼、多路復(fù)用等技術(shù)提升性能
QUIC 協(xié)議通過(guò)基于 UDP 自定義的類(lèi)似 TCP 的連接、重試、多路復(fù)用、流量控制技術(shù),進(jìn)一步提升性能。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-735012.html
到了這里,關(guān)于【網(wǎng)絡(luò)協(xié)議】聊聊http協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!