HTTP HEAD с фрагментированным кодированием

Я реализовал сервер HTTP 1.1. Это встроенный сервер, поэтому я поддерживаю только обязательные функции RFC. Все ответы отправляются в кодировке фрагментов. Поскольку HEAD является обязательным, он также поддерживается.

ГОЛОВА - это GET без тела. Таким образом, сервер отправляет ответ, подобный следующему, в ответ на запрос HEAD:

HTTP/1.1 200 OK
Server: testServer
Connection: keep-alive
Transfer-Encoding: chunked

Что мне интересно, так это то, что нужно добавить «0 \ r \ n», поскольку это требуется для обозначения конца фрагментов:

 HTTP/1.1 200 OK
 Server: testServer
 Connection: keep-alive
 Transfer-Encoding: chunked

 0

Я попытался собрать соответствующие части в RFC:

«Метод HEAD идентичен GET, за исключением того, что сервер НЕ ДОЛЖЕН возвращать тело сообщения в ответ».

«Все ответы на метод запроса HEAD НЕ ДОЛЖНЫ включать тело сообщения, даже если наличие полей заголовка объекта может заставить человека поверить в то, что они есть».

1. Любое ответное сообщение, которое «НЕ ДОЛЖНО» включать тело сообщения (например, ответы 1xx, 204 и 304 и любой ответ на запрос HEAD) всегда заканчивается первой пустой строкой после полей заголовка, независимо от поля заголовка объекта, присутствующие в сообщении ".

Пока я понимаю, что мое первое решение (без 0) является правильным. Но кажется странным отправлять сообщение с Transfer-encoding: chunked, которое не заканчивается стилем фрагмента 0 \ r \ n.


person tobias    schedule 20.09.2012    source источник
comment
RFC прямо говорит, что вы не должны включать тело, даже если наличие полей заголовка объекта может заставить вас поверить в то, что это так. Насколько это может быть яснее этого?   -  person lanzz    schedule 21.09.2012
comment
Вы также склонны к первому решению, чтобы не добавлять 0 \ r \ n? Кодирование передачи НЕ является заголовком объекта. Это общий заголовок.   -  person tobias    schedule 21.09.2012


Ответы (1)


Я предполагаю, что заявленная проблема решена как довольно старая,

Недавно я разработал тестовый http-сервер для потоковой передачи видео и хотел поделиться своими знаниями, чтобы он мог помочь другим. Во-первых, «0 \ r \ n» не является маркером конца фрагментов, конечный фрагмент - это «0 \ r \ n \ r \ n».

А для заголовка строка должна выглядеть так

"HTTP/1.1 200 OK\r\n" \
"Server: testServer\r\n" \
"Connection: keep-alive\r\n" \
"Transfer-Encoding: chunked\r\n" \
"\r\n"

Обратите внимание на последний CRLF, указывающий на конец заголовка.

Надеюсь на эту помощь.

person explorer    schedule 02.11.2016