在多说一下,这个也是在缓存时间已经失效,即Cache-Control:mac-age = 0 的情况下,而且上面的Etag和If-None-Match不相等的情况下;
Last-Modified指的是文件上一次被修改的时间(可以理解为服务器端的),, 会带着 If-Modified-Since(本地的)返回的时间,,本地的时间大于等于服务器端的时间的花,说明资源没有被改动过接着用缓存的,否则就要更新,从新发送web请求了,如果感觉拗口的话,贴一下参考的原话。
当资源过期时(也就是 Cache-Control:max-age=0,),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。若Last-Modified的时间较新,说明最后修改时间较新,说明资源又被改动过,则响应整的资源重新从服务器读取,而不是读取缓存,返回200状态吗;若If-Modified-Since的时间比Last-Modified新或者相等,说明服务器的内容没有更新,直接读取缓存即可,返回304状态码,告知浏览器继续使用所保存的cache。
另外需要说明的是: cache-control .Etag和If-None-Match Etag和If-None-Match三者的权重是从左到右越来越小的;
还有一点需要说明的是,我们说的缓存~基本上都是GET方式的,像POST之类的通常情况下是不会进行缓存的;
说了这么多,缓存是好的,可以节约资源,减少服务器的压力,但是,设置太长的缓存时间的话,又不能及时的更新资源,具体如何取舍把握,还要视具体情况再说.
: » Last-Modified缓存和If-Modified-Since缓存
原创文章,作者:306829225,如若转载,请注明出处:https://blog.ytso.com/251630.html