Robin's Blog

记录 积累 学习 成长

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
07月 9th, 2008 Posted in HTTP

作者:FinalBSD
原载: http://www.sanotes.net/html/y2008/154.html
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。

Author:FinalBSD
Date:2008-07-09
Expires和max-age都可以用来指定文档的过期时间,但是二者有一些细微差别

1.Expires在HTTP/1.0中已经定义,Cache-Control:max-age在HTTP/1.1中才有定义,为了向下兼容,仅使用max-age不够;
2.Expires指定一个绝对的过期时间(GMT格式),这么做会导致至少2个问题1)客户端和服务器时间不同步导致Expires的配置出现问题 2)很容易在配置后忘记具体的过期时间,导致过期来临出现浪涌现象;

3.max-age 指定的是从文档被访问后的存活时间,这个时间是个相对值(比如:3600s),相对的是文档第一次被请求时服务器记录的Request_time(请求时间)

4.Expires指定的时间可以是相对文件的最后访问时间(Atime)或者修改时间(MTime),而max-age相对对的是文档的请求时间(Atime)

5.在Apache中,max-age是根据Expires的时间来计算出来的max-age = expires- request_time:(mod_expires.c)

429 expires = base + additional;
430 apr_table_mergen(t, "Cache-Control",
431 apr_psprintf(r->pool, "max-age=%" APR_TIME_T_FMT,
432 apr_time_sec(expires - r->request_time)));

注:如果是A,base=request_time,M的话base=finfo.mtime.
expires - request_time得到max-age,如果Expires根据的是A(也就是AccessTime)设置的(A后面的值就是addtional),那么expires设置的值就等于addtional值,但是如果Expires根据的是Mtime,那么如果M后面的参数小于最后修改时间到当前时间的差(比方说2小时前修改了文件(19:00:00),现在设置M3600(现在是21:00:00)并且访问,max-age=expires-request_time = (finfo.mtime+additional)- request_time),计算出的max-age就是负数(可以试验看到这个结果):
max-age = (19:00:00+3600/3600) - 21:00:00 = -3600s

这样,在Apache中,max-age就不仅仅是相对Atime的时间了,如果设置为M,相对的是Mtime。

posted on 2009-05-27 14:30  Robin99  阅读(15888)  评论(0编辑  收藏  举报