php与浏览器缓存机制介绍
发布:smiling 来源: PHP粉丝网 添加日期:2014-08-28 15:00:30 浏览: 评论:0
浏览器的缓存策略,会暂时将浏览过的文件缓存在本地磁盘,当用户重复请求页面时,告知客户端页面并没有发生改变,可以调用缓存,那么如何知道客户端是否有页面缓存呢?从 HTTP 协议层面来说,浏览器发送请求时会先发送如下:
- HTTP 头:
- Connection Keep-Alive
- Date Sun, 06 May 2012 18:00:36 GMT
- Last-Modified Sun, 06 May 2012 17:31:02 GMT
- Etag ec1f629013925ab0fa4389ba926e8c06
- Keep-Alive timeout=15, max=299
- Server Apache/2.2.16 (Unix) DAV/2
- Vary Accept-Encoding
请注意其中的这两行,描述了页面的缓存信息:
Last-Modified Sun, 06 May 2012 17:31:02 GMT
Etag ec1f629013925ab0fa4389ba926e8c06这个情况下,如果服务器响应 304 状态码,浏览器会自觉地从缓存中读取数据,如果响应 200 状态码,不管有没有客户端缓存,照样从服务端读取.
按照这个理论支撑,比如站长军团大部分查询结果都是 ajax 异步获取的,二次访问就都可以通过这种方式进行缓存改造,只要客户端有缓存,就向客户端发送一个 304 响应状态码,然后退出程序执行.
浏览器发出的请求中包含 If-Modified-Since 和 If-None-Match 两个参数:
If-Modified-Since 表示询问数据的最后修改时间是否是某个时间值。然后服务器会检查数据的最后修改时间,如果是该时间则返回 304 状态码,客户端接收到该状态码后直接从本地读取缓存。这种情况有一个前置条件,即本地必须存在缓存资源,浏览器才会发送 If-Modified-Since 参数,并且值为上一次服务器返回的 Last-Modified 值。
If-None-Match 类似,它由服务器返回的 Etag 值生成,仅仅用于服务器检查数据的修改时间,可以是任意值。考虑到 If-Modified-Since 结合 Last-Modified 的方法并不被所有服务器支持,这里就只考虑使用 etag 的实现。
PHP 中通过 $_SERVER['HTTP_IF_NONE_MATCH'] 可以判断文件是否被浏览器缓存,代码片段如下:
- //使用 etag 标记控制缓存
- $etag = md5(date('Ymd'));
- if ($_SERVER['HTTP_IF_NONE_MATCH'] == $etag) {
- header('Etag:' . $etag, true, 304);
- exit();//开源代码phpfensi.com
- } else {
- header('Etag:' . $etag);
- }
这里我使用当日日期来生成 etag,这样可以保证缓存最多生效一天时间,这个参数可以根据需要修改.
补充说明:即便是 304 响应,实际上还是会请求服务端,因为需要建立连接来判断是否需要传输数据,304 缓存节约的是静态资源传输的开销.
另一种缓存是 200 响应时的缓存,不建立连接但请求会响应 200 状态码,并从本地直接读取缓存.
Tags: php缓存 php浏览器缓存
相关文章
- ·php 全面禁止浏览器缓存页面内容详解(2014-07-23)
- ·PHP中常用的缓存技术介绍(2014-07-29)
- ·PHP脚本实现Magento权限设置与缓存清理(2014-07-30)
- ·php中用缓存与不用缓存性能测试(2014-08-27)
- ·php实现memcache缓存实例详解(2014-08-27)
- ·php文件缓存类实例整理(2014-08-27)
- ·PHP利用memcache缓存技术简单介绍(2014-08-28)
- ·php中文件缓存实现程序代码(2014-08-28)
- ·php页面缓存实现方法总结(2014-08-28)
- ·php缓存技术详细介绍及php缓存实现代码(2014-08-28)
- ·php配置memcache缓存方法 (2014-09-05)
- ·php文件缓存实例代码(2014-09-08)
- ·php实现文件数据缓存实现代码(2014-09-09)
- ·PHP MemCached 缓存应用(2014-09-09)
- ·PHP中使用memcache缓存技术提高响应速度详解(2014-09-10)
- ·PHP缓存集成库phpFastCache学习教程(2015-04-15)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)