RFC: 2068
Оригинал: Hypertext Transfer Protocol - HTTP/1.1
Другие версии: RFC 2616
Категория: Предложенный стандарт
Дата публикации:
Авторы: , , , ,
Перевод: Алексей Симонов

3.6. Кодирование передачи (Transfer Codings)

Значения кодирования передачи используются для указания преобразования кодирования, которое было или должно быть применено к телу объекта (entity-body) в целях гарантирования "безопасной передачи" по сети. Оно отличается от кодирования содержимого тем, что кодирование передачи — это свойство сообщения, а не первоначального объекта.

transfer-coding         = "chunked" | transfer-extension

transfer-extension      = token

Все значения кодирования передачи (transfer-coding) не чувствительны к регистру. HTTP/1.1 использует значения кодирования передачи (transfer-coding) в поле заголовка Transfer-Encoding (раздел 14.40).

Кодирования передачи — это аналоги значений Content-Transfer-Encoding MIME, которые были разработаны для обеспечения безопасной передачи двоичных данных при использовании 7-битного обслуживания передачи. Однако безопасный транспорт имеет другое предназначение для чисто 8-битного протокола передачи. В HTTP единственая опасная характеристика тела сообщения вызвана сложностью определения точной длины тела сообщения (раздел 7.2.2), или желанием шифровать данные при пользовании общедоступным транспортом.

Кодирование по кускам (chunked encoding) изменяет тело сообщения для передачи его последовательностью кусков, каждый из которых имеет собственный индикатор размера, сопровождаемым опциональным завершителем, содержащим поля заголовка объекта. Это позволяет динамически создаваемому содержимому передаваться вместе с информацией, необходимой получателю для проверки полноты получения сообщения.

Chunked-Body   = *chunk
                 "0" CRLF
                 footer
                 CRLF

chunk          = chunk-size [ chunk-ext ] CRLF
                 chunk-data CRLF

hex-no-zero    = <HEX за исключением "0">

chunk-size     = hex-no-zero *HEX
chunk-ext      = *( ";" chunk-ext-name [ "=" chunk-ext-value ] )
chunk-ext-name = token
chunk-ext-val  = token | quoted-string
chunk-data     = chunk-size(OCTET)

footer         = *entity-header

Кодирование по кускам (chunked encoding) оканчивается куском нулевого размера, следующим за завершителем, оканчивающимся пустой строкой. Цель завершителя состоит в эффективном методе обеспечения информации об объекте, который сгенерирован динамически; приложения НЕ ДОЛЖНЫ посылать в завершителе поля заголовка, которые явно не предназначены для использования в завершителе, такие как Content-MD5 или будущие расширения HTTP для цифровых подписей и других возможностей.

Примерный процесс декодирования Chunked-Body представлен в приложении 19.4.6.

Все HTTP/1.1 приложения ДОЛЖНЫ быть в состоянии получать и декодировать кодирование передачи "по кускам" ("chunked" transfer coding), и ДОЛЖНЫ игнорировать расширения кодирования передачи, которые они не понимают. Серверу, который получил тело объекта со значением кодирования передачи, которое он не понимает, СЛЕДУЕТ возвратить ответ с кодом 501 (Не реализовано, Not Implemented) и разорвать соединение. Сервер НЕ ДОЛЖЕН посылать поля кодирования передачи (transfer-coding) HTTP/1.0 клиентам.

2007 - 2017 © Русские переводы RFC, IETF, ISOC.