Привет, читатель блога ZametkiNaPolyah.ru! Продолжим знакомиться с протоколом HTTP в рубрике серверы и протоколы и ее разделе HTTP протокол. Своими ручонками мы с тобой добрались до HTTP объекта и его тела. Как всегда, буду стараться писать просто и доступно о, на первый взгляд, сложном и непонятном. Давай посмотрим, что ты узнаешь про HTTP Entity из данной статьи: ты разберешь со структурой HTTP объекта (HTTP entity), узнаешь какие поля заголовков есть у HTTP объектов, посмотришь на тело HTTP объекта и в каком виде это тело можно передавать.

Структура HTTP объекта

Если вы хотите узнать всё про протокол HTTP, обратитесь к навигации по рубрике HTTP протокол. HTTP сообщения могут содержать в себе объекты (HTTP Entity). Не важно какое это сообщение: будь то HTTP запрос или HTTP ответ. Объекты (HTTP Entity) могут передаваться вместе с сообщением в том случае, если иное не установлено методом HTTP запроса или кодом состояния HTTP сервера. Структура объекта (HTTP Entity) очень проста:

Ровно из двух элементов состоит HTTP объект. Я уже говорил, что объект может посылать и клиент, и сервер, поэтому все, что я напишу дальше будет справедливо и для того, и для другого. Давайте рассмотрим более подробно структуру объекта (HTTP Entity).

Поля заголовка HTTP объекта. HTTP entity-headers

Поля заголовка 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-body, если оно присутствует в сообщении, имеет свой собственный формат и способ кодирования (кодирование в HTTP), всё это определяется полями заголовка HTTP entity-header.

[php] entity-body    = *OCTET [/php]

Тело объекта (HTTP entity-body) присутствует в сообщении только тогда, когда присутствует тело сообщения. Тело объекта (HTTP entity-body) получается из тела сообщения путем декодирования передачи. Важным условием является то, что применяемое кодирование должно гарантировать безопасную и правильную передачу тела сообщения, здесь не стоит понимать слово безопасную, как защищенную передачу, так безопасность в HTTP практически не предусмотрена.

Тип данных тела объекта (HTTP entity)

Тип данных тела объекта определяется заголовками 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)

Длина тела объекта (Length HTTP entity) – складывается из длины тела сообщения после полного декодирования передачи и измеряется в байтах (читай про единицы измерения в HTTP).

Примеры объекта (HTTP entity)

Примеры мы видели, когда разбирали HTTP запросы и ответы. В общем случае это HTML документ. А в частности – это смешнявочки из вконтакте, видео с котиками на Ютубе, страница этого сайта и, пожалуй, всё, что вы можете открыть браузером в интернете. Кстати, вы обратили внимание на то, что для объекта есть очень много параметров HTTP?

Возможно, эти записи вам покажутся интересными


Выберете удобный для себя способ, чтобы оставить комментарий

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Loading Disqus Comments ...