利用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 相关文章推荐
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 PHP
PHP 循环列出目录内容的函数代码
May 26 PHP
PHP实现手机归属地查询API接口实现代码
Aug 27 PHP
PHP数据类型之整数类型、浮点数的介绍
Apr 28 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
Aug 22 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
关于PHP中字符串与多进制转换函数的实例代码
Nov 03 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
Aug 01 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 PHP
PHP dirname(__FILE__)原理及用法解析
Oct 28 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
PHP多例模式介绍
2013/06/24 PHP
PHP生成指定长度随机数最简洁的方法
2014/07/14 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
KindEditor在php环境下上传图片功能集成的方法示例
2020/07/20 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
js的回调函数详解
2015/01/05 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python单链表的简单实现方法
2014/09/23 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
3的组成教学反思
2014/04/30 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
导游词之广东佛山(南风古灶)
2019/09/24 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python