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.

Другие вопросы по тегам