Что такое Http заголовки (Http headers). Общая теория

Инструмент 31.05.2019
Инструмент
Основные заголовки ) - должны включаться в любое сообщение клиента и сервера.
  • Request Headers (рус. Заголовки запроса ) - используются только в запросах клиента.
  • Response Headers (рус. Заголовки ответа ) - только для ответов от сервера.
  • Entity Headers (рус. Заголовки сущности ) - сопровождают каждую сущность сообщения.
  • Энциклопедичный YouTube

      1 / 3

      Урок 5 Часть 3 Заголовки HTTP

      Лекция 2: HTTP, важные заголовки, коды ответа

      Модуль 1. Работа с протоколом HTTP – cookie, заголовки ответа сервера

      Субтитры

      так я уже расказывал, что когда идут какие-то запросы на сервер там есть заголовки ответа, заголовки запроса здесь я на слайде примерно как бы здесь все это расшифровал подробно рассказывать не буду, единнственное что про группы четыре основные я не упомянул ечть основны general headers они должны включаться в любое сообщение клиента и сервера например вот у нас есть заголовок запроса accept это главный заголовок, он всегда должен присутствовать accept lenguage, accept encoding они всегда есть как вы уже заметили, на всех сайтах post тоже на всех в сайтах присутствует, во всех запросах заголовки запроса мы уже расссмотрели используется только в запросах клиента request header, т.е. заголовки запроса вот это части, она всегда формируется на клиенте браузере и посылается на сервер response headers - это заголовки ответа, только для ответа сервера это уже эта часть непосредственно - вот они заголовки ответа и утешен headers - заголовки сущности, они сопровождают каждую сущность сообщения здесь их не видно, они там как бы внутри скрыты типа вот этого и всякие другие и прмер http диалога я вам показал здесь я на слайде привожу пример get запроса, который происходит это мы уже подробно рассмотрели, но и здесь на слайде тоже есть пример т.е. когда клиент запрашивает какую то страницу, здесь формируется вот такой заголовок вот такие заголовки запросов какой host, какой user, что он хочет и ответ который пришел с сервера, что документ у нас есть и прочие остальные заголовки осталось рассмотреть у нас сам url, параметры запроса и перейти непосредственно get и post типы чтобы уже принимать php и как то обрабатывать напомню что url - это uniform resource locator как бы запрашивает документ ищет место где он находится и часто он состоит из таких вот частей т.е. сначала это протокол кстати протоколы могут быть разными многие из вас слышали такой протокол как FTP - file transfer protokol протокол для передачи файлов посмотрим http он состоит из хоста сервера сайта, где расположен этот документ путь до этого документа он может быть выглядит в таком виде даже с русскими символами может выглядеть в любом другом просто как как будто мы переходим по папкам и т.д. очень часто передаются какие-то параметры после знака вопроса здесь очень важно сейчас узнать для себя и запомниnm следующую вещь что все параметры всегда передаются после знака вопроса сейчас закрою все лишнее и мы уже посмотрим на нашем сайте как это выглядит вот наш старый документ сейчас все это подчищу и мы посмотрим что у нас происходит с параметрами напомню что все параметры, которые идут после вопроса вся часть попадает в массив get этот массив одноименный по тем типам, которые мы рассматривали т.е. есть массив get, есть массив post и с ними мы будем работать посмотрим что у нас здесь в данном случае массив этот пустой потому что никакого параметра небыло передано затем я пишу знак вопроса, и указываю что там, допустим, меню и мы видим что меню -ушло как ключ ассоциативного массива если мы поставим знак равно, и присвоим в меню, что-то типа 1 2 3 мы получим следующую конструкцию менб становится как ключ ассоциативного массива а 1 2 3 идет в значение сюда сможем написать какой-то текст у меня хром не правиль подставляет, давайте если мне нужно указать несколько параметров, я ставлю значек амперсанда и указываю меню2 равно 2 3 4 меню 4 равно привет и т.д я могу это делать до бесконечности выглядит это таким образом сами параметры попадают в ключи ассоциативных массивов то что стоит после равно попадает в их значение это очень удобно чтобы смотреть какие параметры пришли методом get и спомощью php их можно в таком ключе обрабатывать если мы в конце укажем амперсанд то php уже не увидет дальше парметра и не будет ничего обрабатывать как я уже говорил, можно просто указывать вопрос, можно указывать само сам документ, унас был index.php можно и не указывать дело в том что у нас есть по умолчанию основной как бы default документ, который показывается всегда в любом случае это у нас - index.php это определено у нас в конфигурационных файлах можно покопаться и посмотреть где где эта строка, где-тот параметр описан в конфигурационных файлах апача или в самом php поэтому, в таком случае можно не указывать этот индексный документ, а просто сразу писать впрос меню и т.д. и т.п. для этого что бы вам получше уяснить как обрабатывать параметры, я подготовил специальное домашнее задание, чтобы я здесь привел пример, но сейчас все это рассмотри мы должны научится принимать парметры, которые идут из get с помощью get, для этого у меня есть специальное домашнее задание оно находится в файле DZ5.1 сейчас я его открою что здесь такое здесь есть новости я их забил просто как строки чтобы было удобно их вводить в какой-то другой последовательности либо писать свои собственные новости здесь есть специальная функция, которая называется explode, что она делает она просто эти строки разбивает в массив и каждую строку записывает как элемент в качестве разбивки, и в качестве элемента разбивки, она использует перенос строки просто как это выглядит я её скопирую сюда т.е. это функция ищет вот этот элемент перенос строки, в данно случае найдет вот здесь, и здесь, издесь и просто раздробит эту строку на составляющие части и каждую часть поместит в качестве элемента массива выглядит это примерно так то есть здесь строка у нас четыре новосибирские компании вошли в сотню лучших работодателей она поместила это как нудлевой элемент и дальше по списку ваша задача какая вы вводите идентификатор, т.е. параметр идентификатора и говорите равно 8 скажем и жмете Enter, здесь это должно приняться каким то образом и мы должны на экране получить новость которая идет под этим номером скажем я ввожу 8-ую а восьмая - это звезды телешоу мы так и получаем если я ввожу сюда седьмую у вас должна вывестить седьмая но однако здесь чтобы вам небыло так легко я сделал некоторые хитрости, т.е. у вас должна быть объязательно функция вывода всего списка новостей у вас должна быть функция вывода конкретной новости в точке входа вы обрабатываете идентификатор и если эта новость присутствует вывести её на сайте если новости нет мы выводим весь список снова вот в таком виде должно все работать более того вы должны проверять был ли передан идентификатор новости в качестве параметра, т.е. я мог бы вывести скажем, меню равно 7 и вот у меня уже идкт какие-то ошибки underfined index и все такое прочее то есть вы должны это все дело отлавливать и если то есть вы должны это все дело отлавливать и если параметр не был передан выводить 404 ошибку 404 ошибка выводится, с помощью специального специальной функции, которая называется header и она здесь есть таким образом она выглядит я здесь оставлю ссылку на документацию чтобы все это дело прочитали и сделали самостоятельно это то что у нас касается метода get

    Общий формат

    • Название параметра должно состоять минимум из одного печатного символа (ASCII -коды от 33 до 126). Регистр символов в названиях не имеет значения. Заголовки с неизвестными именами должны игнорироваться. После названия сразу должен следовать символ двоеточия.
    • Значение может содержать любые символы ASCII кроме перевода строки (код 10) и возврата каретки (код 13). Пробельные символы в начале и конце значения обрезаются. Последовательность нескольких пробельных символов внутри значения может восприниматься как один пробел. Регистр символов также не имеет значения (если иное не предусмотрено форматом поля).

    Предусматривается размещение значения на нескольких строках (перенос строки). Для указания переноса в начале следующей строки должен находиться хотя бы один пробельный символ.

    Заголовки с одинаковыми названиями параметров, но разными значениями могут объединяться в один, только если значение поля представляет из себя разделённый запятыми список. Во всех остальных случаях значения более дальних заголовков должны перекрывать предыдущие. Поэтому прокси-сервера не должны менять порядок следования заголовков в сообщении. При этом порядок элементов списка обычно значения не имеет.

    Пример с многострочными значениями и одинаковыми именами заголовков (обратите внимание на регистр символов и пробелы):

    Content-type: text/html; charset=windows-1251 Allow: GET, HEAD Content-Length: 356 ALLOW: GET, OPTIONS Content-Length: 1984

    Правильный компактный вариант преобразования и интерпретации:

    Content-Type: text/html;charset=windows-1251 Allow: GET,HEAD,OPTIONS Content-Length: 1984

    В этом случае недопустимо принимать значение Content-Length, равное 356. При объединении значений Allow, чтобы не потерять семантический смысл, была добавлена запятая в конец первого поля и убран бессмысленно дублирующийся элемент «GET».

    Применяемые в заголовках структуры

    Дата и время

    Только дата указывается в заголовках Date , Expires , Last-Modified , If-Modified-Since , If-Unmodified-Since . Дата может присутствовать в заголовках If-Range и Warning .

    В HTTP исторически используется три формата:

    • Fri, 04 Jul 2008 08:42:36 GMT - RFC 822 .
    • Friday, 04-Jul-08 08:42:36 GMT - RFC 850 .
    • Fri Jul 4 08:42:36 2008 - результат функции asctime() языка ANSI C .

    Сейчас рекомендуется использовать только первый формат по RFC 822 , но для совместимости клиентам и серверам лучше поддерживать и другие.

    Время всегда указывается для часового пояса GMT (UTC+0). Год записывается четырьмя цифрами. День, час, минута и секунда дополняются нулями до двух символов. Для названий месяца и дня недели применяются трёхбуквенные стандартные сокращения на английском языке.

    Дни недели начиная с понедельника: Mon , Tue , Wed , Thu , Fri , Sat , Sun .

    Месяцы с января по декабрь: Jan , Feb , Mar , Apr , May , Jun , Jul , Aug , Sep , Oct , Nov , Dec .

    В PHP для преобразования местного времени во время по Гринвичу используется функция gmdate(). Примеры формирования дат для заголовков HTTP:

    // Текущая дата формирования документа: header ("Date: " . gmdate (DateTime :: RFC850 )); // Дата модификации указанного файла: $fp = "data/my-foo.txt" ; // путь к файлу header ("Last-Modified: " . gmdate ("D, d M Y H:i:s" , filemtime ($fp )) . " GMT" ); // Документ предположительно изменится через час: header ("Expires: " . gmdate ("D, d M Y H:i:s" , time () + 3600 ) . " GMT" ); // 3600 - количество секунд относительно текущего момента.

    Байтовые диапазоны

    При работе с фрагментами содержимого в специальных заголовках используются байтовые диапазоны (англ. byte ranges ). В них можно указать как один фрагмент, так и несколько разделяя их запятыми « , ». Диапазоны применяются в заголовках Range и Content-Range . В заголовке Accept-Ranges перечисляются только единицы измерения.

    В байтовых диапазонах обязательно в начале указываются название единиц измерения за которым следует символ « = ». В настоящий момент кроме единиц bytes никакие другие не применяются. За символом « = » располагаются сами диапазоны. Каждый из них является разделённой дефисом « - » парой натуральных чисел или нуля и натурального числа. Первый элемент указывает начальный байт, а второй - конечный. Нумерация в диапазонах начинается с нуля.

    Начальный или конечный байт может быть не указан. При отсутствии последнего байта считается что речь идёт о фрагменте от начального байта до конца содержимого. Если отсутствует начало, то номер конечного байта воспринимается как количество запрашиваемых байт от конца содержимого.

    Если первый байт больше чем последний, то диапазон считается синтаксически недействительным (англ. syntactically invalid ). Поля заголовка, содержащие диапазоны с синтаксически недействительными значениями, игнорируются. Если первый байт выходит за пределы объёма ресурса, то диапазон игнорируется. Если последний байт выходит за пределы содержимого, то диапазон обрезается до конца.

    Блок байтовых диапазонов считается выполнимым если в нём содержится хотя бы один доступный диапазон. Если же все диапазоны некорректны или выходят за пределы объёма ресурса, то серверу следует вернуть сообщение со статусом 416 (Requested range not satisfiable).

    Примеры (весь объём ресурса - 5000 байт):

    • bytes=0-255 - фрагмент от 0-го до 255-го байта включительно.
    • bytes=42-42 - запрос одного 42-го байта.
    • bytes=4000-7499,1000-2999 - два фрагмента. Так как первый выходит за пределы, то он интерпретируется как « 4000-4999 ».
    • bytes=3000-,6000-8055 - первый интерпретируется как « 3000-4999 », а второй игнорируется.
    • bytes=-400,-9000 - последние 400 байт (от 4600 до 4999), а второй подгоняется под рамки содержимого (от 0 до 4999) обозначая как фрагмент весь объём.
    • bytes=500-799,600-1023,800-849 - при пересечениях диапазоны могут объединяться в один (от 500 до 1023).

    Работа с заголовками

    Заголовки в HTML

    Язык разметки HTML позволяет задавать необходимые значения заголовков HTTP внутри с помощью тега . При этом название заголовка указывается в атрибуте http-equiv , а значение - в content . Почти всегда выставляется значение заголовка Content-Type с указанием кодировки, чтобы избежать проблем с отображением текста браузером. Также не лишним является указание значения заголовка Content-Language:

    < html > < head > < meta http-equiv = "Content-Type" content = "text/html;charset=windows-1251" > < meta http-equiv = "Content-Language" content = "ru" > ...

    В этой статье мы рассмотрим, для чего заголовки нужны, не вдаваясь в подробности, какой за что отвечает. Описание ролей самых распространённых заголовков будет дано в следующих статьях.

    Все статьи из цикла:

    • Что такое Http заголовки. Общая теория.

    HTTP расшифровывается как HyperText Transfer Protocol (протокол передачи гипертекста). Протокол — это набор правил, по которым разные устройства обмениваются данными. Он был создан в 1990-х годах. Сейчас он используется в сети интернет практически повсеместно. Всё, что вы видите в окне браузера, было получено посредством этого протокола. http заголовки — пожалуй главная вещь в общении между устройствами. Они передают основную информацию об устанавливающемся соединении и о передаваемой информации через это соединение.
    Взглянем на схему общения двух устройств. Пусть этими устройствами будут ваш компьютер и какой-нибудь сервер в интернете:

    Как видно, браузер отослал http-запрос. Он может выглядеть примерно так:

    GET /other-19 HTTP/1.1 Host: www.scriptsite.ru User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive

    При этом первая строка является строкой запроса, все остальные строки — это и есть http-заголовки, несущие в себе дополнительную информацию о запросе, о клиенте, который эту инфомрацию запрашивает, о многих других вещах.
    В ответ на наш запрос сервер может отослать такие заголовки:

    Server: Apache/2.0.61 (Unix) mod_ssl/2.0.61 OpenSSL/0.9.8k mod_dp20/0.99.2 PHP/5.2.5 mod_python/3.3.1 Python/2.5.1 mod_ruby/1.2.6 Ruby/1.8.6(2007-09-24)

    X-Powered-By: PHP/5.2.5

    Set-Cookie: PHPSESSID=ft47gokfee6amv3eda3k1p93s3; path=/

    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

    Pragma: no-cache

    Keep-Alive: timeout=10, max=1024

    Connection: Keep-Alive

    Transfer-Encoding: chunked

    Content-Type: text/html

    Первая строка — строка статуса. Остальные строки — заголовки. В схеме было показано, что подгружается ещё и содержимое страницы. Но это содержимое обычно не принято отображать в плагинах, просматривающих заголовки. Да и содержимое страницы — это только частный случай. По протоколу же не обязательно страница должна передаваться. Вместо неё могут быть переданы и картинка, и звуковой файл, и видео. И у всех них заголовки будут сильно отличаться.

    Как увидеть http-заголовки?

    Для того, чтобы увидеть http-заголовки, я рекомендую следующие плагины для браузера firefox:

    Если вы пользуетесь браузером Chrome, просмотреть всю информацию можно, нажав на кнопку настройки — инструменты — инструменты разработчика. Вкладка networks.
    Пользователям браузера opera ничего посоветовать не могу, так как не дружу с этим браузером. Установив плагины и запустив их, попробуйте обновить страницу. Вы сразу же увидите огромные списки запросов и ответов, посредством которых ваш браузер общался с сервером.

    Http-заголовки и доступ к ним в php

    Если вы являетесь php-разработчиком, вы можете получить доступ к заголовкам запроса с помощью функции getallheaders() . Для понимания её работы выполним такой код:

    И мы получаем распечатку массива заголовков.

    Но чаще к ним обращаются через глобальную переменную $_SERVER. Почти для каждого http заголовка есть аналогичное название элемента в этой переменной, образуемого по принципу HTTP_имя_заголовка. Так для того же ‘User_Agent’ есть переменная $_SERVER[‘HTTP_USER_AGENT’];

    Для получения заголовков, которые сервер собирается отправить пользователю, используется функция headers_list() . Как правило, сервер составляет недостающие обязательные заголовки уже в конце работы всех скриптов. Поэтому этот массив будет содержать заголовки либо те, которые сервер создал перед началом выполнения скрипта (и они не будут изменены), либо те, которые мы установили вручную. Вручную их можно установить с помощью функции header(«текст заголовка»);
    Выполним такой код:

    Увидим распечатку готовых к отправке на момент вызова функции заголовков:

    Первый заголовок был установлен автоматически, и он несёт в себе название сервера, на котором выполняется скрипт. Второй - установленный нами вручную. Если бы браузеру нужен был заголовок «Фрукт», он бы взял его из http-ответа сервра и использовал. Но так как наш браузер не нуждается в нём, то он просто игнорирует непонятную ему строку.

    Структура http запроса

    Наш запрос выглядит следующим образом:

    Первая строка в нём, как уже было сказано раньше, является строкой запроса. Она состоит из трёх частей:

    • method (метод) — указывает, какого рода запрос. Самые распространённые методы: GET, POST, HEAD. О них будет написано в следующем параграфе.
    • path (путь) — как правило, это часть URL, идущая после домена. Например, если вы вводите в адресную строку http://www.scriptsite.ru/about/, значение path будет /about/.
    • protocol (протокол) — используемый протокол. Как правило, состоит из «HTTP» и версии протокола. Обычно, в современных браузерах используется версия 1.1

    Дальше идут заголовки в виде строк формата «Имя: значение».
    Кстати, данные о cookies также передаются в этом запросе в виде одного из заголовков. Большинство из этих строк не являются обязательными. Запрос может быть сокращён вообще до двух строк:

    GET /article/show/4/ HTTP/1.1

    Host: scriptsite.ru

    Методы запроса

    GET

    get-запрос обычно используется для запроса документа с передачей некоторых параметров.
    Это основной метод, используемый для получения html-страниц, изображений, CSS и JavaScript файлов, и т.д.
    Из-за того, что параметры могут быть любыми, а на сервере нет ограничений по способам их обработки, часто метод для запросов данных используют для передачи информации. Например, у нас будет такая форма

    При этом эти параметры будут видны в адресной строке браузера.

    POST

    Post — метод, используемый для отправки данных на сервер. Несмотря на то, что вы можете отправлять данные серверу методом GET через адресную строку браузера, в большинстве случаев предпочтительнее использовать POST. Отправлять большие объёмы данных через GET непрактично. К тому же GET имеет некоторые ограничения, не позволяющие, например, опубликовать эту статью на моём сайте через одну лишь строку браузера. POST запросы чаще всего используются для передачи web-форм. Давайте изменим форму из предыдущего примера, задав ей метод POST

    Заголовки Content-Type и Content-Lenght добавлены автоматически. Они содержат информацию о типе и размере данных.
    Все данные передаются после отправки заголовков в таком же виде, как в строке запроса GET

    Метод POST повсеместно используется в AJAX, cURL, и т.д.
    Формы загрузки файлов работают только через метод POST

    HEAD

    Многие из вас могли и не знать об этом типе запросов.
    Этот метод работает аналогично post, только сервер не возвращает никакого дополнительного содержимого, кроме заголовков.
    Использование этого заголовка бывает оправдано во многих случаях. Например, когда браузер когда-то закешировал файл, а теперь хочет узнать, не изменился ли тот на сервере. Браузер может запросить информацию о нём, не скачивая сам файл полностью.
    Кроме того, этот метод часто используется в сервисах, проверяющих ссылки на работоспособность. Он позволяет узнавать, по каким URL адресам ещё есть файлы, а по каким их уже нет, при этом опять же файлы не скачиваются.

    Структура http ответа

    Сервер отвечает на каждый запрос такими ответами:

    Первая строка — версия протокола.
    Далее указывается код статуса сервера. В данном значение кода равно 200. Код статуса показывает браузеру, что именно произошло на сервере во время обработки запроса. 200й статус означает, что наш запрос был успешно обработан, и сервер отправит запрашиваемый документ сразу после передачи заголовков.
    В остальных строчках указывается всевозможная информация о передаваемом файле.

    К информации о статусах можно ещё добавить факт об ошибке 404. Её название пошло именно из кода 404, который отсылает сервер, когда не может найти файл на своих дисках.
    Более подробно о статусах сервера написано в следующей статье.

    Обратите также внимание

    Итак, усвоив материал, представленный на данном сайте, и выполнив самостоятельные попытки по изучению HTML и CSS вы должны уметь создавать веб-странички начальной и близкой к начальной сложности. Но, я считаю, важно не только уметь выполнять поставленные задачи, но также понимать как ваши решения работают на всех уровнях организации. Приблизить вас к этому поможет инструмент для просмотра HTTP-заголовков, отправляемых вашим браузером веб-серверу и наоборот.

    В упомянутой выше статье помимо теоретической информации были приведены также листинги HTTP-заголовков, используемых браузером при запросе главной страницы сайта ya.ru и содержащихся в ответе веб-сервера на соответствующий запрос. Но гораздо интереснее (и полезнее) посмотреть, чем отвечает ваш сервер на запросы браузером ваших страничек. Позже, при создании "умных" HTML-страниц это станет ключом к пониманию принципов активного взаимодействия пользователя и сайта.

    В качестве инструмента для просмотра HTTP-заголовков я предлагаю использовать плагин к браузеру FireFox LiveHTTPHeaders . Установить его можно так: Инструменты - Дополнения - Поиск дополнений, ищем по слову "headers", устанавливаем LiveHTTPHeaders. После перезагрузки браузера появится новая функция: Инструменты - Просмотр HTTP-заголовков.

    Предлагаю опробовать плагин на странице, созданной на предыдущем уроке . Открываем окно "Просмотр HTTP-заголовков", жмем "очистить", чтобы убрать появившиеся заголовки (при запросе домашней страницы браузера и т.п.). Далее делаем запрос страницы, например, http://test-domain2/. В окне заголовков появились заголовки от запросов браузера и от ответов веб-сервера:

    Запись представляет собой три блока: сначала идет URL запрашиваемой страницы, затем, через пустую строку, HTTP-заголовки, находящиеся в HTTP-запросе данной страницы и, наконец, HTTP-заголовки, находящиеся в HTTP-ответе веб-сервера. Записи разделены между собой линиями.

    Чтобы сформировать веб-страницу браузер делает несколько запросов к веб-серверу: непосредственно кода страницы, файлов CSS-стилей, изображений и т.п. Все эти запросы отражены в форме. Первым идет запрос HTML-страницы:

    GET / HTTP/1.1 Host: test-domain2 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2) Gecko/20100115 Firefox/3.6 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Pragma: no-cache Cache-Control: no-cache

    на что сервер ответил:

    HTTP/1.1 200 OK Date: Fri, 04 Jun 2010 08:52:09 GMT Server: Apache Last-Modified: Wed, 26 May 2010 11:34:58 GMT Etag: "3000000002878-20ca-4877da9e71c80" Accept-Ranges: bytes Content-Length: 8394 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8

    В заголовке HTTP-ответа можно увидеть название веб-сервера, размер страницы в байтах, ее кодировку. Напомню, что плагин отображает HTTP-заголовки, который является частью HTTP-пакета. Вторая его часть - тело пакета, не отображается. Но тут все просто: обычные запросы страниц/файлов не имеют в пакете тела (а о необычных мы узнаем позже), а тело в ответе представляют собой содержимое запрашиваемой страницы/файла, которое и получает браузер.

    HTTP (HyperText Transfer Protocol - «протокол передачи гипертекста») - протокол прикладного уровня передачи данных (изначально - в виде гипертекстовых документов). Основой HTTP является технология «клиент-сервер», то есть предполагается существование потребителей (клиентов), которые инициируют соединение и посылают запрос, и поставщиков (серверов), которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно сообщение с результатом.

    HTTP используется также в качестве «транспорта» для других протоколов прикладного уровня, таких как SOAP , XML-RPC , WebDAV.

    Основным объектом манипуляции в HTTP является ресурс, на который указывает URI (Uniform Resource Identifier) в запросе клиента. Обычно такими ресурсами являются хранящиеся на сервере файлы, но ими могут быть логические объекты или что-то абстрактное. Особенностью протокола HTTP является возможность указать в запросе и ответе способ представления одного и того же ресурса по различным параметрам: формату, кодировке, языку и т. д. Именно благодаря возможности указания способа кодирования сообщения клиент и сервер могут обмениваться двоичными данными, хотя данный протокол является текстовым.

    HTTP - протокол прикладного уровня, аналогичными ему являются FTP и SMTP - простой протокол передачи почты . Обмен сообщениями идёт по обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP использует глобальные URI . В отличие от многих других протоколов, HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ». Компоненты, использующие HTTP, могут самостоятельно осуществлять сохранение информации о состоянии, связанной с последними запросами и ответами. Браузер, посылающий запросы, может отслеживать задержки ответов. Сервер может хранить IP-адреса и заголовки запросов последних клиентов. Однако сам протокол не осведомлён о предыдущих запросах и ответах, в нём не предусмотрена внутренняя поддержка состояния, к нему не предъявляются такие требования.

      Расширяемость

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

      HTTP/1.1 - текущая версия протокола. Новым в этой версии был режим «постоянного соединения»: TCP-соединение может оставаться открытым после отправки ответа на запрос, что позволяет посылать несколько запросов за одно соединение. Клиент теперь обязан посылать информацию об имени хоста, к которому он обращается, что сделало возможным более простую организацию виртуального хостинга.

    HTTP не сохраняет информацию по транзакциям, поэтому в следующей транзакции приходится начинать все заново. Преимущество состоит в том, что HTTP сервер может обслужить в заданный промежуток времени гораздо больше клиентов, ибо устраняются дополнительные расходы на отслеживание сеансов от одного соединения к другому. Есть и недостаток: для сохранения информации по транзакциям более сложные CGI- программы должны пользоваться скрытыми полями ввода или внешними средствами, например Cookie .

    Методы HTTP запроса

    Метод HTTP - последовательность из любых символов, кроме управляющих и разделителей, указывающая на основную операцию над ресурсом. Обычно метод представляет собой короткое английское слово, записанное заглавными буквами. Обратите внимание, что название метода чувствительно к регистру.

    Каждый сервер обязан поддерживать как минимум методы GET и HEAD. Если сервер не распознал указанный клиентом метод, то он должен вернуть статус 501 (Not Implemented). Если серверу метод известен, но он не применим к конкретному ресурсу, то возвращается сообщение с кодом 405 (Method Not Allowed). В обоих случаях серверу следует включить в сообщение ответа заголовок Allow со списком поддерживаемых методов.

    Кроме методов GET и HEAD, часто применяется метод POST.

    • Заголовки (параметры) HTTP запроса, ответа, сущности

      Все заголовки в протоколе HTTP разделяются на четыре основных группы (в нижеприведенном порядке рекомендуется посылать заголовки получателю):

        General Headers (Основные заголовки) - должны включаться в любое сообщение клиента и сервера.

        Request Headers (Заголовки запроса) - используются только в запросах клиента.

        Response Headers (Заголовки ответа) - только для ответов от сервера.

        Entity Headers (Заголовки сущности) - сопровождают каждую сущность сообщения. В отдельный класс заголовки сущности выделены для того, чтобы не путать их с заголовками запроса или заголовками ответа при передаче множественного содержимого (MIME).

      Все необходимые для функционирования HTTP заголовки описаны в основных RFC . При необходимости можно создавать свои заголовки. Традиционно к именам таких дополнительных заголовков добавляют префикс "X-" для избежания конфликта имён с возможно существующими.

      Строки после главной строки запроса (GET /index.html HTTP/1.1) имеют следующий формат: Параметр: значение. Таким образом задаются параметры запроса. Это является необязательным, все строки после главной строки запроса могут отсутствовать; в этом случае сервер принимает их значение по умолчанию или по результатам предыдущего запроса (при работе в режиме Connection: Keep-Alive).

        Параметр Connection (соединение) - может принимать значения Keep-Alive и close. В HTTP 1.0 за передачей сервером затребованных данных следует разъединение с клиентом, и транзакция считается завершённой, если не передан заголовок Connection: Keep Alive. В HTTP 1.1 сервер по умолчанию не разрывает соединение и клиент может посылать другие запросы. Поскольку во многие документы встроены другие документы - изображения, кадры, апплеты и т.д., это позволяет сэкономить время и затраты клиента, которому в противном случае пришлось бы для получения всего одной страницы многократно соединяться с одним и тем же сервером. Таким образом, в HTTP 1.1 транзакция может циклически повторяться, пока клиент или сервер не закроет соединение явно.

        Параметр User-Agent - значением является "кодовое обозначение" браузера.

        Параметр Accept - список поддерживаемых браузером типов содержимого в порядке их предпочтения данным браузером.

        Параметр Host - имя домена, с которого запрашивается ресурс. Полезно, если на сервере имеется несколько виртуальных серверов под одним IP- адресом. В этом случае имя виртуального домена определяется по этому полю.

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

      Для SSI документов Apache будет выдавать "Last-Modified" в том случае, если указана директива "XBitHack full" (например, в файле.htaccess)

        Параметр ETag (объектная метка) - появился в HTTP 1.1(W3C ETag). ETag служит для присвоения каждой странице уникального идентификатора, значение которого меняется при изменении страницы (документа). ETag представляет собой хеш («отпечаток») байтов документа, если в документе изменится хоть один байт, то изменится и ETag. ETag используется при кэшировании документа. Этот заголовок сохраняется на клиенте, и в случае повторного обращения к документу позволяет браузеру обратиться к серверу с запросом ‘If-None-Match’, а сервер должен по значению ETag- метки определить, не изменился ли документ(страница), и если нет, ответить кодом ‘304 Not Modified’.

        Параметр Expires (истечение)(W3C Expires) - он сообщает браузеру, какой временной промежуток можно считать, что копия страницы в кэше свежа, и вообще не обращаться к серверу с запросами. Это удобно для таких файлов, о которых вы точно знаете, что они не изменятся ближайший час/день/месяц: фоновая картинка страницы, например.

      Другие заголовки HTTP:

        HTTP_X_FORWARDED_FOR

        HTTP_X_FORWARDED

        HTTP_FORWARDED_FOR

      • HTTP_X_COMING_FROM

        HTTP_COMING_FROM

      • HTTP_X_CLUSTER_CLIENT_IP

      • HTTP_XROXY_CONNECTION

        HTTP_PROXY_CONNECTION

        HTTP_USERAGENT_VIA - прокси

      Пример анализа HTTP запроса

      HTTP запрос состоит из трех частей: строки запроса (ответа), раздела заголовка, за которым следует необязательное тело. Заголовки представляют собой простой текст, при этом каждый заголовок отделен от следующего символом новой строки(\r\n), в то время как тело может быть как текстом, так и бинарными данными. Тело отделяется от заголовков двумя символами новой строки.

      Заголовок запроса состоит из главной (первой) строки запроса и последующих строк, уточняющих запрос в главной строке. Последующие строки также могут отсутствовать.

      Клиент инициирует транзакцию следующим образом:

        Клиент устанавливает связь с сервером по назначенному номеру порта, официальный номер порта по умолчанию - 80. Затем клиент посылает запрос документа, указав метод, адрес документа и номер версии HTTP. Например, в главной строке запроса GET /index.html HTTP/1.1

        используется метод GET , которым с помощью версии 1.1 HTTP запрашивается документ index.html.

        Клиент посылает информацию заголовка (необязательную, заголовок host обязателен), чтобы сообщить серверу информацию о своей конфигурации и данные о форматах документов, которые он может принимать. Вся информация заголовка указывается построчно, при этом в каждой строке приводится имя и значение. Например, приведённый ниже заголовок, посланный клиентом, содержит его имя и номер версии, а также информацию о некоторых предпочтительных для клиента типах документов: Host: list.mail.ru User-Agent: Mozilla/5.0 (Ubuntu; X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

        Завершается заголовок пустой строкой.

        Послав запрос и заголовки, клиент может отправить и дополнительные данные, например, для CGI скриптов.

      Сервер отвечает на запрос клиента следующим образом:

        Первая часть ответа сервера - строка состояния, содержащая три поля: версию HTTP, код состояния и описание. Поле версии содержит номер версии HTTP, которой данный сервер пользуется для передачи ответа. Код состояния - это трехразрядное число, обозначающее результат обработки сервером запроса клиента. Описание, следующее за кодом состояния, представляет собой просто понятный для человека текст, поясняющий код состояния. Например, строка состояния HTTP/1.1 304 Not Modified

        говорит о том, что сервер для ответа использует версию HTTP 1.1. Код состояния 304 означает, что клиент запросил документ методом GET, использовал заголовок If-Modified-Since или If-None-Match и документ не изменился с указанного момента.

        После строки состояния сервер передает клиенту информацию заголовка, содержащую данные о самом сервере и затребованном документе. Ниже приведен пример заголовка: Date: Thu, 15 Dec 2011 09:34:15 GMT Server: Apache/2.2.21 (Debian) X-Powered-By: PHP/5.3.8-1+b1 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=utf-8

        Завершает заголовок пустая строка.

        Если запрос клиента успешен, то посылаются затребованные данные. Это может быть копия файла или результат выполнения CGI- программы. Если запрос клиента удовлетворить нельзя, передаются дополнительные данные в виде понятного для пользователя разъяснения причин, по которым сервер не смог выполнить данный запрос.

      HTTP status code

      Код состояния HTTP (HTTP status code) является частью первой строки ответа сервера. Он представляет собой целое число из трех цифр. Первая цифра указывает на класс состояния. За кодом ответа обычно следует отделённая пробелом поясняющая фраза на английском языке, которая разъясняет человеку причину именно такого ответа.

      Клиент может не знать все коды состояния, но он обязан отреагировать в соответствии с классом кода. В настоящее время выделено пять классов кодов состояния:

        1xx : Informational (Информационные). Информационные коды состояния, сообщающие клиенту, что сервер пребывает в процессе обработки запроса. Реакция клиента на данные коды не требуется;

        2xx : Success (Успешно).

        1. 200 OK (Хорошо). Появился в HTTP/1.0. Успешный запрос ресурса. Если клиентом были запрошены какие-либо данные, то они находятся в заголовке и/или теле сообщения.

        3xx : Redirection (Перенаправление(переадресация)). Коды класса 3xx сообщают клиенту, что для успешного выполнения операции необходимо сделать другой запрос (как правило по другому URI). Из данного класса пять кодов 301, 302, 303, 305 и 307 относятся непосредственно к перенаправлениям (редирект). Адрес, по которому клиенту следует произвести запрос, сервер указывает в заголовке Location. Многие клиенты при перенаправлениях с кодами 301 и 302 ошибочно применяют метод GET ко второму ресурсу несмотря на то, что к первому запрос был с иным методом. Чтобы избежать недоразумений в версии HTTP/1.1 были введены коды 303 и 307 вместо 302. Изменять метод запроса нужно только если сервер ответил 303. В остальных случаях следующий запрос производить с исходным методом.

        1. 302 Found (Найдено). Введено в HTTP/1.0. Запрошенный документ временно доступен по другому URI , указанному в заголовке в поле Location.

        4xx : Client Error (Ошибка клиента). Класс кодов 4xx предназначен для указания ошибок со стороны клиента. При использовании всех методов, кроме HEAD , сервер должен вернуть в теле сообщения гипертекстовое пояснение для пользователя.

        1. 404 Not Found (Не найдено). Появился в HTTP/1.0. Сервер понял запрос, но не нашёл соответствующего ресурса по указанному URI .

        5xx : Server Error (Ошибка сервера)

      Ссылки по теме HTTP 1.1

      HTTP/2

      HTTP/2 (изначально HTTP/2.0) - вторая крупная версия сетевого протокола HTTP. Протокол основан на SPDY (HTTP-совместимый протокол, разработанный Google).

      Протокол HTTP/2 является бинарным. По сравнению с предыдущим стандартом изменены способы разбития данных на фрагменты и транспортирования их между сервером и клиентом.

      В HTTP/2 сервер имеет право послать то содержимое, которое ещё не было запрошено клиентом. Это позволит серверу сразу выслать дополнительные файлы, которые потребуются браузеру для отображения страниц, без необходимости анализа браузером основной страницы и запрашивания необходимых дополнений.

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

    Этот материал будет логическим продолжением предыдущей статьи, где я представил общую информацию о , которые служат ни больше ни меньше как "транспортным средством" для передачи гипертекста (), как раз и являющегося содержанием любой страницы веб-ресурса.

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

    Ответ сервера и его составляющие, которые могут повлиять на SEO

    В статье, объясняющей суть передачи данных посредством протокола HTTP (HTTPS), ссылка на которую дана в начале публикации, я писал о том, как в принципе происходит общение , которое основывается на схеме «запрос клиента — ответ сервера» .

    Напомню вкратце, как это осуществляется. Браузер, после того, как пользователь вводит в адресную строку URL страницы, обращается в ближайший ДНС сервер, где хранятся списки всех доменов (), а также соответствующие им IP-адреса (каждое устройство в интернете имеет , включая серверы, где "живут" сайты).

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

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

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

    Чтобы практически осуществить проверку ответа сервера на запрос робота поисковой системы Яндекс, можно воспользоваться специальным инструментом , где вводите URL исследуемой страницы, а также выбираете нужного бота из выпадающего списка (кроме основного там присутствуют роботы по зеркалам, по картинкам, по поиску видео и другие):


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

    HTTP коды состояния — 200, 301, 302, 403, 404, 500 и другие

    Код состояния, приходящий в ответе сервера, определяет статус вебстраницы сайта, в отношении которой клиентское приложение отправляет запрос на сервер. Например, HTTP 200 OK означает, что все все содержимое странички передано и будет доступно для просмотра.

    Для успешного продвижения главное, чтобы в каждом конкретном случае код состояния был корректным и соответствовал текущему положению вещей. Скажем, если адрес был изменен на постоянной основе по той или иной причине, то в ответе сервера должно быть указано присутствие в отношении исследуемой страницы (на скриншоте ниже в качестве значения «Location» указан урл страницы, на который осуществлена переадресация):


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

    1. 1XX — информационные, в которых сервер сообщает о процессе обработки запроса.


    2. 2XX HTTP коды, информирующие об успешно переданных данных. О 200 OK я уже упомянул, остальные являются его производными.


    3. 3XX — переадресация различного вида с одного URL на другой. Например, если 301 означает, что адрес страницы изменен навсегда, то код 302 говорит о временном перенаправлении. В отличие от постоянного 302 редирект не является сигналом поисковым системам для передачи веса страницы со старого адреса, поэтому на практике он используется лишь в исключительных ситуациях, когда является наиболее оптимальным решением.


    4. 4XX — HTTP коды ошибок в запросе со стороны клиента. Например, всем известный код статуса 404 означает, что документа по такому адресу на хосте нет.


    5. 5XX — ошибка на сервере, в результате которой страница не может быть предоставлена.


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

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

    Бывали случаи, например, когда сервер отвечает HTTP кодом 404 вместо ожидаемого 200 , поскольку в реальности вебстраницы доступны и прекрасно открываются. Если такая ситуация, не дай бог, сложится при ответе сервера на запрос того же робота Яндекса, то вполне вероятно, произойдет выпадение этих страниц из индекса, что будет очень обидно.

    Но если даже подобный форс-мажор произойдет, своевременная проверка кода состояния поможет вовремя обнаружить эту неприятность и исправить ее последствия с минимальными затратами времени и сил, которые могут вам понадобиться для других важных дел по оптимизации сайта.

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

    Если взгляните на скриншот выше, где дан ответ сервера, то увидите, что чуть ниже строки с кодом статуса присутствует пояснение, включающее информацию о времени ответа сервера, IP-адресе сайта, кодировке и размере страницы:

    Особенно интересно время ответа (отклика) сервера , которое является составной частью . Этот показатель входит в число факторов ранжирования, поэтому мы кровно заинтересованы в том, как его уменьшить.

    Какой же должна быть величина времени отклика? Гугл, например, определяет максимальную границу в 200 мс (миллисекунд), но, конечно, чем меньше, тем лучше. Как же увеличить скорость ответа сервера? Для начала попробуйте провести некоторые мероприятия по , вполне возможно, что проблему решит установка плагина кеширования.

    Возможно, что предпринятые вами действия помогут мало, так как многое зависит от настроек и мощностей программного обеспечения самого сервера. Тогда есть смысл обратиться к серверному администратору хостинга. Если внятного ответа не получите, а время отклика сервера сильно превышает лимит, означенный выше, стоит задуматься о крайней мере в виде смены провайдера.

    HTTP заголовки и их значение

    В этом свете будем рассматривать примеры ответов на запросы роботов поисковых систем , поскольку они интересуют нас в первую очередь. Для наглядности вначале представляю скриншот с HTTP заголовками, соответствующими урлу страницы со статусом 200 ОК:


    Server — название и версия веб-сервера. В данном примере это nginx, который в силу малого использования ресурсов и гибкости конфигурирования решает задачу оптимизации работы основного сервера Apache и используется с ним в связке.

    Date — дата и время возврата содержания запрашиваемой страницы.

    Content-Lenght — объем передаваемого контента в байтах ().

    Connection — соединение. Параметр keep-alive означает, что после выдачи документа соединение с сервером не разрывается и можно отправлять дополнительные запросы.

    Vary — этот заголовок позволяет выдать правильный документ при наличии нескольких его версий. Он актуален, например, при применении технологии сжатия страниц, когда в кеше хранится и сжатая, и несжатая версия. При ответе Accept-Encoding в кеше будут находиться различные варианты запрошенной страницы для разных клиентских приложений (агентов).

    Cache-Control — управление кешированием. В нашем образце этот заголовок отражает вид кеша, в котором располагается документ (public) и время, в течении которого он должен находиться в кеше (max-age). Значение public указывает, что эта операция применяется к файлам, хранящимся в общедоступном кэше. Параметр max-age выдает время в секундах.

    X-Hyper-Cache — специальный заголовок, который многие пользователи WordPress, наверное, сразу идентифицировали. Несомненно, он касается работы , который я считаю, пожалуй, лучшим в своем классе. Значение «hit - gzip» показывает, что к кешированной странице применено сжатие методом gzip.

    Content-Encoding — способ кодирования (в общем смысле) передаваемого в ответе содержания страницы. В нашем примере было применено сжатие gzip. Это сигнал клиентской программе (User Agent) распаковать содержимое для его корректного восприятия.

    А теперь я отмечу заголовки ответа, на содержание которых вебмастерам следует обратить особое внимание, поскольку оно может оказать серьезное влияние на продвижение. Причем, если вы используете в качестве управления контентом сайта , с помощью которого HTML-странички генерируются "на лету", то с большой долей вероятности при наличии проблемы у одной вебстраницы пострадают и остальные.

    Content-Type — тип контента, который в этом примере представляет из себя HTML-код в кодировке UTF-8. Некорректное указание кодировки может привести к сложностям в восприятии текста пользователями и ботами ПС, а это чревато непопаданием страницы в индекс.

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

    Last-Modified — дата последней модификации веб-страницы. Если клиент (в нашем случае робот Яндекса) получил от сервера этот заголовок с датой обновления контента, то при следующем обращении к URL этой же страницы он отправит серверу в составе запроса If-Modified-Since .

    Вебсервер выделит промежуток от времени последних изменений до времени, указанного в заголовке If-Modified-Since. Ежели за этот период страница никоим образом не была изменена, то сервер отправит ответ с HTTP кодом 304 Not Modified , причем в этом случае содержание страницы отправлено не будет. Если же редактирование имело место, то робот получит код 200 ОК вместе с измененным контентом.

    Этот механизм, если он настроен верно, позволяет выдавать постоянно свежую информацию. Ведь тут важна актуальность данных, что и обеспечивается правильной реализацией проверки времени последнего обновления. Ведь при неправильной настройке (если дата, указанная в Last-Modified не меняется) робот может получить просто код 304 Not Modified (вместо 200 OK с новой версией документа), хотя контент был несколько раз отредактирован.

    Как же можно проверить корректность работы Last-Modified для сервера, на котором расположен ваш сайт? Попробуем разобраться на конкретном примере .

    На том же сервисе Яндекса, ссылку на который я уже предложил выше, есть специальная опция, которая позволяет добавить запрос If-Modified-Since и указать нужные вам дату и время (в формате GMT, то есть по Гринвичу, относительно часового пояса Москвы это -3 часа) вплоть до минут, которое определит временной интервал проверки на обновление:


    Взгляните на 10 скриншот вверх отсюда, где дан результат проверки в отношении урла одной из страниц моего блога (где отмечены все разделы ответа сервера). Там в части заголовков дано определенное значение Last-Modified, то есть дата последнего обновления. Теперь я включаю показатель If-Modified-Since в запрос и проверяю ответ сервера:


    Как видите, получен код 304 Not Modified без содержания вебстраницы, что совершенно верно для данной ситуации, поскольку контент действительно не был обновлен за данный период. Далее для тестирования я добавил небольшой фрагмент текста в этой статье.

    Затем я вновь послал запрос от робота Яндекса на сервер, который при правильно работающем механизме кэширования (после обновлении страницы в кеше присутствует последняя версия) должен возвратить ответ 200 ОК с новым содержанием, что и произошло:


    Для полного успокоения можно еще просмотреть содержимое заголовка Content-Lenght, которое показывает, что объем контента незначительно, но увеличился (18443 против 18437 до редактирования). Это соответствует действительности, поскольку я именно добавил толику текста. Точно так же вы можете проверить правильность настройки заголовков для своего сервера.

    Location — еще один заголовок, который я хотел бы отметить для полноты информации по этой теме. Он появляется в ответе сервера в том случае, ежели робот посылает запрос в отношении вебстраницы, с которой было совершено постоянное перенаправление (HTTP код 301):


    Новый адрес, на который был проставлен редирект, и будет присутствовать в заголовке Location. Содержимое страницы в ответе отсутствует, что вполне логично, а вот в пояснении, которое следует за кодом ответа 301 Moved Permanently, указан размер страницы, на урл которой осуществляется переадресация.

    Проверка ответа сервера в онлайн сервисах

    Далее для полноты картины нелишним будет отметить online сервисы, которые позволяют проверить HTTP ответ сервера. На просторах интернета мне приглянулся вот этот (Checkmy.ru), который обладает достойным функционалом. Проверим теперь на нем отклик сервера, но уже на запрос робота Google для разнообразия:

    После активации процесса чуть ниже вы получите ответ со всеми раскладами:


    Сервис Checkmy предлагает пользователям не только выбор приложения (User Agent), с которого будет отправлен запрос, но и использования заголовков If-Modified-Since и Accept-Encoding, о которых велась речь выше.

    Кроме того, при ответе, содержащем код переадресации, будет указано количество редиректов (в идеале он должен быть единственным). Несколько последовательных перенаправлений уже дают повод призадуматься, поскольку это не лучший вариант для оптимизации ресурса.

    На сайте есть еще такая фишка как закладка для браузера, которая обеспечит скоростную проверку любой веб-страницы, на которую вы перейдете. Для этого достаточно прокрутить страницу вниз до нужного места, нажав на ссылку «Быстрый доступ» из верхнего меню. Затем, захватив левой кнопкой мышки кнопку «Checkmy» , переместить ее на панель закладок браузера:


    В заключение отмечу еще сервис, с помощью инструмента которого удачно осуществите массовую проверку отклика сервера сразу для 200 URL, причем есть возможность загрузки архива ZIP с урлами. А на десерт видеролик о том, что такое код 404 Soft и чем он опасен для вебмастеров:



    Рекомендуем почитать

    Наверх