HTTP協議 (四) 緩存

HTTP協議 (四) 緩存

閱讀目錄

  1. 緩存的概念
  2. 緩存的好處
  3. Fiddler可以方便地查看緩存的header
  4. 如何判斷緩存新鮮度
  5. 通過最后修改時間,判斷緩存新鮮度
  6. 與緩存相關的header
  7. ETag
  8. 瀏覽器不使用緩存
  9. 直接使用緩存,不去服務器端驗證
  10. 如何設置IE不使用緩存
  11. 公有緩存和私有緩存的區別

?

緩存的概念

緩存這個東西真的是無處不在, 有瀏覽器端的緩存, 有服務器端的緩存,有代理服務器的緩存, 有ASP.NET頁面緩存,對象緩存。 數據庫也有緩存, 等等。

http中具有緩存功能的是瀏覽器緩存,以及緩存代理服務器。

?

http緩存的是指:當Web請求抵達緩存時, 如果本地有“已緩存的”副本,就可以從本地存儲設備而不是從原始服務器中提取這個文檔。

緩存的好處

緩存的好處是顯而易見的, 好處有,

1. 減少了冗余的數據傳輸,節省了網費。

2. 減少了服務器的負擔, 大大提高了網站的性能

3. 加快了客戶端加載網頁的速度

?

Fiddler可以方便地查看緩存的header

Fiddler中把header都分門別類的放在一起,這樣方便查看。

?

如何判斷緩存新鮮度

Web服務器通過2種方式來判斷瀏覽器緩存是否是最新的。

第一種, 瀏覽器把緩存文件的最后修改時間通過 header ”If-Modified-Since“來告訴Web服務器。

第二種, 瀏覽器把緩存文件的ETag, 通過header "If-None-Match", 來告訴Web服務器。

?

通過最后修改時間, 來判斷緩存新鮮度

1. 瀏覽器客戶端想請求一個文檔,? 首先檢查本地緩存,發現存在這個文檔的緩存,? 獲取緩存中文檔的最后修改時間,通過: If-Modified-Since, 發送Request給Web服務器。

2. Web服務器收到Request,將服務器的文檔修改時間(Last-Modified): 跟request header 中的,If-Modified-Since相比較, 如果時間是一樣的, 說明緩存還是最新的, Web服務器將發送304 Not Modified給瀏覽器客戶端, 告訴客戶端直接使用緩存里的版本。如下圖。

3. 假如該文檔已經被更新了。Web服務器將發送該文檔的最新版本給瀏覽器客戶端, 如下圖。

?

實例: 打開Fiddler, 然后打開博客園首頁。然后F5刷新幾次瀏覽器。 你會看到博客園首頁也用了緩存。

?

與緩存有關的header

我們來看看每個header的具體含義。

Request

Cache-Control: max-age=0以秒為單位
If-Modified-Since: Mon, 19 Nov 2012 08:38:01 GMT緩存文件的最后修改時間。
If-None-Match: "0693f67a67cc1:0"緩存文件的Etag值
Cache-Control: no-cache不使用緩存
Pragma: no-cache不使用緩存
??

?

?

????

?

?

?

Response

Cache-Control: public響應被緩存,并且在多用戶間共享,? (公有緩存和私有緩存的區別,請看另一節)
Cache-Control: private響應只能作為私有緩存,不能在用戶之間共享
Cache-Control:no-cache提醒瀏覽器要從服務器提取文檔進行驗證
Cache-Control:no-store絕對禁止緩存(用于機密,敏感文件)
Cache-Control: max-age=6060秒之后緩存過期(相對時間)
Date: Mon, 19 Nov 2012 08:39:00 GMT當前response發送的時間
Expires: Mon, 19 Nov 2012 08:40:01 GMT緩存過期的時間(絕對時間)
Last-Modified: Mon, 19 Nov 2012 08:38:01 GMT服務器端文件的最后修改時間
ETag: "20b1add7ec1cd1:0"服務器端文件的Etag值

?

?

?

?

?

?

?

?

?

?

如果同時存在cache-control和Expires怎么辦呢? 瀏覽器總是優先使用cache-control,如果沒有cache-control才考慮Expires?

?

ETag

ETag是實體標簽(Entity Tag)的縮寫, 根據實體內容生成的一段hash字符串(類似于MD5或者SHA1之后的結果),可以標識資源的狀態。 當資源發送改變時,ETag也隨之發生變化。

ETag是Web服務端產生的,然后發給瀏覽器客戶端。瀏覽器客戶端是不用關心Etag是如何產生的。

為什么使用ETag呢? 主要是為了解決Last-Modified 無法解決的一些問題。

1. 某些服務器不能精確得到文件的最后修改時間, 這樣就無法通過最后修改時間來判斷文件是否更新了。

