Как сохранить кэш страницы

Обновлено: 07.07.2024

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

Поиск Google

Просмотр кэшированной страницы в поиске Google начинается точно также, как и выполнение любого поискового запроса. Просто введите название сайта, а затем в результатах поиска, рядом с адресом ресурса кликните на стрелку и выберете пункт Сохраненная копия . После загрузки страницы, Google оповестит вас, о том, что вы просматриваете снимок страницы и о том, когда он был сделан. У вас также будет возможность просмотреть исключительно текст, а также исходный код сайта.

Интернет архив и Wayback Machine

Целый ряд организаций занимается сохранением истории интернета и наиболее известной среди них является некоммерческий Интернет Архив (Internet Archive). Он позволяет получить доступ к огромному множеству сайтов, текстов, видео, аудио, программного обеспечения и картинок, которые трудно найти где-либо еще

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

Расширения для браузера

Существуют и специальные дополнения для браузеров, позволяющие просматривать сохраненные версии страниц. Расширение Web Cache Viewer позволяет не только загрузить страницу из локального кэша на вашем компьютере, но и также автоматически найти ее при помощи сервиса Wayback Machine. Для пользователей Firefox существует аналогичное дополнение со схожим функционалом Web Archives .

Веб инструменты

Если ни один из вышеперечисленных способов вам не помог, то возможно вам помогут еще пара инструментов. Например, сайт Cached Page позволяет искать копии страниц сразу на нескольких ресурсах – поиск Google, Интернет Архив и WebCite. Также вы можете попробовать сервис Google Cache Checker , который проверяет как давно индексировался сайт и есть ли его сохраненные копии.

Favorite

В закладки

9 способов найти удаленный сайт или страницу

Сервисы и трюки, с которыми найдётся ВСЁ.

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

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

Поговорим о простых и общедоступных способах найти сайты и страницы, которые по каким-то причинам были удалены.

1. Кэш Google, который всё помнит

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

2. Web-archive, в котором вся история интернета

third_link_is_right

Во Всемирном архиве интернета хранятся старые версии очень многих сайтов за разные даты (с начала 90-ых по настоящее время). На данный момент в России этот сайт заблокирован.

3. Кэш Яндекса, почему бы и нет

yandex_cache

К сожалению, нет способа добрать до кэша Яндекса по прямой ссылке. Поэтому приходиться набирать адрес страницы в поисковой строке и из контекстного меню ссылки на результат выбирать пункт Сохраненная копия. Если результат поиска в кэше Google вас не устроил, то этот вариант обязательно стоит попробовать, так как версии страниц в кэше Яндекса могут отличаться.

4. Кэш Baidu, пробуем азиатское

baidu_cache

Иногда срабатывает, иногда нет. P.S.: ссылка на кэш находится сразу справа от основной ссылки.

cached_view

6. Archive.is, для собственного кэша

archive_is

7. Кэши других поисковиков, мало ли

8. Кэш браузера, когда ничего не помогает

Safari

Ищем файлы в папке

Google Chrome

В адресной строке набираем chrome://cache

Opera

В адресной строке набираем opera://cache

Mozilla Firefox

Набираем в адресной строке about:cache и находим на ней путь к каталогу с файлами кеша.

9. Пробуем скачать файл страницы напрямую с сервера

whoishostthis

После этого открываем терминал и с помощью команды curl пытаемся скачать нужную страницу:

curl_example

Что делать, если вообще ничего не помогло

(25 голосов, общий рейтинг: 4.80 из 5)

Favorite

В закладки

Различные виды кеширования

Техника кеширования заключается в сохранении копии полученного ресурса для возврата этой копии в ответ на дальнейшие запросы. Запрос на ресурс, уже имеющийся в веб-кеше, перехватывается, и вместо обращения к исходному серверу выполняется загрузка копии из кеша. Таким образом снижается нагрузка на сервер, которому не приходится самому обслуживать всех клиентов, и повышается производительность — кеш ближе к клиенту и ресурс передаётся быстрее. Кеширование является основным источником повышения производительности веб-сайтов. Однако, кеш надо правильно сконфигурировать: ресурсы редко остаются неизменными, так что копию требуется хранить только до того момента, как ресурс изменился, но не дольше.

