1. 操作缓存的工作机制。

指令的参数是可选的,多个指令之间通过“,”分隔。首部字段Cache-Control的指令可用于请求及响应时。

eg.  Cache-Control: private,max-age=0,no-cache

1.1缓存请求指令:

no-cache 强制想源服务器再次验证
no-store 不缓存请求或响应的任何内容
max-age 响应的最大Age
max-stale 接受已过期的响应
min-flesh 期望在指定时间内的响应仍有效
no-transform 代理不可更改媒体类型
only-if-cached 从缓存获取资源
cache-extension 新指令标记

1.2. 缓存响应指令:

public 可向任意方提供相应的缓存
private 仅向特定用户返回响应
no-cache 缓存前必须先确认其有效性
no-store 不缓存请求或响应的任何内容
no-transform 代理不可更改媒体类型
must-revalidate 可缓存但必须再向源服务器进行确认
proxy-revalidate 要求中间缓存服务器对缓存的响应有效性再进行确认
max-age 响应的最大Age
s-maxage 公共缓存服务器响应的最大Age值
cache-extension 新指令标记

2 指令详解

3.1.表示能否缓存的指令:

  • public
    其他用户也可利用缓存。

  • private
    当指定private指令后,响应只以特定的用户作为对象,这与public指令的行为相反。
    缓存服务器会对该特定用户提供资源缓存的服务,对于其他用户发送过来的请求,代理服务器则不会返回缓存。

  • no-cache
    使用no-cache指令的目的是为了防止从缓存中返回过期的资源。
    。客户端发送的请求中如果包含no-cache指令,则表示客户端将不会接收缓存过的响应。于是,“中间”的缓存服务器必须把客户端请求转发给源服务器。
    。如果服务器返回的响应中包含no-cache指令,那么缓存服务器不能对资源进行缓存。源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作。

  • Cache-Control: no-cache=Location
    由服务器返回的响应中,若报文首部字段Cache-Control中对no-cache字段名具体指定参数值,那么客户端在接收到这个被指定参数值的首部字段对应的响应报文后,就不能使用缓存。换言之,无参数值的首部字段可以使用缓存。只能在响应指令中指定该参数。

3.2 控制可执行缓存的对象的指令

  • no-store 不缓存请求或响应的任何内容

该指令规定缓存不能在本地存储请求或响应的任一部分。

3.3 指定缓存期限和认证的指令:

  • s-maxage
    用于供多位用户使用的公共缓存服务器
格式:cache-control: s-maxage=604800(单位:秒)

s-maxage指令的功能和 max-age指令的相同,它们的不同点是s-maxage指令只适用于供多位用户使用的公共缓存服务器°。也就是说,对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。

另外,当使用s-maxage指令后,则直接忽略对Expires首部字段及max-age指令的处理。

  • max-age

当客户端发送的请求中包含max-age指令时,如果判定缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源。另外,当指定max-age值为0,那么缓存服务器通常需要将请求转发给源服务器。
当服务器返回的响应中包含max-age指令时,缓存服务器将不对资源的有效性再作确认,而max-age数值代表资源保存为缓存的最长时间。

应用HTTP/1.1版本的缓存服务器遇到同时存在 Expires首部字段的情况时,会优先处理max-age指令,而忽略掉Expires首部字段。而HTTP/1.0版本的缓存服务器的情况却相反,max-age指令会被忽略掉。

  • min-fresh(要求缓存服务器返回至少还未过指定时间的缓存资源)

格式:Cache-Control: min-fresh=60(单位:秒)
指令要求缓存服务器返回至少还未过指定时间的缓存资源。比如,当指定min-fresh为 60秒后,过了60秒的资源都无法作为响应返回了。

  • max-stale(缓存即使过期也照常接收)

格式:Cache-Control:max-stale=3600(单位:秒)
使用max-stale可指示缓存资源,即使过期也照常接收。
如果指令未指定参数值,那么无论经过多久,客户端都会接收响应;如果指令中指定了具体数值,那么即使过期,只要仍处于max-stale指定的时间内,仍旧会被客户端接收。

  • only-if-cached(仅在缓存服务器本地缓存目标资源的情况下才会要求其返回)
  • Cache-Control: only-if-cached

使用only-if-cached指令表示客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回。换言之,该指令要求缓存服务器不重新加载响应,也不会再次确认资源有效性。若发生请求缓存服务器的本地缓存无响应,则返回状态码504 Gateway Timeout。

  • proxy-revalidate(必须再次验证缓存的有效性)
  • proxy-revalidate指令要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性。
  • must-revalidate(代理会向源服务器再次获取有效资源的话,缓存必须给客户端一条504状态码)
格式:Cache-Control: must-revalidate

使用must-revalidate指令,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。
若代理无法连通源服务器再次获取有效资源的话,缓存必须给客户端一条504 ( Gateway Timeout)状态码。
另外,使用must-revalidate指令会忽略请求的max-stale指令(即使已经在首部使用了max-stale,也不会再有效果)。

  • no-transform(缓存不能改变实体主体的媒体类型)
格式:Cache-Control: no-transform

使用no-transform指令规定无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型。这样做可防止缓存或代理压缩图片等类似操作。

  • cache-Control扩展cache-extension token
