Я реализовал сервер 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.