Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 9827|Ответ: 0

Протокол HTTP Transfer-Encoding (chunked)

[Скопировать ссылку]
Опубликовано 24.09.2019 18:07:57 | | | |
1. Предыстория:

  • Постоянные проблемы соединения: Для непостоянных соединений браузер может определить границы запрашивающей или ответной сущности в зависимости от того, отключилось ли соединение; Для непрерывных соединений этот подход, очевидно, не работает. Иногда, даже если я отправил все данные, браузер не знает, будут ли новые данные по открытому соединению, поэтому просто ждёт.
  • Решите с помощью Content-length: вычислите длину сущности и сообщите другой стороне через голову. Браузер может определить, что ответная сущность находится по данным о длине Content-Length
  • Новая проблема с длиной содержания: поскольку поле Content-Length должно действительно отражать длину сущности, длина для динамически сгенерированного контента неизвестна до момента создания контента. На данный момент, чтобы точно определить длину, можно открыть достаточно большой буфер и дождаться, пока весь контент будет сгенерирован, прежде чем вычислять. Однако это требует большего расхода памяти с одной стороны, а с другой — заставляет клиента ждать дольше.
  • Нам нужен новый механизм, который не зависит от длины заголовка и знает границы сущностей — Transfer-Encoding: chunked.

2. Кодирование передачи (на части)

  • Кодирование передачи — это поле заголовка HTTP (поле заголовка ответа), что буквально означает «кодирование передачи». Последняя HTTP-спецификация определяет только один тип кодирующего транспорта: фрагментированный.
  • Кодирование передачи частей — это механизм передачи данных в протоколе передачи гипертекста (HTTP), который позволяет разделять HTTP-данные, отправляемые веб-сервером клиенту, на несколько частей. Кодирование блочного транспорта доступно только в версии протокола HTTP 1.1 (HTTP/1.1).
  • Данные разбиваются на серию блоков и отправляются одним или несколькими блоками, чтобы сервер мог отправлять данные без предварительного звания общего объёма отправленного контента.


Специфические методы

  • После добавления Transfer-Encoding: chunked в заголовок это означает, что пакет фрагментирован. В этом случае сущности в пакете должны передаваться серией чанков.
  • Каждый фрагмент содержит шестеричное значение длины и данные, значение длины эксклюзивно для одной строки, и длина не включает CRLF в её конце, а также CRLF в конце фрагментированных данных.
  • Последнее значение длины блока должно быть 0, и соответствующие данные блока не содержат содержимого, указывая на конец сущности.




asp.net Основной тестовый код:







Предыдущий:Длина содержимого протокола HTTP
Следующий:Три фактора, из-за которых я пренебрегаю Chrome
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com