来自Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content:
原始服务器不得发送验证器标头字段(Section 7.2),例如
ETag
或Last-Modified
字段,成功回复{ {1}}除非保存请求的表示数据而没有对主体应用任何变换(即,资源的新表示数据与在PUT请求中接收的表示数据相同),并且验证器字段值反映新表示。此要求允许用户代理知道它在内存中的表示主体何时由于PUT
而保持当前状态,因此不需要从原始服务器再次检索,并且新的验证器(s)在回复中收到的信息可用于未来的条件请求,以防止意外覆盖(Section 5.2)。
我无法完全理解这一节...... 粗体句似乎与自己相矛盾,不是吗?
答案 0 :(得分:4)
关键是服务器可能会或可能不会在存储之前更改表示。从您链接到的部分:
给定表示的成功
PUT
表明同一目标资源上的后续GET
将导致在200 (OK)
响应中发送等效表示。但是,不能保证这种状态变化是可观察的,因为目标......可能会受到原始服务器的动态处理。
因此,该标准使用验证器标头的存在或不存在来向用户代理指示该表示是否已被更改。
如果表示没有被更改,那么服务器可以返回验证器头字段,用户代理可以使用它来有条件地验证它刚刚发送的表示。
如果表示已被更改,则根据定义,用户代理的表示无效。因此,不返回验证器头,并且用户代理必须执行无条件GET
。