摘要:狀態(tài)碼,可避免請(qǐng)求發(fā)送到服務(wù)器??梢酝ㄟ^標(biāo)識(shí)文件版本名加長緩存時(shí)間的方式來減少響應(yīng)。
推薦閱讀:
伯樂在線——HTTP 緩存機(jī)制一二三
IMWeb前端博客——HTTP緩存控制小結(jié)
IT筆錄——http消息頭
關(guān)鍵頭部字段
cache-control、 Pragma
if-Match、if-None-Match
if-Modified-Since、if-Unmodified-Since
ETag
Expires、Last-Modified
Pragmahttp1.0可用,現(xiàn)在為了向下兼容,也設(shè)置該頭部,只有一個(gè)值:no-cache禁用緩存
Expires設(shè)置緩存時(shí)間(該時(shí)間相對(duì)于服務(wù)器),接受一個(gè)GMT(格林尼治時(shí)間),用來告訴瀏覽器過期時(shí)間,如果還沒有過這個(gè)時(shí)間則不發(fā)送請(qǐng)求。
Expires: Sun Jul 15 2018 19:13:07 GMTcache-control
也可用來設(shè)置緩存時(shí)間,http1.1與http1.0可用,三者優(yōu)先級(jí):
Pragma > Cache-Control > Expires
可設(shè)置多個(gè)值,比如常用的:no-cache, max-age, public, private
Last-Modified接受一個(gè)格林尼治時(shí)間,說明資源的最近一次的修改時(shí)間,該字段的作用是當(dāng)某個(gè)資源保存的緩存時(shí)間過期了,但服務(wù)器并沒有更新過這個(gè)資源,那么可以告訴客戶端此資源沒有更新,可以獲取緩存中的內(nèi)容(返回304,不返回實(shí)體內(nèi)容)
if-Modified-SinceLast-Modified的值會(huì)在下一次的請(qǐng)求中通過if-Modified-Since傳遞給服務(wù)器,如果它的值和此時(shí)服務(wù)器的Last-Modified值一致,說明沒有修改,服務(wù)器返回304。如果不一致則當(dāng)作正常請(qǐng)求處理,返回資源和200狀態(tài)碼。
ETag服務(wù)端資源有可能被更新了,但是實(shí)際內(nèi)容并沒有改變。但是這樣依然會(huì)引起Last-Modified的更新,服務(wù)器給客戶端返回沒有任何改變的內(nèi)容。為了解決這個(gè)問題,引入了ETag。用于http1.1。
服務(wù)器為資源生成一個(gè)唯一的字符串,如通過md5編碼。只要不變,生成的字符串就不變。在客戶端請(qǐng)求資源的時(shí)候,將該ETag一起返回給客戶端,客戶端保留該ETag,下次請(qǐng)求的時(shí)候帶上。然后比較ETag,相同則表示內(nèi)容相同,返回304;不同,返回資源和200狀態(tài)碼。
ETag的值會(huì)通過if-None-Match頭部傳遞給服務(wù)器,然后服務(wù)器比較ETag的值,相同則表示內(nèi)容相同,返回304;不同,返回資源和200狀態(tài)碼。
另外的 if-None-Match,if-Unmodified-Since他們不是用來實(shí)現(xiàn)緩存策略的,而是用來優(yōu)化并發(fā)控制,他們的作用是,使得當(dāng)前請(qǐng)求成為條件式請(qǐng)求:只有當(dāng)資源在指定的時(shí)間之后沒有進(jìn)行過修改的情況下,服務(wù)器才會(huì)返回請(qǐng)求的資源,或是接受 POST 或其他 non-safe 方法的請(qǐng)求。例如在某些場(chǎng)景:假如在原始副本獲取之后,服務(wù)器上所存儲(chǔ)的文檔已經(jīng)被修改,那么對(duì)其作出的編輯會(huì)被拒絕提交。
總結(jié)Expires / Cache-Control用來設(shè)置緩存時(shí)間,即資源有效時(shí)間。狀態(tài)碼 200(from cache),可避免請(qǐng)求發(fā)送到服務(wù)器。
Last-Modified / ETag用來判斷資源是否被修改了。狀態(tài)碼 304(not change),可避免傳輸相同的資源內(nèi)容,造成帶寬和時(shí)間的浪費(fèi)。
使用原則需要兼容HTTP1.0的時(shí)候需要使用Expires,不然可以考慮直接使用Cache-Control
需要處理一秒內(nèi)多次修改的情況,或者其他Last-Modified處理不了的情況,才使用ETag,否則使用Last-- Modified。
對(duì)于所有可緩存資源,需要指定一個(gè)Expires或Cache-Control,同時(shí)指定Last-Modified或者Etag。
可以通過標(biāo)識(shí)文件版本名、加長緩存時(shí)間的方式來減少304響應(yīng)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96155.html
摘要:如果沒有學(xué)習(xí)過計(jì)算機(jī)科學(xué)的程序員,當(dāng)我們?cè)谔幚硪恍﹩栴}時(shí),比較熟悉的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,數(shù)組無疑是一個(gè)很好的選擇。 showImg(https://segmentfault.com/img/bVTSjt?w=400&h=300); 1、常見 CSS 布局方式詳見: 一些常見的 CSS 布局方式梳理,涉及 Flex 布局、Grid 布局、圣杯布局、雙飛翼布局等。http://cherryb...
摘要:如果沒有學(xué)習(xí)過計(jì)算機(jī)科學(xué)的程序員,當(dāng)我們?cè)谔幚硪恍﹩栴}時(shí),比較熟悉的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,數(shù)組無疑是一個(gè)很好的選擇。 showImg(https://segmentfault.com/img/bVTSjt?w=400&h=300); 1、常見 CSS 布局方式詳見: 一些常見的 CSS 布局方式梳理,涉及 Flex 布局、Grid 布局、圣杯布局、雙飛翼布局等。http://cherryb...
摘要:歡迎來我的個(gè)人站點(diǎn)性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動(dòng)及頁面渲染優(yōu)化理論寫法對(duì)壓縮率的影響唯快不破應(yīng)用的個(gè)優(yōu)化步驟進(jìn)階鵝廠大神用直出實(shí)現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補(bǔ)課緩存機(jī)制優(yōu)化動(dòng) 歡迎來我的個(gè)人站點(diǎn) 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動(dòng) scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...
摘要:歡迎來我的個(gè)人站點(diǎn)性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動(dòng)及頁面渲染優(yōu)化理論寫法對(duì)壓縮率的影響唯快不破應(yīng)用的個(gè)優(yōu)化步驟進(jìn)階鵝廠大神用直出實(shí)現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補(bǔ)課緩存機(jī)制優(yōu)化動(dòng) 歡迎來我的個(gè)人站點(diǎn) 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動(dòng) scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...
閱讀 2668·2023-04-26 00:42
閱讀 2815·2021-09-24 10:34
閱讀 3826·2021-09-24 09:48
閱讀 4163·2021-09-03 10:28
閱讀 2584·2019-08-30 15:56
閱讀 2780·2019-08-30 15:55
閱讀 3272·2019-08-29 12:46
閱讀 2251·2019-08-28 17:52