博客
关于我
http缓存策略
阅读量:716 次
发布时间:2019-03-21

本文共 1125 字,大约阅读时间需要 3 分钟。

协商缓存与强缓存详解

资源缓存是网页性能优化的关键环节,而协商缓存与强缓存是两种常用的缓存机制,各有适用的场景。以下从理论到实践,详细探讨这两种技术。


协商缓存

协商缓存的核心作用是实现客户端与服务器之间的资源更新验证,从而提升缓存复用率。与强缓存不同,协商缓存并非直接使用本地缓存,而是通过特定的缓存字段与服务器进行确认是否需要加载最新资源。

协商缓存机制

协商缓存主要依赖以下两个协议组:

  • Last-Modified/If-Modified-Since

    这副协议用于向服务器传递资源最后一次修改的时间戳。服务器收到该字段后,会比较客户端缓存的时间戳,如果时间未更新,直接返回 304 响应,表示资源未变,不需要重新获取。

  • Etag/If-None-Match

    Etag 字段提供了资源的唯一标识,服务器通过比较客户端传递的 Etag 值,判断资源是否已过时。若匹配,返回 304;若不匹配或没有 Etag 发送,则下载最新资源。

  • 这两个字段相辅相成,协同工作,既能高效验证资源是否更新,又能提升多种客户端的兼容性(支持 HTTP/1.0 的 Last-Modified 和 HTTP/1.1 的 Etag)。


    强缓存

    强缓存的作用是直接向浏览器指定一个资源的缓存期限。在缓存期内,未进行更新验证的情况下,浏览器会直接使用本地缓存,这大大提高了加载速度。

    强缓存的实现

    强缓存主要通过以下两个字段控制:

  • Cache-Control(HTTP/1.1)

    Cache-Control 是 HTTP/1.1 中的核心字段,其可选值包括:

    • no-cache:禁止浏览器使用已有缓存副本。
    • no-cache-store:强制缓存。
    • no-cache operands:仅禁用其他缓存机制,不影响Cache-Control。
  • Expires(HTTP/1.0)

    Expires字段指定了资源的缓存期限,浏览器会在过期后重新请求资源。在使用 HTTP/1.0 时,服务器需通过设置 Expires 来控制浏览器缓存行为。


  • 如何设置

    强缓存配置

    选择强缓存时,需明确指定资源的缓存期限。强缓存应基于以下原则:

    • 只有在必要时决定强制缓存。
    • 最佳实践是结合Cache-Control和Expires字段进行双重控制。

    协商缓存配置

    协商缓存适用于需要精确验证资源状态的场景。配置步骤包括:

  • 在响应头中添加 Last-ModifiedEtag 字段。
  • 对重复请求的资源返回 304 Not Modified,如果资源未变化。
  • 若资源发生变化,返回完整的 200 响应,并更新客户端缓存。
  • 通过合理应用协商缓存,可以在不影响浏览器本地缓存的情况下,实现资源更新验证。

    转载地址:http://oxdrz.baihongyu.com/

    你可能感兴趣的文章
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>