【技术心得】Last-Modified,Etag,Expire区别

2017-01-06 15:50 阅读 () 评论 () 喜欢 () etag
【技术心得】Last-Modified,Etag,Expire 区别Last-Modified 是什么Last-Modified 是 HttpHeader 中的资源的最后修改时间,如果带有 Last-Modified ,下一次发送 Http 请求时,将会发生带 If-modifi

【技术心得】Last-Modified,Etag,Expire 区别

Last-Modified 是什么

Last-Modified 是 HttpHeader 中的资源的最后修改时间,如果带有 Last-Modified ,下一次发送 Http 请求时,将会发生带 If-modified-since 的 HttpHeader 。如果没有过期,将会收到 304 的响应,从缓存中读取。

Etag 是什么

Etag 是 HttpHeader 中代表资源的标签,在服务器端生成。如果带有 Etag ,下一次发送带 Etag 的请求,如果Etag 没有变化将收到 304 的响应,从缓存中读取。

Etag 在使用时要注意相同资源多台 Web 服务器的 Etag 的一致性。

 

Expire 是什么

Expire 是 HttpHeader 中代表资源的过期时间,由服务器段设置。

如果带有 Expire ,则在 Expire 过期前不会发生Http 请求,直接从缓存中读取。用户强制 F5 例外。


Last-Modified,Etag,Expire 混合


通常 Last-Modified,Etag,Expire 是一起混合使用的,特别是 Last-Modified 和 Expire 经常一起使用,

因为 Expire可以让浏览器完全不发起 Http 请求,而当浏览器强制 F5 的时候又有 Last-Modified ,这样就很好的达到了浏览器段缓存的效果。

Etag 和 Expire 一起使用时,先判断 Expire ,如果已经过期,再发起 Http 请求,如果 Etag 也过期,则返回 200响应。如果 Etag 没有过期则返回 304 响应。

Last-Modified,Etag,Expires 三个同时使用时。

先判断 Expire ,然后发送 Http 请求,服务器先判断 last-modified,再判断 Etag ,必须都没有过期,才能返回 304 响应。




HTTP/1.1 304 Not Modified

Date: Fri, 06 Jan 2017 07:35:09 GMT

Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/7.0.13

Connection: Keep-Alive

Keep-Alive: timeout=5, max=99

ETag: "1c9a2-54234c4f9ef80"

---

Accept:text/css,*/*;q=0.1

Accept-Encoding:gzip, deflate, sdch

Accept-Language:zh-CN,zh;q=0.8,ja;q=0.6,zh-TW;q=0.4

Cache-Control:max-age=0

Connection:keep-alive

Cookie:sessionid=ohnaejt6dvkq0krr1ptttbaf74

Host:note.md.xyz

If-Modified-Since:Sat, 26 Nov 2016 14:08:14 GMT

If-None-Match:"1c9a2-54234c4f9ef80"