【轉載】瀏覽器緩存詳解:expires cache-control last-modified

下面的內容展示了一個常見的 Response Headers,這些 Headers 要求客戶端最多緩存 3600 秒,也給出了一個?pub1259380237;gz?的校驗值。

HTTP/1.x 200 OK
Transfer-Encoding: chunked
Date: Sat, 28 Nov 2009 04:36:25 GMT
Server: LiteSpeed
Connection: close
X-Powered-By: W3 Total Cache/0.8
Pragma: public
Expires: Sat, 28 Nov 2009 05:36:25 GMT
Etag: "pub1259380237;gz"
Cache-Control: max-age=3600, public
Content-Type: text/html; charset=UTF-8
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
X-Pingback: http://net.tutsplus.com/xmlrpc.php
Content-Encoding: gzip
Vary: Accept-Encoding, Cookie, User-Agent

對于緩存而言,我們主要用了 EtagCache-ControlLast-Modified

?Cache-Control

Cache-Control 是指緩存指令,這個指令控制什么條件下可以緩存響應,以及可以緩存多久。這個協定取代了以前的?Expires?指令,在 HTTP/1.1 開始支持,在這么長時間后,我們可以認為 Cache-Control 在正常環境下都是支持的。Cache-Control的格式如下:

Cache-control: must-revalidate
Cache-control: no-cache
Cache-control: no-store
Cache-control: no-transform
Cache-control: public
Cache-control: private
Cache-control: proxy-revalidate
Cache-Control: max-age=<seconds>
Cache-control: s-maxage=<seconds>

誰可以緩存

public 與 private 用來指定誰可以緩存。public 是指任何資源都可以被緩存下來,即使某些部分需要 http 驗證的情況下;?private 則是要求針對單一用戶進行緩存,其他用戶是無法使用這一塊緩存的。

怎么緩存

no-cache,no-store 與 no-transform 來指定怎么緩存。“no-cache”表示必須先與服務器確認返回的響應是否發生了變化,然后才能使用該響應來滿足后續對同一網址的請求。因此,如果存在合適的校驗值 (ETag),no-cache 會發起往返通信來驗證緩存的響應,但如果資源未發生變化,則可避免下載。相比之下,“no-store”則要簡單得多。它直接禁止瀏覽器以及所有中間緩存存儲任何版本的返回響應,例如,包含個人隱私數據或銀行業務數據的響應。每次用戶請求該資產時,都會向服務器發送請求,并下載完整的響應。如果沒有指定這個字段,那么就認為是可以緩存的。

緩存多久

指令指定從請求的時間開始,允許獲取的響應被重用的最長時間(單位:秒)。例如,max-age=60 表示可在接下來的 60 秒緩存和重用響應。

Last-Modified and?If-Modified-Since

除了服務端發送的 Cache-Control 指令外,可以做的更靈活一些,畢竟不是所有請求都適用于不變的 max-age。If-Modified-Since 和 Last-Modified 這一對就是另一種靈活的解決方案。

?Last-Modified 是由服務端返回的,用于告知客戶端最后一次修改是什么時候。客戶端需要記錄下來這個值,并在下一次請求的時候,通過 If-Modified-Since 這個字段附上上一次服務端返回的 Last-Modified 的值。在這種情況下,服務端就有了兩次時間,在通過比對后,就可以知道在這段時間內,內容是否發生了改變。如果沒有發生變化,就會返回?304 NOT MODIFIED?這個狀態碼,而不是通常的 200。反之如果發生了變化,就進行正常的返回。

Etag and If-None-Match

還記得前面提交的 Etag 嗎?這是從另一種維度上來確定 Cache 是否需要更新。服務端會返回相應的 Etag,這個 Etag 客戶端不用關心其具體是怎么實現的,只需要能夠記錄下這個值就行。服務端是通過對內容進行 hash,或者別的算法來生成這樣的 Etag,當客戶端請求的時候,只需要去檢查兩者是否相同,即可知道內容有沒有發生變化。返回的方式,與前面 If-Modified-Since and Last-Modified 相同。

