Заголовок 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-запросы. Вопрос на получение страницы будет самым первым в списке. Детальную информацию о нем можно получить выбрав его.
|
|