HeadlinesBriefing HeadlinesBriefing.com

用C语言和CGI构建现代Web应用

Hacker News •
×

1994年,动态网站意味着编写一个C程序,将其放入cgi-bin目录,并让Apache为每个请求fork它。三十二年后,作者使用基本相同的技术发布了一款商业Web产品marketyour.games。该产品包括用户账户、面向内容创作者的搜索仪表板、用于整理内容的文件夹、通过Stripe完成的支付,以及通过Postmark发送的事务性邮件。它遵循渐进式增强原则,无需JavaScript。

其技术栈为BCHS:OpenBSD、C、httpd和SQLite。没有框架,没有模板语言,也没有独立的数据库服务器。C程序读取CGI环境变量并直接输出HTML。该二进制文件为静态链接,通过替换单个文件进行部署,因此新请求会直接使用新版本,无需重启服务器,也不会造成停机。OpenBSD的pledge和unveil有助于保护程序安全,httpd则在chroot环境中提供服务。依赖项仅限于用于出站请求的libcurl、用于标识符、密码哈希和Stripe webhook验证的libsodium,以及用于JSON解析的libcjson。一次完整的干净构建只需几秒钟。

作者看重CGI的基础性而非框架。发布于2004年的1.1规范至今未变,理解HTTP便足以理解CGI。它与语言和平台无关,并保持清晰的关注点分离:单一Web服务器直接调用业务逻辑,而不是反向代理到独立的应用服务器。应用程序就是可以在shell中运行、并用gdb调试的普通程序。

这种方法还将供应链风险降至最低,这在近期针对软件包仓库的攻击背景下尤为有价值。依赖项越少,遭到恶意软件包入侵的风险敞口就越小。作者认为,CGI在2004年式微是有道理的,但在2026年已站不住脚,并主张现代Web应用确实可以用C语言编写。

来源: Hacker News · 由HeadlinesBriefing整理摘要