?

轉載于:https://www.cnblogs.com/caiyanhu/p/6931624.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541296.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541296.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541296.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ctype函數_PHP ctype_xdigit()函數與示例

ctype函數PHP ctype_xdigit()函數 (PHP ctype_xdigit() function) ctype_xdigit() function is a character type (CType) function in PHP, it is used to check whether a given string contains hexadecimal digits or not. ctype_xdigit()函數是PHP中的字符類型(CType)函數…

linux ldd運行不成功,Linux_Linux:Ldd命令介紹及使用方法,1、首先ldd不是一個可執行程序 - phpStudy...

Linux&#xff1a;Ldd命令介紹及使用方法1、首先ldd不是一個可執行程序&#xff0c;而只是一個shell腳本2、ldd能夠顯示可執行模塊的dependency&#xff0c;其原理是通過設置一系列的環境變量&#xff0c;如下&#xff1a;LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_L…

開發原生的 Google 眼鏡應用 【已翻譯100%】(2/2)

使用傳感器 Glass沒有鍵盤或觸摸屏&#xff0c;但仍然具有移動設備所有的標準的傳感器。你可以使用標準的傳感器組件來訪問這些傳感器。 定位和GPS Glass內置有GPS。TLocationSensor具有一個OnLocationChanged事件&#xff0c;這一事件在GPS組件被激活時產生&#xff0c;在有除…

linux下php的安裝,Linux下PHP安裝

1 下載php源碼安裝包 個人是php-5.6.30.tar.gzphp2 解壓文件mysqltar -zxvf php-5.6.30.tar.gznginx3 編譯安裝sqlcd php-5.6.30api建立www用戶和www用戶組curlgroupadd wwwsocketuseradd -g www wwwphp-fpm在編譯以前先把依賴包都裝上urlyum install curl curl-develyum inst…

PHP array_filter()函數與示例

PHP array_filter()函數 (PHP array_filter() Function) array_filter() function is used to apply a filter on array elements based on the function and returns the array with filtered elements, it accepts an array to be checked and a callback function. The call…

微軟宣布以 262 億美元現金收購 LinkedIn

北京時間6月13日20:45&#xff08;美國當地時間6月13日上午8:45&#xff09;&#xff0c;微軟(Nasdaq: MSFT)和LinkedIn(領英&#xff0c;NYSE: LNKD)對外宣布&#xff0c;雙方達成協議&#xff0c;微軟宣布將以每股196美元、總價262億美元的價格收購LinkedIn&#xff0c;由現金…

linux vim 快速定位位置,vim快速移動定位的一些操作命令

很多時候你在編輯文件時移動光標都會花很長時間&#xff0c;這樣就無法高效的編輯了&#xff0c;要想達到高效編輯最好能夠將光標馬上定位到你需要的位置&#xff0c;vim就是可以滿足你這樣需求的一款編輯器&#xff0c;本節就要講一下vim快速移動定位的一些操作命令。下面的操…

本月初 本月末 java_本月內容作家(2018年8月)

本月初 本月末 javaWe are feeling glad to announce that Prerana Jain is the Content Writer Of The Month (August 2018) on the basis of her excellent contribution and her support to us. 我們很高興地宣布&#xff0c; Prera??na Jain憑借其出色的貢獻和對我們的支…

“玲瓏杯”線上賽 Round #15 河南專場 F 咸魚文章

elttiL moT nwod eht teerts sllac ruo god ” ehT peek god ” . piZ si a peehs god . tuB nehw moT seirt ot yas ” peeS ” , ti semoc tuo ” peek ” . dnA ni a yaw moT si thgir . piZ si syawla gnignirb sgniht oh rof su ot peek ! ll’I llet uoy tuoba emos fo m…

線性代數向量內積_向量的外積| 使用Python的線性代數

線性代數向量內積Prerequisites: 先決條件&#xff1a; Defining Vector using Numpy 使用Numpy定義向量 Learn: how to code for outer product of two vectors using am inbuilt function in numpy library? 了解&#xff1a;如何使用numpy庫中的內置函數為兩個向量的外部乘…

