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

本文详细介绍了HTTP头信息中的Cache-Control指令,包括请求和响应头的不同取值,如no-cache、no-store、max-age等,以及它们在缓存策略中的作用。重点讨论了如何使用这些指令来管理缓存的有效性和使用,确保数据的安全和时效性。

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头信息(一)——通用头信息(二)

<think>嗯,用户问的是同个浏览器访问不同网站时请求头是否相同。这个问题涉及到HTTP协议和浏览器行为,需要仔细分析。 从引用内容来看,用户似乎已经了解如何设置请求头模拟浏览器访问(引用1和2),也熟悉HTTP状态码(引用3)和服务器配置(引用4)。用户的核心疑问在于浏览器行为的差异性。 首先想到的是,请求头包含通用头和专用头。通用头如User-Agent肯定相同,因为同浏览器标识不会变。但Host头必须不同,因为它指定了目标域名——这正是引用4提到的虚拟主机配置的依据。 引用2提到从浏览器获取报文头的过程,这说明用户可能观察过实际请求。不同网站的Cookie和Referer差异最明显:Cookie仅发送给匹配域的服务器,Referer则始终记录上个页面地址。如果从百度跳转到淘宝,Referer就会显示baidu.com。 用户可能还隐含担忧爬虫模拟的问题。比如用固定请求头访问多个网站时,那些检查Host致性的网站会拒绝服务。这正好呼应引用1说的防爬虫策略——需要动态调整Host等字段。 最后想到缓存控制。引用3的304状态说明,If-Modified-Since等头会因网站内容更新频率不同而变化。访问新闻站和静态博客时的缓存策略肯定不同。 </think>在同个浏览器访问不同网站时,请求头**不完全相同**。核心差异点如下(关键差异已标记): 1. **共同保留字段** - `User-Agent`:标识浏览器和操作系统,访问所有网站时保持致(例如:`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...`) - `Accept`:声明可接收的内容类型(如`text/html, */*`) - `Connection`:通常为`keep-alive` 2. **必然变化的字段** - `Host`:**必须随目标网站域名改变**(例如访问百度时为 `Host: www.baidu.com`,访问淘宝时为 `Host: www.taobao.com`),这是HTTP/1.1的强制要求[^4] - `Cookie`:仅携带**当前域名相关的Cookie**(如访问github不会发送百度的Cookie) - `Referer`:记录前个网页URL,导航来源不同则值不同(从百度搜索进入淘宝时,Referer为`https://www.baidu.com/...`) 3. **可能变化的字段** - `Accept-Language`:根据浏览器语言设置变化,但通常固定除非手动修改 - `Authorization`:仅当网站需要基础认证时出现 - `Cache-Control`:不同网站可能指定不同缓存策略 ```python # Python示例:观察访问不同网站时的Host变化 import requests sites = ["https://www.baidu.com", "https://www.taobao.com"] session = requests.Session() for url in sites: response = session.get(url) print(f"访问 {url} 的Host头: {response.request.headers['Host']}") # 输出: # 访问 https://www.baidu.com 的Host头: www.baidu.com # 访问 https://www.taobao.com 的Host头: www.taobao.com ``` --- ### 核心结论 ✅ **不变部分**:浏览器基础信息(User-Agent)、基础能力声明(Accept) ❌ **变化部分**:目标域名(Host)、域名专属数据(Cookie)、来源页面(Referer) ⚠️ **动态部分**:认证信息(Authorization)、缓存指令(Cache-Control) > 网站服务器可通过变化的`Host`头实现虚拟主机托管(同IP服务多个网站)[^4],而`Cookie`和`Referer`的差异体现了浏览器的安全隔离机制[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值