Интересно почитать… Блог в котором есть много интересной информации…

6 июля 2011

Проверяем HTTP заголовок «Last-Modified» и ответ на запрос «if-modified-since»

Категория: программирование — Метки: , — admin @ 15:01

Яндекс рекомендует следить за корректностью http-заголовков. Цитата из документа «Рекомендации Яндекса по созданию сайтов»:

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

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

Проверять можно с помощью If Modified Since Tool, HTTP compression and HTTP conditional GET test tool, либо вручную.

Joomla+VirtueMart

Joomla поддерживает Last-Modified, но всегда прописывает текущую дату:

что-то я не понял, откуда тут взялось «304 Not Modified»? Вообще это какой-то непонятный тест, согласно всем остальным тестам и экспериментам, на запрос «if-modified-since» Joomla возвращает StatusCode=200 (OK) ну а в Last-Modified ставит текущую дату.

интересно, почему VirtueMart не использует для обработки запроса «if-modified-since» дату модификации товара mdate, которую можно посмотреть через следующий SQL запрос:

SELECT `product_name`, FROM_UNIXTIME(mdate) mdate
      FROM `jos_vm_product`
      ORDER BY mdate DESC;

И почему Joomla не использует дату модификации статей?

SELECT `title`, `modified` FROM `jos_content`
      ORDER BY `modified` DESC;

WordPress

WordPress Last-Modified просто напросто не поддерживает:

http last modified wordpress

однако это не мешает Яндексу его успешно индексировать.

Проверка If-Modified-Since вручную

Есть простой способ проверки if-modified-since с помощью telnet. Запускаем telnet:

# 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) означает, что страница изменена.

Также можно проверить через PHP, см How to test for “If-Modified-Since” HTTP Header support.

Проверка 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 через сервис Яндекса

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

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

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

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

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

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

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

Линии 3D/Шарики 3D

6 комментариев »

  1. Добрый день. А подскажите пожалуйста, каким образом этот полезный код можно реализовать на блоге движка wordpress?

    Комментарий от Lovedancer — 31 июля 2011 @ 13:36

  2. Добрый день.

    Я поискал в интернете информацию на эту тему и нашел очень интересный вариант. WordPress действительно не поддерживает HTTP заголовок If-Modified-Since, но зато есть плагин Super Cache, который кэширует HTML в виде статических файлов и обрабатывает заголовок If-Modified-Since.

    Комментарий от admin — 1 августа 2011 @ 15:57

  3. вроде Drupal поддерживает заголовок if-modified-since, при включенном кэше, об этом можно почитать тут http://drupal.org/node/47743

    Комментарий от admin — 1 августа 2011 @ 18:04

  4. все плагины кеширования отдают Last-Modified

    Комментарий от darmoid — 18 января 2012 @ 5:57

  5. У меня стоит плагин кеширования MaxCache. Проверил инструментами, но выдает, что заголовок if-modified-since не поддерживается.

    Комментарий от Александр Пузатых — 22 августа 2014 @ 22:27

  6. Так как же все же сделать отдачу этого заголовка в wordpress ? Можно ли это сделать на сервере если у меня VPS ?

    Комментарий от zmoe — 5 ноября 2015 @ 15:20

RSS feed for comments on this post. TrackBack URL

Leave a comment

SlogPost.ru