• 浏览器缓存-2


      上一篇文章中,我们知道了使用Cache-Control:max-age 可以指定资源的过期时间。其实,Cache-Control 不仅仅只有这样一个值,而且它既可以在响应首部字段中也可以在请求首部字段中使用。下面总结几种常见的使用情况.

    一:Cache-Control 详谈

     1.Cache-Control: no-store;

      正如no-store名字所表达的那样,标记为no-store的响应会禁止浏览器对其缓存。

     2.Cache-Control:no-cache.

      标记为no-cache的响应实际上是可以储存在本地缓存中的。只是在与原始服务器进行新鲜度再验证之前,缓存不能将其提供给客户端使用。所以,这个首部使用 not-serve-from-cache-without-revalidation这个名字会更准确一些。

     4.Cache-Control:must-revalidata.

      这个响应首部告诉缓存,在事先没有跟原始服务器进行再验证的情况下,不能提供这个对象的过期缓存。(因为可以配置缓存,使其提供一些过期的资源以提高性能)。但缓存仍然可以随意提供新鲜的副本。

    二:客户端的新鲜度限制

      客户端浏览器可以使用Cache-Control请求首部来强化或放松对过期时间的限制。典型的,浏览器对 F5 和 Ctrl+F5 刷新就完全不一样。

      1.直接F5刷新。如果浏览器已缓存了资源,会带上 If-Last-Modified 和 If-None-Match 进行服务器再验证,对于大多数静态资源,通常会得到 304 即可以直接拿缓存。

      2.Ctrl+F5刷新。此请求报文不会包含 If-Last-Modified 和 If-None-Match ,即使浏览器中有可用的缓存,也要直接从源服务器中取资源。通常,浏览器请求字段会带上 Cache-Control:no-cache 和 Pragme:no-cache并得到 200 OK 的响应。

    三:应用

      StackOverflow中的一个提问,如何让指定的资源永远不被浏览器缓存。这个应用场景很常见的,观察到知乎首页由于会不断的推送新的内容所以禁止浏览器缓存。

     如下的设置可使绝大多数浏览器不对此资源进行缓存:

    Cache-Control: no-cache, no-store, must-revalidata
    Pragme: no-cache
    

     注:Pragme和Expires是为了兼容 HTTP 1.0 版本。

    github: https://github.com/CYanLong
  • 相关阅读:
    你人生中的那口井挖了没有?
    SQL Server 中WITH (NOLOCK)浅析
    如何用SQL语句查询Excel数据?
    ASP.NET Core中的依赖注入(2):依赖注入(DI)
    ASP.NET Core中的依赖注入(1):控制反转(IoC)
    wx小程序的学习
    Mac OS 下安装mysql环境
    Mac 全局变量 ~/.bash_profile 文件不存在的问题
    延期风险原因总结
    homebrew osx下面最优秀的包管理工具
  • 原文地址:https://www.cnblogs.com/cyanlong/p/5726798.html
Copyright © 2020-2023  润新知