Хочу вычитать входящий запрос по протоколу HTTP 1.0 или 1.1 и послать ответ, в котором будет текст запроса.
Я так понимаю, простой алгоритм вида «читать, пока клиент не закрыл соединение» не сработает, т.к. современные клиенты пытаются в http keepalive и соединение надо закрывать самому со стороны сервера. Но чтобы закрыть соединение, мне нужно вычитать весь запрос.
Выходит, придётся парсить запрос.
Я так понимаю, есть три алгоритма:
transfer-encoding не указан и content-length не указан. Тогда читаем до закрытия соединения.
content-length указан. Тогда читаем указанное число байтов (ну или до закрытия соединения, что будет странно).
указан transfer-encoding и в нём присутствует chunked. Тогда читаем чанки, пока не придёт чанк нулевой длины, что сигнализирует конец запроса.
Пока не понял, что делать, если указан и chunked и content-length, но я прочитаю.
Можно ли считать, что этого хватит для любых разумных и неразумных (но в рамках протокола) запросов?