利用php實(shí)現(xiàn)禁用IE和火狐的緩存問題
更新時(shí)間:2012年12月03日 11:13:30 作者:
利用php實(shí)現(xiàn)禁用IE和火狐的緩存問題,在網(wǎng)速找了好多方法,最終還是解決了,需要了解的朋友可以參考下
在網(wǎng)速找了好多方法,最終還是解決了
其實(shí)最簡(jiǎn)單的方法是在頭部加<meta>標(biāo)簽
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache,no-store, must-revalidate">
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="expires" CONTENT="0">
還可以用程序控制
<?php
header("Cache-control:no-cache,no-store,must-revalidate");
header("Pragma:no-cache");
header("Expires:0");
?>
如果在<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache,no-store, must-revalidate">或header("Cache-control:no-cache,no-store,must- revalidate");中少了no-store就解決不了火狐的緩存了
下面給你具體的分析:
Firefox與IE瀏覽器緩存的兩個(gè)重要區(qū)別
當(dāng)你建立好一個(gè)WEB服務(wù)后,通常有兩個(gè)類型的緩存需要配置:
設(shè)置網(wǎng)站有更新的時(shí)候html資源馬上過期,以便正在瀏覽的用戶可以很快地得到更新.
設(shè)置所有其它資源(例如圖片,CSS,javascript腳本)在一定時(shí)間后過期.
這個(gè)緩存方案涵蓋Two Simple Rules for HTTP Caching文章中提到關(guān)于如何處理更新的一些思想.
現(xiàn)在HttpWatch 6.0支持Firefox了,我們想探討一下Firefox在處理緩存上與IE有些什么不同.設(shè)置較長(zhǎng)過期時(shí)間的使用方式(上面第二條)仍可以直接用于Firefox,但配置1在兩者之間還是存在細(xì)微差別的.
在之前的文章 中,我們把第一條劃分為:
某些時(shí)候動(dòng)態(tài)HTML頁(yè)面需要即時(shí)從服務(wù)器更新以備隨時(shí)顯示-甚至是使用后退按鈕的時(shí)候.例如,顯示銀行帳號(hào)的狀態(tài)或在線訂單.
靜態(tài)HTML頁(yè)面,比如聯(lián)系,FAQs或者站點(diǎn)地圖等頁(yè)面,如果它們?cè)O(shè)置了Last-Modified響應(yīng)頭,允許瀏覽器在需要的時(shí)候重新校驗(yàn),就可以利用到緩存.
本文剩下部分探討了Firefox中影響HTML頁(yè)面緩存的兩個(gè)重要不同點(diǎn).
1.使用no-cache防止Firefox緩存無(wú)效
你可以簡(jiǎn)單地設(shè)置如下的響應(yīng)頭預(yù)防IE緩存任何東西:
Cache-Control: no-cache
使用了這個(gè)響應(yīng)頭的頁(yè)面不會(huì)保存在緩存里,IE總會(huì)重新從服務(wù)器加載;即使你使用后退按鈕.下面這個(gè)例子使用HttpWatch監(jiān)聽一個(gè)網(wǎng)上商店,當(dāng)我們?cè)谔峤挥唵伪韱魏簏c(diǎn)擊后退按鈕,結(jié)果如下圖:
然而,這個(gè)響應(yīng)頭卻不能防止Firefox的緩存.這意味著,Firefox在正常訪問的情況下,將一直使用緩存的頁(yè)面,直到它發(fā)送GET請(qǐng)求重新檢驗(yàn).并且,如果是通過后退按鈕訪問頁(yè)面,Firefox不會(huì)再次訪問服務(wù)器,而是簡(jiǎn)單直接地從緩存加載.
那怎樣才能關(guān)掉Firefox中的緩存呢? 答案很簡(jiǎn)單,關(guān)不了. 因?yàn)镕irefox依靠緩存中的副本為"文件->另存為","查看源代碼"這樣的操作服務(wù).但是,你可以控制頁(yè)面緩存到哪里及那些緩存條目可以用于顯示.
下面響應(yīng)頭在Firefox中可以防止持久化的緩存,強(qiáng)制頁(yè)面被緩存到內(nèi)存中:
Cache-Control:no-store
這個(gè)頭也可以防止使用后退按鈕時(shí)訪問了緩存頁(yè)面,它將觸發(fā)一個(gè)HTTP GET請(qǐng)求.
這兩個(gè)響應(yīng)頭的值組合使用可以在IE與Firefox得到期待的結(jié)果:
Cache-Control: no-cache, no-store
如下HttpWatch響應(yīng)頭標(biāo)簽所示:
2.如果沒有設(shè)置過期時(shí)間Firefox會(huì)為你設(shè)置一個(gè)當(dāng)IE遇到?jīng)]有Expires頭的http響應(yīng)時(shí),它就認(rèn)為永遠(yuǎn)不能自動(dòng)使用緩存條目,直到它重新從服務(wù)校驗(yàn).由于IE的臨時(shí)文件的一個(gè)設(shè)置項(xiàng)"檢查所在網(wǎng)頁(yè)的較新版本"默認(rèn)為"自動(dòng)",所以通常都是一個(gè)會(huì)話做一次.
這就為控制靜態(tài)的html內(nèi)容的緩存提供了一個(gè)合理的方式.用戶新打開的IE會(huì)得到html的最新版本,而緩存的版本就在關(guān)閉IE前會(huì)一直被使用.
Firefox處理缺失Expires頭的方式不同.如果影響中有Last-Modified頭它就會(huì)使用HTTP 1.1規(guī)范RFC2616中指定的一個(gè)嘗試性的過期值:
(引用規(guī)范:)
并且,如果響應(yīng)中有Last-Modified時(shí)間值,嘗試性的過期值不能超過這個(gè)值到現(xiàn)在時(shí)間間隔的一個(gè)比率,一般設(shè)置這個(gè)比率為10%.
計(jì)算方式如下:
過期時(shí)間 = 現(xiàn)在時(shí)間 + 0.1 * (Last-Modified到現(xiàn)在的時(shí)間差)
例如,如果你的靜態(tài)HTML文件上次修改時(shí)間是100天前,那過期時(shí)間就是10天之后.下面的示例是一個(gè)沒有Expires頭頁(yè)面的HttpWatch緩存標(biāo)簽:
pic3
Firefox自動(dòng)設(shè)置了過期時(shí)間為8天后,因?yàn)檫@個(gè)頁(yè)面大概80天沒有被修改過了.
這意味著,為了保持控制好你的HTML頁(yè)面,正如我們?cè)?Two Simple Rules for HTTP Caching文章中討論過的,你最好為你的靜態(tài)資源如HTML,圖片,CSS文件等,在你的WEB服務(wù)器設(shè)置一個(gè)合適的Expires值.
結(jié)論
為了確保IE與Firefox的緩存行為一致,你應(yīng)該:
總是指定一個(gè)Expires頭. 一般設(shè)置-1使用html頁(yè)面能即時(shí)刷新或者對(duì)其它如圖片,CSS,javascript腳本資源設(shè)置一個(gè)特定的過期時(shí)間
如果你要強(qiáng)制頁(yè)面刷新,甚至是點(diǎn)擊后臺(tái)按鈕的時(shí)候,那就設(shè)置 Cache-Control: no-cache, no-store
其實(shí)最簡(jiǎn)單的方法是在頭部加<meta>標(biāo)簽
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache,no-store, must-revalidate">
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="expires" CONTENT="0">
還可以用程序控制
復(fù)制代碼 代碼如下:
<?php
header("Cache-control:no-cache,no-store,must-revalidate");
header("Pragma:no-cache");
header("Expires:0");
?>
如果在<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache,no-store, must-revalidate">或header("Cache-control:no-cache,no-store,must- revalidate");中少了no-store就解決不了火狐的緩存了
下面給你具體的分析:
Firefox與IE瀏覽器緩存的兩個(gè)重要區(qū)別
當(dāng)你建立好一個(gè)WEB服務(wù)后,通常有兩個(gè)類型的緩存需要配置:
設(shè)置網(wǎng)站有更新的時(shí)候html資源馬上過期,以便正在瀏覽的用戶可以很快地得到更新.
設(shè)置所有其它資源(例如圖片,CSS,javascript腳本)在一定時(shí)間后過期.
這個(gè)緩存方案涵蓋Two Simple Rules for HTTP Caching文章中提到關(guān)于如何處理更新的一些思想.
現(xiàn)在HttpWatch 6.0支持Firefox了,我們想探討一下Firefox在處理緩存上與IE有些什么不同.設(shè)置較長(zhǎng)過期時(shí)間的使用方式(上面第二條)仍可以直接用于Firefox,但配置1在兩者之間還是存在細(xì)微差別的.
在之前的文章 中,我們把第一條劃分為:
某些時(shí)候動(dòng)態(tài)HTML頁(yè)面需要即時(shí)從服務(wù)器更新以備隨時(shí)顯示-甚至是使用后退按鈕的時(shí)候.例如,顯示銀行帳號(hào)的狀態(tài)或在線訂單.
靜態(tài)HTML頁(yè)面,比如聯(lián)系,FAQs或者站點(diǎn)地圖等頁(yè)面,如果它們?cè)O(shè)置了Last-Modified響應(yīng)頭,允許瀏覽器在需要的時(shí)候重新校驗(yàn),就可以利用到緩存.
本文剩下部分探討了Firefox中影響HTML頁(yè)面緩存的兩個(gè)重要不同點(diǎn).
1.使用no-cache防止Firefox緩存無(wú)效
你可以簡(jiǎn)單地設(shè)置如下的響應(yīng)頭預(yù)防IE緩存任何東西:
Cache-Control: no-cache
使用了這個(gè)響應(yīng)頭的頁(yè)面不會(huì)保存在緩存里,IE總會(huì)重新從服務(wù)器加載;即使你使用后退按鈕.下面這個(gè)例子使用HttpWatch監(jiān)聽一個(gè)網(wǎng)上商店,當(dāng)我們?cè)谔峤挥唵伪韱魏簏c(diǎn)擊后退按鈕,結(jié)果如下圖:

