Оглавление

24. Заголовки HTTP

Заголовки HTTP  предназначены  для  передачи  некоторых  дополнительных сведений, например, при  запросе файла Web-браузером дополнительно указываются предпочитаемые MIME-типы, поддерживаемые языки и кодировки,  информация о самом Web-браузере и т. д. Сервер в свою очередь при выдаче файла указывает MIME-тип файла, дату последней модификации файла, сведения о кодировке, языке и т. д.
Как вы уже знаете, данные формы могут быть отправлены либо методом GET либо методом POST. При методе GET данные формы пересылаются путем их добавления к URL-адресу после  знака "?". При методе POST данные передаются после всех HTTP-заголовков. Рассмотрим диалог Web-браузера и Web-сервера более подробно.
Предположим, есть форма:


<form action="test.php" method="GET">
<input type="text" name="text1"> 
<input type="submit" value="Отправить"> 
</form>

 

 

При заполнении текстового поля и нажатии кнопки Отправить Web-браузер посылает следующий запрос:
GET /test.php?text1=Tekst+v+pole HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, 
        application/vnd.ms-excel, application/msword, * / *
Referer: http://localhost/test.php
Accept-Language: ru-RU,ru;q=0.5
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
Host: localhost
Connection: Keep-Alive

 

Обратите внимание на первую строку запроса. В ней первое слово обозначает метод  передачи  данных. В  нашем  случае  это метод GET. Далее  указывается строка запроса:
/test.php?text1=Tekst+v+pole
Здесь указывается путь от корня сайта к файлу-обработчику (test.php). После знака вопроса передается имя поля и его значение (text1=Tekst+v+pole). За строкой  запроса  указывается название протокола (HTTP/1.1). Доменное имя Web-сайта передается в заголовке Host без указания протокола.
Кроме  того,  в  запросе  дополнительно  указываются предпочитаемые MIME-типы (заголовок  Accept),  поддерживаемые  языки (заголовок  Accept-Language),  методы  сжатия (заголовок  Accept-Encoding),  информация  о  самом Web-браузере (заголовок User-Agent) и т. д.

 
Если изменить метод передачи с GET на POST, то запрос будет другим:
POST /test.php HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, 
        application/vnd.ms-excel, application/msword, * / *
Referer: http://localhost/test.php
Accept-Language: ru-RU,ru;q=0.5
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

Host: localhost

Content-Length: 18
Connection: Keep-Alive
Cache-Control: no-cache
 
text1=Tekst+v+pole

 

В  первой  строке  указывается  метод  передачи (POST),  путь  к  файлу-обработчику (test.php)  от  корня  сервера  и  название  протокола (HTTP/1.1).
Сами данные формы передаются после всех заголовков. Обратите внимание: данные  формы  от  заголовков  отделяет  пустая  строка.  Длина  переданных данных указывается в заголовке Content-Length.
На этот запрос Web-сервер посылает следующий ответ:
HTTP/1.1 200 OK
Date: Wed, 04 Feb 2009 22:05:15 GMT
Server: Apache/2.2.11 (Win32) PHP/5.2.9
X-Powered-By: PHP/5.2.9
Content-Length: 134
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
Content-Language: ru

 

В первой строке ответа сервера указывается название протокола (HTTP/1.1), а затем статус ответа (200) и его текстовое описание (OK). Статус 200 указывает, что запрос был успешно обработан. Перечислим основные коды статуса:

□ 200 — запрос успешно обработан;
□ 301 и 302 — перенаправление на другую страницу;
□ 304 — с момента последнего запроса файл не изменялся;
□ 401 — пользователь неавторизован;
□ 403 —  нет  доступа. При  отсутствии  индексного  файла  в  каталоге  и  отключенной опции Indexes директивы Options генерируется именно этот код;
□ 404 — ресурс не найден;
□ 500 — внутренняя ошибка сервера.

 

В  заголовке Content-Type  указываются MIME-тип (text/html) и кодировка передаваемых данных (utf-8). С помощью заголовка Content-Length указывается длина передаваемых данных. Сами данные передаются после всех заголовков. Данные от заголовков отделяет пустая строка.
Чтобы увидеть диалог Web-браузера с сервером, можно, например, воспользоваться модулем Firebug для Firefox. Для этого на вкладке Сеть следует щелкнуть мышью на строке запроса. Результат можно увидеть
на рис. 1.

 

Просмотр заголовков в модуле Firebug

Рис. 1. Просмотр заголовков в модуле Firebug

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити