当一个缓存接收到一个304响应并且对相同的存储键已经有一个或多个已存储的200响应时,缓存需要识别哪个已存储的响应是由这个新响应更新并且使用这个304响应中提供的信息更新已存储的响应。

    已存储的更新响应被使用第一个匹配的下列情形识别:

    • 如果新响应包含一个强验证器(查看RFC7232,2.1节),那么那个强验证器标识那个被选表示以更新。所有的带有相同强验证器的已存储响应都被选择。如果没有已存储的响应包含相同的强验证器,那么缓存不得使用新的响应来更新任何已存储的响应。
    • 如果新响应包含弱验证器并且那个验证器对应一个缓存的已存储响应,那么最近的那些匹配存储响应被选择进行更新。
    • 如果新响应不包含任何形式的验证器(如客户端从一个资源生成一个If-Modified-Since请求,而不是从Last-Modified响应头字段生成的情况),且只有一个已存储响应,同时那个已存储响应也缺少验证器,那么那个已存储响应被选择进行更新。

    如果一个已存储响应被选择进行更新,缓存必须

    • 删除任何在已存储响应中的警告码为1xx(查看5.5节)的Warning头字段;
    • 保留任何在已存储响应中的警告码为2xx的Warning头字段;
    • 使用304响应中提供的其他头字段来替换所有在已存储响应中的对应头字段。