2012-03-08 90 views
3

作爲Spring一部分的ShallowEtagHeaderFilter在Http請求上處理If-None-Match標頭。作爲Http 1.1規範的一部分,如果請求上發送的If-None-Match頭的內容與Etag頭相同,則返回304的Http狀態 - 未修改。這對緩存很有幫助,因爲這意味着如果Etag在客戶端和服務器上是相同的,那麼內容將是相同的。在Spring中實現If-Match HTTP標頭

這很好。

但是我的問題是,Spring是否支持If-Match頭(同樣是HTTP 1.1的一部分)而不是If-None-Match,因爲就文檔而言,它看起來像ShallowEtagHeaderFilter只處理If -None-Match標題。我需要If-Match頭來防止覆蓋前一個請求的同時請求。 IE我只希望處理請求,如果Etags是相同的,因此他們有實體的最新版本。

回答

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

+1

我不太明白怎麼會彈簧支撐的if-match連理論上。爲了能夠支持if-match,你實際上需要生成的實際對象,但過濾器沒有這些。如果你之後只做了if-none-match,那麼對於POST/PUT用例來說,支持是無用的。他們當然可以支持GET,但這沒有意義。爲什麼有人希望只有已經有文件纔有文件? – eis 2013-10-23 15:47:40

+0

>爲什麼有人想要一個文件,只有當他們已經有了它?因爲它可能有變化? (想想描述客戶的JSON資源) – gjambet 2015-11-16 09:28:42