🔌 第六章 请求到达Web服务器,响应返回浏览器
📄 一句话概括

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 秒实验

  1. 写一个最小的 CGI 脚本(输出一行 HTML)。
  2. 说说静态化为什么能省服务器。
  3. 查查 FastCGI 与传统 CGI 的差别。

常见误区

  1. 以为 CGI 是一种语言——它只是一个接口约定。
  2. 以为动态页面每次必须现算——缓存与静态化是常客。
自测三问(点开对答案) 1. CGI 的约定是什么? —— 运行程序,输出当响应体。 2. 参数怎么传给程序? —— 环境变量/标准输入。 3. PHP、JSP 与 CGI 的关系? —— 同一思路的改良实现。

相关笔记