Существует несколько видов кешей, которые можно разделить на две основные категории: приватные кеши и кеши совместного использования. В кешах совместного использования (shared cache) хранятся копии, которые могут направляться разным пользователям. Приватный кеш (private cache) предназначен для отдельного пользователя. Здесь будет говориться в основном о кешах браузеров и прокси, но существуют также кеши шлюзов, CDN, реверсные прокси кеши и балансировщики нагрузки, разворачиваемые на серверах для повышения надёжности, производительности и масштабируемости веб-сайтов и веб-приложений.

What a cache provide, advantages/disadvantages of shared/private caches.

Приватный (private) кеш браузера

Общий (shared) прокси-кеш

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

Цели кеширования

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

Ответы на запросы отличные от GET , если есть что-либо, подходящее для использования в качестве ключа кеша.

Управление кеш ированием

Заголовок Cache-control

Полное отсутствие кеширования

В кеше не должно сохраняться ничего — ни по запросам клиента, ни по ответам сервера. Запрос всегда отправляется на сервер, ответ всегда загружается полностью.

Кешировать, но проверять актуальность

Перед тем, как выдать копию, кеш запрашивает исходный сервер на предмет актуальности ресурса.

Приватные (private) и общие (public) кеши

Директива "public" указывает, что ответ можно сохранять в любом кеше. Это бывает полезно, если возникает потребность сохранить страницы с HTTP-аутентификацией, или такими кодами ответа, которые обычно не кешируются. Директива же "private" указывает, что ответ предназначен отдельному пользователю и не должен храниться в кеше совместного использования. В этом случае ответ может сохраняться приватным кешем браузера.

Срок действия (Expiration)

Самой важной здесь является директива "max-age=<seconds>" — максимальное время, в течение которого ресурс считается "свежим". В отличие от директивы Expires , она привязана к моменту запроса. К неизменяющимся файлам приложения обычно можно применять "агрессивное" кеширование. Примером таких статических файлов могут быть изображения, файлы стилей (CSS) или скриптов (JavaScript).

Подробнее об этом рассказывается в разделе Свежесть ресурса.

Проверка актуальности

При использовании директивы "must-revalidate" кеш обязан проверять статус ресурсов с истёкшим сроком действия. Те копии, что утратили актуальность, использоваться не должны. Подробнее об этом рассказано ниже, в разделе Валидация кеша.

Заголовок Pragma

Свежесть сохранённой копии

Однажды попав в кеш, ресурс, теоретически, может храниться там вечно. Однако, поскольку объем хранилища конечен, записи периодически приходится оттуда удалять. Этот процесс называют вытеснением данных из кеша (cache eviction). Кроме того, ресурсы могут изменяться на сервере, поэтому кеш требуется обновлять. Поскольку HTTP является клиент-серверным протоколом, сервера не могут сами обращаться к кешам и клиентам при изменении ресурса; им необходимо договориться о сроке действия сохранённой копии. До его истечения ресурс считается свежим (fresh), после — устаревшим (stale). Алгоритмы вытеснения отдают предпочтение "свежим" ресурсам. Тем не менее, копия ресурса не удаляется из кеша сразу же по истечении её срока действия; при получении запроса на устаревший ресурс кеш передаёт его дальше с заголовком If-None-Match (en-US) на случай, если копия все ещё актуальна. Если это так, сервер возвращает заголовок 304 Not Modified («не изменялось»), а тело ресурса не посылает, экономя тем самым трафик.

Вот пример того, как протекает этот процесс при использовании совместного кеша прокси:

Show how a proxy cache acts when a doc is not cache, in the cache and fresh, in the cache and stale.

Срок действия (freshnessLifetime) вычисляется на основании нескольких заголовков. Если задан заголовок "Cache-control: max-age=N", то срок действия равен N. Если его нет, а это бывает очень часто, проверяется заголовок Expires , и, если он есть, то срок действия берётся равным значению заголовка Expires минус значение заголовка Date. Наконец, если нет ни того ни другого, смотрят заголовок Last-Modified. Если он есть, то срок действия равен значению заголовка Date минус значение заголовка Last-modified разделить на 10.
Время устаревания (expirationTime) вычисляется следующим образом:

