Да, HTTP / 1.x не включает в себя какой-либо механизм повторной сборки / повторной доставки пакетов. Он ожидает, что транспортный уровень (обычно TCP или QUIC) предоставит его, как видно из RFC 7230, раздел 6 :
6. Управление подключением
Обмен сообщениями HTTP не зависит от базового протокола (ов) транспортного или сеансового уровня. HTTP предполагает только надежный транспорт с доставкой запросов по порядку и соответствующей доставкой ответов по порядку.
Тем не менее, HTTP / 1.x делает себя дополнительные механизмы для определения, когда ответ завершен . Это необходимо, потому что HTTP / 1.x поддерживает повторное использование соединения, и одно и то же основное TCP-соединение может использоваться для нескольких пар запрос / ответ. (И, конечно, TCP не имеет понятия об отдельных сообщениях.)
Те, кто использует «Connection: close» (по умолчанию в HTTP / 1.0), могут просто предположить, что чисто закрытое TCP-соединение указывает на конец ответа. Однако клиенты, использующие «Connection: keep-alive» (по умолчанию в HTTP / 1.1) ожидают, что ответ будет иметь
- заголовок «Content-Length:», если длина ответа определена и известна, или
- чанк нулевой длины, если ответ имеет неопределенную длину и использует «Transfer-Encoding: chunked».
То же самое относится и к HTTP / 2 по TCP и даже по HTTP через QUIC.