CGI(Common Gateway Interface,通用网关接口)是一种标准协议,用于在Web服务器和外部程序之间传递数据。它允许Web服务器执行外部程序并将输出返回给客户端浏览器。

工作原理

  1. 请求接收:Web服务器接收到客户端的HTTP请求。

  2. 请求解析:服务器解析请求,确定需要执行的CGI程序。

  3. 程序执行:服务器启动CGI程序,并将请求数据(如查询字符串、表单数据)传递给程序。

  4. 数据处理:CGI程序处理数据并生成响应内容。

  5. 响应返回:CGI程序将生成的响应内容返回给服务器,服务器再将内容发送给客户端。

环境变量

CGI程序通过环境变量获取请求信息,常见的环境变量包括:

  • REQUEST_METHOD:HTTP请求方法(如GET、POST)。

  • QUERY_STRING:URL中的查询字符串。

  • CONTENT_LENGTH:POST请求中数据的长度。

  • CONTENT_TYPE:POST请求中数据的MIME类型。

输入输出

  • 输入:CGI程序通过标准输入(stdin)读取POST请求的数据。

  • 输出:CGI程序通过标准输出(stdout)返回响应内容,通常包括HTTP头和响应体。

案例

以下是一个简单的CGI脚本示例,使用Python编写,返回当前时间:

#!/usr/bin/env python3

import datetime

print("Content-Type: text/html")  # HTTP头
print()  # 空行分隔头和体
print("<html>")
print("<head><title>Current Time</title></head>")
print("<body>")
print("<h1>Current Time:</h1>")
print("<p>", datetime.datetime.now(), "</p>")
print("</body>")
print("</html>")

配置

  1. 将脚本保存为time.cgi

  2. 将脚本放置在Web服务器的CGI目录(如/usr/lib/cgi-bin)。

  3. 设置脚本权限为可执行(chmod +x time.cgi)。

  4. 通过浏览器访问http://yourserver/cgi-bin/time.cgi,即可看到当前时间。

优缺点

  • 优点:简单易用,支持多种编程语言。

  • 缺点:每次请求都会启动新的进程,性能较低,不适合高并发场景。

CGI已被更高效的技术(如FastCGI、WSGI)取代,但在某些简单场景中仍有用武之地。

本篇文章内容来源于:CGI(Common Gateway Interface,通用网关接口)详细说明以及案例