Экономия трафика благодаря HEAD

Уменьшим трафик и упростим ответы от сервера благодаря методу HEAD, который запрашивает только информацию о файле и ресурсе.

Метод HEAD аналогичен методу GET, за исключением того, что сервер ничего не посылает в информационной части ответа. Метод HEAD запрашивает только информацию о файле и ресурсе, т.е. ничего кроме заголовков не возвращает. Этот метод используется, когда клиент хочет найти информацию о документе, не получая его. Удобно, когда нужно узнать размер файла, существует ли файл, когда последний раз изменялся файл. Позволяет сэкономить много времени и трафика.

Состав заголовка запроса HEAD должен быть такой же, как в запросе GET.

Пример метода HEAD

<?php
// открываем сокет
$fp = fsockopen('yapro.ru', 80, $errno, $errstr, 5);
if (!$fp) {
echo $errno; // ошибка подключения
}
else {
// формируем http-заголовки к серверу
$request = "HEAD /download/file.txt HTTP/1.0\r\n";
$request .= "Host: yapro.ru\r\n";
$request .= "User-Agent: Mozilla/2.0\r\n";
$request .= "Connection: close\r\n\r\n";
 
// отсылаем запрос серверу
fputs($fp, $request);
 
// получем ответ от сервера
$content = '';
while(!feof($fp) ){
$content .= fgets($fp);
}
echo $content;
fclose($fp);
}
?>

Как мы видим, содержимое файла в ответ на запрос HEAD не передается. Приходят только заголовки

HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Sat, 24 Apr 2010 14:19:41 GMT
Content-Type: text/plain; charset=UTF-8
Connection: close
Last-Modified: Sat, 24 Apr 2010 13:19:02 GMT
ETag: "43ace4b-b-4bd2efc6"
Accept-Ranges: bytes
Content-Length: 11

Теперь заменим в исходном коде метод HEAD на метод GET

<?php
// открываем сокет
$fp = fsockopen('yapro.ru', 80, $errno, $errstr, 5);
if (!$fp) {
echo $errno; // ошибка подключения
}
else {
// формируем http-заголовки к серверу
$request = "GET /download/file.txt HTTP/1.0\r\n";
$request .= "Host: yapro.ru\r\n";
$request .= "User-Agent: Mozilla/2.0\r\n";
$request .= "Connection: close\r\n\r\n";
 
// отсылаем запрос серверу
fputs($fp, $request);
 
// получем ответ от сервера
$content = '';
while(!feof($fp) ){
$content .= fgets($fp);
}
echo $content;
fclose($fp);
}
?>

Ответ аналогичен, но теперь сервер отправил еще содержимое файла:

HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Sat, 24 Apr 2010 15:04:36 GMT
Content-Type: text/plain; charset=UTF-8
Connection: close
Last-Modified: Sat, 24 Apr 2010 13:19:02 GMT
ETag: "43ace4b-b-4bd2efc6"
Accept-Ranges: bytes
Content-Length: 11
 
bla-bla-bla

Размер файлика всего 11 байт. Представим, что в файл весит 11 Мб и запрашивается каждую секунду (например, последние обновления продуктов компании). Если внешнее приложение будет запрашивать данный файл напрямую каждую секунду, то трафик будет расти как на дрожжах.

Кстати, подобная схема используется у нас на работе, за тем исключением, что рядом с большим xml-файлом лежит маленький файлик в несколько байт, в котором хранится md5–хэш от большого файла. Таким образом, сделав сначала GET-запрос к маленькому файлу с md-хэшем, мы узнаем нужно ли нам делать запрос к основному файлу. md5-хэш хранится у нас в кэше для того чтобы сравнить его с содержимым md5-файлика на удаленном сервере. В данном примере не используется метод HEAD, но принцип экономии ресурсов и трафика аналогичен методу HEAD.

Источник: ekimoff.ru

Оцени публикацию:
  • 3,11
Оценили человек: 3
  •  

Похожие статьи:



Предложения и пожелания:
Ваше имя: Ваш E-mail:
Введите изображенные цифры:
Captcha

HTML (19)

CSS (36)

PHP (21)

MySQL (14)

JavaScript (57)

Flash (6)

XML (3)

Apache (34)

Дизайн (35)

Продвижение (30)

Программы (25)

Unix (11)

Интересное (37)


Справочники и учебники:


Последние комменты:

Новые заметки:

Защита сервера от ошибок в phpMyAdmin

HTML5 - новые виды атак

Социальные рекомендации Twitter в Google

Ашманов про стартапы

Skype Distributed Database Architecture

Erlang - лекарство при высоких нагрузках

Amazon Web Services: инструменты обеспечения масштабируемости и отказоустойчивости

Обсуждения на форуме:

Новый раздел

Шаблонизация

YaPro - Полная сборка системы

Дубли файлов, эскизы изображений, редактирование шаблонов

Общая регистрация в CMS и phpBB3

Помощь в разработке шаблона

Идея модуля музыкальной системы

Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter| Здравствуйте, Гость | Войти | Регистрация| Карта сайта | RSS ленты
О проекте | Скачать CMS | Видеоуроки | Документация | Плагины | Форум | Идеи | Новости | Веб-мастеру | Контакты

YaPro CMS в Живом Журнале

YaPro CMS в Твитере

YaPro CMS в Одноклассниках

YaPro CMS в Яндекс.Блогах


youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2012 YaPro.Ru


Главная » Веб-мастеру » PHP »