http雜談

瀏覽器url生命周期


1.網(wǎng)絡(luò)5層模型



1.1)http 1.1的特點(diǎn)

1.持久鏈接

持久連接的特點(diǎn)是:只要任意一端沒(méi)有明確提出斷開(kāi)連接,則保持TCP連接狀態(tài)。在HTTP1.0中,沒(méi)有默認(rèn)支持持久連接,而在HTTP1.1中所有連接默認(rèn)都是持久連接

2.pipeline

HTTP管線化是將多個(gè)HTTP要求(request)整批提交的技術(shù),而在傳送過(guò)程中不需先等待服務(wù)端的回應(yīng)。管線化機(jī)制須通過(guò)永久連接(persistent connection)完成,僅HTTP/1.1支持此技術(shù)(HTTP/1.0不支持),并且只有GET和HEAD要求可以進(jìn)行管線化,而POST則有所限制。此外,初次創(chuàng)建連接時(shí)也不應(yīng)啟動(dòng)管線機(jī)制.

http管線化是一項(xiàng)實(shí)現(xiàn)了多個(gè)http請(qǐng)求但不需要等待響應(yīng)就能夠?qū)戇M(jìn)同一個(gè)socket的技術(shù),僅有http1.1規(guī)范支持http管線化,1.0并不支持;


1.2) http 2.0

1.數(shù)據(jù)以二進(jìn)制傳輸 (將通信的基本單位縮小為幀)

即應(yīng)用層(HTTP)和傳輸層(TCP or UDP)之間增加一個(gè)二進(jìn)制分幀層,因此在多向請(qǐng)求和響應(yīng)時(shí),客戶端和服務(wù)器可以把HTTP消息分解為互不依賴的幀,然后亂序發(fā)送,最后再在另一端把它們重新組合起來(lái),解決了http 1.*的對(duì)手阻塞問(wèn)題

2.同一個(gè)連接發(fā)送多個(gè)請(qǐng)求,不按照順序來(lái)接收(支持多路復(fù)用)

?多路復(fù)用允許同時(shí)通過(guò)單一的 HTTP 2.0 連接發(fā)起多重的請(qǐng)求-響應(yīng)消息,即所有HTTP 2.0 連接都是持久化的,而且客戶端與服務(wù)器之間也只需要一個(gè)連接即可,所有數(shù)據(jù)流共用同一個(gè)連接 ,減少了因http鏈接多而引起的網(wǎng)絡(luò)擁塞(在 HTTP1.1 協(xié)議中,同一時(shí)間,瀏覽器會(huì)針對(duì)同一域名下的請(qǐng)求有一定數(shù)量限制),解決了慢啟動(dòng)針對(duì)突發(fā)性和短時(shí)性的http鏈接低效的問(wèn)題

3.頭信息壓縮(首部壓縮)

http 2.0支持DEFLATE和HPACK?算法的壓縮。

4.推送等提高效率功能(服務(wù)端推送)

指客戶端請(qǐng)求之前發(fā)送數(shù)據(jù)的機(jī)制,在 HTTP 2.0 中,服務(wù)器可以對(duì)客戶端的一個(gè)請(qǐng)求發(fā)送多個(gè)響應(yīng)。

5.請(qǐng)求優(yōu)先級(jí)

HTTP 2.0 使用一個(gè)31比特的優(yōu)先值,0表示最高優(yōu)先級(jí), 2(31)-1表示最低優(yōu)先級(jí),服務(wù)器端就可以根據(jù)優(yōu)先級(jí),控制資源分配,優(yōu)先處理和返回最高優(yōu)先級(jí)的請(qǐng)求幀給客戶端。


1.3) 緩存工作原理

https://segmentfault.com/a/1190000004486640

緩存工作流程


可緩存性:誰(shuí)可以緩存

public都可以緩存

private只有發(fā)起請(qǐng)求的瀏覽器可以 ,nginx緩存 不能用

no-cache可以緩存 但是要服務(wù)器驗(yàn)證 :Last-Modified和Etag

no-store 就是不可緩存

no-transform 代理服務(wù)器不可改動(dòng)緩存內(nèi)容

到期:

max-age= 瀏覽器用這個(gè)

s-maxage= 專門(mén)為代理緩存設(shè)置, 如nginx緩存

max-stale=? 這個(gè)時(shí)間內(nèi) 即使超過(guò)max-age 也不去服務(wù)器取 就用過(guò)期緩存,在請(qǐng)求設(shè)置中有效

重新驗(yàn)證:

must-revalidate

proxy-revalidate

Cache-Control:private, max-age=0, must-revalidate

驗(yàn)證:ETag/Last-Modified

ETag

ETag是用來(lái)計(jì)算文件的內(nèi)容是否發(fā)生變化,比如,你在文件中刪除一個(gè)空格,這樣都算文件內(nèi)容發(fā)生變化。 通常做法是用md5或者SHA1算法,計(jì)算出文件的唯一值。 在前端其實(shí)都可以完成, 找到一個(gè)文件文件解析的md5算法,然后將文件傳入,就可以得到ETag的值。 不過(guò)這里,我們著重點(diǎn)并不是讓你生成Etag,而是看看ETag在緩存中的重要作用。

ETag是HTTP/1.1A的一種辦法,由Web服務(wù)器生成,并寫(xiě)入響應(yīng)頭中。

//response HeadersETag:"751F63A30AB5F98F855D1D90D217B356"

接著,到了瀏覽器之后,便緩存在本地。 當(dāng)下次打開(kāi)同樣的文章時(shí),會(huì)在請(qǐng)求頭中發(fā)送If-None-Match, 給服務(wù)器檢查文件是否發(fā)生變化。如果沒(méi)有,則告訴瀏覽器使用本地的,否則返回新文件

//request HeadersIf-None-Match:"751F63A30AB5F98F855D1D90D217B356"




Nginx配置:

打開(kāi)ngnix.conf文件,檢查是否有以下語(yǔ)句:

etag off;

more_set_headers -s 404 -t 'ETag';

more_clear_headers 'Etag';


Last-Modified

這和文檔內(nèi)容信息驗(yàn)證不同,這里采用的是日期驗(yàn)證辦法。 即,服務(wù)器上會(huì)對(duì)文件打上一個(gè)文件改動(dòng)的日期,然后客戶端接受該日期,下次請(qǐng)求時(shí),返回該日期,服務(wù)器驗(yàn)證,如果日期未變,則告訴瀏覽器使用本地緩存即可。

即,在服務(wù)器的相應(yīng)頭中,可以設(shè)置Last-Modified,來(lái)啟用這一緩存協(xié)議.

//Response HeaderLast-Modified:Tue,03Mar201501:38:18GMT

接受到這一響應(yīng)頭之后,瀏覽器會(huì)對(duì)該文件做一個(gè)緩存,并保存該日期。當(dāng)下次請(qǐng)求的時(shí)候,會(huì)通過(guò)If-Modified-Since將日期傳入并驗(yàn)證:

If-Modified-Since:Tue, 03?Mar?2015 01:38:18?GMT

如果日期未變,則告訴瀏覽器使用緩存。


1.4)https加密


https證書(shū)生成


nginx中https配置




瀏覽器http跳轉(zhuǎn)https



1.5)http 2.0優(yōu)勢(shì)

1.信道復(fù)用 2.分幀傳輸 3.Server Push

nginx中http2 配置



客戶端接受服務(wù)器推送



Chrome查看統(tǒng)計(jì)請(qǐng)求詳情


最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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