用C构build一个简单的HTTP服务器
我需要用C语言构build一个简单的HTTP服务器。 链接? 样品?
我build议你看看微小的httpd 。 如果你想从头开始写,那么你需要彻底阅读RFC 2616 。 使用BSD套接字以非常低的水平访问networking。
我build议你看看: 写作客户端和服务器的实用指南
你必须采取增量步骤来实现:
- 获取您的基本TCP套接字层运行(侦听端口/端口,接受客户端连接和发送/接收数据)。
- 实施缓冲读取器,以便您可以一次读取一行(由CRLF分隔)的请求。
- 阅读第一行。 parsing出方法,请求版本和path。
- 为“Header:value”语法实现标题parsing。 不要忘记展开折叠的标题。
- 检查请求方法,内容types和内容大小,以确定如何/如果正文将被读取。
- 基于内容types实现内容的解码。
- 如果您要支持HTTP 1.1,请执行诸如“100继续”,保持活动,分块传输等。
- 添加健壮性/安全措施,如检测不完整的请求,限制客户端的最大数量等。
- 收缩包装你的代码和开源它:)
mongoose (以前简单的HTTP守护进程)是相当不错的。 特别是可以在Windows,Windows CE和UNIX下embedded和编译。
HTTP服务器在概念上很简单:
- 打开端口80进行收听
- 当联系时,收集一些信息(主要是 – 现在你可以忽略其余的)
- 将请求转换为文件请求
- 打开文件,然后吐在客户端
根据您要支持多lessHTTP,这会变得更加困难 – POST稍微复杂一点,脚本,处理多个请求等等。
但是基础很简单。
-亚当
在端口80上打开一个TCP套接字,开始监听新的连接,执行这个 。 根据你的目的,你可以忽略几乎所有的东西。 在最简单的情况下,您可以为每个请求发送相同的响应,这只需要将文本写入套接字。
看看nweb(奈杰尔的Web服务器),“一个微型,安全的Web服务器,只有200行C源代码”:
https://drive.google.com/file/d/0B3msld7qnNOhN1NXaFIwSFU2Mjg/view?usp=sharing http://www.ibm.com/developerworks/systems/library/es-nweb/
文章包括伪代码,解释和评论。
编辑:IBM的链接已经死亡。 我已将网页的PDF保存到Google云端硬盘。 这里是代码下载:
https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing
@ ankushagarwal做了一些改变,并在GitHub上上传他的版本: https : //github.com/ankushagarwal/nweb
我写了我自己的,你可以使用。 这个工作有sqlite,是线程安全的,而且是在UNIX下的C ++。
你应该能够把它分开,并使用C兼容的代码。
HTTP规范和Firebug对我来说是非常有用的,当我不得不做我的功课。
祝你好运。 🙂
我build议看看来源lighthttpd 。
http://www.manning.com/hethmon/ – 来自Manning的“Paul S. Hethmon的HTTP图解指南”是学习HTTP协议的一本很好的书,对于实施/扩展它的人来说是非常有用的。
就像Apache背后的人一样,使用特定于平台的套接字函数来封装HTTP协议。
有更多的答复重复 。
尚未提及的一名候选人是spserver 。