HTTP响应412 - 您可以包含内容吗?

Gan*_*alf 5 rest http http-status-code-412 atom-feed

我正在构建RESTful数据存储并利用条件GET和PUT.在条件PUT期间,客户端可以在资源上包含来自先前GET的Etag,并且如果当前表示与服务器不匹配,则将返回HTTP状态代码412(前提条件失败).请注意,这是一个基于Atom的服务器/协议.

我的问题是,当我返回412状态时,我是否还可以包含资源的新表示形式,还是用户必须发出新的GET?HTTP规范似乎没有说是或否,Atom规范也没有(尽管它们的示例在响应中显示了一个空的实体主体).如果不返回新的表示并使客户端专门获取它,这似乎是非常浪费的.思考?

Jan*_*sen 4

尽管条件 GET 和 PUT 被概括为“条件请求”,但它们在概念上有很大不同。条件 GET 是一种性能优化,条件 PUT 是一种并发控制机制。很难将它们放在一起讨论。

对于有关条件 GET 的问题:如果您发送 GET 并包含 If-None-Match 标头,如果资源已更改,服务器将发送 200 Ok,如果没有更改(如果条件失败),服务器将发送 304 Not Modified。412 只能与条件 PUT 一起使用。

更新:看来我稍微误读了这个问题。对于您关于失败的条件 PUT 时本地副本“刷新”的观点:很可能缓存已经具有最新版本,并且您的刷新 GET 将从某个缓存提供服务。让服务器使用 412 返回当前实体实际上可能会给您带来更差的性能。