В HTTP вы должны проанализировать и проанализировать данные ответа, которые сервер отправляет вам обратно, чтобы узнать, как читать все это.
Во-первых, сервер отправляет обратно список строк заголовка с разделителями CRLF, которые завершаются пустой линией CRLF-разделителями. Затем вам нужно посмотреть фактические значения заголовков «Content-Length» и «Transfer-Encoding», чтобы узнать, как читать оставшиеся данные.
Если заголовок «Передача-кодирование» отсутствует или если в нем нет элемента «chunked», заголовок «Content-Length» указывает количество оставшихся байтов для чтения. Но если заголовок «Transfer-Encoding» содержит элемент «chunked», вам необходимо прочитать и проанализировать оставшиеся данные в кусках по одному за раз, чтобы узнать, когда заканчиваются данные (каждый кусок сообщает о своем размере, и последний фрагмент сообщает размер 0).
И нет, вы не можете полагаться на соединение, которое было закрыто после отправки ответа, если только заголовок «Connection» явно не говорит «закрыть». Для HTTP 1.1 этот заголовок обычно устанавливается вместо «keep-alive», что означает, что сокет остается открытым, поэтому клиент может отправлять больше запросов в один и тот же сокет.
Прочтите RFC 2616 для более подробной информации.