http协议里控制浏览器缓存的头有三个Cache-Control,Expires,Last-Modified
对于静态页面还有Etag。
一、先来看第一种情况:apache 静态页面
apache发送给客户端的静态页面一般包含Last-Modified和Etag,这两个标签的值来自静态文件的修改时间和inode,
下面是截取得apache返回客户端的头
---------
Last-Modified: Fri, 26 Jan 2007 01:53:34 GMT
ETag: "3f9f640-318-cb9f8380"
---------
搜索引擎之所以喜欢静态文件是因为有这两个标识,可以判断文件是否更新过
二、PHP等动态页面
由于php是动态生成的,它的内容是不能根据php程序的时间来确定最后修改日期,所以默认php返回客户端的时候补包含任何缓存控制,要想利用好缓存就必须了解缓存机制,和理减少b,s的交互,缩减带宽流量,减轻服务器负担...好处多多
三、缓存控制的具体含义
先解释一下本人经过测试理解的这几个标签的含义
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消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
php用法:
在输出之前用header(),(如果使用ob_start()可以将header放在程序任意地方)
header('Cache-Control: max-age=8');
max-age=8表示最大生存期8秒,超过8秒浏览器必须去服务器重新读取,这个时间是以用户的读取页面开始计时的,而Expires是绝对时间。
Expires:缓存过期的绝对时间,如果过了它指定的那个时间点,浏览器就不认缓存了,要去服务器重新请求一份最新的。
Last-Modified:文档的最后修改时间,它的妙用就是:1 如果是静态文件,客户端会发上来它缓存里的时间,apache会来比对,如果发现没有修改就直接返回一个头,状态码是304,字节数非常少,(高级版本还会增加比较Etag来确定文件是否变化)
2 php动态文件: 客户端发上比对时间,php会判断是否修改,如果修改时间相同,就只会返回1024字节,至于为什么返回1024不得而知,如果你的php生成的文件非常大,它也只返回1024,所以比较省带宽,客户端会根据服务器端发过来的修改时间自动从缓存文件里显示。
注:如果没有Last-Modified头,Cache-Control和Expires也是可以起作用的,但每次请求要返回真实的文件字节数,而不是1024
四、HOW ?
静态页面不用去管它了,如果想更好的控制静态页面的缓存,apache有几个模块可以很好的控制,这里不讨论
php页面:
这里分两种:1 不经常改动的页面,类似新闻发布,这类页面的特点:第一次发布之后会有几次改动,随着时间推移基本不会再修改。控制策略应该是:1第一次发布之发送Last-Modified,max-age设定1天,修改过之后更新Last-Modified,max-age时间随着修改次数正常。这样似乎比较繁琐,还要记录修改次数,也可以预计一下下次可能的修改时间用Expires指定到大概时间过期
php代码:
//header('Cache-Control: max-age=86400');//缓存一天
header('Expires: Mon, 29 Jan 2007 08:56:01 GMT');//指定过期时间
header('Last-Modified: '.gmdate('D, d M Y 01:01:01',$time).' GMT');//格林尼治时间,$time是文件添加时候的时间戳
2 经常改动的页面 类似bbs,论坛程序,这种页面更新速度比较快,缓存的主要作用是防止用户频繁刷新列表,导致服务器数据库负担,既要保证更新的及时性,也要保证缓存能被利用
这里一般用Cache-Control来控制,根据论坛的发帖的频率灵活控制max-age。
header('Cache-Control: max-age=60');//缓存一分钟
header('Last-Modified: '.gmdate('D, d M Y 01:01:01',$time).' GMT');//格林尼治时间,$time是帖子的最后更新时间戳
五 额外
1 刷新,转到,强制刷新的区别
浏览器上有刷新和转到按键,有的浏览器支持用ctrl+F5强制刷新页面,它们的区别是什么?
转到:用户点击链接就是转到,它完全使用缓存机制,如果有Last-Modified那么不会和服务器通讯,用抓包工具可以查看到发送字节是0byte,如果缓存过期,那么它会执行F5刷新的动作。
刷新(F5):这种刷新也是根据缓存是否有Last-Modified来决定,如果有会转入304或1024(php),如果没有最后更新时间那么去服务器读取,返回真实文档大小
强制刷新:完全抛弃缓存机制,去服务器读取最新文档,向服务器发送的header如下
Cache-Control: no-cache
2 调试工具
查看浏览器和服务器交互比较好的工具是httpwatch pro,现在的版本4.1,支持ie7
还有别的代理抓包工具可以分析,http debugging。没用过,还有tcp抓包工具,2000自带的network monitor不过不是专门针对http的比较难用
分享到:
相关推荐
《HTTP权威指南》是一本深入解析HTTP协议的入门手册,主要涵盖了HTTP协议的基本概念、工作原理以及在Web服务器中的实际应用。HTTP协议是互联网上应用最为广泛的一种网络协议,它定义了客户端(如Web浏览器)与服务器...
- **原理**:`mod_disk_cache`将缓存保存在磁盘上,虽然读写速度较慢但存储空间更大;而`mod_mem_cache`则使用内存作为缓存,速度快但受限于物理内存大小。 - **应用场景**:适用于高并发访问且内存资源有限的情况。...
1. **HTTP协议理解**: 理解HTTP请求和响应的工作原理,以及如何通过PHP处理这些请求来生成响应。 2. **表单处理**: 学习如何使用PHP接收和验证HTML表单数据,实现用户交互功能。 3. **会话管理**: 使用session和...
5. **性能优化**:提供性能调优技巧,如调整并发连接数、开启HTTP/2协议、使用缓存模块等,以提升服务器响应速度和负载能力。 6. **错误处理与日志**:解释如何理解和解析Apache的日志文件,以及如何配置错误页面,...
《Apache Server系统管理员手册》是一本专门为Apache服务器的系统管理员准备的详尽指南。这本书涵盖了Apache服务器的基础知识、安装配置、安全管理、性能优化以及故障排查等多个方面,旨在帮助读者全面理解并熟练...
### Nginx应用技术指南知识点概览 #### 一、Nginx基础知识 **1.1 简介** Nginx是一款轻量级、高性能的Web服务器与反向代理服务器,同时也支持IMAP/POP3/SMTP协议。最初由Igor Sysoev为俄罗斯的Rambler.ru站点开发...
Apache HTTP Server 2.2 用户手册是一份详细且权威的指南,主要针对这款广泛应用的开源Web服务器进行深入解析。这份官方文档以英文CHM(Compiled Help Manual)格式提供,为用户提供了全面的操作、配置和问题解决...
9. HTTP协议:理解HTTP请求和响应的工作原理,以及PHP如何处理这些请求。 10.表单处理:学习如何使用PHP接收和验证HTML表单数据,防止XSS(跨站脚本攻击)和CSRF(跨站请求伪造)。 11.Session与Cookie:掌握如何...
《Apache管理员手册1》是为IT专业人士准备的一份详尽指南,主要涵盖了Apache HTTP服务器的配置、管理和优化。Apache作为世界上最流行的Web服务器软件之一,它的高效稳定性和强大的可定制性吸引了无数用户。这份手册...
它是Windows操作系统下的Web服务器扩展机制,允许开发者使用C或C++编写动态的Web应用程序和过滤器,类似于Apache的mod_perl或者PHP。ISAPI扩展可以直接与IIS服务器交互,提供高性能的Web服务。 在《ISAPI实用技术...
《PHP 5.5.32 源码解析与应用》 PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其在Web开发领域占据重要地位。标题中的"php-5.5.32.tar.gz"指的是PHP的一个特定版本——5.5.32,它被压缩为tar.gz...
**Session的原理及注意事项** - **原理**: 通过唯一标识符保存用户会话数据。 - **注意事项**: 在大型网站中,考虑使用Redis等内存数据库作为Session存储,提高并发处理能力。 **PHP与MySQL性能测试工具** - **AB...
- **安装Memcached**:用于缓存数据,提高应用性能。 - **配置Xdebug**:用于代码调试,需要额外安装Xdebug扩展。 #### 常见问题解决 1. **Apache启动失败**:检查端口是否被占用,以及配置文件是否有误。 2. **...
- **插件机制**:解析了插件系统的工作原理,指导开发者如何开发和集成自定义插件。 #### 5. 模板指南与附录 模板指南部分深入探讨了ThinkPHP的模板系统,包括模板标签、变量、注释、公共模板和布局模板的概念和...
- SQL注入攻击的原理及防范措施。 - 数据验证与过滤。 **5. 实战案例** - 构建一个简单的用户注册登录系统。 - 设计一个博客系统。 #### 六、高级主题 **1. 面向对象的PHP与MySQL** - 如何使用面向对象的方式操作...
《实战Nginx:取代Apache的高性能Web服务器》是一本深度探讨Nginx技术的书籍,作者张宴通过丰富的实践经验和深入的技术解析,为读者揭示了Nginx的强大功能和高效性能。Nginx作为现代互联网架构中的重要一环,其轻量...
通过阅读和分析这个文件,开发者可以深入理解模板引擎的工作原理,从而更好地利用它来构建高效且易于维护的Web应用。 在PHP模板引擎的实践中,有几个关键概念值得掌握: 1. **变量插值**:模板引擎会识别出模板...