对于 REST API 设计,支持条件 HTTP headers 的子集是否可以?

For REST API design is it ok to support a subset of conditional HTTP headers?

对于我的 REST API 设计,我允许使用 If-Match 条件 header 修改(PUT、DELETE)资源以避免丢失更新问题。 这类似于此处描述的内容:https://www.kennethlange.com/avoid-data-corruption-in-your-rest-api-with-etags/

但是,我知道有 4 个条件 header(If-Match、If-None-Match、If-Modified-Since 和 If-Unmodified-Since)。可以忽略或禁止 If-Modified* 和 If-UnModified header 吗?是否符合标准?

我认为 ETag 是检查记录是否更新的更可靠的方法。在其他条件 header 中使用日期时间不可靠,我认为不需要。

那么只用If-Match和If-None-Match header可以吗?如果是这样,我是直接忽略其他 header 还是可以 return 400 Bad request?

So is it ok to only use If-Match and If-None-Match headers? and if so, do I simply ignore other headers or can I return 400 Bad request?

我相信答案可以在 RFC 7230:

中找到

A recipient MUST interpret a received protocol element according to the semantics defined for it by this specification, including extensions to this specification, unless the recipient has determined (through experience or configuration) that the sender incorrectly implements what is implied by those semantics.

我对标准的理解是允许您忽略 extensions,但我没有看到任何文本允许您考虑将 HTTP 文档中定义的 header 设置为是扩展。

如果事实是某些客户向您发送了一个 If-Unmodified-Since header,而您的实施忽略了它,因此发生了大而昂贵的混乱,您将不会对您律师的建议感到满意。