Экономия трафика благодаря 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

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

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

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


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

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

Про что мы забываем когда делаем оценку задачи по времени

Список вопросов для собеседования разработчика по телефону

Symfony2 авторизация без Doctrine2 для чайника

Phpstorm7 LiveEdit

Жесткий хабр или не хабр, тогда кто?

Яндекс.Деньги мошенничество

Как узнать какие страницы в поиске яндекса или это секрет

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

Yapro CMS:

Здравствуйте, Гость | Войти | Регистрация | Карта сайта | RSS ленты | Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter

youtube.com/watch?v=7hFivbgIEqk

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

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