Тема 11: Аутентификация в HTTP. Проверка подлинности пользователей в HTTP
Привет, читатель блога ZametkiNaPolyah.ru! Продолжим знакомиться с протоколом HTTP в рубрике Серверы и протоколы и ее разделе…
Привет, читатель блога ZametkiNaPolyah.ru! Продолжим знакомиться с протоколом HTTP в рубрике серверы и протоколы и ее разделе HTTP протокол. Своими ручонками мы с тобой добрались до HTTP объекта и его тела. Как всегда, буду стараться писать просто и доступно о, на первый взгляд, сложном и непонятном. Давай посмотрим, что ты узнаешь про HTTP Entity из данной статьи: ты разберешь со структурой HTTP объекта (HTTP entity), узнаешь какие поля заголовков есть у HTTP объектов, посмотришь на тело HTTP объекта и в каком виде это тело можно передавать.
Содержание статьи:
Если вы хотите узнать всё про протокол HTTP, обратитесь к навигации по рубрике HTTP протокол. HTTP сообщения могут содержать в себе объекты (HTTP Entity). Не важно какое это сообщение: будь то HTTP запрос или HTTP ответ. Объекты (HTTP Entity) могут передаваться вместе с сообщением в том случае, если иное не установлено методом HTTP запроса или кодом состояния HTTP сервера. Структура объекта (HTTP Entity) очень проста:
Ровно из двух элементов состоит HTTP объект. Я уже говорил, что объект может посылать и клиент, и сервер, поэтому все, что я напишу дальше будет справедливо и для того, и для другого. Давайте рассмотрим более подробно структуру объекта (HTTP Entity).
Поля заголовка HTTP объекта или HTTP Entity-headers содержат в себе необязательную служебную информацию о теле объекта, если тела нет, то в заголовках объекта находится служебная информация о ресурсе, идентифицируемом при помощи URI (читай URI в HTTP):
[php]
entity-header = Allow
| Content-Base
| Content-Encoding
| Content-Language
| Content-Length
| Content-Location
| Content-MD5
| Content-Range
| Content-Type
| ETag
| Expires
| Last-Modified
| extension-header
extension-header = message-header
[/php]
Если вы решили написать свой собственный HTTP клиент или свой собственный сервер, то вы легко можете расширить набор полей заголовка HTTP entity-headers, HTTP стандарт этого не запрещает, по крайней мере HTTP версии 1.1. Другое дело, что другие приложения будут игнорировать ваши поля заголовка HTTP entity-headers, если не смогут их распознать. Вообще, HTTP протокол строгая, но гибкая штука.
Тело HTTP объекта или HTTP entity-body, если оно присутствует в сообщении, имеет свой собственный формат и способ кодирования (кодирование в HTTP), всё это определяется полями заголовка HTTP entity-header.
[php] entity-body = *OCTET [/php]
Тело объекта (HTTP entity-body) присутствует в сообщении только тогда, когда присутствует тело сообщения. Тело объекта (HTTP entity-body) получается из тела сообщения путем декодирования передачи. Важным условием является то, что применяемое кодирование должно гарантировать безопасную и правильную передачу тела сообщения, здесь не стоит понимать слово безопасную, как защищенную передачу, так безопасность в HTTP практически не предусмотрена.
Тип данных тела объекта определяется заголовками Content-Type и Content-Encoding, которые создают двухуровневую модель кодирования тела объекта:
[php] entity-body := Content-Encoding ( Content-Type ( data ) ) [/php]
Тип содержимого (Content-Type) определяет медиа тип данных. Кодирование содержимого (Content-Encoding) обычно применяется для дополнительного кодирования с целью сжатия тела объекта (HTTP entity).
Требования HTTP нам говорят о том, что в сообщения, содержащие тело объекта (HTTP entity), следует включать поле заголовка Content-Type, если медиа тип не указан, клиент может попробовать подобрать его сам, проанализировав URL.
Длина тела объекта (Length HTTP entity) – складывается из длины тела сообщения после полного декодирования передачи и измеряется в байтах (читай про единицы измерения в HTTP).
Примеры мы видели, когда разбирали HTTP запросы и ответы. В общем случае это HTML документ. А в частности – это смешнявочки из вконтакте, видео с котиками на Ютубе, страница этого сайта и, пожалуй, всё, что вы можете открыть браузером в интернете. Кстати, вы обратили внимание на то, что для объекта есть очень много параметров HTTP?
Выберете удобный для себя способ, чтобы оставить комментарий