cookie expires和max-age的区别

  • Expires在HTTP/1.0中已经定义,Cache-Control:max-age在HTTP/1.1中才有定义,为了向下兼容,仅使用max-age不够;
  • Expires指定一个绝对的过期时间(GMT格式),这么做会导致至少2个问题:
    1)客户端和服务器时间不同步导致Expires的配置出现问题;
    2)很容易在配置后忘记具体的过期时间,导致过期来临出现浪涌现象;
  • max-age 指定的是从文档被访问后的存活时间,这个时间是个相对值(比如:3600s),相对的是文档第一次被请求时服务器记录的Request_time(请求时间)
  • Expires指定的时间可以是相对文件的最后访问时间(Atime)或者修改时间(MTime),而max-age相对对的是文档的请求时间(Atime)
  • 在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。

你可能感兴趣的:(其他前端技术)