2025 Leo. All rights reserved. Powered by saicaca/fuwari (MIT License).
437 字
2 分钟
什么是CGI
CGI(Common Gateway Interface,通用网关接口)是一种让 Web 服务器与外部程序(脚本或二进制)交互的标准协议,诞生于 1990 年代,至今仍在某些场景下使用。
一句话理解:CGI 是最早的“后端接口规范”,把浏览器发来的 HTTP 请求转成一个进程,运行外部程序,再把结果回传给浏览器。
1. 工作原理
浏览器 → HTTP 请求 → Web 服务器 → 启动 CGI 程序 → 返回 HTML → 浏览器
- Web 服务器(Apache、Nginx、IIS 等)收到请求后,根据配置把请求交给一个可执行文件(脚本或二进制)。
- 服务器会把 HTTP 头、POST 数据、查询字符串等通过环境变量或标准输入传给程序。
- CGI 程序处理完后,通过标准输出返回 HTTP 头 + 正文。
- 服务器再把结果回给浏览器。
2. CGI vs 现代技术
| 特性 | CGI | FastCGI | WSGI | Node.js/Go 内置服务器 |
|---|---|---|---|---|
| 进程模型 | 每次请求启动新进程(慢) | 长驻进程池(快) | Python 专用协议 | 单进程/协程 |
| 性能 | ★☆☆☆☆ | ★★★★☆ | ★★★★☆ | ★★★★★ |
| 语言 | 任意(Shell/Perl/C/Python) | 任意 | Python/Java | 任意 |
| 部署复杂度 | 低 | 中 | 中 | 低 |
| 今天是否常用 | ❌ 很少 | ✅ 仍用于 PHP-FPM | ✅ Python Web | ✅ 主流 |
3. CGI在哪里还有应用?
- 老旧系统/嵌入式设备(如路由器 Web 管理界面)。
- 教学演示:最直观展示“HTTP → 程序 → HTTP”流程。
- 一次性脚本:内部工具快速暴露 HTTP 接口,无需框架。
4. 总结
CGI 是 Web 后端“老祖宗”,每请求一进程、简单通用但性能差;如今已让位给 FastCGI、WSGI、反向代理 等更高效方案,但理解它有助于理解整个 Web 架构演进。