Заголовки протокола http
Заголовок 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 |
100 |
Продолжить (Continue) |
101 |
Переключение протоколов (switching protocols) |
200 |
OK |
201 |
Создан (created) |
202 |
Принят |
203 |
Неавторитеная информация (non-authoritative information) |
204 |
Файл пуст (no content) |
205 |
Сброс содержимого (reset content) |
206 |
Частичное содержимое (partial content) |
300 |
Многократный выбор (multiple choices) |
301 |
Перемещен постоянно (moved permanently) |
302 |
Перемещен временно (moved temporarily) |
303 |
Смотри другой (see other) |
304 |
Неизмененный (not modified) |
305 |
Использовать прокси-сервер (use proxy) |
400 |
Неправильный запрос (bad request) |
401 |
Неавторизирован (unauthorized) |
402 |
Payment Required |
403 |
Нет доступа (forbidden) |
404 |
Не найден |
405 |
Метод не разрешен (method not allowed) |
406 |
Неприемлемый (not acceptable) |
407 |
Требуется аутентификация на прокси-сервере (proxy authentication required) |
408 |
Превышение тайм-аута запроса (request time-out) |
411 |
Тредуется длина (при использовании метода POST) |
412 |
Не выполнено предыдущее условие (precondition failed) |
413 |
Объект запроса слишком велик (request entity too large) |
414 |
Запрашиваемый URL слишком велик (request URL too large) |
415 |
Неподдерживаемый тип информации (unsupported media type) |
500 |
Ошибка сервера (server error) |
501 |
Не реализован (not implemented) |
502 |
Неправильный шлюз (Bad Gateway) |
503 |
Нехватка ресурсов (out of resources) |
504 |
Превышен тайм-аут шлюза |
505 |
Неподдерживаемая весрия HTTP (HTTP version not supported) |
Чтобы на практике увидеть какие HTTP запроси передает и получает сервер, можно воспользоваться Инструментами разработчика браузера Google Chrome, для этого необходимо выбрать в «Инструменты» - «Инструменты разработчика». Перейти в открывшемся снизу окне во вкладку «Network». Обновить открытую страницу. В списке слева будут отображены посылаемые браузером HTTP-запросы. Вопрос на получение страницы будет самым первым в списке. Детальную информацию о нем можно получить выбрав его.