2. 某些文件的修改非常頻繁,在秒以下的時間內進行修改. Last-Modified只能精確到秒。

3. 一些文件的最后修改時間改變了,但是內容并未改變。 我們不希望客戶端認為這個文件修改了。

?

實例, 打開Fiddler, 打開博客園首頁。? 你可以看到很多圖片,或者CSS文件都是用了緩存。 這些都是通過比較ETag的值,來判斷文件是否更新了。

?

瀏覽器不使用緩存

CTRL+F5強制刷新瀏覽器,或者設置IE。? 可以讓瀏覽器不使用緩存。

1. 瀏覽器發送Http request, 給Web 服務器, header中帶有Cache-Control: no-cache.?? 明確告訴Web服務器,客戶端不使用緩存。?

2. Web服務器將把最新的文檔發送給瀏覽器客戶端.

?

實例:

打開Fiddler, 打開博客園首頁, 然后按CTRL+F5強制刷新瀏覽器,你將看到

Pragma: no-cache的作用和Cache-Control: no-cache一模一樣。 都是不使用緩存。

Pragma: no-cache 是HTTP 1.0中定義的, 所以為了兼容HTTP 1.0. 所以會同時使用Pragma: no-cache和Cache-Control: no-cache

?

直接使用緩存,不去服務器驗證

按F5刷新瀏覽器和在地址欄里輸入網址然后回車。 這兩個行為是不一樣的。

按F5刷新瀏覽器, 瀏覽器會去Web服務器驗證緩存。

如果是在地址欄輸入網址然后回車,瀏覽器會"直接使用有效的緩存", 而不會發http request 去服務器驗證緩存,這種情況叫做緩存命中,如下圖

?

實例: 比較第一次訪問博客園主頁和第二次博客園主頁

1. 啟動Fiddler, 用firefox打開博客園主頁, 發現有50多個session。

2. 按CTRL+X將Fiddler中的所有session刪除。 關閉firefox,重新打開一個firefox,打開博客園主頁。?? 發現只有30多個session.

分析;? 少了的session是因為firefox直接用了緩存,而沒有發http request。

?

?

如何設置IE不使用緩存

打開IE。點擊工具欄上的, 工具->Internet選項->常規->瀏覽歷史記錄 設置. 選擇“從不”。然后保存。

然后點擊“刪除”? 把Internet臨時文件都刪掉 (IE緩存的文件就是Internet臨時文件)。

?

公有緩存和私有緩存的區別

Cache-Control: public 指可以公有緩存, 可以是數千名用戶共享的。

Cache-Control: private 指只支持私有緩存, 私有緩存是單個用戶專用的。

轉載自?? http://www.cnblogs.com/TankXiao/archive/2012/11/28/2793365.html

轉載于:https://www.cnblogs.com/dhl-2013/p/3252904.html

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

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

相關文章

160 - 10 Andrénalin.3

環境: Windows xp sp3 打開,是只有一個key,輸入個goodname試試,錯誤。。。記下錯誤信息 查殼,無殼的VB程序。 查找字符串: 00402036 UNICODE "kXy^rO|*yXo*m\kMuOn*" 00402090 UNICODE &qu…

160 - 11 Andrnalin.4

環境: Windows xp sp3 打開,這次的界面炫酷多了,就像輸保險箱密碼。 旁邊一個“UNREGISTRIERT”表示還沒注冊 輸入個666666,沒反應又沒有確認按鈕,可以猜測是用timer來檢測輸入的正確性 查殼,無殼的VB程…

ZooKeeper啟動過程2:FastLeaderElection

前一篇文章中說到,啟動ZooKeeper集群時,需要分別啟動集群中的各個節點,各節點以QuorumPeer的形式啟動,最后到達startLeaderElection和lookForLeader。 先說startLeaderElection 首先,初始化節點自身的currentVote【當前…

C++編程調試秘笈(第1次閱讀)

閱讀時間: 2017-4-17 --- 2017-4-19 第一次閱讀《C編程調試秘笈》,可能是因為對項目開發的經驗不足(最近只是在做簡單的五子棋),使得對里面很多的知識點了解得不是很深。 《C編程調試秘笈》講的內容個人覺得與調試的技…

Web Component 文章

周末無意中了解了Web Component的概念。 http://blog.amowu.com/2013/06/web-components.html http://www.v2ex.com/t/69389 http://www.infoq.com/cn/news/2013/06/webcomponents Shadow DOM http://www.toobug.net/article/what_is_shadow_dom.html http://www.html5rocks.co…

遮罩效果 css3

CSS3提供了遮罩效果,這是以前CSS2中比較難實現的一個新特性,配合SVG或者canvas同樣也可以實現遮罩效果,他的效果就如下圖所示: 簡單的說就是在一個層上面加一個過濾層,過濾層透明度越低,底層就顯示的越多,反…

