Проверяем и оптимизируем HTTP-заголовки сайта

О чем будет сегодняшний блог? О HTTP-заголовках. Таком, на первый взгляд, не существенном, но, как оказывается, достаточно важном. Сидя в своем укромном компьютерном уголке и прихлебывая вкусный кофе, я решил проверить несколько клиентских сайтов. И начал с проверки кодов ответа сервера, HTTP-заголовков. Признаюсь, честно, ужаснулся. Дальше расскажу почему, а также как скрыть лишние http-заголовки и что они означают.

Многие сеошники и, к сожалению, администраторы веб-серверов, забывают о HTTP-заголовках или игнорируют их. А по факту: некоторые HTTP-заголовки не только бессмысленны, но и предоставляют конфиденциальную информацию любому желающему. Например, я смог узнать версию веб-сервера сайта-конкурента, версию PHP, какой софт у него на сервере, и даже название шаблона сайта. Количество этих заголовков иногда зашкаливает и влияет на общую скорость загрузки сайта. Так зачем вся эта лишняя информация?

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

Проверить их можно разными способами. Самый простой – открыть онлайн-сервис BERTAL.RU и вбить домен сайта. Получим ответ сервера:

Проверка http-заголовков

Это HTTP-заголовки моего сайта (HTTP расшифровывается как “Hypertext Transfer Protocol” – протокол передачи гипертекста). Как видим, ничего лишнего. Код ответа 200 ОК, а в заголовках только актуальная информация, нужная браузеру, чтобы корректно обработать и отобразить страницу.

Что такое HTTP заголовки

Давайте теперь посмотрим ответ другого сайта:

И еще один пример:

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

У владельцев подобных сайтов часто возникают вопросы – а почему странички не в индексе, почему такие низкие позиции? Все очень просто. Проигнорирована техническая оптимизация сайта. Веб-разработчики, администраторы, сеошники должны обеспечить поисковику, в первую очередь, корректный и правильный доступ к сайту! Это влияет на частоту и качество индексирования. Если в HTTP-заголовках домена много непонятных “буков” и редиректов,  то при индексировании, поисковый бот может испытать трудности, что скажется на попадание веб-страниц в индекс. Сам процесс краулинга очень важен и если вы его проигнорируете – успешного продвижения вам не видеть как своих ушей. Рекомендую ознакомиться с технической документацией Google.

Давайте теперь подробнее разберемcя: какие HTTP-заголовки бывают и что они означают.

Список HTTP-заголовков

Я специально полез на Habr и собрал всю информацию по заголовкам:

