31.01.2021

Установка модуля last modified в apache. Блог в котором есть много интересной информации…. Зачем нужны заголовки Last-Modified и If-Modified-Since


«В частности важно содержание ответа, который отдаёт сервер на запрос «if-modified-since». Заголовок Last-Modified должен отдавать корректную дату последнего изменения документа.»

Проверим как с Last-Modified обстоит дело в различных CMS.

# telnet www.example.com 80

и вводим следующее:

GET /index.html HTTP/1.0 User-Agent: Mozilla/5.0 From: something.somewhere.net Accept: text/html,text/plain,application/* Host: www.example.com If-Modified-Since: Wed, 19 Oct 2005 10:50:00 GMT

если сервер вернет 304 (Not modified), значит он If-Modified-Since поддерживает, но страница не была изменена. Код 200 (Ok) означает, что страница изменена.

Проверка If-Modified-Since на С#

Проверить как работает If-Modified-Since можно с помощью следующего C# кода:

Private HttpWebResponse GetPage() { string url = @"http://....."; // Place the web request to the server by specifying the URL HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); // No need for a persistant connection request.KeepAlive = false; // The link that referred us to the URL request.Referer = url; // The user agent of the browser request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50215)"; //Instead of HTTP 1.1 I will use HTTP 1.0. When a request tells the server it uses 1.0, //the server won"t respond with chunked data but will send the response all at once. request.ProtocolVersion = new Version(1, 1); request.IfModifiedSince = DateTime.Now.AddDays(-5); // Get the response from the server return (HttpWebResponse)request.GetResponse(); } private void TestLastModified(VirtueMartContext db, jos_vm_product product) { using (HttpWebResponse response = GetPage()) { Debug.Print("Status Code: {0}, Description: {1}\n", response.StatusCode, response.StatusDescription); string text = WebResponceReader.GetResponceText(response); Debug.Print(text.Substring(0, 100)); } }

с помощью этого метода можно убедиться в том, что Joomla всегда возвращает StatusCode=200 (OK), независимо от значения request.IfModifiedSince.

Проверка If-Modified-Since через сервис Яндекса

Если в Яндекс Веб-мастере нажать на кнопку «Проверка ответа сервера «, то мы попадаем сюда:

тут опять же видно, что сайт сайт и соответственно WordPress без плагина WP Super Cache не добавляет заголовок Last-Modified.

Ну с CMS разобрались, а как работает сам Яндекс?

Здесь можно привести такой пример: сегодня 7.7.2011, контент в Joomla был обновлен 20.6.2011, а у Яндекс в кэше версия от 11.06.2011, хотя после этой даты робот приходил уже неоднократно. В данном случае обновления Яндекс загружает с очень существенной задержкой. Вопрос — почему?

Вот, что по этому поводу говорит Платон Щукин:

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

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

Syntax

If-Modified-Since: , :: GMT

Directives

One of "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", or "Sun" (case-sensitive). 2 digit day number, e.g. "04" or "23". One of "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" (case sensitive). 4 digit year number, e.g. "1990" or "2016". 2 digit hour number, e.g. "09" or "23". 2 digit minute number, e.g. "04" or "59". 2 digit second number, e.g. "04" or "59". GMT

Greenwich Mean Time. HTTP dates are always expressed in GMT, never in local time.

Examples

If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT

Specifications

Specification Title
RFC 7232, section 3.3: If-Modified-Since Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests

Browser compatibility

The compatibility table in this page is generated from structured data. If you"d like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

Update compatibility data on GitHub

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet
If-Modified-Since Chrome Full support Yes Edge Full support 12 Firefox Full support Yes IE Full support Yes Opera Full support Yes Safari Full support Yes WebView Android Full support Yes Chrome Android Full support Yes Firefox Android Full support Yes Opera Android Full support Yes Safari iOS Full support Yes Samsung Internet Android Full support Yes

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

Экономия Трафика

Если страница не изменилась, то сервер прекратит передачу данных после отправки заголовков с кодом 304 Not Modified, тело страницы, изображения и другие объекты передаваться не будут.

Снижение нагрузки на сервер

Правильная реализация проверки времени последнего изменения страницы может значительно (до 30% и более) сократить нагрузку на сервер. Под правильной реализацией подразумевается проверка времени до начала генерации страницы на динамическом сайте. В таком случае все действия для генерации страницы (запрос контента из базы данных, парсинг шаблонов, получение комментариев и др) выполняться не будут. Особенно это актуально для сайтов с высокой посещаемостью и долгой продолжительностью визита пользователя. Пример: пользователь находится на сайте спортивных новостей и постоянно обновляет главную страницу в ожидании публикации результата матча. За несколько минут страница может быть запрошена и получена десятки раз. Если заголовок Last-Modified отдается и запрос If-Modified-Since обрабатывается правильно, то реально страница будет передана один раз, а на все последующие запросы будет выдан ответ 304 Not Modified.

Ускорение индексации поисковыми системами

Поисковые системы через руководство для вебмастеров рекомендуют отсылать заголовок Last-Modified и правильно обрабатывать If-Modified-Since.

Вот не было у меня печали, пока не установил себе сегодня плагин Seo Scan. Хороший плагин, который показывает, что может не понравиться google в вашем сайте и сервере. И мой сайт кое в чем не понравился точно — это отсутствие last-modified.


Немного теории, сам только сегодня про это узнал. Last-modified — это http заголовок, который посылает сигнал о том, были ли на такой-то странице изменения или нет, посылая ответ If-Modified-Since с кодом 304. Как то так…

Хотя без всего этого сайт будет индексироваться, как говорит Яндекс, но есть и существенные минусы при отсутствии этого заголовка:

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

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

Как проверить last-modified?

Проверить можно разными способами, в wordpress самое простое — это установить вышеупомянутый плагин Seo Scan , у меня он выдал такое:

Тоже барахлит, но это другая история, потом поковыряюсь и с этим. Можно так же проверить last-modified через сервис с одноименным названием last-modified.com


Как видите, и тут показывает отсутствие ответа If-Modified-Since — Last Modifed не найден! А можно использовать сервис Яндекса Проверка ответа сервера


Тут тоже самое — Код статуса HTTP: «304 Not Modified» — значит не работает система. Хотя через какое-то время явная ошибка пропала, но код ответа 304 так и не появился.

Сразу стало интересно, а у кого-то хоть это работает? Решил проверить это у тех блогеров, которые сами писали мануалы на эту тему:


Да, у парня из ТОПа по этому запросу Last-Modified найден, а значит это возможно и для меня. Кстати, в его статье перечисляются многие способы настройки Last Modified, попробуем и их, хотя я нашел и другие.

Как настроить last-modified?

Буду описывать все способы, которые попробовал и сразу говорить, заработало у меня или нет. Но имейте ввиду, что если не заработало у меня, то это не значит, что не заработает у вас.

1. Первый способ — установка плагина

Самый простой способ для тех, у кого WordPress — это установить плагины, для этого предназначенные, например: Add Headers, If Modified Since или If Modified Since Header.

У меня ни один из этих плагинов не дал результата, не знаю почему. Может заработает у вас?

2. Второй способ — PHP код

Сервис last-modified.com , описанный выше, предлагает в файл header.php, в самое начало, поместить такой php код:

= $LastModified_unix) { header($_SERVER["SERVER_PROTOCOL"] . " 304 Not Modified"); exit; } header("Last-Modified: ". $LastModified); ?>

Мне это тоже не помогло. Предлагаю так же попробовать разместить его в файле index.php в корне сайта, но мне и это не помогло.

3. Третий способ — запись в.htaccess

Если у вас сервер на Apache, то скорее всего у вас это заработает. Нужно в файл .htaccess в корне сайта вставить код:

RewriteRule .* - RewriteRule .* -

У меня не заработало, так как у меня стоит связка Ngnix + Apache и все эти манипуляции с.htaccess чаще всего не срабатывают.
После всех этих мучений подумал: а чего это я один мучаюсь? Напишу как в службу поддержки хостинга, там люди грамотные, может подскажут? Написал, сижу жду.

Пришел ответ от техподдержки:

Всё просто. Страницы вашего сайта генерируются php-скриптами которые не выдают браузеру этот заголовок.
Веб-сервер (nginx) для статических файлов (jpg, gif, css, js и т.д.) выдаёт в заголовке last-modified дату последнего изменения файла. Примеры на скриншотах.
Если у вас нет очень большой посещаемости сайта то кэшировать страницы сайта на стороне браузера нет смысла.

Почему этот пост в рубрике СЕО? Ласт модифиед, как уверяют поисковики, очень важный http-заголовок, который нужен для того, чтобы сообщать дату последней модификации документа, то есть дату последнего изменения на странице.

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

  1. Улучшается скорость индексации новых страниц, а также за 1 посещение робот может забрать больше страниц в индекс.
  2. Улучшается скорость переиндексации страниц, на которые вы внесли изменения. Это очень полезно, а вот без этого заголовка учета ваших правок нужно ждать дольше.

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

Как проверить last modified?

Есть несколько инструментов, мне больше всего понравился этот — http://www.tools.seo-auditor.com.ru/if-modified-since/
Тут мне просто достаточно ввести адрес главной страницы или любой статьи, а потом выбрать поискового робота — Яндекс.

Ласт Модифиед на моем сайте нашли, это отлично. Но изначально его не было, как же я его настроил?


Как настроить last modified?

Если честно, мне не помогало ничего. Может из-за того, что сервер nginx . Я ставил AddHeaders — этот плагин ставит все полезные http-заголовки и в их числе есть last modified, но мне этот плагин не помог, хотя где-то год назад он успешно активировал на моем сайте этот заголовок.

Также на этот блог я поставил премиум-плагин Clearfy о котором писал . Полезная штуковина, там еще и есть функция, которая позволила бы поставить last modified.

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

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

Универсальное решение — вам скорее всего подойдет плагин AddHeaders, если у вас сервер apache. Если nginx, то попробуйте отключить ssi в настройках домена и опять же активировать этот плагин.


© 2024
maccase.ru - Android. Бренды. Железо. Новости