动态文档和活动文档是Web技术发展过程中用于实现动态交互功能的两种重要机制,它们分别代表了服务器端与客户端处理动态内容的不同思路。
-
动态文档:
动态文档的内容在用户请求时由服务器实时生成。其核心实现依赖于通用网关接口(CGI)。当Web服务器接收到对动态文档的请求时,会启动一个外部程序(如Perl、Python脚本)来处理请求,并将程序输出作为HTTP响应返回给客户端。CGI通过环境变量和标准输入输出与Web服务器通信,支持表单数据提交和文件查询等交互操作。为区分静态内容,动态文档通常存放在特定目录(如cgi-bin),服务器据此调用对应的应用程序进行处理。尽管CGI灵活,但每次请求都需创建新进程,资源开销较大。 -
活动文档与Java技术:
活动文档则将动态行为转移到客户端浏览器中执行。典型代表是Java Applet——一种嵌入HTML页面的小型Java程序,在用户浏览器中运行,可实现复杂的交互逻辑(如动画、游戏、实时计算)。Applet依赖Java虚拟机(JVM)提供跨平台运行能力,结合丰富的类库,能够在本地完成大部分运算,仅在必要时与服务器通信。这种方式显著减少了服务器负载和网络传输量,提升了响应速度和用户体验。
虽然现代Web已逐渐淘汰Applet(因安全性和性能问题),转而采用JavaScript、WebAssembly等更高效的技术,但理解这些早期机制有助于掌握Web从“静态展示”向“动态交互”演进的技术脉络。
CGI(Common Gateway Interface,通用网关接口)是一种标准协议,用于定义Web服务器如何将客户端的请求传递给外部程序(如脚本或可执行文件),并接收其输出以返回给客户端。它是实现动态网页早期最常用的技术之一。
CGI 工作原理:
- 客户端发起请求:用户在浏览器中访问一个指向CGI程序的URL(例如
http://example.com/cgi-bin/hello.py)。 - Web服务器接收请求:服务器识别该请求指向的是CGI资源(通常通过路径
/cgi-bin/或扩展名如.pl,.py判断)。 - 创建环境并启动进程:
- 服务器为该请求创建一个新的操作系统进程。
- 设置一系列环境变量,如:
REQUEST_METHOD:请求方法(GET、POST等)QUERY_STRING:GET参数字符串CONTENT_LENGTH:POST数据长度HTTP_USER_AGENT:客户端浏览器信息REMOTE_ADDR:客户端IP地址
- 如果是POST请求,服务器将表单数据通过标准输入(stdin)传入CGI程序。
- 执行外部程序:
- 启动对应的脚本(如Python、Perl脚本),运行并生成动态内容。
- 程序处理逻辑(如查询数据库、计算结果),然后向标准输出(stdout)打印HTTP响应头和正文,例如:
Content-Type: text/html <html><body><h1>Hello from CGI!</h1></body></html>
- 服务器转发响应:Web服务器捕获CGI程序的输出,并将其作为HTTP响应发送回客户端。
- 进程终止:CGI程序执行完毕后,进程被销毁。
数据交换方式:
- 从服务器 → CGI程序:
- 使用环境变量传递请求元信息(如方法、路径、客户端信息)。
- 对于POST数据,通过标准输入(stdin) 流式传输请求体内容。
- 从 CGI程序 → 客户端:
- 通过标准输出(stdout) 输出完整的HTTP响应,至少包括:
- 响应头(如
Content-Type: text/html) - 一个空行
- 响应正文(HTML、JSON等内容)
- 响应头(如
- 通过标准输出(stdout) 输出完整的HTTP响应,至少包括:
示例(Python CGI脚本):
#!/usr/bin/env python
print("Content-Type: text/html") # HTTP响应头
print() # 空行,必须
print("<html>")
print("<body>")
print("<h1>Hello, CGI World!</h1>")
print("</body></html>")
缺点:
- 每次请求都需启动新进程,开销大,性能低。
- 难以管理状态和连接复用。
- 安全风险较高(若脚本存在漏洞)。
因此,现代系统多采用更高效的替代方案,如FastCGI、WSGI、PHP-FPM等。



被折叠的 条评论
为什么被折叠?