c語言案例朗讀工具源碼,C語言編寫簡單朗讀小工具(有源碼)

原標題&#xff1a;C語言編寫簡單朗讀小工具(有源碼)最近不少人在后臺留言說學C都是面對枯燥的控制臺程序&#xff0c;能不能體現一下C語言的實際用途&#xff0c;今天我們就理論結合實踐一把&#xff1a;C語言結合VBS腳本編寫一個簡單的朗讀小工具&#xff0c;做一個能夠發音的…

WAS集群系列(5):集群搭建:步驟3:安裝IHS軟件

選擇“安裝IBM HTTPServer”選項&#xff0c;點擊“安裝向導”。例如以下圖提示&#xff1a; 安裝提示&#xff0c;逐步點擊“下一步”&#xff0c;當中偶有幾處細節注意就可以。列舉例如以下&#xff1a; &#xff08;1&#xff09;、產品安裝路徑與先前WAS軟件所安裝路徑統一…

L1-056 猜數字 C語言,PAT L1-032 Left-pad

根據新浪微博上的消息&#xff0c;有一位開發者不滿NPM(Node Package Manager)的做法&#xff0c;收回了自己的開源代碼&#xff0c;其中包括一個叫left-pad的模塊&#xff0c;就是這個模塊把javascript里面的React/Babel干癱瘓了。這是個什么樣的模塊&#xff1f;就是在字符串…

單鏈表刪除整表_單鏈表刪除

單鏈表刪除整表Deletion can be at various positions like: 刪除可以在各個位置進行&#xff0c;例如&#xff1a; Deleting the first node 刪除第一個節點 Deleting the last node 刪除最后一個節點 Deleting the intermediate node 刪除中間節點 刪除單個鏈表中的第一個節…

WordPress數據表wp-options數據字段存JSON數據

2019獨角獸企業重金招聘Python工程師標準>>> wp_options表是WordPress中最重要的表&#xff0c;一切程序設置、主題設置和絕大多數插件的設置大都保存在此表。 WordPress里面數據表wp-options數據字段存JSON數據 &#xff1a; a:90: {s:11:"^wp-json/?$"…

css scroll屬性_CSS中的scroll-behavior屬性

css scroll屬性CSS | 滾動行為屬性 (CSS | scroll-behavior property) Who does not want their links to function smoothly and attractively? This type of functionality is very easy to implement. All you need is a bit of awareness about the property that would h…

c 語言五子棋游戲代碼,C語言案例:控制臺版本的五子棋游戲【代碼】

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓return true;}x;}return false;}bool isLeftInclinedWin(bool isBlack,int x,int y){char c isBlack ? :O;int count;while(x>0 && y>0 && state[x][y] c){y--;x--;}count 0;if(state[x][y] c) count 1…

基于HTML5 Canvas 實現彈出框

用戶鼠標移入時&#xff0c;有彈出框出現&#xff0c;這樣的需求很常見。這在處理HTML元素實現時簡單&#xff0c;但是如果是對 HTML5 Canvas 構成的圖形進行處理&#xff0c;這種方法不再適用&#xff0c;因為 Canvas 使用的是另外一套機制&#xff0c;無論在 Canvas 上繪制多…

半素數c語言,非常簡單的c題目 不懂 緊急求助

1 半素數素數是指大于1且只有1和他本身兩個因子的正整數&#xff0c;例如2、3、5、89都是素數&#xff0c;2、4、10都不是素數。在這里我給半素數下一個定義&#xff1a;一個大于1的正整數能分解為兩個素數的乘積&#xff0c;那么這個正整數就是半素數&#xff0c;比如62*3&am…

JavaScript | 嵌套if的示例

Example: 例&#xff1a; In this example, we are reading salary of an employee and finding the discount and net pay based on given salary and discount rate. 在此示例中&#xff0c;我們正在讀取員工的薪水&#xff0c;并根據給定的薪水和折扣率找到折扣和凈工資。 …