【总结】浏览器缓存小结

浅谈缓存


缓存从请求路径上来分,可以分为浏览器缓存,cdn缓存,服务器缓存。

请求路径

以下重点讨论浏览器缓存:
在面对缓存的时候,浏览器要不要使用本地缓存,如果不要的话的请求带哪些参数?
能解决掉上面这个问题就是理解关于浏览器缓存的最好解决方式。

先说结论


  • 1浏览器会首先检查expire和cache_control参数来控制浏览器要不要往外发请求


    expire.png

    cache_control.png
  • 2 如果要往外发请求的话会检查etag和last_modified,返回的结果可能会包含302、304
请求流程.png

再说说expire和cache_control区别


expire是一个datetime类型。
cache_control是一个deltatime类型
肯定是deltatime更容易处理。如果是datetime的话还要考虑时区的问题。所以引入了cache_control
当然,这两者取其一就可以了
另外,cache_control的优先级是要高于expire的。

Expires is almost unbelievably popular, considering that Cache-Control has been preferred over Expires for 20 years. Where a Cache-Control header includes a max-age directive, any Expires header on the same response will be ignored.

from https://www.fastly.com/blog/headers-we-dont-want

还有etag 和 last_modified的区别


协议刚开始是靠last_modified来判断是否302
但是由于服务器的时钟有可能变乱。比如更改了服务器的时区。
所以引入了etag,etag可以理解为hash,如果etag没有变,说明没有更新。
肯定,etag的优先级高于last_modified

当然,总会有例外


主流的浏览器都当然都支持这套
但是很多自定义的浏览器,比如wx的,完全不管这套策略,
另外还有很多安卓上的浏览器也是这样的毛病。

参考:


https://www.zhihu.com/question/278986273
https://cloud.tencent.com/document/product/228/3236
http://www.alloyteam.com/2016/03/discussion-on-web-caching/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。