1. 程式人生 > >【轉】request的cache-control和response cache-control不同點

【轉】request的cache-control和response cache-control不同點

原文地址:http://www.cnblogs.com/lwhkdash/archive/2012/11/04/2748291.html

HTTP協議中,關於一些頭域的解釋很模糊,網上的解釋有些甚至是打架的,例如cache-control:no-cache,為了搞清這個頭,google了不少資料,但很多都是各有各說法,甚至相互矛盾。http header中cache-control無疑是非常重要的一個頭,往往涉及到效能問題,快取,快取代理等等都無法避免跟cache-control打交道。當然還有其他一些頭域如last-modified,但它們含義都非常明確,至少沒有cache-control那麼含糊。

就連瀏覽器之間,對cache-control也有不同的理解,導致了對這個頭的不同的表現。

網上很多關於cache-control的資料寫得很模糊,我覺得很多都沒有,或者可能是忽略了幾個地方,使得我們看著這些資料的時候,似懂非懂。或者作者覺得某些地方足夠容易理解,所以根本不覺得需要強調,但正是這些被忽略掉的“前提條件”令我們即使看完資料,也很難弄懂問題。那些對cache-control進行解釋的資料通常會忽略的一些"前提條件"有這幾個:

1.cache-control是出現在response還是request中。很多資料在解釋cache-control時候,都沒有指明是response中的cache-control(也就是由伺服器應答時傳送的cache-control)還是request中的cache-control(也就是由使用者代理,通常是瀏覽器,請求資源時傳送的cache-control)。

