浏览器缓存,就完全不是那么回事了,缓存内容存储在浏览器本地,而内容却由web服务器生成,任何一方都不可能独立完成这一系统过程,所以它们之间必须有一种沟通机制,这就是http中的“缓存协商"。

我们先来看一个通常的http请求:

host www.phprm.com

user-agent mozilla/5.0 (windows; u; windows nt 6.1; zh-cn; rv:1.9.2.9) gecko/20100824 firefox/3.6.9 firephp教程/0.4

accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

accept-language zh-cn,zh;q=0.5

accept-encoding gzip,deflate

accept-charset gb2312,utf-8;q=0.7,*;q=0.7

keep-alive 115 //开源代码phprm.com

connection keep-alive

上面就是一个普通的http请求,为了实现在浏览器缓存控制,我们需要了解http响应头中的四种标记:

last-modified:最后修改gmt时间

etag:通过一串编码来标记内容是否更改过

expires:指定一个过期gmt时间

cache-control:mag-age=相对于浏览器本地的过期秒数,可避免服务器时间不正确的情况下同样起作用.

http返回的状态代码:

200——请求成功

304——客户端已经执行了get,但文件未变化

400——错误请求,如语法错误

500——服务器产生内部错误

501——服务器不支持请求的函数

以下代码使用了以上四种方法来控制浏览器内容缓存一个小时,如果在一小时之内则立即返回304状态码通知浏览器使用本地的内容,这将节省服务器程序执行时间,网络传输时间,仅返回一个头文件.$modified_time = $_server['http_if_modified_since'];

if (strtotime($modified_time) + 3600 > time()) {

header("http/1.1 304");

exit(0);

}

header("last-modified:" . gmdate("d, d m y h:i:s") . "gmt");

header("expires:" . gmdate("d, d m y h:i:s", time() + 3600) . "gmt");

header("cache-control: max-age=3600");

特别需要说明一下的是:expires需要服务器商支持expires模块默认情况下是不会开启,使用以下命令即可:a2enmod expires //启用expires模块

/etc/init.d/apache2 restart //重启apache服务

我们还可以通过修改http.conf配置中:expires active on expiresbytype image/gif "access plus 1 month" expiresbytype text/css "now plus 2 day" expiresdefault "now plus 1 day"

以上是针对静态内容的mime类型来设置过期时间,因为我们无法给静态文件直接指定一个绝对到期时间,所以采用"access plus"式的语法,由web服务器在该内容被请求的时候动态计算一个绝对到期时间,作为expires标记的内容.

值得一提的是,对于常见的静态文件格式,即便是web服务器返回http响应头中没有expires标记,浏览器也会根据一些其它线索猜测一个过期时间,比如ie在某种缓存模式下,对于gif图片设置为永不过期,除非我们配置expires为马上过期,也就是将过期时间设置为当前时间或者0.

教程链接:

随意转载~但请保留教程地址★