eg. cache-Control: private, community="UCI"

通过cache-extension标记( token ),可以扩展Cache-Control首部字段内的指令。
如上例,Cache-Control首部字段本身没有community这个指令。借助extension tokens实现了该指令的添加。如果缓存服务器不能理解community这个新指令,就会直接忽略。因此,extension tokens仅对能理解它的缓存服务器来说是有意义的。

(chap6 Http首部) 通用首部字段 Cache-Control相关推荐

  1. (chap6 Http首部) 通用首部字段 DatePragma

    1. Date 首部字段Date表明创建HTTP报文的日期和时间. eg. HTTP/1.1协议使用在RFC1123中规定的格式: Date: Tue, 03 Jul201204:40:59GMT 之 ...

  2. (chap6 Http首部) 通用首部字段 Connection

    1. 字段具备如下两个作用 控制不再转发给代理的首部字段 管理持久连接 1.1 控制不再转发给代理的首部字段 在客户端发送请求和服务器返回响应内,使用Connection首部字段,可控制不再转发给代理 ...

  3. HTTP 头部字段 Cache Control max-age = 0 和 no-cache 的区别

    禁掉缓存的情况:请求百度首页 开启缓存的情况下: 似乎没有什么变化. 再观察请求的头部字段:cache-control: max-age=0 标头 Cache-Control: max-age=0 暗 ...

  4. http协议基础(七)通用首部字段

    通用首部字段的意思,就是:请求和响应报文双方都会使用的首部 1.Cache-Control 通过指定它的指令,能操作缓存的工作机制 指令参数是可选的,多个指令通过","分隔 Cac ...

  5. HTTP 首部:通用首部、请求首部、响应首部和实体首部

    HTTP 首部用于给服务器和客户端提供报文主体大小.使用的语言及认证消息等内容.首部字段由字段名和字段值构成,中间用冒号「:」隔开.有些首部是某些报文专用的,如请求首部只适用于请求报文中,有些通用些. ...

  6. HTTP 报文首部之首部字段(重点分析)

    文章目录 1.首部字段概述 2.首部字段结构 3.首部字段类型 4.通用首部字段(HTTP/1.1) 4.1 Cache-Control 4.1.1 可用的指令一览 4.1.2 表示能否缓存的指令 4 ...

  7. 【Manual】Memory Cache Control

    [Intel-64 and IA-32 Architectures Software Developer's Manual]Chapter 11 本章节关于 memory cache.cache co ...

  8. mybatis拦截器实现通用权限字段添加

    实现效果 日常sql中直接使用权限字段实现权限内数据筛选,无需入参,直接使用,使用形式为: select * from crh_snp.channelinfo where short_code in ...

  9. cache-control_网站 cache control 最佳实践

    有时,当第二次访问网站时,看起来比较怪,样式不正常. 通常,是因为 cache control 缓存控制策略定义不正确,导致服务端最新部署之后客户端没有接收到最新的更改. 本文将向您展示正确的缓存设置 ...

最新文章

  1. 业务脆弱性评估是业务持续性保障(BCM)的基础数据
  2. 快速下载Spring官网下载dist.zip中所有jar,例如spring-5.2.10.RELEASE-dist.zip
  3. php用array_merge实现无限级分类
  4. iOS底层原理探究-Runloop
  5. html5怎么删除样式,css怎么删除一个样式
  6. python3的安装_python3快速安装
  7. java setrotation_Java 在Word文档中添加和旋转图形
  8. python在股票中的应用_python在股票市场中的应用,量化大师自编选股公式
  9. 字节跳动上班有多累?
  10. Sloth:网易流计算服务化平台架构实践
  11. 群同态和群同构的区别_顾沛《抽象代数》1.4群的同态与同构习题解答
  12. 感受晋味新年俗 你的高铁票可享景区门票优惠
  13. SQL中OVER(PARTITION BY)详解
  14. DOORS入门教程系列:基本概念介绍(一)
  15. 科研——多问、多交流
  16. MySQL数据库安装包官网下载地址
  17. python用户输入文字_python中用户输入的关键字
  18. EXCEL表格转化为XML格式文件
  19. android 横屏字体变小,网页自适应解决iPhone手机横屏字体变大问题
  20. http状态码大全(404、505、502,500)

热门文章

  1. JPA_登录校验Controller代码
  2. php防止重复结算问题_PHP 编写关系到财务这样重要的系统,设计应该每次变动都算账,还是月底统一算账?...
  3. php中new运算符的作用,C++_C++编程中new运算符的使用学习教程,new运算符用作从自由存储为 typ - phpStudy...
  4. 为什么c语言写程序要挂起,我运行的C语言程序挂起了,应该怎么办?
  5. html基础--列表标签03,03HTML基础--列表标签
  6. ML之Medicine:利用机器学习研发药物—《Machine Learning for Pharmaceutical Discovery and Synthesis Consortium》
  7. CV之IR:计算机视觉之图像检索(Image Retrieval)方向的简介、使用方法、案例应用之详细攻略
  8. Crawler:爬虫基于urllib.request库实现获取指定网址上的所有图片
  9. Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button展示图片事件)
  10. python __builtins__ credits类 (15)