разобрать http запрос "строка за строкой" или "char by char"? - PullRequest
2 голосов
/ 18 сентября 2011

Я внедряю веб-сервер, который обрабатывает только GET / POST / HEAD на C. Я хочу знать, какова общая стратегия надежного анализа входящего http-запроса?

Должен ли я сделать это символ за символом или строка за строкой ?

  • метод char by char кажется неэффективным, посколькуМне нужно много кода для отслеживания состояния, например, когда вы видите «G», проверьте, если следующий является «E», а затем «T» ...

  • построчноподход кажется не надежным.Например, клиент отправляет неполный запрос, например, пропускает "\ r \ n".Другой пример: запрос может быть в другом порядке HTTP/1.1 GET /index.html вместо GET /index.html HTTP/1.1

1 Ответ

3 голосов
/ 18 сентября 2011

Во-первых, HTTP/1.1 GET /index.html искажен - имя функции (например, GET) должно стоять первым.Как предложил WTP, в этом случае я бы возвратил «400 Bad Request».

Что касается пропавшего \ r \ n: подумайте, что бы вы сделали, если бы этот случай произошел на законных основаниях;например, если клиент начал отправлять данные, но просто не завершил их отправку.
Обычное поведение в этом случае заключается в том, чтобы ждать, пока пользователь завершит отправку HTTP-запроса, но поддерживать тайм-аут, чтобы злонамеренный илинеисправные клиенты не приведут к остановке вашего сервера.
Если запрос не был выполнен вовремя, отбросьте весь запрос и верните «408 Request Timeout».

Как только эта проблема решена, выЛучше всего построчно разбирать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...