根据RFC 2616,HTTP服务器生成实体标签是可选的。但是,如果收到If-Match
(或If-None-Match
)标头,我找不到有条件兼容的HTTP服务器应该做什么。它应该忽略这些标题还是应该用412 Precondition Failed
回复?
UPD:只是为了澄清,我假设有问题的服务器不支持实体标签。
答案 0 :(得分:6)
您可以使用方便的HTTP response status codes activity diagram来回答这个问题。
如果您不支持ETag且请求包含*
以外的If-Match值,则会回复412.而If-None-Match的回复值不是*
{{1}}可以被完全忽略。
答案 1 :(得分:5)
与If-None-Match标头(无知仅损害性能)相比,如果服务器无法匹配所请求的实体,则IF-MATCH请求几乎肯定会失败并返回HTTP / 412。可能最常见的使用IF-MATCH标头是当客户端正在执行Range请求时,除非服务器可以确认资源未被修改,否则它不应返回请求的范围,因为结果可能是数据损坏客户端。
现在,如果服务器知道它不是Range请求或者知道客户端实体实际上必须匹配(例如,因为服务器永远不允许更新其实体),那么就好像标题不存在一样在这种有限的情况下感觉到。
答案 2 :(得分:1)
虽然RFC2616隐含在此问题上,但您可以推断出,如14.26(If-None-Match),如果服务器无法将资源与标记匹配,那么它应该继续请求)。基于我对RFC2616的理解,412代码适用于修改状态的请求(例如PUT,POST,DELETE)。 因此,实质上,如果标记不匹配(并且当它在服务器端不存在时只是许多可能情况中的一种),那么服务器应该继续请求。