很久没写了。感受荒废了很久。恰好今天有朋友问我关于静态资源缓存问题。忽然唤起个人学习兴趣了。
发现好多同窗对静态资源都不是很清楚。小弟我恰好有一点心得。和你们分享一下。其实就是看成个人笔记。欢迎指正。css
http 304 Not Modified浏览器
意思是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(通常是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还能够继续使用。缓存
HTTP/1.1 304 Not Modified不是服务器发出的错误提示。而是服务器所承载的业务系统在开发时为了节省链路带宽和提高浏览器的体验对GET/js、css、image等执行了缓存机制。服务器
HTTP/1.1 304 Not Modified不是服务器发出的错误提示。而是服务器所承载的业务系统在开发时为了节省链路带宽和提高浏览器的体验对GET/js、css、image等执行了缓存机制。客户端在第一次对服务器业务发出GET请求后,客户端浏览器缓存了该页面,当客户端第二次对服务器发出一样的GET请求时,若客户端缓存中的If-Modified-Since过时,客户端将向服务器发出GET请求,验证If-Modified-Since和If-None-Match是否与WEB-server中信息一致,若是GET页面未作任何修改,服务器对客户端返回HTTP/1.1 304 Not Modified,客户端则直接从本地缓存中将页面调取并发
requset请求学习
(1)If-Modified-Since:发送请求时与服务器
(2)If-None-Match:spa
response返回server
(1)Last-Modified:资源被修改的最后时间
(2)ETag:对资源的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后获得的,是资源的惟一标识索引
特别注意:图片
(1)该两项参数将存储在客户端的浏览器cache中,Last-Modified值存储为 If-Modified-Since,ETag值存储为If-None-Match.
(2)ETag的优先级高于Last-Modified.
客服端发送请求-》本地无缓存-》向服务发送请求-》返回静态资源,而且缓存到本地
这个是乐视网首页第一次请求时的截包,会发现静态资源的返回都是200
再此次请求中,http请求头部包括了If-Modified-Since,If-None-Match这两个参数与服务器作对比。若是相同,则获取本地的缓存信息,反之服务器返回新的资源。而且Last-Modified,ETag数据重置。
服务器静态资源修改了,response返回的Last-Modified,ETag也会修改
这个是乐视网首页第二次请求时的截包,会发现静态资源的返回基本都是304