设为首页收藏本站

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 331|回复: 1

kangle cache_control标记强制缓存模块解析 php静态化Cache-Control: static,max-age=60 header头部输出 access.log访问日志确认

[复制链接]

签到天数: 2536 天

[LV.Master]伴坛终老

 成长值: 22420
发表于 2018/1/4 06:48 | 显示全部楼层 |阅读模式 |Google Chrome 63.0.3239.108|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
如果要强制缓存,status_code是匹配模块可以匹配状态码,如果访问过程中出现503,504等错误码也会缓存,所以我们设置这个模块,只缓存可以正常访问的200状态码页面。kangle 3.1才有的功能,3.1以前的版本就不用加这个模块
设置code=200
cache_control模块就是设置强制缓存的了,max_age是缓存时间,last_modified是会增加一个Last-Modified的头,soft就是表示不发送max-age给浏览器,即浏览器不缓存,而只是kangle缓存。否则两边都缓存。
must_revalidate代表每次访问过程,都必须重新验证该缓存文件是否更新,如果无更新,则继续缓存,有更新则刷新缓存并且替换现有缓存文件,如果用于PHP或者远程CDN反代根据你自己需要是否开启(其实感觉没什么用,不推荐开,只会增加访问延迟)。
第二种方式是修改你的程序,送一个Cache-Control的头。Cache-Control有static内容就可以。
下面是php的例子。
  1. <?php        header("Cache-Control: static,max-age=60");    ?>
复制代码

max-age是指定缓存时间(秒).
看看是否生效,第一次访问是经过php,第二次访问就不用。
可查看access.log访问日志。每条记录的后面[]里面,如果有C表示是从缓存给出的。

[发帖际遇]: 小樱 捡了钱没交公 威望 降了 3 . 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

签到天数: 2536 天

[LV.Master]伴坛终老

 成长值: 22420
发表于 2018/12/5 15:02 | 显示全部楼层 |Google Chrome 70.0.3538.110|Windows 10
must_revalidate好像是告诉浏览器、缓存服务器,本地副本过期前,可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验。

Expires
缓存过期时间,用来指定资源到期的时间,是服务器端的具体的时间点。也就是说, Expires=max-age + 请求时间 ,需要和Last-modified结合使用。但在上面我们提到过,cache-control的优先级更高。 Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。

Last-Modified与ETag
Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符,能够更加准确的控制缓存。Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。
你可能会觉得使用Last-Modified已经足以让浏览器知道本地的缓存副本是否足够新,为什么还需要Etag(实体标识)呢?HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题:

Last-Modified标注的最后修改只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话,它将不能准确标注文件的新鲜度
如果某些文件会被定期生成,当有时内容并没有任何变化,但Last-Modified却改变了,导致文件没法使用缓存
有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形
Last-Modified/ETag 与 Cache-Control/Expires
配置Last-Modified/ETag的情况下,浏览器再次访问统一URI的资源,还是会发送请求到服务器询问文件是否已经修改,如果没有,服务器会只发送一个304回给浏览器,告诉浏览器直接从自己本地的缓存取数据;如果修改过那就整个数据重新发给浏览器;
Cache-Control/Expires则不同,如果检测到本地的缓存还是有效的时间范围内,浏览器直接使用本地副本,不会发送任何请求。两者一起使用时,Cache-Control/Expires的优先级要高,即当本地副本根据Cache-Control/Expires发现还在有效期内时,则不会再次发送请求去服务器询问修改时间Last-Modified或实体标识Etag了。
一般情况下,两者会配合一起使用,因为即使服务器设置缓存时间, 当用户点击“刷新”按钮时,浏览器会忽略缓存继续向服务器发送请求,这时Last-Modified/ETag将能够很好利用304,从而减少响应开销。
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 用百度帐号登录新浪微博账号登陆

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2018/12/13 01:06 , Processed in 0.463510 second(s), 41 queries , Gzip On, Memcache On.

Powered by itzmx!

© 2011-2018 sakura

快速回复 返回顶部 返回列表