HTTP Chunked Transfer Encoding
Вот из википедии:
Для версии 1.1 протокола HTTP механизм фрагментированной передачи считается всегда и в любом случае приемлемым, даже если он не указан в поле заголовка запроса TE (кодирование передачи).
Вот что я получаю от клиентов (Mozilla, Opera):
GET http://www.google.com/ HTTP / 1.1 Хост: www.google.com Пользователь-агент: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0 Принять: текст /html,application/xhtml+xml,application/xml;q=0,9,/; q = 0,8 Accept-Language: en-US,en;q=0,5 Accept-Encoding: gzip, deflate Соединение: keep-alive
По-видимому, там нет поля Transfer-Encoding, и я не вижу никаких фрагментов (я проверил с помощью HEX-редактора, никаких дополнительных символов).
Я открываю соединение следующим образом (Python)
socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Это обработка более низкого уровня, объединяет куски в сообщение? Так, как я могу знать, где заканчивается HTTP-сообщение, чтобы я мог перестать читать запрос и начать его обрабатывать?
1 ответ
Вы должны прочитать спецификацию.
Но просто, в данном случае, так как это GET, а контента нет, заголовок Content-Length не будет. Таким образом, вы прекращаете чтение, когда получаете пустую строку только с CR/LF.
В противном случае вы читаете эту пустую строку и читаете байты Content-Length.