Last-Modified и ETag |
|
Давайте рассмотрим, какие существуют альтернативы прямому ограничению повторных загрузок ресурсов со стороны сервера и сохранению их в пользовательском кэше. Last-ModifiedДополнительно к заголовку Cache-Control, который предупреждает браузер, что последний может не запрашивать исходный документ с сервера некоторое время, будет полезно проверять версию ресурса каждый раз при запросе. Например, нам нужно, чтобы браузер пользователя проверял файлы стилей не реже, чем раз в день, но при этом сами файлы могут меняться достаточно редко (например, несколько раз в месяц). Для решения такой задачи и была придумана пара заголовков Last-Modified и If-Modified-Since. Как это работает? Дополнительно к периоду кэширования сервер может также отправить заголовок Last-Modified, который будет обозначать время последнего изменения файла на сервере. Если у браузера есть уже такой файл в локальном кэше, то он может отправить на сервер If-Modified-Since с соответствующим временем. В том случае, если файл не менялся со времени последнего посещения, то сервер ответит статус-кодом 304 и не будет пересылать содержимое файла. Данная схема позволяет экономить время на передачу данных, однако, при ее использовании браузер все равно будет устанавливать соединение с сервером, чтобы узнать, имеется ли более новая версия. ETagETag (англ. Entity Tags - тэги сущностей) - механизм, который используют браузеры и веб-серверы, чтобы определить, является ли объект, находящийся в кэше браузера, таким же, как соответствующий объект на сервере. Тэги сущностей являются почти полной аналогией Last-Modified заголовка за исключением того, что в качестве тэга может быть передана произвольная строка. Сервер указывает ETag для компонента, используя HTTP- заголовок ETag: HTTP/1.1 200 OK Позднее, если браузер хочет определить актуальность компонента, он передает заголовок If-None-Match для передачи ETag обратно на сервер. Если ETag совпадают, ответ от сервера приходит со статус-кодом 304, уменьшая, таким образом, объем передачи на 19145 байтов: GET /b.png HTTP/1.1 Включить ETag для Apache можно, например, следующей директивой в конфигурации: FileETag MTime Size При этом ETag будет сформирован из даты изменения файла и его размера. Синхронизация ETag и Last-ModifiedПроблема ETag состоит в том, что обычно они используют атрибуты, специфичные в пределах одного сервера. ETag не совпадут, если браузер загрузит компонент страницы с одного сервера и попробует проверить его с другим сервером (у которого время изменения файла и(ли) номер блока на жестком диске для данного файла отличаются от первого) - ситуация очень распространенная, если вы используете кластер для обработки запросов. По умолчанию и Apache, и IIS включают в ETag такие данные, которые вряд ли дадут положительный результат при проверке на актуальность компонента на разных серверах. Apache 1.3 и 2 генерирует ETag в формате inode-size-timestamp. Даже если один и тот же файл на разных серверах лежит в одной и той же папке, имеет те же права, размер и время, номер его иногда будет отличаться от сервера к серверу. IIS 5.0 и 6.0 имеют похожий формат ETag: Filetimestamp:ChangeNumber. ChangeNumber - внутренняя переменная IIS для отслеживания изменений в конфигурации самого IIS, и нет гарантии, что эта переменная будет одинакова на всех серверах, обслуживающих веб-сайт. В результате ETag, которые сгенерирует Apache или IIS для одного и того же файла, будут отличаться на разных серверах. Если ETag не будут совпадать, пользователь не будет получать маленького и быстрого ответа со статус-кодом 304 - собственно, ради чего ETag и разрабатывался. Взамен он будет получать стандартный код ответа 200 и далее весь запрошенный компонент. Если сайт находится только на одном сервере, это не будет большой проблемой. Но если вы используете несколько серверов с Apache или IIS, устанавливающие ETag в соответствии с настройками по умолчанию, пользователи будут дольше загружать страницы, на серверах будет большая загрузка, нежели могла бы, вы будете тратить больше трафика, а прокси-серверы не будут кэшировать этот контент так, как хотелось бы. Даже если заголовок Expires будет установлен в далекое будущее, вам все равно будет приходить условный GET-запрос, когда пользователь перезагрузит страницу. Если вы не получаете всех преимуществ, которые предоставляет ETag, тогда лучше совсем отключить его. Тэг Last-Modified позволяет проверять актуальность компонента на основании его времени изменения, а отключение ETag даст возможность уменьшить заголовки запроса и ответа. Если вы используете Apache, просто добавьте строку FileETag none в конфигурационный файл сервера.
|
Матрикснет – новое качество поиска ЯндексаОсновная задача поисковой системы – дать ответ на вопрос пользователя. Когда пользователь задает запрос, поисковая система не обращается к каждому сайту в интернете, а ищет по базе известных ей страниц – поисковому индексу. Там она находит все страницы со словами из запроса. Ссылки на эти страницы пользователь и видит на страницах результатов поиска. Читать полностью |
Колдунщики от ЯндексаРазработчики поисковых машин стремятся к тому, чтобы дать пользователям лучшие ответы на их запросы. Иногда таким ответом может оказаться число (например, погода в каком-нибудь городе), картинка (например, адрес на карте), перевод слова или четверостишие. Когда под рукой есть подходящий массив информации, ответ можно дать сразу. Поэтому Яндекс дополняет результаты поиска по интернету... Читать полностью |
Яндекс - как он выглядит внутри?Cайт www.yandex.ru был создан в 1997 году, для него хватало всего одного сервера, который стоял под рабочим столом одного из группы первых разработчиков Яндекса, Дмитрия, по фамилии Тейблюм. Очень быстро после открытия приобрели второй сервер, а вскоре, когда понадобилось установить ещё один, стало понятно, что под столом хватает пространства либо на три сервера Яндекса, либо на две ноги ... Читать полностью |
Поисковики фильтруют ссылкиНепот - это нелегальная "взаимовыручка" среди оптимизаторов сайтов. Например, веб-ресурс А поставил ссылку на сайт Б по дружбе или за деньги, а тот в ответ разместил ссылку на свой сайт. Врезультате оба ресурса стали "более весомыми". Скажите, что этокольцевой линкообмен? Это не так. При кольцевом обмене, прежде всего,учитывается контент - сайты обмениваются ссылками, потому что считают,что... Читать полностью |
