Отключение кэширования страниц не отключает кэширование ресурсов?

Я использовал HTML meta теги для отключения кэша, пока я не узнал, что это работает, только если файл обслуживается локально, поэтому я отключил кэш с помощью рекомендуемого использования заголовков, поместив это в верхней части моих страниц:

header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");

На что я не могу найти ответ, и это может быть глупо спрашивать, но это также не отключает ресурсы от кэширования, не так ли? Я был в моих инструментах разработчика и смотрел на вкладку сети и заметил, что страница загружалась каждый раз свежо, но ресурсы, такие как CSS и Javascript, все еще загружались из кеша, что наводит меня на мысль, что предотвращение кеша страниц также не означает предотвратить кэширование ресурсов страницы, но я не знаю, так ли это на самом деле. Итак, я сделал добавление версий к ресурсам, например так:

<link rel="stylesheet" href="css/style.css?version=1">

Это остановило кэширование ресурса, что я и хотел, но затем, прочитав еще немного, выяснилось, что дополнительные заголовки можно использовать для нацеливания на определенные форматы файлов и остановки их кэширования, что даст те же результаты, что и управление версиями, хотя и по-другому.

Мое понимание этого правильного и / или смешивания методов плохая практика?

0

Решение

Ваши наблюдения и понимание верны. Например, когда вы устанавливаете заголовки кэширования в вашем php, они действительны только для этой страницы. Посмотрите на это с точки зрения браузера:

  • Страница запроса — получить ответ с инструкциями не кэшировать его
  • Разобрать полученную страницу, получить URI ресурсов (css, js, img и т. Д.)
  • Отправить запрос на каждый из этих ресурсов — получить ответ

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

Существуют различные способы предотвращения кеширования. Одним из них является именно то, что вы описываете, то есть добавляете постоянно изменяющийся параметр к запрашиваемому URI — таким образом, каждый раз, когда он запрашивается, он запрашивается с другим параметром. Он все еще будет кэшироваться, но следующий запрос не будет соответствовать этому, и кэш не будет использоваться.

Другой включает изменение конфигурации вашего веб-сервера, чтобы указать, что определенные типы ресурсов (имена файлов, расширения, типы контента и т. Д.) Не должны кэшироваться. Например, следующее в конфигурации Apache указывает, что кэширование не должно происходить вообще ни для каких файлов:

<Files *>
Header set Cache-Control: "private, pre-check=0, post-check=0, max-age=0"Header set Expires: 0
Header set Pragma: no-cache
</Files>

Обратите внимание, что идея кеширования состоит из двух частей:

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

Поэтому будьте осторожны с отключением кэширования. Вы можете (в крайнем случае) убить свой сервер, если серьезно недооцените количество запросов, которые вам нужно обработать.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]