2.什麼是快取。“快取”一詞會有N種解釋,特別是一些翻譯自英文的資料。“快取”可以指快取的物件(object),也可以指HTTP訊息鏈上的快取系統,例如瀏覽器的快取系統,和代理伺服器上的快取,或者一些專為快取而設計的代理伺服器(例如squid),也可以是原始伺服器上的快取(例如c#的cache物件)。而另一方面,根據語境不同,“快取”也有可能指快取的機制....N多。所以一些資料當忽略了這些,讀者看了後,舊疑問還沒搞清楚,又來了新疑問。

而說到HTTP鏈上的快取系統,我們一般指瀏覽器的快取系統,和代理伺服器的快取。

我所知道的關於cache-control指令的一些情況是:

當cache-control出現在request

中:

cache-control:no-control 告訴HTTP訊息鏈上的快取系統(也就是瀏覽器的快取和代理伺服器上的快取),本次請求要求忽略一齊快取,必須是原始伺服器重新計算生成迴應給使用者。所以,即使瀏覽器上的本地快取未過期,或者代理伺服器上的快取未過期,都不要將這些快取作為迴應。當我們在瀏覽器中強制重新整理頁面(按ctrl+F5),傳送的就是這個頭(不同很多瀏覽器將cache-contro:no-cachel和pragam:no-cache兩個頭一起傳送)

pragma:no-cache:和cache-control:no-control一樣,不過出於相容HTTP/1.0,所以有些瀏覽器會保留這個頭。注意pragma:no-cache只應該出現在Request中,表明不想獲取快取。HTTP沒有哪條條文對Response中的pragma:no-cache進行定義,所以Response中的pragma:no-cache是無效的。

當cache-control出現在response中:

cache-control:no-control 伺服器告訴HTTP訊息鏈上的快取系統(比如varnish, squid,cdn等),不要快取這個response結果。其實這個不是百分百肯定,而且不同瀏覽器好像接收到這個頭時也有不同反應。

當response header有cache-control:no-control時:

chrome:再訪問相同的URL時候是發出if-modified-since。這說明即使接收到cache-control:no-contro,chrome也會進行快取。

IE9:再次訪問相同URL時,跟第一次訪問(無快取情況下)一樣,沒有if-modified-since,也沒有其他快取相關的頭域,而且快取資料夾也沒有快取檔案。也就是說,IE9接收到cache-control:no-contro,不會將response內容快取起來。

FF:跟IE9行為類似

而另外,cache-control:no-store出現在response中才有意義,意思是告訴快取系統不要快取或者儲存response內容(不要任何形式的儲存,包括儲存在快取資料夾中,以免一些敏感資訊外洩)。chrome,IE9,FF對這個頭的實現是一樣的。當接收到有這個頭的response,三個瀏覽器的快取目錄都找不到相關的快取檔案。

相關推薦

request的cache-controlresponse cache-control不同點

原文地址:http://www.cnblogs.com/lwhkdash/archive/2012/11/04/2748291.html HTTP協議中,關於一些頭域的解釋很模糊,網上的解釋有些甚至是打架的,例如cache-control:no-cache,為了搞清這個頭,google了不少資料,但很多都是

關於LIS一類可以用樹狀數組優化的DP 預備知識

免費 關註 最長上升子序列 2.3 bzoj1264 一個數 long 個數字 等於 原文鏈接 http://www.cnblogs.com/liu-runda/p/6193690.html 預備知識     DP(Dynamic Programming)

Visual C++ C++ 有什麽區別?

業界 流行 編譯器 gtk+ 語言 開發 多種實現 廠商 計算 有位同學問我“Visual C++和C++有什麽區別?”,這的確是初學者會感到困惑的問題,比較常見。除此之外,還有“先學C++好,還是先學Visual C++好?”,都屬於同樣的概念不明的問題,就比

理解Callable Spring DeferredResult

控制 defer -a word int https .html getc when http://www.cnblogs.com/aheizi/p/5659030.html 1-介紹 Servlet 3中的異步支持為在另一個線程中處理HTTP請求提供了可能性。當

jar包war包的介紹區別

lac rep 理解 j2e 浪費時間 需要 適合 格式 nbsp JavaSE程序可以打包成Jar包(J其實可以理解為Java了),而JavaWeb程序可以打包成war包(w其實可以理解為Web了)。然後把war發布到Tomcat的webapps目錄下,Tomcat會在啟

abstract classinterface的區別

其中 帶來 靜態 進行 都沒有 無需 bstr 價值 bastract 在編程語言中,abstract class和interface是支持抽象類定義的兩種機制。abstract class和interface之間在對於抽象類定義的支持方面具有很大的相似性,甚至可以相互替

Spark StreamingKafka整合開發指南

thread ada 關系 方法 拷貝 理解 1.2 reduce arr 基於Receivers的方法 這個方法使用了Receivers來接收數據。Receivers的實現使用到Kafka高層次的消費者API。對於所有的Receivers,接收到的數據將會保存在Spark

document.documentElementdocument.body的區別

指定 absolut root pos absolute 使用 對象 但是 height 網頁中獲取滾動條卷去部分的高度,可以通過 document.body.scrollTop 來獲取,比如使div跟著滾動條滾動: <div id="div" style="wi

簡述CC++的學習歷程

cnblogs 習慣 使用 模板 服務器 網絡 log 消息 面向對象 簡述C和C++的學習歷程(轉)                                                     ——by:肖舸老師總是被同學們問到,如何學習C和C++才不茫然

setup timehold time的周期問題(slack)

logic 默認 概念理解 CI report -s 不同的 都是 capture 為什麽計算setup time的slack時需要考慮加周期,hold time時不需要? 總結一: 因為計算setup time時,由於存在數據傳輸data delay,Launch edg

子類父類實現同一個接口的意義

style inf bottom 父類 100% csdn 一個 article mage 原文作者的疑惑和我的一模一樣...所以沒什麽好解釋的,直接截圖參考即可。原文鏈接:子類和父類實現同一個接口的意義 - CSDN博客 https://blog.csdn.net/s33

認證 (authentication) 授權 (authorization) 的區別

這就是 飛機 登陸 簡單 輸入 區別 認證 的區別 auth 以前一直分不清 authentication 和 authorization,其實很簡單,舉個例子來說: 你要登機,你需要出示你的身份證和機票,身份證是為了證明你張三確實是你張三,這就是 authenticati

理解WebKitChromium: JavaScript引擎簡介

正則表達 根據 tco 抽象 由於 介紹 後來 rom 都在 轉載請註明原文地址:http://blog.csdn.net/milado_nju1. 什麽是JavaScript引擎什麽是JavaScript引擎?簡單來講,就是能夠提供執行JavaScript代碼的運行環境。

通過ionicenice降低shell指令碼執行的優先順序

對於一些執行時會造成系統滿載的指令碼, 例如資料庫備份, 會影響當時其他服務的響應速度, 可以通過ionice和nice對其IO優先順序和CPU優先順序進行調整例如降低"/usr/local/bin/backup.sh"的IO優先順序, 讓其他程序順暢執行: /usr/bin/ionice -c2 -

系統呼叫庫函式以及API

         在寫程式的過程中,像MFC,VC++這些程式設計,都會涉及到函式的呼叫,有庫函式也有系統函式,下面看一看它們的區別!!            系統呼叫(system

Docker容器本機之間的檔案傳輸

主機和容器之間傳輸檔案的話需要用到容器的ID全稱。 獲取方法如下: 1.先拿到容器的短ID或者指定的name。 2.然後根據這兩項的任意一項拿到ID全稱。 有了這個長長的ID的話,本機和容器之間的檔案傳輸就簡單了。 docker cp 本地檔案路徑 ID全稱:容器路徑 進入容器之後

JBoss WebTomcat的區別

在Web2.0的時代,基於Tomcat核心的JBoss在J2EE應用伺服器領域已成為發展最為迅速的應用伺服器。這一青出於藍而勝於藍的產品與Tomcat的區別又在哪裡?基於Tomcat核心,青勝於藍 Tomcat 伺服器是一個免費的開放原始碼的Web應用伺服器,技術先進、效能穩定,而且免費,因而深受Java

關於SocketIOCP的一些值得注意的地方

轉至:http://laokaddk.blog.51cto.com/368606/287039關於Socket和IOCP的一些值得注意的地方  IOCP是一整套高效能的IO操作非同步模型,可以用在

string型別其他型別的值的互

由於在開發過程中遇到型別轉換問題,比如在web中某個引數是以string存在的,這個時候需要轉換成其他型別,這裡官方的strcon

Buffer cachepage cache的區別

轉自:http://alanwu.blog.51cto.com/3652632/1122077 Page cache和buffer cache到底有什麼區別呢?很多時候我們不知道系統在做IO操作的時候到底是走了page cache還是buffer cache?其實