- Chunked transfer encoding
-
Chunked transfer encoding - механизм передачи данных в протоколе передачи гипертекста (HTTP), позволяющий надёжно доставлять данные от сервера клиенту (чаще всего клиентскому web-браузеру) без необходимости заранее знать точный размер всего тела HTTP сообщения. Это достигается разбиением сообщения на небольшие части (chunks), а затем передачей каждой части с указанием только её размера (в формате HEX). Окончание передачи сообщения определяется наличием последней части с нулевой длиной. Такой механизм позволяет передать динамически сформированные объекты, для которых нельзя заранее определить размер. Он стал доступен только начиная с HTTP версии 1.1 (HTTP/1.1).
Без механизма сhunked transfer encoding с каждым HTTP пакетом необходимо указывать заголовок Content-length, чтобы клиент мог найти конец передаваемого сообщения.
Формат
Для отделения записей размеров блоков (частей) от их содержаний используется разделитель CRLF (как строка: "\r\n"; как байты в формате HEX: 0x0D, 0x0A ). Длина блока - это размер содержания блока, разделители CRLF не учитываются.
Схематическое представление: <длина блока в HEX><CRLF><содержание блока><CRLF>
Последний блок строится по той же схеме, потому имеет следующий вид по причине отсутствия содержания: 0<CRLF><CRLF>
Пример
HTTP/1.1 200 OK Server: nginx/1.0.4 Date: Thu, 06 Oct 2011 16:14:01 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/5.3.6 23 This is the data in the first chunk 1A and this is the second one 3 con 8 sequence 0
Категория:- Протокол HTTP
Wikimedia Foundation. 2010.