Как клиент HTTP должен правильно проанализировать *разделенный на блоки* Текст ответа HTTP?

Когда разделенное на блоки кодирование передачи HTTP используется, почему сервер должен выписать обоим размер блока в байтах и иметь последующий конец данных блока с CRLF?

Разве это не делает передающие двоичные данные "CRLF-грязными" и метод немного избыточный?

Что, если данным следовал за 0x0A 0x0D в нем где-нибудь (т.е. это на самом деле часть данных)? Клиент, как затем ожидают, будет придерживаться размера блока, явно обеспеченного во главе блока или дросселя на первом CRLF, с которым он встречается в данных?

Мое понимание до сих пор ожидаемого клиентского поведения состоит в том, чтобы просто взять размер блока, обеспеченный сервером, продолжиться к следующей строке, затем считать точно эту сумму байтов из следующих данных (CRLF или никакой CRLF там), затем пропустить CRLF после данных и повторить процедуру до больше никаких блоков. Это совместимое поведение? Если так, какой смысл CRLF после каждого datachunk затем? Удобочитаемость?

Я сделал некоторый веб-поиск на этом и также сделал некоторое чтение спецификации HTTP 1.1, но категорический ответ, кажется, ускользает от меня.

13
задан amn 1 October 2019 в 12:31
поделиться

2 ответа

Обиженный потребитель не сканирует тело сообщения для пары CRLF. Сначала он читает указанное количество байтов , а затем считывает еще два байта для подтверждения того, что они являются CR и LF. Если они нет, тело сообщения плохо сформировано, и либо размер был определен неправильно, либо данные были повреждены в противном случае.

Трейлинг CRLF - это уверенность в пояс и подтяжках (на RFC 2616 Раздел 3.6.1 , Кодирование поглощенного переноса ), но он также служит для поддержания последовательного правила, которое Поля начинаются в начале строки.

24
ответ дан 1 December 2019 в 20:56
поделиться

CRLF После каждого куска, вероятно, просто для лучшей читабельности, так как не нужно из-за размера чанка в начале каждого куска. Но CRLF после того, как «Header Chank» необходимо, так как может быть дополнительная информация после размера чанка (см. Кодирование переноса кусока ):

  CRLF
  Crlf Chunk-Data
 
4
ответ дан 1 December 2019 в 20:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: