Урок 10. PHP и HTTP: headers
Заголовки удваивают размер событий. Джон Голсуорси
PHP, будучи языком вебпрограммирования, поддерживает реализацию механизма
отправки заголовков HTTP.
Сначала скажем несколько слов о самих HTTP заголовках.
В соответствии со спецификацией HTTP, этот протокол поддерживает передачу
служебной информации от сервера к броузеру, оформленной в виде специальных
заголовков.
Таким образом, HTTP headers - это средство общения сервера с удаленным
клиентом. Каждый заголовок обычно состоит из одиночной линии ASCII текста с
именем и значением. Сами заголовки никак не отображаются в окне броузера, но
зачастую могут сильно изменить отображение сопутствующего документа.
Механизм отправки HTTP заголовков в PHP.
Механизм отправки заголовков в PHP представлен функцией header().
Особенность протокола HTTP заключается в том, что заголовок должен быть
отправлен до посылки других данных, поэтому функция должна быть вызвана в
самом начале документа и должна выглядеть следующим образом:
header("HTTP заголовок", необязательный параметр
replace); |
Опциональный параметр replace может принимать значения типа
bool (true или false) и указывает на то, должен ли
быть замещен предыдущий заголовок подобного типа, либо добавить данный заголовок
к уже существующему.
В отношении функции header() часто применяется функция headers_sent(),
которая в качестве результата возвращает true в случае успешной
отправки заголовка и false в обратном случае.
Рассмотрим наиболее используемые HTTP заголовки.
Cache-control.
"Cache-control: " значение
Заголовок управления кешированием страниц. Вообще, данная функция является
одной из самых распространенных в использовании заголовков.
Данный заголовок может быть использован со следующими значениями:
- no-cashe - Запрет кеширования. Используется в часто обновляемых страницах и
страницах с динамическим содержанием. Его дейсвтие подобно META тегу "Pragma:
no-cache".
- public - Разрешение кеширования страницы как локальным клиентом, так и
прокси-сервером.
- private - Разрешение кеширования только локальным клиентом.
- max-age - Разрешение использования кешированного документа в течение
заданного времени в секундах.
header("Cache-control: private, max-age = 3600") /* Кеширование
локальными клиентами и использование в течение 1 часа
*/ |
Expires.
"Expires: " HTTP-date
Устанавливает дату и время, после которого документ считается устаревшим.
Дата должна указываться в следующем формате (на английском языке):
День недели (сокр.) число (2 цифры) Месяц (сокр.) год часы:минуты:секунды
GMT
Например, Fri, 09 Jan 2002 12:00:00 GMT
Текущее время в этом формате возвращает функция gmdate() в следующем
виде:
echo gmdate("D, d M Y H:i:s")."GMT"; |
Возможно использование данного HTTP заголовка для запрета кеширования. Для
этого необходимо указать прошедшую дату.
Last-Modified.
"Last-Modified: " HTTP-date
Указывает дату последнего изменения документа. Дата должна задаваться в том
же формате, что и в случае с заголовком Expires. Данный заголовок можно
не использовать для динамических страниц, так как многие серверы (например,
Apache) для таких страниц сами выставляют дату модификации.
Возможно сделать страницу всегда обновленной:
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."
GMT"); |
Location.
"Location :" абсолютный URL
Полезный заголовок, который перенаправляет броузер на указанный адрес. Его
действие сравнимо с META тегом Refresh:
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=someURL">
Например, этот заголовок может быть использован так:
if ($login != $admin_login) header("Location:
http://www.server.com/login.php"); else header("Location:
http://www.server.com/admin.php?login=$login");
if (!headers_sent())
exit("Произошла ошибка! Пройдите <a
href='http://www.server.com/login.php'>авторизацию</a>
заново"); |
Мы разобрали конечно же не все HTTP заголовки (на это нам несколько уроков не
хватит), но рассмотрели наиболее полезные и самые используемые. Полный список
HTTP заголовков вы можете посмотреть здесь.
|