понедельник, 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 ценить.

ЧИТАТЬ  Как Duolingo добился успеха в социальных сетях благодаря сумасшедшему контенту

Сканеры 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 как директива кэширования:

  1. Дата в Last-Modified заголовок должен быть отформатирован в соответствии с
    HTTP-стандарт. Чтобы избежать проблем с анализом, мы рекомендуем использовать следующий формат даты: «День недели, ДД Пн ГГГГ ЧЧ:ММ:СС Часовой пояс». Например, «Пт, 04 сентября 1998 г., 19:15:56 GMT«.

  2. Хотя это и не обязательно, рассмотрите возможность установки 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-кэширование для вашего сайта. Во всяком случае, вы понравитесь вашим пользователям немного больше.

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

Автор: Гэри Иллис



Source link

ЧИТАТЬ  Нехарактерный спотыкание Apple Siri - плохая новость для вас, и теперь мы можем знать, как это произошло и почему есть причины для надежды