Избегайте кеширования http ответов - PullRequest
28 голосов
/ 27 марта 2012

Какое окончательное решение для предотвращения любого вида кэширования данных http? Мы можем изменить как клиента, так и сервер, поэтому я думаю, что мы можем разделить задачу между клиентом и сервером.

Клиент может добавлять к каждому запросу случайный параметр http://URL/path?rand=6372637263 - Мне кажется, что при использовании только этого способа он не работает на 100% - возможно, существуют некоторые интеллектуальные прокси, которые могут обнаружить, что ... С другой стороны, я думаю, что если URL-адрес отличается от предыдущего, прокси-сервер не может просто решить отправить обратно какой-то кешированный ответ.

На сервер может контролировать несколько заголовков HTTP:

Expires: Tue, 03 Jul 2001 06:00:00 GMT
Last-Modified: {now} GMT
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache

Любые комментарии к этому, каков наилучший подход?

Ответы [ 2 ]

43 голосов
/ 27 марта 2012

Заголовки управления кэшем на стороне сервера должны выглядеть следующим образом:

Expires: Tue, 03 Jul 2001 06:00:00 GMT
Last-Modified: {now} GMT
Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate

Избегайте перезаписи URL-адресов на клиенте, поскольку это загрязняет кеши и вызывает другие странные семантические проблемы. Кроме того:

  • Используйте один заголовок Cache-Control (см. rfc 2616 ), поскольку поведение с несколькими записями не определено. Кроме того, специфичные для MSIE записи во втором элементе управления кэшем в лучшем случае избыточны .

  • no-store о безопасности данных. (это только означает, что не следует записывать это на диск - кэши все еще могут хранить ответ в памяти).

  • Pragma: no-cache не имеет смысла в ответе сервера - это заголовок запроса, означающий, что любой кэш, получающий запрос, должен переслать его источнику.

  • Использование обоих Expires (http/1.0) и cache-control (http/1.1) не является избыточным, поскольку существуют прокси, которые говорят только на http / 1.0 или понижают протокол.

  • Технически, последний измененный заголовок является избыточным в свете no-cache, но это хорошая идея, чтобы оставить его там.

  • Некоторые браузеры будут игнорировать последующие директивы в заголовке элемента управления кэшем после того, как они встретят ту, которую они не распознают, - поэтому сначала поместите важные элементы.

4 голосов
/ 27 марта 2012

Добавление заголовка

Cache-control: private

гарантирует, что кеш данных не будет кешировать такой запрос.

Я бы хотел порекомендовать вам лекцию Фабьена Потенциара о кешировании: http://www.slideshare.net/fabpot/caching-on-the-edge

...