php代码浏览器缓存,php 浏览器缓存相关推荐

  1. php 前端缓存,前端浏览器缓存及代码部署

    前言 最近手上刚刚拆掉石膏,去楼下房友帮忙.楼下房友领导来自阿里,前端用的是阿里的ant-design,设计将设计图上传到蓝湖,聊天工具也采用阿里的钉钉.有时间我也多多去楼下房友交流学习,多交流,就会 ...

  2. 浏览器缓存和webpack缓存配置

    网络请求会耗费大量时间和请求,如果可以重用为改变的网络资源,对于用户来说可以更快更流畅的查看网页,对于服务器来说减少了很多负荷,所以浏览器缓存是前端优化的重要内容.本文介绍了浏览器缓存的机制和缓存在w ...

  3. 前端获取浏览器标识_浏览器缓存机制

    最近在项目中遇到了 IE浏览器因缓存问题未能成功向后端发送 GET类型请求 的bug,然后顺藤摸瓜顺便看了看缓存的知识,觉得有必要总结跟大家分享一下. 在前端开发中,性能一直都是被大家所重视的一点,然 ...

  4. IE针对Ajax请求结果的缓存IE浏览器同一个请求第二次是缓存数据不刷新

    IE针对Ajax请求结果的缓存IE浏览器同一个请求第二次是缓存数据不刷新 IE针对Ajax请求结果的缓存/ IE浏览器同一个请求第二次是缓存 一.在AJAX请求的属性上直接设置cache functi ...

  5. php微信网页不缓存,微信浏览器取消缓存的方法

    这篇文章主要介绍了微信浏览器取消缓存的方法,本文使用meta头信息实现取消了微信浏览器的缓存,特别是在开发时会经常用到,需要的朋友可以参考下. 做微信公众号和调试手机页面的时候,避免不了页面要跳转到微 ...

  6. js——浏览器缓存(http缓存)和本地存储

    http缓存链接 http缓存的好处: 事先代码准备: 创建一个http服务 在集成终端中,输入node app.js启动服务 此时,在浏览器中输入localhost:3000,结果如下 新建一个in ...

  7. http缓存和浏览器缓存

    一.前言 前端缓存主要是分为HTTP缓存和浏览器缓存.其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务器代码上设置:而浏览器缓存则主要由前端开发在前端js上进行设置. 缓存可以说是性能优化 ...

  8. DNS 缓存、CDN 缓存、浏览器缓存,JVM DNS 缓存详解

    最近测试遇到修改host文件后,清除浏览器缓存后,重启浏览器后,发现浏览器还是访问老DNS服务,于是网上查查原因,豁然开朗. 这里对互联网上一些文章进行整理,原文可查看参. 1.DNS 缓存 1.1 ...

  9. 浏览器Disk Cache磁盘缓存及其协商缓存、及原生App和浏览器实现缓存的差异

    浏览器Disk Cache磁盘缓存及其协商缓存.及原生App和浏览器实现缓存的差异 目录 浏览器Disk Cache磁盘缓存及其协商缓存.及原生App和浏览器实现缓存的差异 1.Memory Cach ...

  10. 了解浏览器cookie以及浏览器缓存

    Cookie的诞生 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新 ...

最新文章

  1. Oracle数据类型及存储方式——字符类型篇
  2. ArcGIS 10.0 ArcGIS 9.3.1数据生成实验--个人地理数据库
  3. Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用
  4. 机器视觉使用光源的几个选择标准
  5. [转载] Python Set intersection() 方法
  6. 浅谈Event Loop
  7. android 格林尼治标准时间的 格式转换 (String To Date) 报错 java.text.ParseException: Unparseable date
  8. 老年人大学计算机课程,老人学电脑(入门级)
  9. 什么是监管数据?什么是监管信息系统?监管数据安全管理办法说了什么?
  10. GPIO的同步性约束
  11. ubuntu怎么看服务器固态硬盘多大
  12. ping: unknown host www.baidu.com 解决办法
  13. 大数据DataX(三):DataX安装及使用
  14. 一行代码解决IE6~IE8以及IE兼容模式下的兼容问题
  15. 预防甲型流感病毒的注意事项和方法
  16. 简单四步抓取腾讯视频MP4文件
  17. 联想笔记本升级win10后黑屏无法开机解决方案
  18. 弘辽科技:拼多多商家入坑应该注意的事项。
  19. 机器学习 matlab工具箱,[matlab]机器学习及SVM工具箱学习笔记
  20. 基于Transformer的翻译模型(英->中)

热门文章

  1. 史上最清晰的红黑树讲解(上)
  2. VMware虚拟机网速慢的解决办法
  3. 阿里发布NLP和MT自学习平台,还剖析了小蜜平台的NLP技术实践
  4. C#AE利用GP工具实现裁剪
  5. python将时间戳转化为时间格式_python时间戳转换日期格式的方法是什么
  6. 2.0.1-Reaper Midi 输入修改鼠标事件
  7. 数据库日志已满的解决办法
  8. [数分笔记]用Dedekind切割定理证明确界定理
  9. 关于利用js创建按钮点击事件获取input值的问题
  10. idea使用vue项目卡顿问题