ЗаголовокЗначениеСтатус
dateТекущие дата и времяТребуется по протоколу
content-typeЯзык разметки, тип контентаОбычно требуется браузером
serverСигнатура веб-сервераНеобязателен
content-lengthРазмер контента в байтахПолезен
last-modifiedПоследнее изменение страницыПолезен
cache-controlУправляет кешированием сайта. Указывает правила кеширования. Эффективность проверить можно тут.Полезен
content-encodingКодировка страницыТребуется для сжатого контента
expiresДата предполагаемого срока истечения актуальности контента. Если в ответе с сервера установлен заголовок Cache-Control с директивами “max-age” или “s-maxage” , заголовок Expires игнорируется.Необязателен
x-powered-byВерсия PHP сайтаНеобязателен
pragmaЯвляется заголовком HTTP/1.0 и отвечает за кеширование. Тем не менее, не может служить надежной заменой заголовку “Cache-Control: no-cache”, хотя и ведет себя аналогичным образом когда поле заголовка Cache-Control опущено в запросе. На некоторых CMS включен по-умолчанию и взаимодействует с Cache Control. Впринципе, выполняет какую-то работу.Полезен для HTTP 1.0
x-frame-optionsЗащита от кликджекингаПолезен
access-control-allow-originПроверка, может ли ресурс быть доступен для контента на текущем домене.Полезен
x-content-type-optionsБлокировка перехвата содержимого MIMEПолезен
linkУказывает на логически связный с сущностью ресурсПолезен
ageКоличество секунд с момента последней модификации ресурсаПолезен
x-cacheНепонятный заголовок, который добавляют CDN-сервисыНеобязателен
x-xss-protectionЗащита от XSS-атакПолезен
strict-transport-securityHSTS заголовок, который уведомляет ботам, что доступ к сайту должен быть только по https. Форсирует безопасность сайта.Полезен
viaОбщее поле HTTP заголовкаVia служит для отображения списка версий протокола HTTP, названий и версий прокси-серверов, через которые прошло сообщение.Необязателен
p3pНужен для IE8 чтобы принимать cookies третьих лиц. Устаревший.Необязателен
expect-ctНужный для декларирования клиенту, что используется механизм Certificate Transparency – то есть сервер получил сертификат через публично журналируемый CA, и запись о выдаче данного сертификата есть и доступна.Полезен
content-languageЯзык контентаСпорно
x-aspnet-versionВерсия сервера ASP.NETНеобязателен
access-control-allow-credentialsПроверка безопасности. Нужен для работы некоторых jquery-плагинов.Полезен
x-robots-tagЗаголовок X-Robots-Tag используется как элемент HTTP-ответа для определенного URL. В заголовках X-Robots-Tag поддерживаются те же директивы, что и в метатегах robots.Не имеет значения для браузеров, используется поисковыми ботами Google
x-ua-compatibleПризывает Internet Explorer работать в определённом режиме документа. Остальные браузеры должны игнорировать данную прагма директиву.Необязателен
access-control-allow-methodsКонтроль безопасностиПолезен
access-control-allow-headersКонтроль безопасностиПолезен

Жирным обозначены заголовки, которые можно без риска удалить из ответа сервера.

Как убрать HTTP-заголовки?

Чтобы ничего не нарушить, я провел клиентским сайтам только базовую очистку. Убрал –  Server, x-powered-by и P3P. Первый предоставляет информацию о веб-сервере (сигнатура). Второй – показывает версию PHP, на котором работает сайт. Третий – вообще устаревший заголовок, который был создан специально для Internet Explorer и в IE11 больше не поддерживается.

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

Убираем http-заголовок Server

Если у вас веб-сервер стандартно на Apache, нужно найти системный файл httpd.conf и добавить в него или изменить 2 строки:

ServerTokens Prod
ServerSignature Off

Если веб-сервер NGINX, то вносим эти 2 директивы в файл nginx.conf.

Убираем версию Php

Есть 2 варианта. Первый – в .htaccess добавить:
<IfModule mod_headers.c>
Header unset X-Powered-By
Header unset Server
</IfModule>
Если не сработало, пойдет второй вариант. Предварительно включите в настройках PHP вашего домена опцию – поддержка cgi-bin. Далее находим папку cgi-bin или php-bin. В ней открываем файл php.ini и изменяем параметр:
expose_php на Off

Убираем устаревший P3P

HTTP-заголовки на самом деле можно удалить и посредством PHP с помощью функции header_remove. Добавляем в самый верх шаблона сайта (header.php или index.php) следующий код:

<?php
header_remove("P3P");
?>

Проверяем http-заголовки

Проверить заголовки можем на bertal.ru, а сигнатуру сервера отдельно в бесплатном (разовом) проверщике SEOsitecheckup:
Если нежелательные заголовки остались – тогда внимательно проверьте внесенные изменения, перезагрузите веб-сервер или напишите техподдержке на хостинге, они сделают это за вас (если такая опция имеется).

Выводы

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

Оценка:
( 1 оценка, среднее 5 из 5 )
Подписка на KRASHENININ.TECH

Получайте регулярные обновления на почту!


Виталий Крашенинин/ автор статьи
Основатель блога, публицист, IT-специалист. Предоставляю услуги по администрированию, техническому обслуживанию и поисковому продвижению веб-сайтов.
Понравилась статья? Поделись в соцсетях:
KRASHENININ.TECH - блог о веб-технологиях, и не только
Подписаться
Уведомление о
guest
0 Комментарий
Встроенные отзывы
Просмотреть все комментарии
0
Буду рад вашим мыслям, пожалуйста, прокомментируйте.x
()
x