CGI(Common Gateway Interface,通用网关接口)是一种让 Web 服务器运行外部程序(脚本)并将输出结果发送给客户端的标准协议。Python 凭借其简洁性,成为编写 CGI 脚本的理想选择。本文将详解 Python3 CGI 编程的核心知识与实践技巧。
-
交互流程:
- 客户端(浏览器)向 Web 服务器发送请求(如提交表单);
- 服务器识别出请求需要调用 CGI 脚本,执行指定的 Python 脚本;
- 脚本处理请求(如解析表单数据),生成 HTML 等响应内容;
- 服务器将脚本输出返回给客户端。
-
核心特征:
- 脚本运行在服务器端,客户端无法直接访问源码;
- 依赖 Web 服务器(如 Apache、Nginx)的 CGI 模块支持;
- 通过环境变量和标准输入输出传递数据。
以 Apache 服务器为例,需完成以下配置:
-
启用 CGI 模块:
-
设置 CGI 目录:
在 Apache 配置文件(如/etc/apache2/sites-available/000-default.conf)中添加:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/ # 映射URL路径到服务器目录
<Directory "/var/www/cgi-bin">
Options +ExecCGI
AddHandler cgi-script .py # 允许执行.py后缀的CGI脚本
Require all granted
</Directory>
-
权限设置:
CGI 脚本需有执行权限,且目录所有者为 Web 服务器用户(如www-data):
chmod +x /var/www/cgi-bin/script.py
chown www-data:www-data /var/www/cgi-bin/
- 权限错误:确保脚本有执行权限(
chmod +x),且 Web 服务器用户可访问。
- 编码问题:始终在头部指定
charset=utf-8,避免中文乱码。
- 调试困难:错误信息会记录在服务器日志中(如
/var/log/apache2/error.log),可通过print输出调试信息到日志。
- 安全性:
- 避免直接拼接用户输入到 SQL 或命令中(防止注入攻击);
- 验证所有用户输入的合法性;
- 敏感数据(如密码)需加密传输(使用 HTTPS)。
- 性能局限:CGI 每次请求都会创建新进程,高并发场景下性能较差,可考虑 WSGI(如 Flask、Django)替代。
Python3 CGI 编程是构建动态网页的基础方式,适合简单场景(如小型表单处理、数据查询)。通过环境变量和标准输入输出与服务器交互,结合cgi模块可简化开发。但需注意权限配置、编码处理和安全防护,在高并发场景下建议采用更现代的 Web 框架。掌握 CGI 有助于理解 Web 开发的底层交互逻辑,是进阶学习的重要基础。