3

На cache invalidation, то HTTP спецификации говорит:Как я могу аннулировать кеш HTTP с заголовком Location?

Некоторые методы 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) содержит Расположение заголовок с URI, используемый в запросах (1) и (3). Я считаю, что это должно аннулировать кэшированную запись для folders/folder.34/contents, но ответ в (3), похоже, поступает из кеша в любом случае в соответствии с свойством HttpWebResponse.IsFromCache.

Я пробовал множество форматов 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

HTTPBis гораздо понятнее:

http://tools.ietf.org/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 

Чтобы иметь правильное поведение.

+0

Возможно ли, что кеш WinInet (например, IE, .NET) не проявил правильное поведение? – ladenedge

+0

@ladenedge: конечно;) HTTP довольно обширен, и любой клиент там будет иметь некоторые ошибки. Кроме того, я считаю, что вы тоже это доказали. Вопрос: вы ошиблись, считая, что ваш стек программного обеспечения непогрешим, игнорируя собственную логику? ;) – Evert

+0

кажется настолько фундаментальным, хотя (всхлип). В любом случае, спасибо за помощь! – ladenedge

Смежные вопросы