PHP在浏览器中被拒绝请求,php控制请求页面浏览器缓

缓存的主要作用是防止用户频繁刷新网站页面,导致服务器数据库负担,既要保证信息更新的及时性,也要保证缓存能被充分利用。http协议里控制浏览器缓存的头有三个Cache-Control,Expires,Last-Modified,在PHP下控制请求页面的浏览器缓存主要是利用php的

header()函数进行设置的。下面来了解一下这三个http协议里面控制缓存头的含义以及如何使用php设置这三种头标的方式吧!

(1)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里添加的,相对于其他几种方式能够实现更细致的缓存控制。

php设置 Cache_Control 头标示例代码如下:

1

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

(2)Expires:缓存过期的绝对时间(格林威治标准时间)。如果过了它指定的那个时间点,浏览器就不认缓存了,就会去服务器重新请求一份最新的。

php设置 Expires 头标示例代码如下:

1

header('Expires: Mon, 29 Jan 2007 08:56:01

GMT');//指定过期时间,注意这里使用的是格林威治标准时间

获取格林威治标准时间可使用函数gmdate,具体用法可参考相关文档。

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

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

2:如果是php动态文件,客户端发上比对时间,php会判断是否修改,如果修改时间相同,就

只会返回1024字节,至于为什么返回1024不得而知,如果你的php生成的文件非常大,它也只返回1024,所以比较省带宽,客户端会根据服务器端发

过来的修改时间自动从缓存文件里显示。

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

php设置 Last-Modified

头标示例代码如下:

1

header('Last-Modified: '.gmdate('D, d M Y

01:01:01',$time).' GMT');//使用的是格林尼治时间,$time是指文件添加时候的时间戳

下面发一个完整的通过php控制请求页面浏览器缓存的示例:

1

2

echo

'这是一个缓存测试!';

3

$time=time();

4

$interval=3600*12;//12小时

5

header('Last-Modified: '.gmdate('r',$time));

6

header('Expires: '.gmdate('r',($time+$interval)));

7

header('Cache-Control: max-age='.$interval);

另外分析一下刷新,转到以及强制刷新的区别,浏览器上有刷新和转到按键,有的浏览器支持用ctrl+F5强制刷新页面,它们的区别是什么?恐怕知道的人不多吧!其实这三种动作完全可以用上面这三种头标进行解释。

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

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

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

no-cache 指令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js -03课 -03 js中的真假判断

真假的问题:数据类型-数字(NaN)、字符串、布尔、函数、对象(elem、[]、{}、null)、未定义真:非0的数字、非空字符串、true、函数、能找到的元素、[]、{}假:0、NaN、空字符串、false、不能找到的…

HBASE启动失败,Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster

Master日志错误:2015-12-02 06:34:32,394 ERROR [main] master.HMasterCommandLine: Master exitingjava.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMasterat org.apache.hadoop.hbase.master.HMaster.constru…

Java线程:我应该创建几个

介绍 “我应该创建多少个线程?”。 许多年前,我的一个朋友问我这个问题,然后我按照“ CPU核心数 1”的指示给了他答案。 当您在这里阅读时,大多数人都在点头。 不幸的是,我们所有人当时都错了。 现在,如果您…

java ui自动化测试脚本,如何用Airtest编写UI自动化脚本(示例代码)

前言游戏并不像app一样直接把渲染树节点暴露出来,这就造成游戏UI自动化在元素定位上的不方便性,不过依赖airtest的图片识别,我们可以直接跳过元素检查,以图片对比的形式进行自动化,虽然效率可能会低一些,但…

Spring JDBC数据库连接池设置

对于任何Java应用程序而言, 在Spring框架中设置JDBC数据库连接池都是很容易的,仅需更改spring配置文件中的一些配置即可。使用Apache Commons DBCP和Commons Pool以及Spring框架的连接池是不错的选择,但是如果您拥有Web服务器和托管的J2EE容器…

BZOJ 3505 [Cqoi2014]数三角形(组合数学)

【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id3505 【题目大意】 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个。   注意三角形的三点不能共线。 【题解】 我们计算三个点组合的情况,去除横竖三共线,以及斜…

matlab多项式加法运算,matlab多项式运算与代数方程求解解析.ppt

* 多项式运算与代数方程求解 数学软件 Matlab Matlab基础及应用 * 多项式转化为符号表达式:poly2sym 四则运算:conv、deconv 导数与积分:ployder、polyint 求值与零点:polyval、polyvalm、roots、poly 多项式运算 主要内容 代数方…

java.lang.NoClassDefFoundError:如何解决–第3部分

本文是我们的NoClassDefFoundError故障排除系列的第3部分。 正如我在第一篇文章中提到的那样,有许多可能导致NoClassDefFoundError的问题。 本文将重点介绍该问题的最常见原因之一:Java类静态初始化程序块或变量的失败。 将提供一个示例Java程序&#xf…

django实现瀑布流、组合搜索、阶梯评论、验证码

django实现图片瀑布流布局 我们在一些图片网站上经常会看到,满屏都是图片,而且图片都大小不一,却可以按空间排列。默认一个div是占用一行,当想把div里的图片并排显示的时候,只能使用float属性,但是&#xf…

通过ifrmae异步下载文档

//通过ifrmae异步下载文档 function iframeGetFile(opts) {var defaultOpts {filePath: ,onload: function (e) { }}, iframeFile;$.extend(defaultOpts, opts);iframeFile document.createElement("iframe");iframeFile.onload function (e) {defaultOpts.onload…

IO与NIO –中断,超时和缓冲区

假设有一个系统有时需要将文件复制到几个位置,但是这种方式在响应速度至关重要的情况下。 换句话说,如果由于某种原因文件系统过载,并且我们无法在不到一秒钟的时间内写入文件,则应该放弃。 ExecutorService是一项非常方便的工作工…

实验5 matlab程序设计2,实验5 Matlab程序设计2

实验5 Matlab程序设计21. 实验目的:2. 掌握建立和执行M文件的方法; 3. 掌握实现选择结构的方法; 4. 掌握实现循环结构的方法。5. 熟悉利用向量运算来代替循环操作的方法。 6. 实验内容:27. 根据61111 122232n2,求π的近…

【poj1041】 John's trip

http://poj.org/problem?id1041 (题目链接) 题意 给出一张无向图,求字典序最小欧拉回路。 Solution 这鬼畜的输入是什么心态啊mdzz,这里用vector储存边,便于边的排序。瞬间变成STL常数boy →_→。 细节 数组大小把握好。 代码 // poj1041 #i…

记一次ora-1652错误的解决过程

报错现象: 通过v$RMAN_BACKUP_JOB_DETAILS查看备份状态,一直卡着不出结果,很长一段时间之后抛出ORA-1652: unable to extend temp segment by 128 in tablespace ,此时查看临时表空间使用情况,发现占用很少&#xff0c…

带有docx4j的Java Word(.docx)文档

几个月前,我需要创建一个包含许多表和段落的动态Word文档。 过去,我曾使用POI来实现此目的,但是我发现它很难使用,并且在创建更复杂的文档时对我来说效果不佳。 因此,对于这个项目,经过一番搜索&#xff0c…

mysql中distinct关键字,MySQL关键字Distinct的详细介绍

DDLPrepare SQL:?Prepare Data:?查询数据如下图所示:第一种情况,使用Distinct关键字,查询单列数据,如下图所示:结果:对 name 字段进行去重处理,符合预期期望&#xff0…

#pragma 预处理指令

Linux C 编程一站式学习 #pragma 预处理指示供编译器实现一些非标准的特性,C 标准没有规定 #pragma 后面应该写什么以及起什么作用,由编译器自己规定。有的编译器用 #pragma 定义一些特殊功能寄存器名,有的编译器用 #pragma 定位链接地址&…

px ,em ,rem

做移动端或者响应式的页面必然需要字体的变化的。这次我就自己的经验来说说他们之间的关系,以及怎么用。 px (绝对单位)是我们常用的就不说了。 em(相对单位,相对父级) em 指字体高,任意浏览器的默认字体高都是16px。所…

使用JAnnocessor生成Java代码

在本文中,我将向你展示如何生成的代码JAnnocessor通过创建框架Nikolche Mihajlovski 。 在Nikolche的演讲中,我第一次在GeeCON 2012大会上遇到JAnnocessor: “创新和实用的Java源代码生成” (幻灯片) 。 之后&#xff…

Linq学习笔记(转)

开始Linq前你要知道的 扩展方法 顾名思义就是对现有类进行扩展的的方法,扩展方法可以在不修改现有类的情况下,为现有类增加公共的接口(不是C#中的interface)。 扩展方法本质上是一个静态方法,不同之处在于它的第一个参…