当前位置:首页 > 英文周记 > 正文内容

expires「EXPIRES IN」

更新时间:2026-07-18 03:52:55 周记网3年前 (2023-03-09)英文周记165

Expires和max-age的区别

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

1.Expires在HTTP/1.0中已经定义,Cache-Control:max-age在HTTP/1.1中才有定义,为了向下兼容,仅使用max-age不够;

expires「EXPIRES IN」

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。

expires 和 last-modified 与etag的区别

Last-Modified和Expires针对浏览器,而ETag则与客户端无关,所以可适合REST架构中。

Last-Modified和Expires都应用在浏览器端的区别是:Expires日期到达前,浏览器不会再发出新的请求,除非用户按浏览器的刷新,所以,Last-Modified和Expires基本是降低浏览器向服务器发出请求的次数,而ETag更侧重客户端和服务器之间联系。

ETag定义:RFC2616(也就是HTTP/1.1)中没有说明ETag该是什么格式的,只要确保用双引号括起来就行了,所以可以用文件的hash,甚至是直接用Last-Modified,以下是服务器端返回的格式:

ETag: "50b1c1d4f775c61:df3" 客户端向服务端发出的请求:If-None-Match:

W/"50b1c1d4f775c61:df3"  

这样,在J2EE/JavaEE服务器端,我们判断如果ETag没改变也是返回状态304,起到类似Last-Modified和Expires效果。

Last-Modified和Expires区别是:如果过了Expires日期,服务器肯定会再次发出JSP完整响应;或者用户强按浏览器的刷新按钮,服务器也必须响应,apache等静态页面输出也是这样,但是这时动态页面就发挥了作用,如果JSP涉及的业务领域模型还是没有更新,和原来一样,那么就不必再将动态页面输出了(浏览器客户端已有一份),从Etag中获取上次设置的领域模型对象修改日期,和现在内存中领域模型(In-memory

Model)修改日期进行比较,如果修改日期一致,表示领域模型没有被更新过,那么返回响应包304,浏览器将继续用本地缓存的该页面,再次节省了带宽传输。

通过上述Expire和Etag两次缓存,可以大大降低服务器的响应负载,如果应用不是状态集中并发修改和实时输出,而是分散修改然后分发,如个人空间

个人博客(每个人只是修改它们自己的状态,不影响全局)或QQ类似个人工具,那么采取这样的方法效果非常明显,实际就是一种动态页面静态化技术,但比通常事先进行页面静态化要灵活强大。

expires什么意思

expires是expire的第三人称单数形式。

expire

英 [ɪk'spaɪə; ek-] 美 [ɪk'spaɪɚ]

vi. 期满;终止;死亡;呼气

vt. 呼出(空气)

expired 什么意思

adj. 过期的;失效的

v. 期满(expire的过去分词)

网络释义专业释义英英释义

过期的

**词汇第8天:"无效的"用英语怎么说? ... valid adj. 有效的 expired adj. 过期的expiry date 到期日 ...

基于48个网页-相关网页

失效

已过期

到此为止

短语

expired cost [会计] 已耗成本

expired property 批租期满物业

expired utility 已耗效用

html中的expires属性

主要重点在于我们要明白一个相对(Expires)一个绝对(max-age)

分别

max-age

max-age是HTTP/1.1中,他是指我们的web中的文件被用户访问(请求)后的存活时间,是个相对的值,相对Request_time(请求时间).

例如:A.html 用户请求时间是18:00,max-age设置的是600的话,相当18:00+600秒过期,也就是相对18:00的时间后面600秒后过期.默认的max-age是由Expires算出来的.

Expires

Expires是HTTP/1.0中的,它比max-age要麻烦点.Expires指定的时间分下面二种,这个主要考虑到apache中设置是A还是M.

1.相对文件的最后访问时间(Atime)

当Apache使用A时间来做Expires时.这样设置时.他就和max-age的值相等,因为max-age是相对文件的请求时间(Atime).

例如:ExpiresByType text/html A600

由上面我们得知,Apache设置Atime时,过期为600秒时.

Expires=18:00+600=18:10

max-age=18:00+600=18:10

得出:Expires=max-age

2.绝对修改时间(MTime)

这又分二种情况,我们来拿A.htm来讲

假设文件的建立时间为18:00.

当用户Request请求为18:00时,过期为600秒

Expires=18:00+600=18:10

max-age=18:00+600=18:10

得出:Expires等于max-age

当用户Request请求为18:20时,过期为600秒

Expires=18:00+600=18:10(因为设置成Mtime时,时间由文件建立时间来决定)

max-age=18:20+600=18:30

得出:Expires不等于max-age

另外要注意,象上面这种情况时,max-age优化,所以过期时间为18:30.

在squid,如果没有指明expires和max-age这二个的截止时间,那它就会使用发式截止时间,如参考 Last-Modified.

其实上面的max-age=18:20+600=18:30,这样算max-age不对,真实环境要这样算,max-age过期为http头中的Age=600过期.

注:Age阈值是缓存服务器估计从响应产生或被原始服务器重新证实以来的总时间.age的值是缓存服务器算出来的,原始服务器是没有的.

下面是Js语言代码。大神能否告诉我这里的“expires”是什么意思?

document.cookie="username=John Doe;"

1. 这一部分是设置cookie(就是浏览器的数据缓存),名:"username",值:"John Doe"

"expires=Thu, 18 Dec 2013 12:00:00 GMT"

2. 这一段是设置上述cookie的过期时间,这里的过期时间是 "2013年12月18号星期四12点"(也就是说现在来看这个cookie根本没有被设置,因为2013年早就过了,一般都需要设置一个未来的时间点而不是过去的)。其实这个值很少这么直接去写,一般都是使用 日期对象.toGMTString() 这种方式获取代替。

标签: expires

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。