HTTP緩存和斷點(diǎn)續(xù)傳標(biāo)志

每個(gè)瀏覽器都自帶了HTTP緩存實(shí)現(xiàn)功能。只需要確保每個(gè)服務(wù)器響應(yīng)都提供正確的HTTP響應(yīng)頭標(biāo)志尘分,以指示瀏覽器何時(shí)可以緩存響應(yīng)以及可以緩存多久。

Cache-Control

image.png

每個(gè)服務(wù)端資源可以通過(guò)Cache-Control標(biāo)志定義其緩存策略境钟。

Cache-Control控制誰(shuí)在什么條件下可以緩存響應(yīng) 以及 可以緩存多久漱挚。

  • max-age

指定從請(qǐng)求的時(shí)間開(kāi)始,允許獲取的響應(yīng)被重用的最長(zhǎng)時(shí)間(單位:秒)弦牡。

例如友驮,max-age=60表示可在接下來(lái)的60秒緩存和重用響應(yīng)。

  • no-cacheno-store

no-cache 表示必須先與服務(wù)器確認(rèn)返回的響應(yīng)是否發(fā)生了變化喇伯,然后才能使用該響應(yīng)來(lái)滿(mǎn)足后續(xù)對(duì)同一網(wǎng)址的請(qǐng)求喊儡。因此拨与,如果存在合適的驗(yàn)證令牌(ETag)稻据,no-cache會(huì)發(fā)起往返通信來(lái)驗(yàn)證緩存的響應(yīng)。如果資源未發(fā)生變化,則不下載資源捻悯。

no-store 相對(duì)簡(jiǎn)單匆赃,直接禁止 瀏覽器以及所有中間緩存 存儲(chǔ)任何版本的返回響應(yīng)。例如今缚,包含個(gè)人隱私數(shù)據(jù)或銀行業(yè)務(wù)數(shù)據(jù)的響應(yīng)算柳。每次用戶(hù)請(qǐng)求該資源時(shí),都會(huì)向服務(wù)器發(fā)送請(qǐng)求姓言,并下載完整的響應(yīng)瞬项。

  • publicprivate

public 表示無(wú)論什么情況(比如,有與它相關(guān)聯(lián)的驗(yàn)證ETag何荚,響應(yīng)狀態(tài)碼無(wú)法正常緩存)囱淋,響應(yīng)都可以被緩存。大多數(shù)情況下餐塘,public不是必須的妥衣,因?yàn)槊鞔_的緩存信息(如 max-age)已表示響應(yīng)是可以緩存的。

private 表示瀏覽器可以緩存這個(gè)響應(yīng)戒傻,這個(gè)響應(yīng)通常只為單個(gè)用戶(hù)緩存税手,不允許任何中間緩存對(duì)其進(jìn)行緩存。例如需纳,用戶(hù)的瀏覽器可以緩存包含用戶(hù)信息的HTML網(wǎng)頁(yè)芦倒,但CDN不可以。

例子說(shuō)明

Cache-Control: max-age=86400 

瀏覽器以及任何中間緩存均可以將響應(yīng)(public響應(yīng))緩存長(zhǎng)達(dá)1天(60秒 * 60分鐘 * 24小時(shí))

Cache-Control: private不翩,max-age=600 

客戶(hù)端的瀏覽器只能將響應(yīng)緩存最長(zhǎng)10分鐘(60秒 * 10分鐘)熙暴。

Cache-Control: no-store 

不允許緩存響應(yīng),每次請(qǐng)求都必須完整獲取慌盯。

ETag

image.png

服務(wù)器使用ETag標(biāo)志代表驗(yàn)證令牌周霉,它可以實(shí)現(xiàn)高效的資源更新檢查,資源未發(fā)生變化時(shí)不會(huì)傳送任何數(shù)據(jù)亚皂。

ETag 可以解決max-age過(guò)期重新請(qǐng)求俱箱,但服務(wù)端資源未發(fā)生變化,重新下載效率太低的問(wèn)題灭必。

比如這樣一個(gè)場(chǎng)景:假如在首次獲取資源120秒后(max-age=120)狞谱,瀏覽器又對(duì)該資源發(fā)起了新的請(qǐng)求。首先禁漓,瀏覽器會(huì)檢查本地緩存并找到之前的響應(yīng)跟衅。可惜該響應(yīng)現(xiàn)在已過(guò)期播歼,瀏覽器無(wú)法使用伶跷。此時(shí),瀏覽器可以直接發(fā)出新的請(qǐng)求,并獲取新的完整響應(yīng)叭莫。但是這樣做效率太低蹈集,因?yàn)槿绻Y源未發(fā)生變化,那么下載 與緩存中相同 的資源雇初,則太浪費(fèi)網(wǎng)絡(luò)流量拢肆。

