Правильные HTTP заголовки. Готовим почву для SEO на этапе разработки!

КодингSEO2015-01-10 11:02:00

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

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

Отправляем HTTP заголовки

Для отправки заголовков в php используется функция header(). Необходимо осуществлять отправку заголовков до посылки других данных, в связи с чем, функция header() должна вызываться в самом начале документа.

header('HTTP заголовок', [replace])

Параметр replace может принимать значения - true и false. Он определяет, должен ли предыдущий заголовок подобного типа быть заменен, или добавлен к существующему. Для определения статуса отправки заголовка используется функция headers_sent(), возвращающая true, в случае успешной отправки, и false, в обратном случае.

Заголовок Cache-control

Выполняет управление кэшированием страниц. Возможны следующие значения:
no-cache: Запрет кеширования. Используется в часто обновляемых страницах с динамическим контентом;
public: Разрешение кеширования страницы как локальным клиентом, так и прокси-сервером
private: Разрешение кеширования только локальным клиентом
max-age: Разрешение использования кешированного документа в течение заданного времени в секундах
no-store: Cтраница содержит приватные данные, сохранять в кэше нельзя

# кеширование локальными клиентами и использование в течение 1 часа header("cache-control: private, max-age = 3600"); # кеширования всеми серверами на 1 час header("Cache-Control: public"); header("Expires: " . date("r", time() + 3600)); # жесткий запрет кеширования на всех этапах header("Cache-Control: no-store, no-cache, must-revalidate"); header("Expires: " . date("r"));

Заголовок Expires

Устанавливает дату и время, после которого документ считается устаревшим. Указывается в следующем формате:
День недели (сокр.) число (2 цифры) Месяц (сокр.) год часы:минуты:секунды gmt
Например:
fri, 09 jan 2002 12:00:00 gmt
Текущее время в таком формате возвращает функция gmdate() в следующем виде:

echo gmdate("d, d m y h:i:s")." gmt";

Возможно использование данного http заголовка для запрета кеширования. Для этого необходимо указать прошедшую дату. Иногда можно встретить и такую комбинацию Expires: now

Заголовок Last-modified

Указывает дату последнего изменения документа. Дата должна задаваться в том же формате, что и в случае с заголовком expires. Данный заголовок можно не использовать для динамических страниц, так как многие серверы (например, apache) для таких страниц сами выставляют дату модификации. При запросе это значение передаётся клиентом в специальном заголовке запроса: If-Modified-Since. Обработчик запроса может проверить, изменился ли объект, и если нет - вернуть ответ с пустым телом и кодом ответа 304 Not Modified. Само содержимое страницы не передаётся, и клиент будет использовать то содержимое, которое хранится у него в кэше. Возможно сделать страницу всегда обновленной:

header("Last-modified: ".gmdate("d, d m y h:i:s")." gmt");

Заголовок Location

Заголовок позволяет перенаправить браузер на другой url

header("location: http://piploid.ru");

Заголовок Content-type

Заголовок передает MIME тип возвращаемого документа

header("Content-type: text/html");

Заголовок Content-length

Передает размер документа возвращаемого сервером

Заголовок Status

Передает серверу статус документа.

header("http/1.0 200 Ok");

