Last-Modified

2018-04-12  本文已影响0人  大脸猫_2e21

在浏览器第一次请求某一个URL时,服务器端的返回状态200,内容是你请求的资源,同时有一个Last-Modified的属性标记(响应头)此文件在服务器端最后被修改的时间,格式类似这样:Last-Modified:Tue,24 Feb 2009
客户端第二次请求此URL时,根据HTTP协议的规定,浏览器会向服务器传送If-Modified-Since报头(请求头),询问该事件之后文件是否有被修改过,如果服务器端的资源没有变化,则自动返回HTTP:304状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。

Etag工作原理

客户端的查询更新格式是这样的:

Expires

如果max-age和Expires同时存在,则被Cache-Control的max-age覆盖。

[Expires]:

[Cache-Control]

  1. [Last-Modified]:原理和上面的[expires]相同,区别是它是根据服务器时间返回的header来判断缓存是否存在。但是有时候也会服务器上资源其实有变化,但是最后修改时间却没有变化的情况(这种问题也不容易被定位),这时候我们需要[ETag、If-None-Match]。

  2. [ETag、If-None-Match]:原理与上相同,区别是浏览器跟服务器请求一个资源,服务器在返回这个资源的同时,在respone的header加上ETag的header,这个header是服务器根据当前请求的资源生成的一个唯一标识,这个唯一标识是一个字符串,只要资源有变化这个串就不同。

  3. [ETag、If-None-Match]这么厉害我们为什么还需要[Last-Modified、If-Modified-Since]呢?有一个例子就是分布式系统尽量关闭掉ETag(每台机器生成的ETag都会不一样)

[Last-Modified,If-Modified-Since]和[ETag、If-None-Match]一般都是同时启用。

上一篇下一篇

猜你喜欢

热点阅读