利用php实现禁用IE和火狐的缓存问题
程序员文章站
2023-10-23 09:34:19
在网速找了好多方法,最终还是解决了 其实最简单的方法是在头部加标签
在网速找了好多方法,最终还是解决了
其实最简单的方法是在头部加<meta>标签
<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浏览器缓存的两个重要区别
当你建立好一个web服务后,通常有两个类型的缓存需要配置:
设置网站有更新的时候html资源马上过期,以便正在浏览的用户可以很快地得到更新.
设置所有其它资源(例如图片,css,javascript脚本)在一定时间后过期.
这个缓存方案涵盖two simple rules for http caching文章中提到关于如何处理更新的一些思想.
现在httpwatch 6.0支持firefox了,我们想探讨一下firefox在处理缓存上与ie有些什么不同.设置较长过期时间的使用方式(上面第二条)仍可以直接用于firefox,但配置1在两者之间还是存在细微差别的.
在之前的文章 中,我们把第一条划分为:
某些时候动态html页面需要即时从服务器更新以备随时显示-甚至是使用后退按钮的时候.例如,显示银行帐号的状态或在线订单.
静态html页面,比如联系,faqs或者站点地图等页面,如果它们设置了last-modified响应头,允许浏览器在需要的时候重新校验,就可以利用到缓存.
本文剩下部分探讨了firefox中影响html页面缓存的两个重要不同点.
1.使用no-cache防止firefox缓存无效
你可以简单地设置如下的响应头预防ie缓存任何东西:
cache-control: no-cache
使用了这个响应头的页面不会保存在缓存里,ie总会重新从服务器加载;即使你使用后退按钮.下面这个例子使用httpwatch监听一个网上商店,当我们在提交订单表单后点击后退按钮,结果如下图:
然而,这个响应头却不能防止firefox的缓存.这意味着,firefox在正常访问的情况下,将一直使用缓存的页面,直到它发送get请求重新检验.并且,如果是通过后退按钮访问页面,firefox不会再次访问服务器,而是简单直接地从缓存加载.
那怎样才能关掉firefox中的缓存呢? 答案很简单,关不了. 因为firefox依靠缓存中的副本为"文件->另存为","查看源代码"这样的操作服务.但是,你可以控制页面缓存到哪里及那些缓存条目可以用于显示.
下面响应头在firefox中可以防止持久化的缓存,强制页面被缓存到内存中:
cache-control:no-store
这个头也可以防止使用后退按钮时访问了缓存页面,它将触发一个http get请求.
这两个响应头的值组合使用可以在ie与firefox得到期待的结果:
cache-control: no-cache, no-store
如下httpwatch响应头标签所示:
2.如果没有设置过期时间firefox会为你设置一个当ie遇到没有expires头的http响应时,它就认为永远不能自动使用缓存条目,直到它重新从服务校验.由于ie的临时文件的一个设置项"检查所在网页的较新版本"默认为"自动",所以通常都是一个会话做一次.
这就为控制静态的html内容的缓存提供了一个合理的方式.用户新打开的ie会得到html的最新版本,而缓存的版本就在关闭ie前会一直被使用.
firefox处理缺失expires头的方式不同.如果影响中有last-modified头它就会使用http 1.1规范rfc2616中指定的一个尝试性的过期值:
(引用规范:)
并且,如果响应中有last-modified时间值,尝试性的过期值不能超过这个值到现在时间间隔的一个比率,一般设置这个比率为10%.
计算方式如下:
过期时间 = 现在时间 + 0.1 * (last-modified到现在的时间差)
例如,如果你的静态html文件上次修改时间是100天前,那过期时间就是10天之后.下面的示例是一个没有expires头页面的httpwatch缓存标签:
pic3
firefox自动设置了过期时间为8天后,因为这个页面大概80天没有被修改过了.
这意味着,为了保持控制好你的html页面,正如我们在 two simple rules for http caching文章中讨论过的,你最好为你的静态资源如html,图片,css文件等,在你的web服务器设置一个合适的expires值.
结论
为了确保ie与firefox的缓存行为一致,你应该:
总是指定一个expires头. 一般设置-1使用html页面能即时刷新或者对其它如图片,css,javascript脚本资源设置一个特定的过期时间
如果你要强制页面刷新,甚至是点击后台按钮的时候,那就设置 cache-control: no-cache, no-store
其实最简单的方法是在头部加<meta>标签
<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浏览器缓存的两个重要区别
当你建立好一个web服务后,通常有两个类型的缓存需要配置:
设置网站有更新的时候html资源马上过期,以便正在浏览的用户可以很快地得到更新.
设置所有其它资源(例如图片,css,javascript脚本)在一定时间后过期.
这个缓存方案涵盖two simple rules for http caching文章中提到关于如何处理更新的一些思想.
现在httpwatch 6.0支持firefox了,我们想探讨一下firefox在处理缓存上与ie有些什么不同.设置较长过期时间的使用方式(上面第二条)仍可以直接用于firefox,但配置1在两者之间还是存在细微差别的.
在之前的文章 中,我们把第一条划分为:
某些时候动态html页面需要即时从服务器更新以备随时显示-甚至是使用后退按钮的时候.例如,显示银行帐号的状态或在线订单.
静态html页面,比如联系,faqs或者站点地图等页面,如果它们设置了last-modified响应头,允许浏览器在需要的时候重新校验,就可以利用到缓存.
本文剩下部分探讨了firefox中影响html页面缓存的两个重要不同点.
1.使用no-cache防止firefox缓存无效
你可以简单地设置如下的响应头预防ie缓存任何东西:
cache-control: no-cache
使用了这个响应头的页面不会保存在缓存里,ie总会重新从服务器加载;即使你使用后退按钮.下面这个例子使用httpwatch监听一个网上商店,当我们在提交订单表单后点击后退按钮,结果如下图:
然而,这个响应头却不能防止firefox的缓存.这意味着,firefox在正常访问的情况下,将一直使用缓存的页面,直到它发送get请求重新检验.并且,如果是通过后退按钮访问页面,firefox不会再次访问服务器,而是简单直接地从缓存加载.
那怎样才能关掉firefox中的缓存呢? 答案很简单,关不了. 因为firefox依靠缓存中的副本为"文件->另存为","查看源代码"这样的操作服务.但是,你可以控制页面缓存到哪里及那些缓存条目可以用于显示.
下面响应头在firefox中可以防止持久化的缓存,强制页面被缓存到内存中:
cache-control:no-store
这个头也可以防止使用后退按钮时访问了缓存页面,它将触发一个http get请求.
这两个响应头的值组合使用可以在ie与firefox得到期待的结果:
cache-control: no-cache, no-store
如下httpwatch响应头标签所示:
2.如果没有设置过期时间firefox会为你设置一个当ie遇到没有expires头的http响应时,它就认为永远不能自动使用缓存条目,直到它重新从服务校验.由于ie的临时文件的一个设置项"检查所在网页的较新版本"默认为"自动",所以通常都是一个会话做一次.
这就为控制静态的html内容的缓存提供了一个合理的方式.用户新打开的ie会得到html的最新版本,而缓存的版本就在关闭ie前会一直被使用.
firefox处理缺失expires头的方式不同.如果影响中有last-modified头它就会使用http 1.1规范rfc2616中指定的一个尝试性的过期值:
(引用规范:)
并且,如果响应中有last-modified时间值,尝试性的过期值不能超过这个值到现在时间间隔的一个比率,一般设置这个比率为10%.
计算方式如下:
过期时间 = 现在时间 + 0.1 * (last-modified到现在的时间差)
例如,如果你的静态html文件上次修改时间是100天前,那过期时间就是10天之后.下面的示例是一个没有expires头页面的httpwatch缓存标签:
pic3
firefox自动设置了过期时间为8天后,因为这个页面大概80天没有被修改过了.
这意味着,为了保持控制好你的html页面,正如我们在 two simple rules for http caching文章中讨论过的,你最好为你的静态资源如html,图片,css文件等,在你的web服务器设置一个合适的expires值.
结论
为了确保ie与firefox的缓存行为一致,你应该:
总是指定一个expires头. 一般设置-1使用html页面能即时刷新或者对其它如图片,css,javascript脚本资源设置一个特定的过期时间
如果你要强制页面刷新,甚至是点击后台按钮的时候,那就设置 cache-control: no-cache, no-store