где responseTime — это время получения ответа по часам браузера, а currentAge — текущий возраст кеша.

Обновление статических ресурсов (Revved resources)

Чем больше ресурсов может быть взято из кеша, тем быстрее сайт реагирует на запросы и тем выше его производительность. Из этих соображений их "срок годности" имеет смысл делать как можно большим. Однако, возникает проблема с ресурсами, которые обновляются редко и нерегулярно. Как раз их кеширование даёт больше всего выгоды, но сильно затрудняет обновление. Такие ресурсы можно найти на любой веб-странице: файлы скриптов (JavaScript) и стилей (CSS) изменяются редко, но уж если это произошло, обновление надо произвести как можно быстрее.

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


Номер версии, добавляемый к статическому ресурсу, не обязательно записывать в виде стандартного номера версии наподобие 1.1.3, или другого возрастающего числового значения. Это может быть что угодно, позволяющее избежать совпадений — например, дата.

Валидация кеша

Валидация кеша запускается при нажатии пользователем кнопки перезагрузки. Кроме того, она может выполняться в ходе обычного просмотра страниц, если кешированный ответ включает заголовок "Cache-control: must-revalidate". Другим фактором являются настройки кеширования браузера — можно потребовать принудительной валидации при каждой загрузке документа.

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

Заголовки ETag

Заголовок ответа ETag является непрозрачным для клиентского приложения (агента) значением, которое можно использовать в качестве сильного валидатора. Суть в том, что клиент, например, браузер, не знает, что представляет эта строка и не может предсказать, каким будет её значение. Если в ответе присутствует заголовок ETag , клиент может транслировать его значение через заголовок If-None-Match (en-US) будущих запросов для валидации кешированного ресурса.

Заголовок ответа Last-Modified можно использовать в качестве слабого валидатора. Слабым он считается из-за того, что имеет 1-секундное разрешение. Если в ответе присутствует заголовок Last-Modified , то для валидации кешированного документа клиент может выводить в запросах заголовок If-Modified-Since .

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

Изменяющиеся ответы

Если кеш получает запрос, который можно удовлетворить сохранённым в кеше ответом с заголовком Vary , то использовать этот ответ можно только при совпадении всех указанных в Vary полей заголовка исходного (сохранённого в кеше) запроса и нового запроса.

The Vary header leads cache to use more HTTP headers as key for the cache.

Это может быть полезно, например, при динамическом предоставлении контента. При использовании заголовка Vary: User-Agent кеширующие сервера, принимая решение об использовании страницы из кеша, должны учитывать агент пользователя. Так можно избежать ситуации, когда пользователи мобильных устройств по ошибке получат десктопную версию вашего сайта. Вдобавок, это может помочь Google и другим поисковым системам обнаружить мобильную версию страницы, и может также указать им на то, что здесь нет никакой подмены контента с целью поисковой оптимизации (Cloaking).

Поскольку значение заголовка User-Agent (en-US) различается ("varies") у мобильных и десктопных клиентов, закешированный мобильный контент не будет по ошибке отсылаться пользователям десктопов и наоборот.

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

Содержание

Что такое кэш браузера и кэширование сайта?

Кэш браузера (Browser Cache) — временные файлы ресурсов веб-страниц сайта, сохраняемые браузером для последующего отображения в нём при повторном обращении к соответствующим страницам.

Процесс определения и сохранения кэша в браузере называется браузерным кэшированием (Browser Caching).

1. Первичный запрос страницы

2. Последующие запросы страницы

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

  1. клиент (браузер) формирует и отправляет запрос на сервер;
  2. сервер формирует ответ и отправляет веб-страницу и все файлы, с ней связанные, в браузер;
  3. браузер отображает веб-страницу, при этом кэширует определённые её ресурсы.

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

Как кэш браузера влияет на скорость загрузки сайта?

