有人说,为了构建 HTTP 服务器,我应该遵循RFC 2616标准。没关系,但是作为一个全新的 C 开发人员,我想知道我需要哪些模块和技术来实现 HTTP 协议来处理 html、css、js 和图像。
我并不是要重新发明井,我只需要一个起点来学习 C。我的经验是,以项目方式构建有用的东西是学习新东西的最佳方式。
PS如果可能的话,我想从头开始构建它。
有人说,为了构建 HTTP 服务器,我应该遵循RFC 2616标准。没关系,但是作为一个全新的 C 开发人员,我想知道我需要哪些模块和技术来实现 HTTP 协议来处理 html、css、js 和图像。
我并不是要重新发明井,我只需要一个起点来学习 C。我的经验是,以项目方式构建有用的东西是学习新东西的最佳方式。
PS如果可能的话,我想从头开始构建它。
HTTP 服务器是一个简单的基于文本的服务器;所有协议消息都以纯文本形式发送。此外,它是无状态的(即不需要记住任何关于先前连接的信息——处理每个请求,就好像它是一个新请求一样)。考虑到这些概念,您基本上需要了解如何socket programming
工作(以及如何在 C 中很好地编程)。套接字编程还取决于您使用的库(通常POSIX
用于非 Windows 系统,否则WinSock2
用于 Windows)。
其他功能(HTML、js 等)由浏览器处理。服务器只是将数据发送到客户端(通常通过 TCP,除非您也在重新创建传输协议)。
此外,可以说套接字编程(在 C 和 C++ 中)的最佳参考是Beej's Guide
编辑
在非常原始的层面上,HTTP 服务器的伪代码如下所示:
while(1) {
client = accept(); // Receive some connection
recv(client, req); // Receive the request from the client
// ... Do some HTTP request processing ...
send(client, resp); // Send the client the response/data
}
也就是说,我只是重新阅读了您的帖子,也许套接字编程不是学习 C 的最佳点。并不是说它不能完成(我认为这也是我开始的地方,尽管现在我看到了更简单的路线) ,只是更难将你的头脑围绕在语言和网络层上。为了习惯指针、内存管理、结构等的概念,还有许多其他的东西需要创建。您可以尝试创建简单的文件读取器/写入器,创建某种库存/计算脚本。我只是建议这些,因为对于已经熟悉 C 的第一次用户来说,套接字 API 看起来很陌生。
html、js、css 和图像由浏览器处理。服务器只需要交付内容。只要这没有它自己的动态,它就可以被处理。剩下的故事与 C 语言没有太大关系。