Браузер опирается на HTTP-заголовки ответа сервера:
Cache-Control: Определяет общие правила кэширования. Например, max-age=<секунды> указывает время жизни ресурса в кэше, no-cache требует валидации с сервером перед использованием, а no-store запрещает кэширование.
http
Expires: Устаревший заголовок, указывает точную дату и время окончания срока действия кэша. Более низкий приоритет, чем Cache-Control.
http
ETag (Entity Tag): Уникальный идентификатор версии ресурса. Браузер отправляет его серверу в заголовке If-None-Match при повторном запросе. Если ETag совпадает, сервер возвращает 304 Not Modified.
http
Last-Modified: Дата и время последнего изменения ресурса. Браузер отправляет его серверу в заголовке If-Modified-Since. Если ресурс не был изменен с указанной даты, сервер возвращает 304.
http
Браузер также учитывает свой внутренний кэш, его размер и политики очистки. Если ресурс уже есть в кэше и не просрочен согласно HTTP-заголовкам, он используется без повторного запроса к серверу. В противном случае, или если требуется валидация (например, при Cache-Control: no-cache или наличии ETag/Last-Modified), браузер делает запрос к серверу.