【问题标题】:How to invalidate 'other' URIs in case of a PUT request?如何在 PUT 请求的情况下使“其他”URI 无效?
【发布时间】:2011-08-29 01:57:06
【问题描述】:

一个资源可以由多个 URI 标识。例如

/person/1234
/person/list?fname=John
/person/list?lname=Doe

以上所有内容都可能包含一个资源: 人 -

id: 1234
fname: John
lname: Doe
age: 10

假设您想将 John Doe 的年龄从 10 岁更改为 15 岁。所以您将以下内容放入 /person/1234

id: 1234
fname: John
lname: Doe
age: 15

如何强制客户端使其他 2 个 url 无效?

【问题讨论】:

    标签: http rest resteasy restful-url


    【解决方案1】:

    将其他两个 URL 返回的 ETag 更改为新值(例如,数据的哈希值)。

    【讨论】:

    • 让我重新表述我的问题。客户端在进行更新之前已经调用了 3 个 URL。所以它已经有了资源的表示。假设这些表示上的 expires 标头设置为从现在开始的一个小时内。更新完成后,其他两个资源应该已经过时了。但是客户端不会知道这一点,除非它对它们进行 GET,这不会发生一个小时。
    • 你不能告诉客户端在不发出请求的情况下使某些东西无效,除非你在你的协议中构建一个无效命令。
    • 向响应(可能是自定义标头)添加一些命令,告诉客户端使特定 URL 无效。 HTTP 没有这样的命令,所以你需要自己做一个。
    【解决方案2】:

    使/person/list?fname=John/person/list?lname=Doe 重定向到/person/1234,而不是自己返回实体数据。

    【讨论】:

    • 或者,返回一个 Content-Location: /person/1234 标头用于对两个 URI /person/list 的请求?...这将告诉任何缓存它应该考虑此类响应的任何副本作为陈旧的。 ietf.org/id/draft-ietf-httpbis-p6-cache-16.txt(第 2.5 节)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2015-04-14
    • 2020-12-12
    • 2011-05-15
    相关资源
    最近更新 更多