Skip to main content

5. Evaluation (评估)

除以下排除的情况外, 接收方缓存或源服务器必须 (MUST) 在成功执行其正常请求检查之后, 以及在处理请求内容 (如果有) 或执行与请求方法关联的操作之前, 评估收到的请求前提条件。如果服务器对没有这些条件的相同请求的响应将是 2xx (Successful) 或 412 (Precondition Failed) 以外的状态码, 则服务器必须 (MUST) 忽略所有收到的前提条件。换句话说, 在条件请求中, 重定向和失败优先于前提条件的评估。

不是目标资源的源服务器且不能充当目标资源请求缓存的服务器绝对不能 (MUST NOT) 评估本规范定义的条件请求头字段, 并且如果请求被转发, 它必须 (MUST) 转发这些字段, 因为生成客户端打算由可以提供当前表示的服务器评估它们。同样, 当接收到不涉及所选表示的选择或修改的请求方法 (如 CONNECT, OPTIONS 或 TRACE) 时, 服务器必须 (MUST) 忽略本规范定义的条件请求头字段。

请注意, 协议扩展可以修改评估前提条件的条件或评估的后果。例如, "immutable" 缓存控制指令 (由 [RFC8246] 定义) 修改了预评估检查, 使得可以在不重新验证的情况下返回 304 (Not Modified) 响应。

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