調試九法(第1次閱讀)

閱讀時間: 2017年4月19日 --- 2017年4月22日 第一次看到這本書的時候,是在網上看到它被評論得十分優秀,只要掌握了書中的方法,就能找到所有的BUG。我就是這樣被吸引過來的。 因為是調試9法,所以總共講了調試的時候注意…

Oracle11g密碼區分大小寫導致database link無法連接

Oracle11g的密碼默認是區分大小寫的,該特性通過初始化參數sec_case_sensitive_logon控制,默認TRUE表示區分大小寫。但是Oracle11g之前的版本密碼都是不區分大小寫的,所以在Oracle10g等以前版本創建到Oracle11g的database link時,可…

OC-深淺復制

【OC學習-26】對象的淺拷貝和深拷貝——關鍵在于屬性是否可被拷貝 對象的拷貝分為淺拷貝和深拷貝,淺拷貝就是只拷貝對象,但是屬性不拷貝,拷貝出來的對象和原來的對象共用屬性,即指向同一個屬性地址。深拷貝則相當于不僅拷貝了一個…

計算機科學導論(第一次閱讀)

時間: 2017年4月22日----2017年4月26 這是一本計算機入門書籍,粗略地描述了計算機各個方面的內容。當然對于一些十分復雜的知識,也僅僅是大概描述了這方面知識的一些了解知識。

配置SQLServer,允許遠程連接

需要別人遠程你的數據庫,首先需要的是在一個局域網內,或者連接的是同一個路由器,接下來就是具體步驟: (一)首先是要檢查SQLServer數據庫服務器中是否允許遠程鏈接。其具體操作為: (1…

彈出打開/保存文件對話框 選擇文件夾對話框

打開/保存文件對話框: CFileDialog::CFileDialog(BOOL bOpenFileDialog, //為TRUE則顯示打開對話框,為FALSE則顯示保存對話文件對話框LPCTSTR lpszDefExt NULL, //默認的文件擴展名LPCTSTR lpszFileName NULL, //默認的文件名DWORD dwFlags OFN_HIDEREADONLY | O…

SharePoint 2013的100個新功能之網站管理(一)

一:設置盤 網站操作現在被替換為新的(設置)盤子。一些新的操作像添加一個應用、添加一個頁面或設計管理器被添加而像創建網站則從菜單中移除了。 二:移除以其他用戶身份登錄 在SharePoint 2013中,從用戶歡迎菜單中移除…

160 - 13 badboy

偷懶了很久也是時候要繼續開始學習了。 環境: windows xp sp3 工具: VB Decompiler v8.3 這次是個vb文件,所以嘗試一下用這個的感覺。 打開文件之后發現有兩個CrackMe選擇,分別是1.0版本和2.0版本。 打開vb decompiler&#…

VBS操作剪切板

VBS操作剪切板 設置剪切板的內容 Dim Form, TextBox Set Form CreateObject("Forms.Form.1") Set TextBox Form.Controls.Add("Forms.TextBox.1").Object TextBox.MultiLine True TextBox.Text "忘記了,喜歡一個人的感覺" TextBo…

MVN生成java項目

mvn archetype:create -DgroupIdcom.mycompany.app -DartifactIdmyWeb -DarchetypeArtifactIdmaven-archetype-webapp 轉載于:https://www.cnblogs.com/alaricblog/p/3278239.html

160 - 14 bjanes.1

環境: window xp sp3 工具: ollydbg ,exeinfo pe 拿到程序后,查殼。顯示是無殼的VB程序 用之前用的VB decompiler載入,沒找到有用的東西,還是用回了OD。 OD載入,運行起來。輸入“GNUBD”然后點…

小結C++中一些自帶的好用東西

STL部分 <set>/<multiset> 支持插入一個元素&#xff0c;刪除指定key值的元素&#xff0c;查找指定key值的元素&#xff0c;返回最大/小值&#xff0c;找前驅&#xff0c;找后繼&#xff0c;返回指定key值的相同元素個數。 部分代替平衡樹中一些操作。不能updata或…

160 - 15 blaster99.exe

環境&#xff1a; windows xp sp 3 工具&#xff1a; Ollydbg 和 exeinfo pe 查殼&#xff0c;還是無殼的vb程序。 打開&#xff0c;有一個nag窗口&#xff0c;點擊”確認”的話才會彈出輸入serial的窗口&#xff0c;點“取消”的話會關閉程序 OD載入&#xff0c;運行到彈出n…

Freemarker宏和函數的用法和區別

1.宏&#xff08;macro&#xff09;寫法&#xff1a;<#macro page url page maskSize5> <#if (number pages)><li><a href"javascript:void(0);">下一頁</a></li><li><a href"javascript:void(0);">尾…