2011-09-18 45 views
2

我正在实现一个只处理C中GET/POST/HEAD的Web服务器。我想知道强大解析传入http请求的一般策略是什么?解析http请求“逐行”或“char by char”?

我应该怎么做char by char or line by line

  • 烧焦成炭方法似乎是低效的,因为我需要大量的代码来跟踪状态,例如,当你看到一个“G”,检查是否其次是“E”,然后“T” ...

  • 逐行方法似乎不健壮。例如,客户发送不完整的请求,例如缺少“\ r \ n”。另一个例子是,该请求可以在不同的顺序​​代替GET /index.html HTTP/1.1

+5

如果客户端发送格式错误的请求,请以错误请求回复。你不应该处理畸形的请求。 – 2011-09-18 16:07:05

回答

3

首先,​​格式不正确 - 功能的名称(例如GET)必须先来。按照WTP的建议,在这种情况下,我会返回'​​400错误请求'。

至于失踪\ r \ n:想想如果这起案件合法发生,你会怎么做;例如,如果客户端开始发送数据,但只是没有完成发送。
这种情况下的常见行为是等待用户完成发送HTTP请求,但保持超时,以便恶意或故障客户端不会使您的服务器关闭。
如果请求未及时完成,请删除整个请求,并返回'408请求超时'。

一旦这个问题得到处理,你最好用逐行解析。