Правильная настройка кэширования веб-страниц позволяет значительно увеличить скорость загрузки сайта за счёт:

  • Уменьшение объёма загружаемых данных при повторных обращениях.
    Если настроить ответ сервера на кэширование всех типов данных, то объём передаваемой информации может быть снижен вплоть до 0 МБ: в таком случае веб-страница будет полностью формироваться из кэша.
  • Снижение нагрузки на сервер.
    Чем меньше данных обрабатывает и передаёт сервер, тем выше его производительность в текущий момент.

Кроме этого, браузерное кэширование значительно экономит веб-трафик клиента, исключая повторное скачивание файлов (картинок, скриптов, стилей) — они будут браться из кэша сайта.


Благодаря кешированию пользователи, повторно посещающие ваш сайт, тратят меньше времени на загрузку страниц.

Google Developers

Как проверить кэширование сайта в браузере?

Существует ряд способов проверки браузерного кэширования ресурсов сайта:

Проверка в браузере Chrome

Первый способ: обратиться к инструментам веб-разработчика, предоставляемым самим браузером. Рассмотрим на примере браузера Chrome:

  1. Откройте в браузере любую страницу сайта.
  2. Активируйте панель инструментов разработчика.
    Клавиши по умолчанию: Ctrl + Shift + I .
  3. Активируйте вкладку Network.
  4. Обновите страницу.
    Клавиши по умолчанию: Ctrl + F5 .

Если файл кэшируется, то в колонке Size вместо размера файла будет отображаться запись (from memory cache) или (from disk cache):

1. Первичное обращение к странице

2. Повторное обращение к странице

Обратите внимание, насколько уменьшился объём передаваемых данных из примера на картинках: 3.8 МБ при первичном обращении и 601 КБ при повторном. При этом скорость загрузки страницы сайта снизилась с 12.45 до 7.77 секунд.

Активируйте чекбокс Disable cache во вкладке Network в панели инструментов Chrome, чтобы просмотреть исходный размер и скорость загрузки ресурсов веб-страницы при первичном обращении к ней.

Сервис PageSpeed Insights

Список ресурсов для кэширования

Сервис Pingdom Website Speed Test

Pingdom Website Speed Test — качественный популярный сервис проверки скорости загрузки сайта. Подобно сервису PageSpeed Insights, он указывает на проблемы со скоростью загрузки и даёт свои рекомендации. Каждому фактору сервис присваивает определённый рейтинг (Grade).

Фактор кэширования файлов в браузере называется «Leverage browser caching»:

Leverage browser caching Grade: 97

Leverage browser caching Grade: 14

Какие файлы сайта должны кэшироваться?

Ресурсы веб-страниц делятся на 2 группы:

Динамические Эти ресурсы не хранятся на сервере, а генерируются его средствами при запросах веб-страниц. К таким ресурсам обычно относят HTML-код, который может генерироваться посредством PHP на серверах Apache. Статические Такие ресурсы хранятся на сервере. Как правило, к ним относится медиа-контент (картинки и видео), а также файлы стилей, скриптов и шрифтов

Для большинства сайтов подходит схема кэширования всех статических ресурсов.


Заголовки кеширования должны применяться ко всем кешируемым статическим ресурсам, а не только к некоторым из них (например, изображениям). Кешируемые ресурсы включают файлы JavaScript и CSS, графические и другие файлы (мультимедийное содержание, файлы PDF и т. д.). Обычно код HTML не является статическим ресурсом и по умолчанию не считается кешируемым.

Google Developers

Сроки кэширования файлов в браузере

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

Сроки кэширования файлов в браузере

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

Чтобы избежать подобных проблем, необходимо настроить браузерное кэширование, правильно определив сроки хранения типов файлов.


Продолжительность хранения статических ресурсов в кеше должна составлять не менее недели. Внешние ресурсы (объявления, виджеты и др.) должны храниться не менее 1 дня.

Google Developers

Заголовок Expires

До момента наступления этой даты файл будет браться из кэша сайта в браузере. Такая схема исключает лишние запросы к серверу, сравнивающие кэшированный файл с файлом на сервере, но неудобство может быть вызвано привязкой к определённой дате, ведь файл может быть обновлён на сервере до её наступления.

Схема кэширования посредством HTTP-заголовка Expires

Заголовок Cache-Control

Пока не пройдёт указанное время с момента получения файла, он будет браться из кэша браузера.

