Я пытаюсь осмыслить кеширование на стороне клиента (веб-браузера) и то, как оно работает по отношению к заголовкам элементов управления кешем IIS 7.5.
В частности:
Если мы хотим заставить клиентов перезагружать кэшированные ресурсы, как нужно настроить IIS?
Нужно ли сразу устанавливать срок действия веб-контента, если ресурсы на сервере имеют более позднюю дату изменения (или значение ETag)?
В данный момент мы не устанавливаем заголовки кеша. Поэтому, если я установлю заголовок кеша без кеширования (который, я думаю, эквивалентен немедленному истечению срока действия веб-контента), это заставит веб-браузер получить новую версию определенного файла. Или браузер будет запрашивать новую версию только после того, как сочтет свою текущую копию устаревшей, а затем с этого момента не будет ее кэшировать?
Было бы лучше всего установить флаг управления кешем на 1 неделю, а затем на 8 дней, прежде чем я узнаю, что собираюсь внести изменение, например, на 30 минут?
Но если я сделаю это, а затем мне нужно немедленно удалить элемент из кешей пользователей, потому что с ним возникла проблема, как мне это сделать?
Один из способов понять кэширование клиентского / пользовательского агента - это рассматривать браузер как реализующий для себя промежуточный кеш (что на самом деле он и делает, обращаясь к Cache-Control: private
). Это абстрагирует всю терминологию до простых шаблонов запроса и ответа, и в большинстве случаев кеш браузера ведет себя так же, как прокси или промежуточный кеш. Помните об этом при чтении авторитетной документации по этому вопросу в IETF RFC 2616: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.
Установите для заголовка «Истекает» значение «Немедленно» (что отправляет Cache-Control: no-cache
) как описано на http://technet.microsoft.com/en-us/library/cc770661(v=ws.10).aspx и http://msdn.microsoft.com/en-us/library/ms689443(v=vs.90).aspx.
Нет. Если вы не отправляете заголовки Cache-Control, IIS должен отправить последнюю версию ресурса, и клиент должен распознать это либо по заголовку Last-Modified, либо по ETag.
Ваше первое утверждение верно: отправка no-cache
будет указывать клиенту каждый раз запрашивать ресурс, даже если он уже кэшировал его. Некоторые клиенты плохо себя ведут и кэшируют такие ресурсы в любом случае, но вы также можете использовать must-revalidate
чтобы гарантировать, что он получит новую копию
Что касается лучших практик, то продолжительность кеширования зависит от вашего приложения и потребностей пользователей. Вы всегда можете отправить Cache-Control: must-revalidate
для решения упомянутых проблем, поэтому нет необходимости глобально изменять срок действия кеша.