If-Match标题的正确行为?

时间:2011-05-21 09:01:45

标签: http http-headers

根据RFC 2616,HTTP服务器生成实体标签是可选的。但是,如果收到If-Match(或If-None-Match)标头,我找不到有条件兼容的HTTP服务器应该做什么。它应该忽略这些标题还是应该用412 Precondition Failed回复?

UPD:只是为了澄清,我假设有问题的服务器不支持实体标签。

3 个答案:

答案 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)。 因此,实质上,如果标记不匹配(并且当它在服务器端不存在时只是许多可能情况中的一种),那么服务器应该继续请求。