我正在实现一个只处理C中的GET / POST / HEAD的Web服务器。我想知道强大地解析传入的http请求的一般策略是什么?
我应该
char by char方法似乎效率低下,因为我需要大量代码来跟踪状态,例如当你看到“G”时,检查next是“E”然后是“T”...... < / p>
逐行方法似乎不健全。例如,客户端发送不完整的请求,例如缺少“\ r \ n”。另一个例子是请求可能采用不同的顺序HTTP/1.1 GET /index.html
而不是GET /index.html HTTP/1.1
答案 0 :(得分:3)
首先,HTTP/1.1 GET /index.html
格式错误 - 函数的名称(例如GET)必须先出现。正如WTP建议的那样,在这种情况下我会返回'400 Bad Request'。
至于遗失\ r \ n:想想如果这个案件合法发生你会怎么做;例如,如果客户端开始发送数据,但只是没有完成发送
在这种情况下,通常的行为是等待用户完成发送HTTP请求,但保持超时,以便恶意或故障的客户端不会使您的服务器关闭。
如果请求未及时完成,请删除整个请求,并返回“408 Request Timeout”。
一旦解决了这个问题,你最好采用逐行解析。