понедельник, 9 декабря 2024 г.
Разрешите нам кэшировать, пожалуйста.
По мере роста Интернета с годами увеличивалось и количество сканирования Google. Хотя краулинговая инфраструктура Google поддерживает механизмы эвристического кэширования (фактически всегда так и было), количество запросов, которые могут быть возвращены из локальных кешей, уменьшилось: 10 лет назад около 0,026% от общего числа выборок были кэшируемыми, что уже не так впечатляюще; сегодня это число составляет 0,017%.
Содержание
Почему кэширование важно?
Кэширование — важная часть большой головоломки, которой является Интернет. Кэширование позволяет страницам молниеносно загружаться при повторном посещении, оно экономит вычислительные ресурсы и, следовательно, природные ресурсы, а также экономит огромное количество дорогостоящей полосы пропускания как для клиентов, так и для серверов.
Особенно если у вас большой сайт с редко меняющимся контентом по отдельным URL-адресам, включение локального кэширования может помочь более эффективному сканированию вашего сайта. Инфраструктура сканирования Google поддерживает эвристическое HTTP-кэширование, как определено
Стандарт HTTP-кэшированияв частности, через ETag
ответ- и If-None-Match
заголовок запроса и Last-Modified
ответ- и If-Modified-Since
заголовок запроса.
Мы настоятельно рекомендуем использовать ETag
потому что он менее подвержен ошибкам и ошибкам (значение не структурировано в отличие от Last-Modified
ценить). И, если у вас есть возможность, установите их оба: Интернет будет вам благодарен. Может быть.
Что касается того, что вы считаете изменением, требующим от клиентов обновления своих кешей, это зависит от вас. Мы рекомендуем вам требовать обновления кэша при значительных изменениях в вашем контенте; если вы обновили только дату авторских прав внизу страницы, это, вероятно, не имеет значения.
ETag
и If-None-Match
Поддержка сканеров Google ETag
основанные на условных запросах точно так, как определено в
Стандарт HTTP-кэширования. То есть, чтобы сообщить сканерам Google о предпочтениях кеширования, установите Etag
значение для любой произвольной строки ASCII (обычно это хэш содержимого или номера версии, но это также может быть часть π, на ваше усмотрение), уникальное для представления контента, размещенного по URL-адресу, к которому осуществляется доступ. Например, если вы размещаете разные версии одного и того же контента по одному и тому же URL-адресу (скажем, мобильную и настольную версии), каждая версия может иметь свой уникальный ETag
ценить.
Сканеры Google, поддерживающие кэширование, отправят ETag
значение, возвращенное для предыдущего сканирования этого URL-адреса в If-None-Match header
. Если ETag
значение, отправленное сканером, соответствует текущему значению, сгенерированному сервером, ваш сервер должен вернуть HTTP-запрос. 304
(Не измененный) код состояния без тела HTTP. Этот последний бит, отсутствие тела HTTP, является важной частью по нескольким причинам:
-
вашему серверу не придется тратить вычислительные ресурсы на фактическое создание контента; то есть вы экономите деньги
-
вашему серверу не нужно передавать тело HTTP; то есть вы экономите деньги
На стороне клиента, например в браузере пользователя или роботе Googlebot, содержимое этого URL-адреса извлекается из внутреннего кэша клиента. Поскольку передача данных не требуется, это происходит молниеносно, что делает пользователей счастливыми и потенциально экономит для них некоторые ресурсы.
Last-Modified
и If-Modified-Since
Аналогично ETag
поддержка сканеров Google Last-Modified based
условные запросы тоже точно так же, как определено в стандарте HTTP-кэширования. Это работает так же, как ETag
с семантической точки зрения — идентификатор используется для определения того, является ли ресурс кэшируемым — и предоставляет те же преимущества, что и ETag
на стороне клиентов.
У нас есть всего пара рекомендаций, если вы используете Last-Modified
как директива кэширования:
-
Дата в
Last-Modified
заголовок должен быть отформатирован в соответствии с
HTTP-стандарт. Чтобы избежать проблем с анализом, мы рекомендуем использовать следующий формат даты: «День недели, ДД Пн ГГГГ ЧЧ:ММ:СС Часовой пояс». Например, «Пт, 04 сентября 1998 г., 19:15:56 GMT«. -
Хотя это и не обязательно, рассмотрите возможность установки
max-age
поле
Cache-Control
заголовок, который помогает сканерам определить, когда следует повторно сканировать конкретный URL-адрес. Установите значениеmax-age
поле на ожидаемое количество секунд, содержимое которого не изменится. Например,Cache-Control: max-age=94043
.
Примеры
Если вы похожи на меня, мне сложно понять, как работает эвристическое кэширование, однако показ примера цепочки запросов и ответов, похоже, мне поможет. Вот две цепочки — одна для ETag
/If-None-Match
и один для
Last-Modified
/If-Modified-Since
— чтобы представить, как это должно работать:
ETag /If-None-Match | Last-Modified /If-Modified-Since | |
---|---|---|
Ответ сервера на сканирование: Это ответ, из которого сканер может сохранить поля заголовка предварительного условия. ETag и Last-Modified . | HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT ETag: "34aa387-d-1568eb00" ... | HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT Cache-Control: max-age=94043 ... |
Последующий условный запрос сканера: Условный запрос основан на значениях заголовка предварительного условия, сохраненных из предыдущего запроса. Значения отправляются обратно на сервер для проверки в If-None-Match и If-Modified-Since заголовки запроса. | GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+ If-None-Match: "34aa387-d-1568eb00" ... | GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+ If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
Ответ сервера на условный запрос: Поскольку значения заголовка предусловия, отправленные сканером, проверяются на стороне сервера, сервер возвращает 304 Код состояния HTTP (без тела HTTP) для сканера. Это будет происходить с каждым последующим запросом до тех пор, пока предварительные условия не будут проверены (теперь ETag илиLast-Modified изменение даты на стороне сервера). | HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:52 GMT Vary: Accept-Encoding If-None-Match: "34aa387-d-1568eb00" ... | HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:51 GMT Vary: Accept-Encoding If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
Если вы хотите сделать своих пользователей счастливыми и, возможно, также хотите потенциально сэкономить несколько долларов на счете за хостинг, поговорите со своим поставщиком хостинга или CMS или с разработчиками о том, как включить HTTP-кэширование для вашего сайта. Во всяком случае, вы понравитесь вашим пользователям немного больше.
Если вы хотите поговорить о кэшировании, обратитесь к ближайшему
Справочное сообщество Центра поискаа если у вас есть комментарии по поводу того, как мы кэшируем, оставьте отзыв о документации по кэшированию, которую мы опубликовали вместе с этой публикацией в блоге.
Автор: Гэри Иллис