Схема кэширования посредством HTTP-заголовка Cache-Control

Директивы заголовка Cache-Control

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

Директива max-age

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

Единицы времени в секундах
Единица времени Количество секунд
Секунда 1
Минута 60
Час 3600
Сутки 86400
Неделя 604800
Месяц 2592000
Год 31536000

Директива no-cache

Вопреки названию, браузер будет кэшировать файл, переданный сервером с данным заголовком. Однако прежде, чем в дальнейшем брать его из кэша, браузер должен делать запрос к серверу на проверку его изменений. Если файл на сервере не изменился, браузер заберёт его из кэша, в ином случае сервер передаст обновлённую версию файла.

Директива no-store

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

Директива public

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

Директива private

Директива private разрешает кэшировать файл только в браузере пользователя, но не в промежуточных кэшах (CDN, прокси-сервера). Обычно применяется для кэширования персональных данных, актуальных для конечного пользователя.

Сравнение версий файлов в кэше и на сервере

Заголовки Last-Modified и If-Modified-Since

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

Браузер делает первичный запрос веб-страницы.

Полученные файлы кэшируются браузером.

Если значения If-Modified-Since и Last-Modified совпадают, сервер отправляет браузеру ответ в виде значения 304 (Not Modified) : файл не претерпел изменений, и его можно брать из кэша. В ином случае сервер вновь передаёт файл в браузер.

Схема кэширования посредством HTTP-заголовков Last-Modified и If-Modified-Since

Заголовки ETag и If-None-Match

Недостатком данной схемы также являются постоянные проверяющие запросы If-None-Match к серверу.

Схема кэширования посредством HTTP-заголовков ETag и If-None-Match

Правильная схема кэширования файлов в браузере

В идеале браузерное кэширование должно функционировать следующим образом:

Если применять только заголовки Last-Modified или ETag , то браузер каждый раз будет посылать серверу запросы на сравнение версий файлов.

Если применять только заголовки Expires или Cache-Control: max-age , то по окончании срока кэширования браузер будет запрашивать файл на скачивание не зависимо от того, претерпел ли он изменения.

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

  1. заголовок, определяющий срок кэширования ( Expires или Cache-Control: max-age );
  2. заголовок, определяющий изменение файла ( Last-Modified или ETag ).


Для всех кешируемых ресурсов нужно обязательно указывать один заголовок из пары Expires и Cache-Control max-age, а также один заголовок из пары Last-Modified и ETag.

Google Developers

Такой подход исключает лишние запросы к серверу за счет установленного срока кэширования (определённого с помощью заголовка Expires или Cache-control: max-age ), а также исключает повторное скачивание ресурса по окончании срока кэширования за счет его проверки на наличие изменений (с помощью заголовков Last-Modified или ETag ).

Включение и настройка кэширования сайта в браузере

Модуль mod_expires для сервера Apache

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

Скопируйте данный код в файл .htaccess для включения кэширования файлов в браузере.

Если настройки не вступят в силу, необходимо обратиться в техническую поддержку хостинга : возможно, модуль mod_expires не активирован на сервере.

Подробности о синтаксисе и настройках модуля mod_expires можно узнать в официальной документации.

Модуль mod_headers для сервера Apache

Настройка модуля подразумевает использование регулярных выражений для определения типов файлов, для которых будут формироваться заголовки Cache-Control :

Указанный выше код можно скопировать в файл .htaccess для применения настроек кэширования файлов к конкретному сайту.

Если настройки не вступят в силу, неободимо обратиться в техническую поддержку хостинга: возможно, модуль mod_headers не активирован на сервере.

Подробности о синтаксисе и настройках модуля mod_headers можно узнать в официальной документации.

Настройка заголовков Expires на Nginx

Настройка заголовков Cache-Control на Nginx

Указанный выше код можно скопировать в файл nginx.conf для применения данных настроек к сайту.

Проверить заголовки ответа сервера после (или до) включения кэширования в .htaccess (или другом конфигурационном файле) позволяют стандартные средства современных браузеров: установка дополнительных плагинов не требуется.

Рассмотрим процесс проверки передаваемых сервером заголовков на примере Chrome:

Читайте также: