【问题标题】:Implementing If-Match HTTP Header in Spring在 Spring 中实现 If-Match HTTP Header
【发布时间】:2012-03-25 22:07:09
【问题描述】:

ShallowEtagHeaderFilter 是 Spring 的一部分,它处理 Http 请求上的 If-None-Match 标头。作为 Http 1.1 规范的一部分,如果请求中发送的 If-None-Match 标头的内容与 Etag 标头相同,则返回 Http 状态 304 - Not Modified。这对缓存很有帮助,因为这意味着如果客户端和服务器上的 Etag 相同,则内容将相同。

这很好。

但是我的问题是 - Spring 是否支持 If-Match 标头(也是 HTTP 1.1 的一部分)而不是 If-None-Match,因为就文档而言,它看起来像 ShallowEtagHeaderFilter 只处理 If-不匹配标头。我需要 If-Match 标头来防止同时请求覆盖前一个请求。 IE 我只希望在 Etag 相同的情况下处理请求,因此它们具有最新版本的实体。

【问题讨论】:

    标签: java spring http servlets


    【解决方案1】:

    看起来ShallowEtagHeaderFilter不支持If-Match

    curl "Accept: application/json" -H 'If-Match: "somevalue"' -i http://localhost:8080/rest-sec/api/resources/1
    
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    ETag: "03cb37ca667706c68c0aad4cb04c3a211"
    Content-Type: application/json;charset=UTF-8
    Content-Length: 56
    Date: Fri, 11 Jan 2013 14:58:40 GMT
    

    我打开了一个 JIRA 问题来跟踪这个问题: https://jira.springsource.org/browse/SPR-10164

    【讨论】:

    • 我不太明白 Spring 怎么可能在理论上支持 If-Match。为了能够支持 if-match 您实际上需要生成的实际对象,但过滤器没有这些。如果你只是在之后才这样做,就像他们对 if-none-match 所做的那样,那么对 POST/PUT 用例的支持是没有用的。他们当然可以支持 GET,但这没有任何意义。为什么有人只有在他们已经拥有文件的情况下才想要拥有它?
    • > 为什么只有在他们已经拥有文档的情况下才想要拥有它?因为它可能有变化? (想想描述客户的 json 资源)
    猜你喜欢
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2019-10-21
    • 2014-06-27
    • 1970-01-01
    • 2010-11-04
    相关资源
    最近更新 更多