然而,這個(gè)響應(yīng)頭卻不能防止Firefox的緩存.這意味著,Firefox在正常訪問的情況下,將一直使用緩存的頁(yè)面,直到它發(fā)送GET請(qǐng)求重新檢驗(yàn).并且,如果是通過后退按鈕訪問頁(yè)面,Firefox不會(huì)再次訪問服務(wù)器,而是簡(jiǎn)單直接地從緩存加載.
那怎樣才能關(guān)掉Firefox中的緩存呢? 答案很簡(jiǎn)單,關(guān)不了. 因?yàn)镕irefox依靠緩存中的副本為"文件->另存為","查看源代碼"這樣的操作服務(wù).但是,你可以控制頁(yè)面緩存到哪里及那些緩存條目可以用于顯示.
下面響應(yīng)頭在Firefox中可以防止持久化的緩存,強(qiáng)制頁(yè)面被緩存到內(nèi)存中:
Cache-Control:no-store
這個(gè)頭也可以防止使用后退按鈕時(shí)訪問了緩存頁(yè)面,它將觸發(fā)一個(gè)HTTP GET請(qǐng)求.
這兩個(gè)響應(yīng)頭的值組合使用可以在IE與Firefox得到期待的結(jié)果:
Cache-Control: no-cache, no-store
如下HttpWatch響應(yīng)頭標(biāo)簽所示:

