Http头信息(一)——通用头信息(一)——Cache-Control

1、介绍

Cache-Control头信息的取值,决定了如果管理和使用缓存。其在请求和响应中都可以使用

2、取值

1)、缓存请求头信息(以下取值应用于请求头信息中)

指令说明
no-cache可以接收缓存,但需要对缓存做有效性验证
no-store不能保存或缓存这个请求及对应的响应
max-age=秒可以接收有效期内的缓存
max-stale=秒可以接收过了有效期,但没过max-stale的缓存
min-fresh=秒可以接收最近xx秒内不过期的缓存
no-transform指示缓存或代理服务器,不可以更改请求或响应内的媒体数据(比如代理服务器可能会将图片压缩,这个指令可以防止这样的操作)
only-if-cached只要缓存

2)、缓存响应头信息(以下取值应用于响应头信息中)

指令说明
public任何人都可以使用这个缓存
private只有某个人可以使用这个缓存
no-cache可以使用这个缓存,但使用前必须向服务器做有效性验证
no-store不得存储这个响应和对应请求的任何内容
no-transform与请求的no-transform含义相同
must-revalidate可以缓存这个响应,但过期后必须向服务器做有效性验证
proxy-revalidate要求缓存服务器对缓存响应的再次做有效性验证
max-age=秒响应的最大有效期
s-maxage=秒公共缓存服务器响应的最大有效期

3、详细介绍

1)、请求和响应都有的

1.no-cache

	Cache-Control:no-cache
  • 对于请求来说,该指令的意思是:可以给我缓存,但是这个缓存必须是向服务器验证后证明是有效的。
  • 对于响应来说,该指令的意思是:可以缓存这个响应,但使用前必须向服务器做有效性验证
  1. no-store
	Cache-Control:no-store
  • 对于请求和响应来说,不得以任何形式存储请求或响应的内容
  1. max-age
	Cache-Control:max-age=60
  • 对于请求来说,可以接收:自响应被发送那一刻开始算起,不超过60秒的缓存
  • 对于响应来说,这个响应可以缓存,且有效期为60秒
  1. no-transform
	Cache-Control:max-age=60
  • 对于请求和响应来说,缓存不能改变其内的媒体类型。例如不能压缩等

2)、请求专用的

  1. max-stale
	Cache-Control:max-stale=60

可以接收过了有效期(max-age指定),但是没过max-stale的缓存

  1. min-fresh
	Cache-Control:min-fresh=60

可以接收在未来60秒内,处于有效期(max-age指定)的缓存

  1. only-if-cached
	Cache-Control:only-if-cached

只接收缓存。如果没有缓存,则返回 504 Gateway Timeout

3)、响应专用的

  1. public
	Cache-Control:public

此响应可以被任何中间者缓存

  1. private
	Cache-Control:private

此缓存只能被发起请求的客户端缓存

  1. must-revalidate
	Cache-Control:must-revalidate

缓存过期后,使用前,必须向服务器做有效性验证。有同学可能在想:缓存过期后不是就得做有效性验证了吗,为啥还专门弄一个指令呢?这时因为,在Http 1.1规范里,是允许某些情况下直接使用过期缓存的。而加入这个命令,就决不允许使用过期缓存了.具体请看:可能是最被误用的 HTTP 响应头之一 Cache-Control: must-revalidate

再细读规范就知道了,原来 must-revalidate生效的场景还有一个大前提,那就是 HTTP 规范是允许客户端在某些特殊情况下直接使用过期缓存的,比如校验请求发送失败的时候,还比如有配置一些特殊指令(stale-while-revalidate、stale-if-error等)的时候,原文是这样的:

A cache MUST NOT send stale responses unless it is disconnected (i.e., it cannot contact the origin server or otherwise find a forward path) or doing so is explicitly allowed

而must-revalidate的作用就是让那个“unless”失效 ,带有 must-revalidate 的缓存,在任何情况下,都必须成功 revalidate 后才能使用,没有例外。

  1. proxy-revalidate
	Cache-Control:proxy-revalidate

