Заголовок ответа Location используется браузером для направления запроса в другое место. Это так называемая переадресация запроса. Другими словами, выражаясь жаргонным языком, заголовок Location реализует внешний редирект. При получении этого заголовка браузер автоматически и незамедлительно совершает переадресацию.
Заголовок появился в протоколе HTTP/1.0 и не претерпел никаких изменений в протоколе HTTP/1.1

Заголовок Location имеет следующий синтаксис:

HTTP
Location: http://www.fоо.com/level1/script.php?p=1&foo;#anchor
Следует особо отметить, что адрес обязательно должен быть абсолютным: предваряться схемой протокола, как правило http://, и содержать имя домена, даже если переадресация происходит на тот же сервер.
Внешний редирект характерен тем, что он явным образом вместо запрашиваемого ресурса предлагает другой ресурс с другим адресом. В отличие от внутреннего редиректа, который, впрочем, не имеет отношения к протоколу HTTP.

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

Ресурс, на который произошла переадресация, в свою очередь тоже может переадресовать запрос. В ходе таких последовательных переадресаций может возникнуть замкнутый круг. Для предотвращения этой возможности браузер ограничивает количество переадресаций. Так, например, браузер FireFox обрабатывает 10 циклов, после чего сообщает о возможном зацикливании. Браузер Internet Explorer просто сообщает, что не может отобразить страницу.

Применение PHP

У PHP-функции header(), служащей для добавления заголовков в ответ, существует особое поведение при добавлении заголовка Location. Помимо добавления этого заголовка функция изменяет строку состояния на HTTP/1.x 302 Found . Но если вам необходимо установить другой код состояния, например 307 Temporary Redirect, то вы можете воспользоваться одним из двух способов. Самый очевидный - это дополнительный вызов функции header(), в котором изменяется строка состояния. Не важно, будет это сделано до добавления заголовка Location, или после - изменения будут сохранены и отправлены клиенту. Но если в момент добавления заголовка вам уже известно, какой код состояния следует установить, существует более изящный способ с использованием третьего аргумента int http_response_code. Заголовок Location с кодом состояния 307 можно добавить одной строкой следующим образом:
PHP
header( 'Location: /redirect.php', 1, 307 );
Подробное описание функции header() можно прочесть на нашем сайте в статье Работа с HTTP-заголовками в PHP.

Читайте также:

  1. решение задач: Работа с HTTP-заголовками в PHP :: PHP, Apache
  2. коды состояния: 3xx - класс ответов переадресации :: кэш, Internet Explorer, Opera, FireFox, согласование содержимого