Http 正确的行为是否与标题匹配?

Http 正确的行为是否与标题匹配?,http,http-headers,Http,Http Headers,根据,HTTP服务器生成实体标记是可选的。但是,如果一个符合条件的HTTP服务器接收到一个if Match(或者if None Match)头,我找不到它应该做什么。它是应该忽略这些标题,还是应该以412前置条件失败作为响应 UPD:为了澄清,我假设所讨论的服务器不支持实体标记。虽然RFC2616在这个问题上是隐式的,但是您可以从14.26(如果不匹配)推断,如果服务器无法将资源与标记匹配,那么它应该继续进行请求)。根据我对RFC2616的理解,412代码适用于修改状态的请求(如PUT、POST

根据,HTTP服务器生成实体标记是可选的。但是,如果一个符合条件的HTTP服务器接收到一个
if Match
(或者
if None Match
)头,我找不到它应该做什么。它是应该忽略这些标题,还是应该以
412前置条件失败
作为响应


UPD:为了澄清,我假设所讨论的服务器不支持实体标记。

虽然RFC2616在这个问题上是隐式的,但是您可以从14.26(如果不匹配)推断,如果服务器无法将资源与标记匹配,那么它应该继续进行请求)。根据我对RFC2616的理解,412代码适用于修改状态的请求(如PUT、POST、DELETE)。
因此,本质上,如果标记不匹配(并且当它不在服务器端时,这只是许多可能情况中的一种),那么服务器应该继续执行请求。

与if None match头(忽略它只会损害性能)相反,如果服务器无法匹配请求的实体,则IF-MATCH请求几乎肯定会失败并返回HTTP/412。IF-MATCH头最常见的用法可能是当客户端执行范围请求时,除非服务器能够确认资源未被修改,否则它不应该返回请求的范围,因为结果可能是客户端上的数据损坏

现在,如果服务器知道它不是一个范围请求,或者知道客户端实体实际上必须匹配(例如,因为服务器从不允许更新其实体),那么在这种有限的情况下,就好像标头不存在一样行事可能是有意义的。

有一个方便的方法可以用来回答这个问题


如果您不支持,并且请求包含的值不是
*
,您将使用412进行响应。除了
*
之外的值可以完全忽略。

在INM的情况下应该继续,但是如果匹配的话应该是412(如Eric下面所说)。是的,这是有意义的。谢谢,Mark。这是个奇怪的问题,因为ETag是来自服务器的响应头。如果客户端没有从服务器获取ETag值(因为它不支持ETag),那么它是从哪里获取的,为什么要将其发送到此服务器?直接链接到图表: