Http 缓存 3:Cache-Control 介绍

本贴最后更新于 1911 天前,其中的信息可能已经时移世易

Http 缓存:Cache-Control 介绍

Cache-Control 头部既可以包含在请求头中,也可以包含在响应头中。其值的表示方式有两种,一种是描述一个特定的值,另一种是直接打一个标签标明某项功能。下面举例说明:

  • 描述一个特定的值
    Cache-Control: max-age=4152551

  • 标签
    Cache-Control: no-cache

请求头中,Cache-Control 主要包含以下这些属性:

属性 含义
max-age 告诉服务器,客户端不会接收 age 超出 max-age 的缓存,如果超出了,Server(如代理服务器)端需要重新从源服务器获取
max-stale 后面可以有值也可以没有,当有值的时候,表示即使 Server 端(如代理服务器)的缓存已过期,但过期秒数没有超出 max-stale 秒,客户端仍然要使用这个缓存;如果后面没有值,表明无论 Server 端的缓存过期多久,客户端都要使用他
min-fresh 当服务器端缓存的 age 超出 min-fresh 秒后,客户端才会使用,如果 age 小于 min-fresh,要求 Server 端从源服务器获取资源
no-cache 表示不使用缓存,Server 端也不能使用缓存
no-store 告诉各代理服务器不要将源服务器的资源缓存(实际有很多代理服务器不遵守这个约定)
no-transform 告诉代理服务器不要修改包体的内容
only-if-cached 告诉服务器只当有缓存时才返回,如果没缓存,则返回 504
cache-extension 自定义扩展值,如果服务器不识别,将被忽略

响应头中,Cache-Control 主要包含以下这些属性:

属性 含义
must-revalidate 告知客户端,如果缓存过期,必须向服务器验证后方可使用,以防有些客户端即使缓存过期了,也继续使用
proxy-revalidate 与 must-revalidate 类似,告知下游代理服务器,如果缓存过期,必须向服务器验证后方可使用
no-cache 告知客户端不能直接使用缓存,必须先到源服务器验证,如果 no-cache 后指定头部,则若客户端的后续请求及响应中不含有这些头则可以直接使用缓存
max-age 告诉客户端如果已缓存时间(age)超出了 max-age 指定的秒数,则缓存过期
s-maxage 与 max-age 类似,但只针对于共享缓存(通常是代理服务器中的缓存),优先级高于 max-age 和 Expires
public 告诉客户端,无论是私有缓存还是共享缓存,都可以将此响应缓存
private 表示该响应不能被代理服务器作为共享缓存使用
no-store 告诉所有下游节点不能对此响应缓存(包括代理服务器和客户端)
no-transform 告诉代理服务器不能修改响应包体的内容

参考

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
Lord-X
分享原创技术文章,主要关注Java领域及性能优化领域 北京

推荐标签 标签

  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    326 引用 • 1395 回帖 • 2 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 41 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 200 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 281 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    42 引用 • 130 回帖 • 252 关注
  • Follow
    4 引用 • 12 回帖 • 9 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 712 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 108 关注
  • OneNote
    1 引用 • 3 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 1 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 506 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 186 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 1 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    37 引用 • 157 回帖 • 2 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 3 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    100 引用 • 905 回帖 • 1 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖
  • OpenCV
    15 引用 • 36 回帖 • 1 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 343 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 618 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 656 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3203 引用 • 8217 回帖 • 1 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 743 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    346 引用 • 760 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    291 引用 • 4495 回帖 • 665 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 223 关注