Кодировка передачи
Кодировка передачи
Заголовок 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-EncodingContent-EncodingContent-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