must-revalidate一致,区别为:这个指令不能作用于私有缓存上。什么是私有缓存?
Cache-Control:private会将缓存存在私有缓存中

  1. s-maxage
   Cache-Control:s-maxage=60

max-age类似,这里的s代表共享,并且,这个指令仅用于CDNs或者其他中间者(intermediary caches)。这个指令会覆盖max-ageexpires响应头

看完了,休息一下,下一节讲通用缓存的其他剩余字段,欢迎关注,以获取最新的更新

下篇文章:Http头信息(一)——通用头信息(二)

### HTTP 请求头的概念及组成 HTTP 请求头(Request Headers)是 HTTP 协议的部分,位于请求行之后、请求体之前。它的主要作用是在客户端与服务器之间传递附加信息,帮助双方更好地理解请求的上下文和需求。 #### 1. **请求头的作用** 请求头的主要功能包括但不限于以下几个方面: - 描述资源属性:通过指定 MIME 类型、字符编码等方式描述请求或响应的内容特性[^3]。 - 控制缓存行为:利用 `Cache-Control` 或 `Expires` 字段告知浏览器如何处理缓存数据[^2]。 - 提供认证信息:例如使用 `Authorization` 头部字段完成身份验证过程。 - 定义连接管理策略:比如启用持久连接机制 (`Connection: keep-alive`) 来优化网络性能。 #### 2. **请求头的结构** 个典型的 HTTP 请求由三部分组成——请求行(Request Line)、多个键值对形式组成的请求头部(Headers Section)以及可选存在的实体主体(Body)。其中请求头具体表现为系列名值配对的形式,每对占据单独的行,直到遇到空白行结束为止。 以下是几个常见的标准通用请求头及其含义: | 名称 | 含义 | |---------------------|----------------------------------------------------------------------------------------| | Host | 指定目标主机名称和端口号 | | User-Agent | 表明发起请求的应用软件类型 | | Accept | 告知服务端能够接受哪些媒体类型 | | Accept-Language | 明确偏好使用的自然语言 | | Connection | 定义当前传输链接的行为方式 | 举例来说,当访问某个网页时可能看到如下所示的部分请求消息: ```http GET /index.html HTTP/1.1\r\n Host: www.example.com\r\n User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)\r\n Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n Accept-Language: en-US,en;q=0.5\r\n Connection: keep-alive\r\n \r\n ``` 上述例子展示了完整的 GET 方法请求格式,包含了必要的请求行定义了操作类型(GET), 资源路径(/index.html),协议版本(HTTP/1.1); 接着列出了若干个不同的请求头项;最后以两个回车换行符(`\r\n`)作为分隔标志结束了整个头部区域进入下阶段如果存在的话则会紧接着出现的就是实际载荷即请求体部分内容. #### 3. **特殊类型的请求头** 除了常规的标准请求头外还有些特定场景下的专用扩展头部也值得注意, 这些往往针对某些特殊的业务逻辑或者框架支持而设计出来的非标准化组件. ##### a). 认证相关的请求头 为了保障通信安全防止未授权访问的发生经常会涉及到用户登录状态校验等问题此时就需要借助专门为此目的设立的身份证明类别的元数据标签如 Basic Auth 方式的实现依赖于 Authorization 参数携带经过 Base64 编码后的用户名密码组合字符串表示法. ##### b). 浏览器兼容性指示器 考虑到不同平台间可能存在渲染差异所以有必要让远端知道本地环境的具体情况从而做出相应调整适应最佳展示效果这方面的代表有 DNT Do Not Track 和 Sec-Fetch-* 系列等等它们共同构成了现代 Web 开发不可或缺的重要组成部分之. --- ### 结论 综上所述可以看出HTTP 请求头在整个交互过程中扮演着极其重要的角色不仅限于简单的参数传递更深层次影响到了整体架构的设计思路与发展走向未来随着技术进步相信还会有更多创新性的解决方案不断涌现出来进步丰富完善现有的体系结构模型[^1].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值