解析http请求“逐行”或“char by char”?

时间:2011-09-18 16:04:01

标签: http httprequest

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

我应该 char by char 还是逐行

    char by char方法似乎效率低下,因为我需要大量代码来跟踪状态,例如当你看到“G”时,检查next是“E”然后是“T”...... < / p>

  • 逐行方法似乎不健全。例如,客户端发送不完整的请求,例如缺少“\ r \ n”。另一个例子是请求可能采用不同的顺序HTTP/1.1 GET /index.html而不是GET /index.html HTTP/1.1

1 个答案:

答案 0 :(得分:3)

首先,HTTP/1.1 GET /index.html格式错误 - 函数的名称(例如GET)必须先出现。正如WTP建议的那样,在这种情况下我会返回'​​400 Bad Request'。

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

一旦解决了这个问题,你最好采用逐行解析。