什么是Last-modified?
Last-modified
是服务器端文件的最后修改时间,需要和cache-control
共同使用,是检查服务器端资源是否更新的一种方式。
上次修改时间
配合If-Modified-Since或者If-Unmodified-Since使用
对比上次修改时间验证资源是否需要更新
缓存验证流程
在浏览器和服务端设置都允许缓存策略的前提下(服务端响应头的Cache-Control
不为no-store
,即禁止任何缓存),如果某个请求的响应头设置了Last-Modified
:
第一次请求:浏览器会记住响应头的Last-Modified
;
第二次及以后请求:浏览器会携带保存的Last-Modified
分别作为If-Modified-Since
放入请求头中携带过去,以此到服务端验证此次请求的资源是否过期或更新;服务端进行判断,若过期或更新,则返回新的资源,否则返回空即可,节省服务端消耗。
在浏览器第一次请求某一个URL
时,服务器端的返回状态会是200
,内容是你请求的资源,同时有一个Last-Modified
的属性标记此文件在服务期端最后被修改的时间,
格式类似这样:Last-Modified:Tue, 24 Feb 2009 08:01:04 GMT
客户端第二次请求此URL时,根据HTTP协议的规定,浏览器会向服务器传送If-Modified-Since
报头,询问该时间之后文件是否有被修改过,
格式类似这样:If-Modified-Since:Tue, 24 Feb 2009 08:01:04 GMT
如果服务器端的资源没有变化,则自动返回304(NotChanged)
状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。
注:如果If-Modified-Since
的时间比服务器当前时间(当前的请求时间request_time
)还晚,会认为是个非法请求