【发布时间】:2013-03-02 21:03:13
【问题描述】:
我正在尝试编写一个小型 c++ 网络服务器来处理 GET、POST、HEAD 请求。我的问题是我不知道如何解析标头、消息正文等。它正在侦听套接字,我什至可以将内容写到浏览器中,但我很好奇我应该如何在 c++ 中执行此操作。
Afaik 标准 GET/POST 请求应如下所示:
GET /index HTTP/1.1
Host: 192.168.0.199:80
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
this is the message body
所有行都以 '\r\n' 结尾。
我是否应该在 '\n' 处拆分请求并修剪它们(如果可以,如何修剪)? 还有如何处理post数据中的文件?
我想要实现的主要目标是获取一个包含标头键=>值对的向量、一个带有请求方法的字符串、发布数据(如在 PHP 中,如果它存在)和查询字符串(例如 /index ) 作为字符串或向量,由 '/' 分割。
谢谢!
【问题讨论】:
-
使用 C++ 处理 Web 内容是一种矫枉过正。但如果你真的想走那么远,你最好准备好接受比这更难的字符串操作。
-
如果你想解析 HTTP 消息,你唯一需要问的问题是...... 我必须阅读RFC 2616 多少次才能完全理解?
-
您想编写自己的服务器作为练习,还是想使用 C++ 中的 Web 服务器库?在这种情况下,有很好的解决方案