1.網(wǎng)絡(luò)5層模型
1.1)http 1.1的特點(diǎn)
1.持久鏈接
持久連接的特點(diǎn)是:只要任意一端沒有明確提出斷開連接简逮,則保持TCP連接狀態(tài)嘹黔。在HTTP1.0中栽惶,沒有默認(rèn)支持持久連接蛛砰,而在HTTP1.1中所有連接默認(rèn)都是持久連接
2.pipeline
HTTP管線化是將多個(gè)HTTP要求(request)整批提交的技術(shù),而在傳送過程中不需先等待服務(wù)端的回應(yīng)烟零。管線化機(jī)制須通過永久連接(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ā)送然磷,最后再在另一端把它們重新組合起來郑趁,解決了http 1.*的對(duì)手阻塞問題
2.同一個(gè)連接發(fā)送多個(gè)請(qǐng)求,不按照順序來接收(支持多路復(fù)用)
?多路復(fù)用允許同時(shí)通過單一的 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鏈接低效的問題
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
可緩存性:誰可以緩存
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= 專門為代理緩存設(shè)置, 如nginx緩存
max-stale=? 這個(gè)時(shí)間內(nèi) 即使超過max-age 也不去服務(wù)器取 就用過期緩存,在請(qǐng)求設(shè)置中有效
重新驗(yàn)證:
must-revalidate
proxy-revalidate
Cache-Control:private, max-age=0, must-revalidate
驗(yàn)證:ETag/Last-Modified
ETag
ETag是用來計(jì)算文件的內(nèi)容是否發(fā)生變化锰提,比如曙痘,你在文件中刪除一個(gè)空格,這樣都算文件內(nèi)容發(fā)生變化立肘。 通常做法是用md5或者SHA1算法边坤,計(jì)算出文件的唯一值。 在前端其實(shí)都可以完成谅年, 找到一個(gè)文件文件解析的md5算法茧痒,然后將文件傳入,就可以得到ETag的值融蹂。 不過這里旺订,我們著重點(diǎn)并不是讓你生成Etag,而是看看ETag在緩存中的重要作用超燃。
ETag是HTTP/1.1A的一種辦法区拳,由Web服務(wù)器生成,并寫入響應(yīng)頭中意乓。
//response HeadersETag:"751F63A30AB5F98F855D1D90D217B356"
接著樱调,到了瀏覽器之后,便緩存在本地。 當(dāng)下次打開同樣的文章時(shí)笆凌,會(huì)在請(qǐng)求頭中發(fā)送If-None-Match, 給服務(wù)器檢查文件是否發(fā)生變化圣猎。如果沒有,則告訴瀏覽器使用本地的乞而,否則返回新文件
//request HeadersIf-None-Match:"751F63A30AB5F98F855D1D90D217B356"
Nginx配置:
打開ngnix.conf文件送悔,檢查是否有以下語句:
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,來啟用這一緩存協(xié)議.
//Response HeaderLast-Modified:Tue,03Mar201501:38:18GMT
接受到這一響應(yīng)頭之后憾赁,瀏覽器會(huì)對(duì)該文件做一個(gè)緩存污朽,并保存該日期。當(dāng)下次請(qǐng)求的時(shí)候龙考,會(huì)通過If-Modified-Since將日期傳入并驗(yàn)證:
If-Modified-Since:Tue, 03?Mar?2015 01:38:18?GMT
如果日期未變蟆肆,則告訴瀏覽器使用緩存。
1.4)https加密
https證書生成
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)求詳情