Http 缓存 3:Cache-Control 介绍

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

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领域及性能优化领域 北京

推荐标签 标签

  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    53 引用 • 40 回帖
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    227 引用 • 476 回帖
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    36 引用 • 35 回帖 • 4 关注
  • webpack

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

    42 引用 • 130 回帖 • 250 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 504 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 688 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 412 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 166 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 194 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 447 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 488 关注
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 23 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 165 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 267 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 83 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 636 关注
  • Follow
    4 引用 • 12 回帖 • 10 关注
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖
  • Sphinx

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

    1 引用 • 221 关注
  • Quicker

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

    36 引用 • 155 回帖
  • 印象笔记
    3 引用 • 16 回帖
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 35 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 655 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 608 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 545 关注