美文网首页
【总结】浏览器缓存小结

【总结】浏览器缓存小结

作者: __XY__ | 来源:发表于2018-08-03 11:33 被阅读0次

    浅谈缓存


    缓存从请求路径上来分,可以分为浏览器缓存,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/

    相关文章

      网友评论

          本文标题:【总结】浏览器缓存小结

          本文链接:https://www.haomeiwen.com/subject/zcjyvftx.html