首页/网络/协议速查/Date 响应时间
HTTP 头与缓存70 条

Date 响应时间

源服务器生成响应的时间戳(IMF-fixdate 格式,GMT);缓存计算年龄(Age)与新鲜度的基准之一。

协议速查网络更新于 2026-10-13

Date 在说什么

Date 是源服务器生成响应时的绝对时间,格式固定为 IMF-fixdate(例如 Sat, 11 Oct 2026 08:30:00 GMT),且必须用 GMT(RFC 9110 §6.6.1)。它是缓存计算年龄的基准:缓存拿它对比本地时间,推算出这份副本已经存在多久。

缺失会怎样

源服务器通常必须发送 Date;没有时钟的中间缓存可以代为生成。客户端拿到缺失或明显跑偏的 Date 时,新鲜度判断就会失控——表现是该更新的时候不更新,或者刚缓存就立刻失效。

基本信息

名称Date
作用标注响应生成的时刻
规范RFC 9110 §6.6.1
格式Sat, 11 Oct 2026 08:30:00 GMT(必须 GMT)
相关头Age、Expires、Cache-Control

典型使用场景

  • 排查「内容没更新」:对比 Date、Age 与本地时间,推算这份副本的年龄
  • 排查缓存提前失效:服务器时钟漂移会让新鲜度计算直接失准
  • 判断响应来自源站还是边缘缓存:配合 Via、Server 一起看
  • 日志时间线对齐:Date 是响应侧最接近生成时刻的字段

查看与对比

查看与对比
curl -sI https://www.example.com/ | grep -i '^date:'    # 看响应生成时间
date -u                                                   # 与本机 UTC 时间对比
curl -sI https://www.example.com/ | grep -iE '^(date|age|expires|cache-control):'   # 缓存相关头一起看

相关头怎么读

头部含义读法
Date源站生成响应的时刻与本机 UTC 偏差大,说明服务端时钟不准
Age该副本在缓存中已存在的秒数由缓存添加,源站一般不发送
Expires绝对过期时刻老式缓存头,存在 Cache-Control 时以它为准
Cache-Control新鲜度与可缓存性策略判断是否命中缓存的主要依据
排查缓存时间异常时把 Date、Age、Expires 与 Cache-Control 一起拉出来:只看其中任何一个字段都很容易得出错误结论。
服务器时钟漂移是隐形故障源:它同时影响缓存新鲜度、证书有效期判断与日志排序。开启时间同步并监控偏移量,比事后排查便宜得多。
CDN 通常在回源后按自己的时钟重写 Date 或补发 Date:看到边缘与源站时间不一致时,先分清这个头是源站给的还是边缘改写的。

核对时钟偏移

核对时钟偏移
timedatectl status                       # 查看系统时间与同步状态
chronyc tracking                         # 查看当前偏移量与同步源
curl -sI https://www.example.com/ | awk -F': ' 'tolower($1)=="date"{print $2}'   # 取服务端时间

易错点

  • 服务器时钟不准:缓存新鲜度与证书校验同时出问题,却很难联想到时间这个根因
  • 中间层改写或删除 Date:客户端算出的年龄失真,缓存行为随之跑偏
  • 手写 Expires 日期格式错误会被当成已过期:缓存立刻失效,回源压力立刻上来
  • 把 Date 写成带本地时间偏移的格式(缺 GMT):部分客户端直接忽略该头

数据来源与参考

  • RFC 9110 §6.6.1 Date

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