用C构build一个简单的HTTP服务器

我需要用C语言构build一个简单的HTTP服务器。 链接? 样品?

我build议你看看微小的httpd 。 如果你想从头开始写,那么你需要彻底阅读RFC 2616 。 使用BSD套接字以非常低的水平访问networking。

我build议你看看: 写作客户端和服务器的实用指南

你必须采取增量步骤来实现:

  1. 获取您的基本TCP套接字层运行(侦听端口/端口,接受客户端连接和发送/接收数据)。
  2. 实施缓冲读取器,以便您可以一次读取一行(由CRLF分隔)的请求。
  3. 阅读第一行。 parsing出方法,请求版本和path。
  4. 为“Header:value”语法实现标题parsing。 不要忘记展开折叠的标题。
  5. 检查请求方法,内容types和内容大小,以确定如何/如果正文将被读取。
  6. 基于内容types实现内容的解码。
  7. 如果您要支持HTTP 1.1,请执行诸如“100继续”,保持活动,分块传输等。
  8. 添加健壮性/安全措施,如检测不完整的请求,限制客户端的最大数量等。
  9. 收缩包装你的代码和开源它:)

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://code.google.com/p/mountain-cms/

HTTP规范和Firebug对我来说是非常有用的,当我不得不做我的功课。

祝你好运。 🙂

我build议看看来源lighthttpd 。

http://www.manning.com/hethmon/ – 来自Manning的“Paul S. Hethmon的HTTP图解指南”是学习HTTP协议的一本很好的书,对于实施/扩展它的人来说是非常有用的。

就像Apache背后的人一样,使用特定于平台的套接字函数来封装HTTP协议。

有更多的答复重复 。

尚未提及的一名候选人是spserver 。