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


105

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


1
这正是我的想法
-Rik

1
我现在也有同样的问题。我用这个链接。希望这也会对你有帮助。
Udara SS Liyanage

1
有关如何提问的常见问题解答如何?您应该在3K代表中知道这不是一个真正的问题,它怎么能获得这么多的赞成票?


1
这显然是一个非常有用的问题。为什么关闭?
McBear Holden

Answers:



119

我建议您看一下:编写客户端和服务器的实用指南

您必须逐步实现的是:

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

第9点,尤其是在这里发布问题+1 :)之后
-Matthieu

26

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

  • 打开端口80收听
  • 建立联系后,收集一些信息(主要获取-您现在可以忽略其余信息)
  • 将请求转换为文件请求
  • 打开文件并将其吐回客户端

取决于要支持的HTTP数量,它会变得更加困难-POST稍微复杂一些,脚本,处理多个请求等。

但是基础很简单。


25

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


12

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


11

看一下nweb(奈杰尔的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


嗯,没有检查链接就投了赞成票:/我正在寻找您提到的确切内容,如果您发现某些内容可以对我进行ping操作?Txt
samayo

1
@samayo IBM的链接已终止。我提供了一些镜子。
XP1 2016年

这是archive.org的镜像-希望它将在未来几年内出现:web.archive.org/web/20140905115151/http
//www.ibm.com/…– james246





1

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.