Best Practices for Speeding Up Your Web Site / Рекомендации лучших вебоводов для ускорения вашего сайта: Configure ETags / Настраивайте ETags
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
ETag (англ. Entity Tags — теги сущностей) — механизм, который используют браузеры и веб-серверы, чтобы определить, соответствует ли объект, находящийся в кэше браузера, объекту на сервере. ("сущность" - это синоним для "компонент": картинки, скрипты, стили и пр.) Etags были добавлены для предоставления механизма подтверждения сущностей более гибкого, чем last-modified. Единственное ограничение формата - строка должна быть в кавычках. Сервер указывает ETag для компонента, используя HTTP-заголовок ETag: Alexasa 13.09.12 в 08:25 |
|
|
HTTP/1.1 200 OK Alexasa 13.09.12 в 12:51 |
||
|
Позднее, если браузер хочет определить актуальность компонента, он передает заголовок If-None-Match для передачи ETag обратно на сервер. При совпадении ETag-a возвращается код 304, тем самым уменьшая ответ на 12 килобайт в приведенном примере. Alexasa 13.09.12 в 12:54 |
||
|
GET /i/yahoo.gif HTTP/1.1 Alexasa 13.09.12 в 12:54 |
||
|
Проблема ETag состоит в том, что обычно они используют уникальные атрибуты для того сервера, на котором находится сайт. ETag не совпадут, если браузер загрузит оригинальный компонент с одного сервера и попробует проверить его на другом сервере. Ситуация очень распространенная если вы используете кластер для обработки запросов. По умолчанию и Apache, и IIS включают в ETag такие данные, которые вряд ли дадут положительный результат при проверке на актуальность компонента на разных серверах. Alexasa 13.09.12 в 13:24 |
||
|
Apache 1.3 и 2.x генерируют ETag в формате inode-size-timestamp. Даже если один и тот же файл на разных серверах лежит в одной и той же папке, имеет те же размер, права, время, и пр., его дескриптор будет отличаться от сервера к серверу. Alexasa 13.09.12 в 13:50 |
||
|
IIS 5.0 и 6.0 имеют похожий формат ETag: Filetimestamp:ChangeNumber. ChangeNumber — внутренняя переменная IIS для отслеживания изменений в конфигурации самого IIS, и нет гарантии, что эта переменная будет одинакова на всех серверах, обслуживающих веб-сайт. Alexasa 13.09.12 в 13:55 |
||
|
В результате ETags, которые сгенерирует Apache или IIS для одного и того же компонента, не совпадут для разных серверов. Если ETag не будут совпадать, пользователь не получит маленький и быстрый ответ со статус-кодом 304 — собственно, ради чего ETag и разрабатывался. Взамен он будет получать стандартный код ответа 200 и далее весь запрошенный компонент. Если вы хостите ваш сайт только на одном сервере, это не проблема. Но если на разных серверах, со стандартными настройками ETags на каждом, то ваши пользователи получают медленные страницы, ваши сервера более загружены, вы тратите больше трафика, и прокси не эффективно кешируют ваш контент. Даже если у ваших компонентов срок истечения установлен в далеком будущем, каждая перезагрузка пользователем страницы вызывает обычный GET. Alexasa 13.09.12 в 13:51 |
||
|
Если вы не получаете всех преимуществ гибкой проверки, которые предоставляет ETag, тогда лучше совсем отключить его. Тег Last-Modified позволяет проверять актуальность компонента на основании его времени изменения, а отключение ETag даст возможность уменьшить заголовки запроса и ответа. В данной статье{URL} Microsoft Support описывается как удалить ETags. Если вы используете Apache, просто добавьте следующую строку в файл конфигурации: Alexasa 13.09.12 в 15:54 |
||
|
FileETag none Alexasa 13.09.12 в 15:54 |
