首页/网络/协议速查/Last-Modified 最后修改时间
HTTP 头与缓存70 条

Last-Modified 最后修改时间

资源最后修改的绝对时间:用作缓存校验(If-Modified-Since)与 If-Range 的备选校验值,精度为秒。

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

用时间做版本标识

Last-Modified 是资源最后一次修改的绝对时间,精度到秒,用 GMT 表示。它主要服务两件事:一是配合 If-Modified-Since 做缓存再验证,资源没变就回 304,省掉响应体的传输;二是作为 If-Range 的备选校验值,判断断点续传是否还成立。它的弱点也很明显:一秒内多次修改无法区分,而且这个时间由服务端给出、可能被回拨。

基本信息

响应头名Last-Modified
格式GMT 时间字符串,如 Sat, 11 Oct 2026 12:00:00 GMT
规范RFC 9110 第 8.8.2 节
配合请求头If-Modified-Since 做再验证,If-Range 做续传校验
精度秒级,同一秒内的多次修改无法区分
与 ETag 的关系两者同时存在时,缓存校验优先使用 ETag

查看与再验证

查看与再验证
curl -sI https://www.example.com/ | grep -i last-modified   # 看资源最后修改时间
curl -sI https://www.example.com/ | grep -iE 'etag|date'    # 与 ETag 和 Date 一起对比判断
curl -si -H 'If-Modified-Since: Sat, 11 Oct 2026 12:00:00 GMT' https://www.example.com/ | head -1   # 未变更应回 304
curl -si -r 0-99 -H 'If-Range: Sat, 11 Oct 2026 12:00:00 GMT' https://download.example.com/f.bin | head -1   # 变更时应退回 200

典型使用场景

  • 静态资源再验证:本地副本过期后带上时间回源,未更新则回 304 省流量
  • 断点续传校验:确认文件仍是下载开始时的那个版本
  • 运维核对发布时间:比 ETag 更直观,适合人工判断
  • 增量同步任务:按修改时间筛选需要处理的文件
  • 排查缓存不刷新问题:对比服务端时间、Date 头与本地副本时间

输出逐列读法

字段含义怎么看
Last-Modified资源最后修改时间与 Date 头对比,明显早于响应时间属于正常
Date响应生成时间用于判断中间缓存是否复用了旧响应
If-Modified-Since客户端携带的期望时间服务端比较后决定回 304 还是 200
304 Not Modified未变更,复用本地副本不返回响应体,但会刷新本地副本的新鲜度
时间回拨Last-Modified 反而变新或变旧构建流程与文件拷贝顺序都可能造成,注意比对
只做展示时 Last-Modified 更直观;做精确缓存校验时应优先 ETag。两者同时存在且同时提供时,服务端按规范优先使用 ETag 判断。

易错点

  • 依赖秒级精度做并发控制:同一秒内连续两次发布产生相同的时间戳,缓存校验会误判为未变更
  • 构建流水线每次都重写文件时间,导致所有资源时间戳变化,缓存全部失效,CDN 回源量暴涨
  • 把 Last-Modified 当成可信的版本依据,文件复制与镜像同步可能保留旧时间,造成校验结果与实际内容不一致
  • 断点续传只用时间不校验 ETag,跨越发布窗口后仍按旧偏移续传,拼出损坏文件

数据来源与参考

  • RFC 9110 §8.8.2 Last-Modified

相关工具

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