Page 215 - HTTP权威指南
P. 215
例如,如图 7-14 所示,如果你的缓存在 7 月 3 日对 Joe 的五金商店的 7 月 4 日特卖
声明进行再验证,就会收到一条 Not Modified 响应(参见图 7-14a)。但如果你的缓
存在 7 月 5 日午夜售卖结束后对文档进行再验证,缓存就会收到一个新文档,因为
服务器内容已经发生了变化(参见图 7-14b)。
条件请求
GET /announce.html HTTP/1.0
If-Modified-Since: Sat, 29 Jun 2002, 14:30:00 GMT
HTTP/1.0 304 Not Modified
客户端 服务器
Date: Wed, 03 Jul 2002, 19:18:23 GMT
Expires: Fri, 05 Jul 2002, 14:30:00 GMT
响应
(a)If-Modified-Since成功的再验证
条件请求
GET /announce.html HTTP/1.0
If-Modified-Since: Sat, 29 Jun 2002, 14:30:00 GMT
HTTP/1.0 200 OK
客户端 服务器
Date: Fri, 05 Jul 2002, 17:54:40 GMT
Content-type: text/plain
Content-length: 124
Expires: Mon, 09 Sep 2002, 05:00:00 GMT
All exterior house paint on sale through
Labor Day. Just another reason for you
to shop this summer at Joe's Hardware!
响应
(b)If-Modified-Since失败的再验证
图 7-14 如果未发生变化,If-Modified-Since 再验证会返回 304 响应,如果发生了变化,
就返回带有新主体的 200 响应
注意,有些 Web 服务器并没有将 If-Modified-Since 作为真正的日期来进行比
对。相反,它们在 IMS 日期和最后修改日期之间进行了字符串匹配。这样得到的语
义就是“如果最后的修改不是在这个确定的日期进行的”,而不是“如果在这个日期
179 之后没有被修改过”。将最后修改日期作为某种序列号使用时,这种替代语义能够很
好地识别出缓存是否过期,但这会妨碍客户端将 If-Modified-Since 首部用于真
正基于时间的一些目的。
188 | 第 7 章