利用php实现禁用IE和火狐的缓存问题


Posted in PHP onDecember 03, 2012

在网速找了好多方法,最终还是解决了
其实最简单的方法是在头部加<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监听一个网上商店,当我们在提交订单表单后点击后退按钮,结果如下图:
利用php实现禁用IE和火狐的缓存问题 
然而,这个响应头却不能防止Firefox的缓存.这意味着,Firefox在正常访问的情况下,将一直使用缓存的页面,直到它发送GET请求重新检验.并且,如果是通过后退按钮访问页面,Firefox不会再次访问服务器,而是简单直接地从缓存加载.

那怎样才能关掉Firefox中的缓存呢? 答案很简单,关不了. 因为Firefox依靠缓存中的副本为"文件->另存为","查看源代码"这样的操作服务.但是,你可以控制页面缓存到哪里及那些缓存条目可以用于显示.
下面响应头在Firefox中可以防止持久化的缓存,强制页面被缓存到内存中:
Cache-Control:no-store
这个头也可以防止使用后退按钮时访问了缓存页面,它将触发一个HTTP GET请求.
这两个响应头的值组合使用可以在IE与Firefox得到期待的结果:
Cache-Control: no-cache, no-store
如下HttpWatch响应头标签所示:
利用php实现禁用IE和火狐的缓存问题 

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

PHP 相关文章推荐
如何在PHP中使用Oracle数据库(1)
Oct 09 PHP
PHP生成静态页面详解
Nov 19 PHP
回答PHPCHINA上的几个问题:URL映射
Feb 14 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
Apr 25 PHP
让PHP更快的提供文件下载的代码
Jun 13 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
Jun 03 PHP
php取整函数ceil,floo,round的用法及介绍
Aug 31 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
Dec 24 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
PHP date函数常用时间处理方法
May 11 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
Dec 18 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 PHP
php自动给文章加关键词链接的函数代码
Nov 29 #PHP
PHP文章按日期(月日)SQL归档语句
Nov 29 #PHP
PHP以及MYSQL日期比较方法
Nov 29 #PHP
有道搜索和IP138的IP的API接口(PHP应用)
Nov 29 #PHP
PHP提示Notice: Undefined variable的解决办法
Nov 24 #PHP
php如何调用webservice应用介绍
Nov 24 #PHP
PHP读取PDF内容配合Xpdf的使用
Nov 24 #PHP
You might like
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
PHP 防恶意刷新实现代码
2010/05/16 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
2020/01/21 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
浅谈Python程序与C++程序的联合使用
2015/04/07 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
Servlet面试题库
2015/07/18 面试题
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
施工班组长岗位职责
2014/01/05 职场文书
学校万圣节活动方案
2014/02/13 职场文书
开幕式邀请函
2015/01/31 职场文书
小学教师读书笔记
2015/07/01 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android