由应用程序开发人员实际检查E-Tag并提供该逻辑。Web服务器为您完成任务并不是魔术,因为它只知道如何计算E-Tag
静态内容的标头。因此,让我们将您的情况放在上面,并分解交互应该如何发生。
GET /projects/1
服务器接收到请求,确定该记录版本的E-Tag,并将其与实际内容一起返回。
200 - OK
E-Tag: "412"
Content-Type: application/json
{modified: false}
由于客户端现在具有E-Tag值,因此可以将其包含在PUT
请求中:
PUT /projects/1
If-Match: "412"
Content-Type: application/json
{modified: true}
此时,您的应用程序必须执行以下操作:
- 验证E-Tag是否仍然正确:“ 412” ==“ 412”?
- 如果是这样,进行更新并计算一个新的电子标签
发送成功回复。
204 No Content
E-Tag: "543"
如果出现另一个请求并尝试执行PUT
与上述请求类似的请求,则服务器代码第二次评估它时,您有责任提供错误消息。
- 确认电子标签仍然正确:“ 412”!=“ 543”
失败时,发送失败响应。
412 Precondition Failed
这是您实际上必须编写的代码。E-Tag实际上可以是任何文本(在HTTP规范中定义的限制内)。它不一定是数字。它也可以是哈希值。