2.如果沒有設(shè)置過期時(shí)間Firefox會(huì)為你設(shè)置一個(gè)當(dāng)IE遇到?jīng)]有Expires頭的http響應(yīng)時(shí),它就認(rèn)為永遠(yuǎn)不能自動(dòng)使用緩存條目,直到它重新從服務(wù)校驗(yàn).由于IE的臨時(shí)文件的一個(gè)設(shè)置項(xiàng)"檢查所在網(wǎng)頁(yè)的較新版本"默認(rèn)為"自動(dòng)",所以通常都是一個(gè)會(huì)話做一次.
這就為控制靜態(tài)的html內(nèi)容的緩存提供了一個(gè)合理的方式.用戶新打開的IE會(huì)得到html的最新版本,而緩存的版本就在關(guān)閉IE前會(huì)一直被使用.
Firefox處理缺失Expires頭的方式不同.如果影響中有Last-Modified頭它就會(huì)使用HTTP 1.1規(guī)范RFC2616中指定的一個(gè)嘗試性的過期值:
(引用規(guī)范:)
并且,如果響應(yīng)中有Last-Modified時(shí)間值,嘗試性的過期值不能超過這個(gè)值到現(xiàn)在時(shí)間間隔的一個(gè)比率,一般設(shè)置這個(gè)比率為10%.
計(jì)算方式如下:
過期時(shí)間 = 現(xiàn)在時(shí)間 + 0.1 * (Last-Modified到現(xiàn)在的時(shí)間差)
例如,如果你的靜態(tài)HTML文件上次修改時(shí)間是100天前,那過期時(shí)間就是10天之后.下面的示例是一個(gè)沒有Expires頭頁(yè)面的HttpWatch緩存標(biāo)簽:
pic3
Firefox自動(dòng)設(shè)置了過期時(shí)間為8天后,因?yàn)檫@個(gè)頁(yè)面大概80天沒有被修改過了.
這意味著,為了保持控制好你的HTML頁(yè)面,正如我們?cè)?Two Simple Rules for HTTP Caching文章中討論過的,你最好為你的靜態(tài)資源如HTML,圖片,CSS文件等,在你的WEB服務(wù)器設(shè)置一個(gè)合適的Expires值.
結(jié)論
為了確保IE與Firefox的緩存行為一致,你應(yīng)該:
總是指定一個(gè)Expires頭. 一般設(shè)置-1使用html頁(yè)面能即時(shí)刷新或者對(duì)其它如圖片,CSS,javascript腳本資源設(shè)置一個(gè)特定的過期時(shí)間
如果你要強(qiáng)制頁(yè)面刷新,甚至是點(diǎn)擊后臺(tái)按鈕的時(shí)候,那就設(shè)置 Cache-Control: no-cache, no-store
您可能感興趣的文章:
- PHP之APC緩存詳細(xì)介紹 apc模塊安裝
- php中apc緩存使用示例
- php實(shí)現(xiàn)memcache緩存示例講解
- 使用PHP靜態(tài)變量當(dāng)緩存的方法
- php緩存技術(shù)詳細(xì)總結(jié)
- Php output buffering緩存及程序緩存深入解析
- 深入Nginx + PHP 緩存詳解
- PHP 清空varnish 緩存的詳解(包括指定站點(diǎn)下的)
- 基于PHP輸出緩存(output_buffering)的深入理解
- 控制PHP的輸出:緩存并壓縮動(dòng)態(tài)頁(yè)面
- php將gd生成的圖片緩存到memcache的小例子
- 深入PHP與瀏覽器緩存的分析
- 基于php緩存的詳解
- 深入PHP數(shù)據(jù)緩存的使用說明
- 解析PHP緩存函數(shù)的使用說明
- php定時(shí)刪除文件夾下文件(清理緩存文件)
- php頁(yè)面緩存ob系列函數(shù)介紹
- 簡(jiǎn)單的php緩存類分享 php緩存機(jī)制
相關(guān)文章
Fatal error: Call to undefined function curl_init()解決方法
Fatal error: Call to undefined function curl_init()解決方法2010-04-04php判斷文件上傳類型及過濾不安全數(shù)據(jù)的方法
這篇文章主要介紹了php判斷文件上傳類型及過濾不安全數(shù)據(jù)的方法,可實(shí)現(xiàn)對(duì)$_COOKIE、$_POST、$_GET中不安全字符的過濾功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12Thinkphp中的curd應(yīng)用實(shí)用要點(diǎn)
這篇文章主要介紹了Thinkphp中的curd應(yīng)用實(shí)用要點(diǎn)并附上了簡(jiǎn)單的示例,是篇非常不錯(cuò)的文章,這里推薦給大家。2015-01-01php讀取文件內(nèi)容至字符串中,同時(shí)去除換行、空行、行首行尾空格(Zjmainstay原創(chuàng))
讀取文件內(nèi)容至字符串中,同時(shí)去除換行、行首行尾空格,原理不錯(cuò),需要的朋友可以參考下2012-07-07用php來(lái)改寫404錯(cuò)誤頁(yè)讓你的頁(yè)面更友好
404錯(cuò)誤,很多人都知道,如果要訪問的url不存在的時(shí)候就讀取顯示這個(gè)頁(yè)面;以往在處理404寫幾行字,有心人對(duì)其稍加美化,首先我來(lái)說明一下我的404究竟都能幫我做哪些事情以及PHP如何來(lái)改寫你的404錯(cuò)誤頁(yè)2013-01-01PHP實(shí)現(xiàn)通過文本文件統(tǒng)計(jì)頁(yè)面訪問量功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)通過文本文件統(tǒng)計(jì)頁(yè)面訪問量功能,涉及php文件讀寫、數(shù)值計(jì)算及圖形操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-02-02

php項(xiàng)目中類的自動(dòng)加載實(shí)例講解
在本篇文章里小編給大家整理的是關(guān)于php項(xiàng)目中類的自動(dòng)加載的實(shí)例內(nèi)容以及相關(guān)代碼,需要的朋友們學(xué)習(xí)下。
2019-09-09