Форум
Сети, сокеты, протоколы
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, netch80, Вы писали: N>Здравствуйте, vsb, Вы писали: vsb>>В HTTP 1.1 есть два режима передачи тела сообщения. Первый режим это когда указывается заголовок content-length. В этом случае просто передаётся тело сообщения после заголовков и всё. Этот режим удобно применять, когда длина сообщения известна заранее. Второй режим это когда заголовок content-length не указывается. В этом случае тело сообщения передаётся кусками. Каждый кусок предваряется его длиной. Конец всего сообщения маркируется куском нулевой длины. N>Немного не так. Chunked должно быть явно указано через "Content-Encoding: chunked". Отсутствие и chunked, и content-length допускается, но не рекомендуется - в таком случае конец ответа показывается закрытием TCP с передающей стороны. Так как HTTP/1.1 рекомендует сохранение соединения между запросами-ответами, и преждевременное закрытие без chunked или content-length не детектируется, то это совсем уж ленивый запасной вариант. N>Кроме того, RFC говорит >>> Whenever a transfer-coding is applied to a message-body, the set of transfer-codings MUST include "chunked", unless the message is terminated by closing the connection. N>Дословно из этого следует, что потоковое сжатие (gzip, deflate) должно сопровождаться итоговым chunked. vsb>>На уровне API всегда есть возможность читать тело в виде потока, а не целиком. Просто в первом случае будет заранее доступна длина этого потока, во втором случае не будет. N>Ну от API зависит. Во всех нормальных - да, дают такое. Но стиль как-то часто неудобен. vsb>>Это всё касается HTTP 1.1 (и, возможно, 1.0, уже плохо помню различия). Что там в HTTP 2.0, не знаю. Но с точки зрения прикладного программиста, пользующегося этим всем через API, всё вышеописанное должно быть справедливо и там. N>HTTP/2 чуть меняет стиль, например: >>> The last frame in the sequence bears an END_STREAM flag, noting that a HEADERS frame bearing the END_STREAM flag can be followed by CONTINUATION frames that carry any remaining portions of the header block. N>по сути это такой же chunked с явным флагом конца. Причём END_STREAM обязан быть и в случае предварительно переданного content-length, тогда сверяется реальный полученный размер.
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …