PHP禁止浏览器缓存

一、对于静态页(就是通过meta标签来设置):

<!--expires用于设定网页的过期时间,一旦过期就必须从服务器上重新加载.时间必须使用GMT格式-->
<meta http-equiv="expires" content="0" />

或者通过pragma no-cache来设置,pragma出现在http-equiv属性中,使用content属性的no-cache值表示是否缓存网页(为了提高速度一些浏览器会缓存浏览者浏览过的页面,通过下面的定义,浏览器一般不会缓存页面,而且浏览器无法脱机浏览)。

<meta http-equiv="pragma" content="no-cache" />

Cache-Control:即缓存控制,指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。 请求时的缓存指令有 no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached等,响应消息中的指令有 public、private、no-cache、no-store、no-transform、must-revalidate、 proxy-revalidate、max-age。各个消息中的部分指令含义如下:

Public:指示响应可被任何缓存区缓存。 
Private:指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。 
no-cache:指示请求或响应消息不能缓存 
no-store:用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。 
max-age:指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。 
min-fresh:指示客户机可以接收响应时间小于当前时间加上指定时间的响应。 
max-stale:指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

注意:Cache-Control 头标是在HTTP1.1里添加的,相对于其他几种方式能够实现更细致的缓存控制。

<meta http-equiv="Cache-Control" content="no-cache,no-store, must-revalidate">
header(‘Cache-Control: max-age=3600*24‘);//缓存1天,表示最大生存期是1天,超过1天浏览器必须去服务器重新读取,这个时间是从用户第一次读取页面时开始计时的

二、对于PHP页面:

对于动态页面,缓存的代码必须放在任何HTML标签输出之前,否则将会出错。

<?php
header(‘Cache-Control:no-cache,must-revalidate‘);
header(‘Pragma:no-cache‘);
header("Expires:0");
?> 

Last-Modified:文档的最后修改时间。它的用法就是:

1:如果是静态文件,客户端会发上来它缓存里的时间,apache会来比对,如果发现没有修改就直接返回一个头,状态码是304,字节数非常少。

2:如果是php动态文件,客户端发上比对时间,php会判断是否修改,如果修改时间相同,就只会返回1024字节,至于为什么返回1024不得而知,如果你的php生成的文件非常大,它也只返回1024,所以比较省带宽,客户端会根据服务器端发过来的修改时间自动从缓存文件里显示。

注意:如果没有设置Last-Modified头,只设置了Cache-Control和Expires也是可以起作用的,但每次请求要返回真实的文件字节数,而不是1024

php设置 Last-Modified 头标示例代码如下:

header(‘Last-Modified: ‘.gmdate(‘D, d M Y 01:01:01‘,$time).‘ GMT‘);//使用的是格林尼治时间,$time是指文件添加时候的时间戳

三、刷新,转到以及强制刷新的区别

浏览器上有刷新和转到按键,有的浏览器支持用ctrl+F5强制刷新页面,它们的区别是

转到:用户点击链接就是转到,它完全使用缓存机制,如果有Last-Modified那么不会和服务器通讯,用抓包工具可以查看到发送字节是0byte,如果缓存过期,那么它会执行F5刷新的动作。

刷新(F5):这种刷新也是根据缓存是否有Last-Modified来决定,如果有会转入304或1024(php),如果没有最后更新时间那么去服务器读取,返回真实文档大小。

强制刷新(ctrl+F5):完全抛弃缓存机制,去服务器读取最新文档,向服务器发送的header如:Cache-Control: no-cache 指令。

时间: 2024-10-31 10:48:28

PHP禁止浏览器缓存的相关文章

Filter 禁止浏览器缓存动态资源,例如JSP资源 -学习笔记

当访问一个web资源时,没有得到对应的结果,有可能是Filter没有放行资源静态资源和动态资源进行不同的缓存处理,代码如下:====NO2判段是否以jsp结尾 处 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; imp

filter 过滤器 禁止浏览器缓存

1 public class BrowserNoCacheFilter implements Filter { 2 public void init(FilterConfig filterconfig) throws ServletException { 3 } 4 public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterchain) throws IOException,

【禁止缓存】如何禁止浏览器缓存页面内容

浏览器为了避免频繁地与服务器交互,提供了缓存功能.当频繁地访问同义jsp页面时,浏览器会将缓存中的结果取出为用户响应,并不向服务器发送请求,因此经常出现不能反映服务器最新处理结果的情况. 如果某个 jsp 或 servlet程序不需要客户浏览器缓存其相应内容,可以添加如下代码: response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-

php添加http头禁止浏览器缓存

在PHP中可以轻松的使用下面的语句实现禁止页面缓存,但比较难记特整理下,方便大家使用. 核心代码: 复制代码代码如下: header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-cache, must-rev

【前端_js】Chrome禁止浏览器缓存

在前端开发中,浏览器缓存使得我们改了代码后页面不变,得经常手动清理缓存. 按如下操作即可禁用浏览器缓存: 原文地址:https://www.cnblogs.com/leiblog/p/10936421.html

谷歌浏览器(Chrome)禁止浏览器缓存 设置

在开发项目期间用谷歌浏览器调试,他总是缓存我的css样式这个很气人啊,后经过摸索找到了方法,如下 先F12或者shift+ctrl+j 打开调试者工具,在找Network这个tab按钮,点击进入,勾选diasable cache选项就可以了. 原文地址:https://www.cnblogs.com/zc290987034/p/8365381.html

禁止浏览器缓存js

方法:在js文件后加上数学随机数; Math.random() 比如:源代码为 <script src="./js/lib/require/require.js" data-main="./js/modules/main/main"></script> 修改之后变成: <script> document.write('<script src="./js/lib/require/require.js"' +

禁止浏览器缓存

HTML: <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-store, must-revalidate"> <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 G

[原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------