Заголовок HTTP (HTTP Header) — это строка в HTTP-сообщении, содержащая разделённую двоеточием пару вида «параметр-значение». Формат заголовка соответствует общему формату заголовков текстовых сетевых сообщений ARPA (RFC 822). Как правило, браузер и веб-сервер включают в сообщения более чем по одному заголовку. Заголовки должны отправляться раньше тела сообщения и отделяться от него хотя бы одной пустой строкой (CRLF).
Название параметра должно состоять минимум из одного печатного символа (ASCII-коды от 33 до 126). После названия сразу должен следовать символ двоеточия. Значение может содержать любые символы ASCII, кроме перевода строки (CR, код 10) и возврата каретки (LF, код 13).
Пробельные символы в начале и конце значения обрезаются. Последовательность нескольких пробельных символов внутри значения может восприниматься как один пробел. Регистр символов в названии и значении не имеет значения (если иное не предусмотрено форматом поля).
Пример заголовков ответа сервера:
Server: Apache/2.2.3 (CentOS)
Last-Modified: Wed, 09 Feb 2011 17:13:15 GMT
Content-Type: text/html; charset=UTF-8
Accept-Ranges: bytes
Date: Thu, 03 Mar 2011 04:04:36 GMT
Content-Length: 2945
Age: 51
X-Cache: HIT from proxy.omgtu
Via: 1.0 proxy.omgtu (squid/3.1.8)
Connection: keep-alive
200 OK
Тело протокола HTTP
Тело HTTP сообщения (message-body), если оно присутствует, используется для передачи сущности, связанной с запросом или ответом. Тело сообщения (message-body) отличается от тела сущности(entity-body) только в том случае, когда при передаче применяется кодирование, указанное в заголовке Transfer-Encoding. В остальных случаях тело сообщения идентично телу сущности.
Заголовок Transfer-Encoding должен отправляться для указания любого кодирования передачи, примененного приложением в целях гарантирования безопасной и правильной передачи сообщения. Transfer-Encoding - это свойство сообщения, а не сущности, и оно может быть добавлено или удалено любым приложением в цепочке запросов/ответов.
Присутствие тела сообщения в запросе отмечается добавлением к заголовкам запроса поля заголовка Content-Length или Transfer-Encoding. Тело сообщения (message-body) может быть добавлено в запрос только когда метод запроса допускает тело объекта (entity-body).
Все ответы содержат тело сообщения, возможно нулевой длины, кроме ответов на запрос методом HEAD и ответов с кодами статуса 1xx (Информационные), 204 (Нет содержимого, No Content), и 304 (Не модифицирован, Not Modified).
Таблица кодов возврата HTTP
| Код возврата | Описание кода возврата HTTP |
| Продолжить (Continue) | |
| Переключение протоколов (switching protocols) | |
| OK | |
| Создан (created) | |
| Принят | |
| Неавторитеная информация (non-authoritative information) | |
| Файл пуст (no content) | |
| Сброс содержимого (reset content) | |
| Частичное содержимое (partial content) | |
| Многократный выбор (multiple choices) | |
| Перемещен постоянно (moved permanently) | |
| Перемещен временно (moved temporarily) | |
| Смотри другой (see other) | |
| Неизмененный (not modified) | |
| Использовать прокси-сервер (use proxy) | |
| Неправильный запрос (bad request) | |
| Неавторизирован (unauthorized) | |
| Payment Required | |
| Нет доступа (forbidden) | |
| Не найден | |
| Метод не разрешен (method not allowed) | |
| Неприемлемый (not acceptable) | |
| Требуется аутентификация на прокси-сервере (proxy authentication required) | |
| Превышение тайм-аута запроса (request time-out) | |
| Тредуется длина (при использовании метода POST) | |
| Не выполнено предыдущее условие (precondition failed) | |
| Объект запроса слишком велик (request entity too large) | |
| Запрашиваемый URL слишком велик (request URL too large) | |
| Неподдерживаемый тип информации (unsupported media type) | |
| Ошибка сервера (server error) | |
| Не реализован (not implemented) | |
| Неправильный шлюз (Bad Gateway) | |
| Нехватка ресурсов (out of resources) | |
| Превышен тайм-аут шлюза | |
| Неподдерживаемая весрия HTTP (HTTP version not supported) |
Чтобы на практике увидеть какие HTTP запроси передает и получает сервер, можно воспользоваться Инструментами разработчика браузера Google Chrome, для этого необходимо выбрать в «Инструменты» - «Инструменты разработчика». Перейти в открывшемся снизу окне во вкладку «Network». Обновить открытую страницу. В списке слева будут отображены посылаемые браузером HTTP-запросы. Вопрос на получение страницы будет самым первым в списке. Детальную информацию о нем можно получить выбрав его.







