RFC 5023, The Atom Publishing Protocol, Section 9.5中解释了在这种情况下使用 PUT 方法使用实体标签:
编辑完成后,客户端可以 PUT 条目并在 If-Match 头中发送 ETag 实体值,通知服务器在发送的实体值仍然与服务器匹配的条件下接受条目。
PUT /edit/first-post.atom HTTP/1.1
Host: example.org
Authorization: Basic ZGFmZnk6c2VjZXJldA==
Content-Type: application/atom+xml;type=entry
Content-Length: nnn
If-Match: "e180ee84f0671b1"
<?xml version="1.0" ?>
<entry xmlns="http://www.w3.org/2005/Atom">
<title>Atom-Powered Robots Run Amok</title>
<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
<updated>2007-02-24T16:34:06Z</updated>
<author><name>Captain Lansing</name></author>
<content>Update: it's a hoax!</content>
</entry>
然而,服务器此后收到了比客户端更新的副本,并且它以状态代码 412(“前提条件失败”)进行响应。
HTTP/1.1 412 Precondition Failed
Date: Sat, 24 Feb 2007 16:34:11 GMT
换句话说,如果其他人已经这样做了,客户端不想编辑资源,因此它会If-Match
在 PUT 请求的标题中发送实体标签。客户端对服务器说:“只有在没有其他人编辑过这个资源的情况下才接受我的编辑。”