有了ETag就可以解決這樣的問(wèn)題場(chǎng)景。服務(wù)器生成并返回的隨機(jī)令牌ETag通常是文件內(nèi)容的哈希值 或 某個(gè)其他指紋靖诗」郑客戶(hù)端只需在下一次請(qǐng)求時(shí),將其(ETag)發(fā)送至服務(wù)器刊橘。如果ETag仍然相同移盆,則表示資源未發(fā)生變化,可以跳過(guò)下載伤为。

例如上面圖片咒循,客戶(hù)端自動(dòng)在If-None-Match的HTTP請(qǐng)求頭中請(qǐng)求ETag令牌。服務(wù)器根據(jù)當(dāng)前資源核對(duì)令牌绞愚。如果它未發(fā)生變化叙甸,服務(wù)器將返回304 Not Modified響應(yīng),告知瀏覽器緩存中的響應(yīng)未發(fā)生變化位衩,可以再延用120秒裆蒸。這樣瀏覽器就不用再次下載響應(yīng),節(jié)約時(shí)間和帶寬糖驴。

range & Content-Range

HTTP1.1 協(xié)議(RFC2616)開(kāi)始支持獲取文件的部分內(nèi)容僚祷,從而支持HTTP斷點(diǎn)續(xù)傳≈疲客戶(hù)端的請(qǐng)求頭對(duì)應(yīng)的參數(shù)是range辙谜,服務(wù)端的響應(yīng)頭對(duì)應(yīng)的參數(shù)是Content-Range

range

請(qǐng)求頭的參數(shù),一般格式如下:

range: (unit=first byte pos)-[last byte pos]

指定第一個(gè)字節(jié)的位置和最后一個(gè)字節(jié)的位置感昼。

例子說(shuō)明

range: bytes=0-7569

表示第 0-7569 字節(jié)范圍的內(nèi)容

range: bytes=-7569

表示最后7569字節(jié)的內(nèi)容

range: bytes=0-

表示從第0字節(jié)開(kāi)始到文件結(jié)束部分的內(nèi)容

range: bytes=0-0,-1

表示第一個(gè)和最后一個(gè)字節(jié)

range: bytes=100-200,400-500,600-700

同時(shí)指定幾個(gè)范圍

Content-Range

響應(yīng)頭的參數(shù)装哆,服務(wù)器返回當(dāng)前接受的范圍和文件總大小。一般格式如下:

Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth]

例子說(shuō)明

Content-Range: bytes 0-7569/50000

0-7569指當(dāng)期發(fā)送的數(shù)據(jù)范圍定嗓,50000指文件的總大小

在響應(yīng)完成后蜕琴,返回的響應(yīng)頭內(nèi)容表示不同的意思

HTTP/1.1 200 Ok(不使用斷點(diǎn)續(xù)傳方式) 
HTTP/1.1 206 Partial Content(使用斷點(diǎn)續(xù)傳方式)

參考

https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching

HTTP 斷點(diǎn)續(xù)傳(分塊傳輸)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宵溅,隨后出現(xiàn)的幾起案子凌简,更是在濱河造成了極大的恐慌,老刑警劉巖恃逻,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雏搂,死亡現(xiàn)場(chǎng)離奇詭異藕施,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)畔派,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)铅碍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)润绵,“玉大人线椰,你說(shuō)我怎么就攤上這事〕九危” “怎么了憨愉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)卿捎。 經(jīng)常有香客問(wèn)我配紫,道長(zhǎng),這世上最難降的妖魔是什么午阵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任躺孝,我火速辦了婚禮,結(jié)果婚禮上底桂,老公的妹妹穿的比我還像新娘植袍。我一直安慰自己,他們只是感情好籽懦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布于个。 她就那樣靜靜地躺著,像睡著了一般暮顺。 火紅的嫁衣襯著肌膚如雪厅篓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天捶码,我揣著相機(jī)與錄音羽氮,去河邊找鬼。 笑死惫恼,一個(gè)胖子當(dāng)著我的面吹牛乏苦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尤筐,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼汇荐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了盆繁?” 一聲冷哼從身側(cè)響起掀淘,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎油昂,沒(méi)想到半個(gè)月后革娄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體倾贰,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年拦惋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匆浙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厕妖,死狀恐怖首尼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情言秸,我是刑警寧澤软能,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站举畸,受9級(jí)特大地震影響查排,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抄沮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一跋核、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叛买,春花似錦砂代、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至难礼,卻和暖如春娃圆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛾茉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工讼呢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谦炬。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓悦屏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親键思。 傳聞我的和親對(duì)象是個(gè)殘疾皇子础爬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容