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

Поиск по сайту



PHP Поиск



лучшая недвижимость испания по ипотеке

HTTP - заголовки


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

Таким образом, http headers - это средство общения сервера с удаленным клиентом. Каждый заголовок обычно состоит из одиночной линии ascii текста с именем и значением. Сами заголовки никак не отображаются в окне броузера, но зачастую могут сильно изменить отображение сопутствующего документа.

Механизм отправки http заголовков в php.
Механизм отправки заголовков в php представлен функцией header(). Особенность протокола http заключается в том, что заголовок должен быть отправлен до посылки других данных, поэтому функция должна быть вызвана в самом начале документа и должна выглядеть следующим образом:

header("http заголовок"[, replace]);

Необязательный параметр replace может принимать значения (true или false) и указывает на то, должен ли быть заменен предыдущий заголовок подобного типа, либо добавить данный заголовок к уже существующему.

В отношении функции header() часто применяется функция headers_sent(), которая в качестве результата возвращает true в случае успешной отправки заголовка и false в обратном случае.

Рассмотрим наиболее используемые http заголовки.

Cache-control

"cache-control: " значение

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

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

<?php
// Кеширование локальными клиентами и использование в течение 1 часа
header("cache-control: private, max-age = 3600");
echo 
"<h1>"date("H:i:s"), "</h1>";
?>
Скопировать в буфер

<?php
// кеширования всеми серверами на 1 час
header("Cache-Control: public");
header("Expires: " date("r"time() + 3600));
echo 
"<h1>"date("H:i:s"), "</h1>";
?>
Скопировать в буфер

Совсем жесткий запрет кеширования на всех этапах:


<?php
header
("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Expires: " date("r"));
echo 
"<h1>"date("H:i:s"), "</h1>";
?>
Скопировать в буфер

Кеширование с помощью файла .htaccess

Expires

"expires: " http-date

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

День недели (сокр.) число (2 цифры) Месяц (сокр.) год часы:минуты:секунды gmt

Например, fri, 09 jan 2002 12:00:00 gmt

Текущее время в этом формате возвращает функция gmdate() в следующем виде:


<?php
echo gmdate("d, d m y h:i:s")." gmt";
?>
Скопировать в буфер

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

Last-modified

last-modified: http-date

Указывает дату последнего изменения документа. Дата должна задаваться в том же формате, что и в случае с заголовком expires. Данный заголовок можно не использовать для динамических страниц, так как многие серверы (например, apache) для таких страниц сами выставляют дату модификации.

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

Возможно сделать страницу всегда обновленной:


<?php
header
("last-modified: ".gmdate("d, d m y h:i:s")." gmt");
?>
Скопировать в буфер

Пример использования кеширования с помощью Last-modified

ETag

ETag'и (Entity Tags - тэги сущностей) - механизм, который используют браузеры и веб-сервера, чтобы определить, является ли объект, находящийся в кэше браузера таким же, как соответствующий объект на сервере (а Entity (сущность) - другое название того, что мы называем компонентами: картинки, скрипты и т.д.). Тэги сущностей были задуманы как механизм для определения актуальности сущности в кэше браузера, что является более гибким подходом, нежели проверка по дате последнего изменения (last-modified). ETag - это строка, которая однозначно идентифицирует конкретную версию компонента. Единственное требование: строка должна быть заключена в двойные кавычки. Сервер указывает ETag для компонента используя HTTP-заголовок ETag:
HTTP/1.1 200 OK
Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT
ETag: "10c24bc-4ab-457e1c1f"
Content-Length: 12195

Позднее, если браузер хочет определить актуальность компонента, он передает заголовок If-None-Match для передачи ETag'а обратно на сервер. Если ETag'и совпадают, ответ от сервера приходит со статус-кодом 304, уменьшая таким образом объем передачи на 12195 байт:

GET /i/yahoo.gif HTTP/1.1
Host: us.yimg.com
If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT
If-None-Match: "10c24bc-4ab-457e1c1f"
HTTP/1.1 304 Not Modified

Включить ETag для Apache можно, например, следующей директивой:

FileETag MTime Size
Открючить ETag для Apache:
FileETag none

Location

"location :" абсолютный url

Полезный заголовок, который перенаправляет броузер на указанный адрес. Его действие сравнимо с meta тегом refresh:


<?php
header
("location: http://htmlweb.ru");
?>
Скопировать в буфер

Например, этот заголовок может быть использован так:


<?php
if ($login != $admin_loginheader("location: http://www.server.com/login.php");
else 
header("location: http://www.server.com/admin.php?login=$login");
if (!
headers_sent()) exit("Произошла ошибка! Пройдите авторизацию заново"); 
?>
Скопировать в буфер

Content-type

Content-type : MIME тип возвращаемого документа

<?php
header
("Content-type: text/html");
?>
Скопировать в буфер

Content-length

Content-length : размер возвращаемого документа

Status

Status : MIME тип возвращаемого документа Эта директива используется для задания серверу HTTP/1.0 строки-статус, которая будет послана клиенту. Формат: nnn xxxxx, где nnn - 3-х цифровой статус-код, и xxxxx строка причины, например: "Forbidden" (Запрещено). Http-коды статусов.

<?php
header
("http/1.0 200 Ok");
?>
Скопировать в буфер

Content-Encoding

Content-Encoding : gzip Способность принимать сжатое содержимое клиент отправляет серверу с помощью заголовка Accept-Encoding: gzip. Обычно сервер указывает Accept-Encoding: gzip,deflate.

Range

Задать диаппазон скачиваемой информации

<?php
header
("Range: bytes=1024-");
?>
Скопировать в буфер

Разрешить кросс-доменные запросы


<?php
header
('Access-Control-Allow-Origin: *');
header('Access-Control-Max-Age: 600'); // время в секундах кеширования разрешения
?>
Скопировать в буфер
Подробнее см. http://www.w3.org/TR/cors/#access-control-allow-origin-response-hea
Пример использования gzip-сжатия

Популярное:


Содержание:


Новое за неделю



Сейчас на сайте: 345