跳到主要内容

5. 求值 (Evaluation)

除下文排除的情况外, 接收方缓存或源服务器 MUST 在成功完成正常请求检查之后, 且恰好在将要处理请求内容 (如有) 或执行与请求方法关联的操作之前, 对收到的请求前置条件进行求值. 如果服务器在没有这些条件的同一请求上本应返回 2xx (Successful) 或 412 (Precondition Failed) 以外的状态码, 则服务器 MUST 忽略收到的所有前置条件. 换言之, 重定向和失败优先于条件请求中的前置条件求值.

不是目标资源源服务器且不能作为目标资源请求缓存的服务器 MUST NOT 对本规范定义的条件请求头字段求值; 如果该请求被转发, 它 MUST 转发这些头字段, 因为生成请求的客户端意图让能够提供当前表示的服务器对它们求值. 同样, 当本规范定义的条件请求头字段随不涉及选择或修改选定表示的请求方法一起收到时, 例如 CONNECT, OPTIONS 或 TRACE, 服务器 MUST 忽略这些条件请求头字段.

注意, 协议扩展可以修改前置条件被求值的条件或其求值后果. 例如, "immutable" cache-control 指令 ([RFC8246] 定义) 会修改求值前检查, 使 304 (Not Modified) 响应可以在不重新验证的情况下返回.

虽然条件请求头字段被定义为可与 HEAD 方法一起使用 (以保持 HEAD 语义与 GET 语义一致), 但发送条件 HEAD 没有什么意义, 因为成功响应的大小大致与 304 (Not Modified) 响应相同, 且比 412 (Precondition Failed) 响应更有用.