在C中构建一个简单的HTTP服务器

时间:2008-10-06 22:10:24

标签: c httpserver

我需要在C中构建一个简单的HTTP服务器。任何指导?链接?样品

12 个答案:

答案 0 :(得分:116)

我建议你看一下:A Practical Guide to Writing Clients and Servers

您必须在增量步骤中实施的是:

  1. 让您的基本TCP套接字层运行(侦听端口/端口,接受客户端连接并发送/接收数据)。
  2. 实施缓冲读卡器,以便您可以一次读取一行(由CRLF分隔)。
  3. 阅读第一行。解析方法,请求版本和路径。
  4. 实现“Header:value”语法的头解析。不要忘记展开的折叠标题。
  5. 检查请求方法,内容类型和内容大小,以确定如何/是否将读取正文。
  6. 根据内容类型实现内容解码。
  7. 如果您要支持HTTP 1.1,请执行“100 Continue”,keep-alive,chunked transfer等内容。
  8. 添加健壮性/安全性措施,例如检测不完整的请求,限制最大数量的客户端等。
  9. 收缩包裹您的代码并开源:)

答案 1 :(得分:82)

我建议你看看tiny httpd。如果您想从头开始编写,那么您需要彻底阅读RFC 2616。使用BSD sockets以非常低的级别访问网络。

答案 2 :(得分:26)

HTTP服务器在概念上很简单:

  • 打开端口80进行收听
  • 联系时,收集一些信息(主要是 - 你现在可以忽略其余的信息)
  • 将请求翻译成文件请求
  • 打开文件并将其吐回客户端

根据您想要支持的HTTP数量而变得更加困难 - POST更复杂,脚本,处理多个请求等等。

但基础非常简单。

答案 3 :(得分:25)

Mongoose(以前的简单HTTP守护程序)非常好。特别是,它可以在Windows,Windows CE和UNIX下嵌入和编译。

答案 4 :(得分:11)

在端口80上打开TCP套接字,开始侦听新连接,实现this。 根据您的目的,您可以忽略几乎所有内容。最简单的方法是,您可以为每个请求发送相同的响应,这只需要将文本写入套接字。

答案 5 :(得分:11)

请看nweb(Nigel的Web服务器),“一个只有200行C源代码的小型,安全的Web服务器”:

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

答案 6 :(得分:5)

我写了自己可以使用的。这个工作有sqlite,是线程安全的,并且是用于UNIX的C ++。

您应该能够将其拆开并使用C兼容代码。

http://code.google.com/p/mountain-cms/

答案 7 :(得分:5)

当我必须为我的作业完成时,HTTP specFirebug对我非常有用。

祝你好运。 :)

答案 8 :(得分:4)

我建议查看类似lighthttpd的内容。

答案 9 :(得分:2)

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

答案 10 :(得分:1)

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

答案 11 :(得分:1)

duplicate with more responses

尚未提及的一位候选人是spserver