Spec-Zone.ru › HTTP

Кодировка передачи

Кодировка передачи

Заголовок Transfer-Encoding указывает форму кодирования, используемую для безопасной передачи тела полезной нагрузки тела полезной нагрузки пользователю.

Примечание: HTTP/2 запрещает все использования заголовка Transfer-Encoding, кроме специфичных для HTTP/2: "trailers". HTTP 2 предоставляет собственные более эффективные механизмы потоковой передачи данных, чем чанкинг, и запрещает использование данного заголовка. Использование этого заголовка в HTTP/2 может привести к специфической protocol error ошибке, так как HTTP/2 Протокол запрещает его использование.

Transfer-Encoding является заголовком hop-by-hop, который применяется к сообщению между двумя узлами, а не к самому ресурсу. Каждый сегмент многоузловой связи может использовать разные значения Transfer-Encoding. Если вы хотите сжать данные по всей связи, используйте заголовок end-to-end Content-Encoding вместо этого.

При наличии в ответе на запрос HEAD без тела, он указывает значение, которое применялось бы к соответствующему сообщению GET.

Тип заголовка Заголовок запроса, Заголовок ответа, Заголовок полезной нагрузки
Запрещённое имя заголовка да

Синтаксис

Transfer-Encoding: chunked
Transfer-Encoding: compress
Transfer-Encoding: deflate
Transfer-Encoding: gzip

// Several values can be listed, separated by a comma
Transfer-Encoding: gzip, chunked

Директивы

chunked

Данные отправляются в виде серии чанков. В этом случае заголовок Content-Length опускается, и в начале каждого чанка необходимо добавить длину текущего чанка в шестнадцатеричном формате, за которым следует '\r\n', затем сам чанк, а затем ещё '\r\n'. Заключительный чанк — это обычный чанк, за исключением того, что его длина равна нулю. За ним следует трейлер, состоящий из (возможно, пустой) последовательности заголовков.

compress

Формат, использующий алгоритм Lempel-Ziv-Welch (LZW). Название значения было взято из программы UNIX compress, которая реализовывала этот алгоритм. Как и программа compress, исчезнувшая из большинства дистрибутивов UNIX, эта кодировка содержимого используется почти ни одним современным браузером, отчасти из-за вопроса с патентом (который истек в 2003 году).

deflate

Использование структуры zlib (определённой в RFC 1950), с алгоритмом сжатия deflate (определённым в RFC 1951).

gzip

Формат, использующий алгоритм кодирования Лемпеля-Зива (LZ77) с 32-битным CRC. Это изначально формат программы UNIX gzip. Стандарт HTTP/1.1 также рекомендует, чтобы серверы, поддерживающие эту кодировку содержимого, распознавали x-gzip как псевдоним для совместимости.

Примеры

Кодировка чанками

Кодировка чанками полезна, когда большие объемы данных отправляются клиенту, и общий размер ответа может быть неизвестен до тех пор, пока запрос не будет полностью обработан. Например, при генерации большой HTML таблицы, полученной из запроса к базе данных, или при передаче больших изображений.
Пример ответа с кодировкой чанками:

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

7\r\n
Mozilla\r\n
11\r\n
Developer Network\r\n
0\r\n
\r\n

Спецификации

Спецификация
HTTP/1.1
# field.transfer-encoding

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet
Transfer-Encoding
Да
12
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да

См. также

  • Accept-Encoding
  • Content-Encoding
  • Content-Length
  • Заголовки, регулирующие использование трейлеров: TE (запросы) и Trailer (ответы).
  • Кодировка чанками

© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API