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 章
   210   211   212   213   214   215   216   217   218   219   220