Заголовки: Transfer-Encoding
Заголовок Transfer-Encoding
Базовая поддержка Широко доступно
Эта функция хорошо зарекомендовала себя и работает на множестве устройств и в разных версиях браузеров. Она поддерживается браузерами с июля 2015 года.
HTTP-заголовок Transfer-Encoding запроса и ответа определяет форму кодирования, используемую для передачи сообщений между узлами сети.
Transfer-Encoding — это транзитный заголовок, который применяется к сообщению между двумя узлами, а не к самому ресурсу. Для каждого участка соединения с несколькими узлами могут использоваться разные значения Transfer-Encoding. Если необходимо сжать данные на протяжении всего соединения, вместо него используйте сквозной заголовок Content-Encoding.
На практике этот заголовок используется редко, и в таких случаях почти всегда вместе с chunked.
Тем не менее в спецификации указано, что при наличии этого заголовка в сообщении он указывает способ сжатия сообщения на данном участке и/или на то, было ли сообщение разбито на фрагменты. Например, Transfer-Encoding: gzip, chunked указывает, что содержимое было сжато с помощью кодирования gzip, а затем разбито на фрагменты с помощью кодирования chunked при формировании тела сообщения.
В ответах на запрос HEAD этот заголовок не обязателен, поскольку такие сообщения не содержат тела и, следовательно, не используют кодирование передачи. Если заголовок присутствует, он указывает значение, которое применялось бы к соответствующему ответу на сообщение GET, если бы этот запрос GET не содержал предпочтительного значения Transfer-Encoding.
Предупреждение: HTTP/2 запрещает любое использование заголовка Transfer-Encoding. В HTTP/2 и более поздних версиях предусмотрены более эффективные механизмы потоковой передачи данных, чем передача с разбиением на фрагменты. Использование этого заголовка в HTTP/2, вероятно, приведёт к определённой protocol error.
| Тип заголовка | Заголовок запроса, заголовок ответа, заголовок содержимого |
|---|---|
| Запрещённый заголовок запроса | Да |
Синтаксис
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-
Формат, использующий кодирование Lempel-Ziv (LZ77) с 32-битной контрольной суммой CRC. Изначально это формат программы UNIX gzip. Стандарт HTTP/1.1 также рекомендует серверам, поддерживающим это кодирование содержимого, распознавать
x-gzipкак его псевдоним для обеспечения совместимости.
Примеры
>Ответ с кодированием chunked
Кодирование chunked полезно, когда клиенту передаётся большой объём данных, а общий размер ответа может быть неизвестен до завершения обработки запроса. Например, при формировании большой HTML-таблицы по результатам запроса к базе данных или при передаче изображений большого размера. Ответ с кодированием chunked выглядит так:
HTTP/1.1 200 OK Content-Type: text/plain Transfer-Encoding: chunked 7\r\n Welcome\r\n 1c\r\n to Mozilla Developer Network\r\n 0\r\n \r\n
Спецификации
| Спецификация |
|---|
| HTTP/1.1> # field.transfer-encoding> |
Совместимость с браузерами
| Настольные | Мобильные | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
Transfer-Encoding |
1 | 12 | 1 | 15 | 1 | 18 | 4 | 14 | 1 | 1.0 | 4.4 | 1 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Transfer-Encoding