Возможны следующие коды статусов:
100 "Continue": Начальная часть запроса принята, и клиент может продолжать передачу запроса.
101 "Switching Protocols": Сервер выполняет требование клиента и переключает протоколы в соответствии с указанием, данным в поле заголовка Upgrade.
200 "OK": Запрос клиента обработан успешно, и ответ сервера содержит затребованные данные.
201 "Created": Этот код состояния используется в случае создания нового URI. Вместе с этим кодом результата сервер выдает заголовок Location (см. главу 19), который содержит информацию о том, куда были помещены новые данные.
202 "Accepted": Запрос принят, но обрабатывается не сразу. В теле содержимого ответа сервера может быть дана дополнительная информация о данной транзакции. Гарантии того, что сервер в конечном итоге удовлетворит запрос, нет, даже несмотря на то, что на момент приема запрос выглядел допустимым.
203 "Non-Authoritative Information": Информация в заголовке содержимого взята из локальной копии или у третьей стороны, а не с исходного сервера.
204 "No Content": Ответ содержит код состояния и заголовок, но тело содержимого отсутствует. При получении этого ответа броузер не должен обновлять свой документ. Обработчик чувствительных областей изображений может возвращать этот код, когда пользователь щелкает на бесполезных или пустых участках изображения.
205 "Reset Content": Браузер должен очистить форму, используемую в данной транзакции, для дополнительных входных данных. Полезен для CGI-приложений, требующих ввода данных.
206 "Partial Content": Сервер возвращает лишь часть данных затребованного объема. Используется в ответе на запрос с указанием заголовка Range. Сервер должен указать диапазон, включенный в ответ, в заголовке Content-Range.
300 "Multiple Choices": Затребованный URI обозначает более одного ресурса. Например, URI может обозначать документ, переведенный на несколько языков. В теле содержимого, возвращенном сервером, может находиться перечень более конкретных данных о том, как выбрать ресурс правильно.
301 "Moved Permanently": Затребованный URI уже не используется сервером, и указанная в запросе операция не выполнена. Новое местонахождение затребованного документа указывается в заголовке Location. Во всех последующих запросах данного документа следует указывать новый URI. При запросах не методом HEAD сервер должен передать в теле сообщения гипертекстовое пояснение. При использовании всех методов, кроме GET и POST, предварительно следует уведомить пользователя об изменении ссылки. Не стоить забывать, что некоторые агенты ошибочно меняют метод POST на GET после перехода на другой адрес.
302 "Moved Temporarily": Затребованный URI перемешен, но лишь временно. Заголовок Location указывает на новое местонахождение. Сразу же после получения этого кода состояния клиент должен разрешить запрос при помощи нового URI, но во всех последующих запросах необходимо пользоваться старым URI. При всех методах кроме HEAD сервер должен передать в теле гипертекстовое пояснение. При использовании всех отличных от GET и POST методов предварительно следует уведомить пользователя об изменении URI. При обращении к следующему ресурсу метод POST на GET менять следует как это делают некоторые агенты.
303 "See Other": Затребованный URI можно найти по другому URI (указанному в заголовке Location). Его следует выбрать методом GET по данному ресурсу.
304 "Not Modified": Это код ответа на заголовок lf-Modified-Since, если URI не изменялся с указанной даты. Тело содержимого не посылается, и клиент должен использовать свою локальную копию.
305 "Use Proxy": Доступ к затребованному URI должен осуществляться через proxy-сервер, указанный в заголовке Location.
306 "(Unused)": не используется
307 "Temporary Redirect": Запрос клиента является неполным (Client Error 4xx)
400 "Bad Request": Означает, что сервер обнаружил в запросе клиента синтаксическую ошибку.
401 "Unauthorized": Этот код результата, передаваемый с заголовком WWW-Authenticate, показывает, что пославший запрос пользователь не имеет необходимых полномочий и что при повторении запроса с указанием данного URI пользователь должен такие полномочия предоставить.
402 "Payment Required": Этот код в HTTP еще не реализован.
403 "Forbidden": Запрос отклонен по той причине, что сервер не хочет (или не имеет возможности) ответить клиенту.
404 "Not Found": Документ по указанному URI не существует.
405 "Method Not Allowed": метод не поддерживается. Этот код выдается с заголовком Allow и показывает, что метод, используе- мый клиентом, для данного URI не поддерживается.
406 "Not Acceptable": Ресурс, указанный клиентом по данному URI, существует, но не в том формате, который нужен клиенту. Вместе с этим кодом сервер выдает заголовки Content-Language, Content-Encoding и Content-Type.
407 "Proxy Authentication Required": Прокси-сервер затребовал авторизацию. Proxy-сервер должен санкционировать запрос перед тем, как пересылать его. Используется с заголовком Proxy-Authenticate.
408 "Request Time-out": Этот код ответа означает, что клиент не передал полный запрос в течение некоторого установленного промежутка времени (который обычно задается в конфигурации сервера) и сервер разрывает сетевое соединение.
409 "Conflict": Данный запрос конфликтует с другим запросом или с конфигурацией сервера. Информацию о конфликте следует возвратить в информационной части ответа.
410 "Gone": Данный код показывает, что затребованный URI больше не существует и навсегда удален с сервера.
411 "Length Required": Сервер не примет запрос без указанного в нем заголовка Content-Length.
412 "Precondition Failed": Результат вычисления условия, заданного в запросе одним или несколькими заголовками if. . ., представляет собой "ложь".
413 "Request Entity Too Large": Сервер не будет обрабатывать запрос, потому что его тело слишком велико.
414 "Request-URI Too Long": запрос слишком длинный. Сервер не будет обрабатывать запрос, потому что его URI слишком длинный.
415 "Unsupported Media Type": Сервер не будет обрабатывать запрос, потому что его тело имеет неподдерживаемый формат.
416 "Requested Range Not Satisfiable": Запрашиваемый диапазон не допустим
417 "Expectation Failed": Ожидание не удалось
500 "Internal Server Error": При обработке запроса на сервере один из его компонентов выдал аварийный отказ или столкнулся с ошибкой конфигурации. Часто бывает связанно с ошибками в файле .htaccess
501 "Not Implemented": Клиент запросил выполнение действия, которое сервер выполнить не может.
502 "Bad Gateway": Сервер (или proxy-сервер) получил недопустимые ответы другого сервера (или proxy-сервера).
503 "Service Unavailable": Данный код означает, что данная служба временно недоступна, но в будущем доступ к ней будет восстановлен. Если сервер знает, когда это произойдет, может быть также выдан заголовок Retry-After.
504 "Gateway Time-out": Этот ответ похож на 408 (Request Time-out), за исключением того, что шлюз или уполномоченный сервер превысил лимит времени.
505 "HTTP Version not supported": Сервер не поддерживает версию протокола HTTP, использованную в запросе.

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