Apache CGI 工作流程

Apache CGI 工作流程

我正在尝试了解 CGI 的工作流程。例如,假设我使用带有 CGI 的 unix shell 脚本,当客户端向 Web 服务器 (Apache) 发送请求时,运行该脚本所执行的步骤顺序是什么。我通过阅读得到了以下步骤链接1链接2,但我想问这是否完整:

  1. Apache 在端口 80 上收到请求 - 看到它是对 CGI 的请求
  2. Apache 分叉并执行 CGI 进程
  3. CGI 检查要运行的脚本并注意到它需要,例如 #!/bin/sh (因此是一个 shell 脚本)
  4. CGI 分叉并执行 /bin/sh
  5. Shell解析脚本并执行

答案1

你所说的“CGI Process”就是CGI程序。 CGI 程序可以是任何语言的脚本或已编译的可执行文件。

操作系统如何实际执行 CGI 程序代码的详细信息(步骤 2、3、4 和 5)对于理解 CGI 的工作原理并不真正必要。

我是这样想的(您的步骤 2-5 在此处被压缩到步骤 2):

  1. Apache 收到请求 - 认为这是对 CGI 程序的请求
  2. Apache 执行 CGI 程序,将请求中的参数传递到环境中的 CGI 程序(作为环境变量)。
  3. CGI 程序从环境中获取参数,执行任何所需的处理,并将网页写入标准输出。
  4. Apache 从 CGI 程序的标准输出接收网页并将其传输到 Web 客户端(通常是您的 Web 浏览器)。

您在步骤 2-5 中讨论的大部分细节都包含在execve手册页中(在 Linux 上包含工作代码示例):man 2 execve。您可能还想看看fork。这已经脱离了 CGI 的主题,进入了 Unix 进程模型的主题。最好稍后再回答另一个问题。

有关 CGI 的准确详细描述,请参阅规范的互联网草案:
WWW 通用网关接口版本 1.1

也可以看看
Apache 教程:使用 CGI 的动态内容

答案2

我所见过的 CGI 工作原理最好的解释之一就是这本书

http://docstore.mik.ua/orelly/weblinux2/modperl/ch01_02.htm

相关内容