📄 一句话概括
URI 指向的是程序而不是文件时,先运行它(CGI),把查询参数传进去,程序的输出直接当响应消息体——今天动态页面的祖先全是 CGI。
📝 本节和前面几节的关系
6.3.1 是读静态文件;本篇看【内容现做】的动态路。
一、CGI 是什么
CGI(Common Gateway Interface):服务器与外部程序 之间的约定——请求来了就启动程序、参数经环境变量传入、 程序写到标准输出的内容就是响应体。
二、动态页面的谱系
ASP、JSP、PHP 是 CGI 思路的各种高效改良; 今天的 Web 框架再复杂,核心仍是这一句: 【根据请求现做一份响应】。
三、动手 Demo:CGI——让程序当响应
URI 指向的是程序而不是文件时,先运行它:
for s in ['GET /cgi-bin/hello.py?name=bob',
-> 启动 hello.py,把参数 name=bob 传进去',
-> 程序的输出【就是】响应消息体']:
print(s)
实跑输出:
--------------------------------------------------------------------
CGI——让程序当响应
--------------------------------------------------------------------
URI 指向的是程序而不是文件时,先运行它:
GET /cgi-bin/hello.py?name=bob
-> 启动 hello.py,把参数 name=bob 传进去
-> 程序的输出【就是】响应消息体
动态页面(今天的 PHP、各种框架)的祖先都是 CGI。
对照 5.3 的负载均衡:动态页面要现算, 比静态内容重得多——所以大站都爱把内容静态化进 CDN。
30 秒实验
- 写一个最小的 CGI 脚本(输出一行 HTML)。
- 说说静态化为什么能省服务器。
- 查查 FastCGI 与传统 CGI 的差别。
常见误区
- 以为 CGI 是一种语言——它只是一个接口约定。
- 以为动态页面每次必须现算——缓存与静态化是常客。
自测三问(点开对答案)
1. CGI 的约定是什么? —— 运行程序,输出当响应体。 2. 参数怎么传给程序? —— 环境变量/标准输入。 3. PHP、JSP 与 CGI 的关系? —— 同一思路的改良实现。- ☐ 下一节(6.3.3 Web 服务器的访问控制)
相关笔记
- 防火墙无法抵御的攻击 — CGI 程序也是攻击面
- 5.4-5.6 网页服务的三根支柱(HTTP、DNS、SSL) — Web 服务全景
- 🔌 网络是怎样连接的 · 索引