当超过一个条件请求头字段出现在请求中时,哪个字段被评估的顺序变得重要。实践中,本文档中定义的字段以统一的逻辑顺序一致地实现,因为“丢失更新”先决条件具有比缓存验证更加严格的要求,被验证的缓存比部分响应更高效,以及实体标签被假定比日期校验器更准确。
一个接收者缓存或源服务器必须按下列顺序评估请求先决条件:
- 当服务器时源服务器并且出现If-Match,评估If-Match先决条件:
- 如果为真,继续步骤3
- 如果为假,响应412,除非它可以状态改变请求已经成功(3.1节)
- 当接收者是源服务器,If-Match没有出现,并且If-Unmodified-Since出现,评估If-Modified-Since先决条件:
- 如果为真,继续步骤3
- 如果为假,响应412,除非它可以确定状态改变请求已经成功(3.4节)
- 当If-None-Match出现,评估If-None-Match先决条件:
- 如果为真,继续步骤5
- 如果是GET/HEAD且为假,响应304
- 如果是其他请求且为假,响应412
- 当方法是GET或HEAD,If-None-Match没有出现,并且If-Modified-Since出现,评估If-Modified-Since先决条件:
- 如果为真,继续步骤5
- 如果为假,响应304
- 当请求方法是GET并且Range和If-Range都出现,评估If-Range先决条件
- 如果验证器匹配并且Range格式可应用于被选表示,响应206
- 否则,
- 所有条件都得到满足,所以执行被请求的动作并且通过它的成功或失败进行响应
任何定义了额外条件请求头字段的HTTP/1.1扩展应该定义它自己的关于评估这些字段于本文档定义的那么些以及在实践中可能发现的条件语句的顺序期望。