3

キャッシュの無効化について、HTTP仕様は次のように述べています。

一部のHTTPメソッドは、キャッシュにエンティティを無効にする必要があります。これは、Request-URI、またはLocationヘッダーまたはContent-Locationヘッダー(存在する場合)によって参照されるエンティティのいずれかです。

Locationヘッダーを使用してキャッシュ内のエントリを無効にしようとしていますが、機能していないようです。これが私のユースケースです:

  1. 15:13:23.9988 | GET | folders/folder.34/contents - 200 (OK)
  2. 15:13:24.1318 | PUT | folders/folder.34/contents/test.docx - 201 (Created)
  3. 15:13:24.1548 | GET | folders/folder.34/contents - 200 (OK) (cached)

(2)の応答には、要求(1)および(3)で使用されるURIを含むLocationヘッダーが含まれています。これにより、 folders / folder.34 / contentsのキャッシュされたエントリが無効になると思いますが、(3)の応答は、 HttpWebResponse.IsFromCacheプロパティに従ってキャッシュから送信されているように見えます。

Locationヘッダーで次のような多数のURI形式を試しました。

  • Location: ../../../folders/folder.34/contents (およびその他のさまざまな'../'カウント)
  • Location: folders/folder.34/contents
  • Location: /folders/folder.34/contents
  • Location: http://myhostname/folders/folder.34/contents

しかし、それでも(3)は常にキャッシュから来ているようです。私はここで何が間違っているのですか?

4

1 に答える 1

4

HTTPBisははるかに明確です:

https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-p6-cache-22#section-6

Because unsafe request methods (Section 4.2.1 of [Part2]) such as
PUT, POST or DELETE have the potential for changing state on the
origin server, intervening caches can use them to keep their contents
up-to-date.

A cache MUST invalidate the effective Request URI (Section 5.5 of
[Part1]) as well as the URI(s) in the Location and Content-Location
response header fields (if present) when a non-error response to a
request with an unsafe method is received.

したがって、これが表示されている動作ではない場合、私の仮定は、使用している特定のHTTPクライアントが正しい動作をしていないということです。

私は特に期待します:

Location: /folders/folder.34/contents

正しい振る舞いをするため。

于 2013-04-12T18:44:13.630 に答える