王朝网络
分享
 
 
 

用Delphi编写CGI程序(三)

王朝delphi·作者佚名  2006-01-08
宽屏版  字体: |||超大  

用Delphi编写CGI程序(三)

也 许 各 位 读 者 感 到 CGI 程 序 有 一 种 神 秘 感, 在 这 一 部 分 将 讲 述 一 些 关 于 CGI 程 序 的 基 本 编 程 过 程。 您 读 了 之 后, 就 不 会 再 有 神 秘 感 了。

3 、 CGI 规 范 的 其 他 问 题:

也 许 各 位 读 者 感 到 CGI 程 序 有 一 种 神 秘 感, 在 这 一 部 分 将 讲 述 一 些 关 于 CGI 程 序 的 基 本 编 程 过 程。 您 读 了 之 后, 就 不 会 再 有 神 秘 感 了。

首 先, 在 进 行 任 何 编 程 工 作 时, 将 一 个 大 任 务 分 成 许 多 小 任 务, 每 个 小 任 务 完 成 相 对 独 立 的 功 能。 许 多 人 不 愿 自 己 编 写 CGI 程 序, 就 是 因 为 觉 得 CGI 编 程 很 难。 其 实, 将 一 个 典 型 的 CGI 程 序 分 成 以 下 几 个 部 分, 再 一 一 解 决, 您 就 不 会 对 CGI 程 序 感 到 困 难 了:

总 体 的 说, 在 浏 览 器 中 调 用 一 个 CGI 程 序 时, 服 务 器 首 先 要 找 到 CGI 程 序, 一 般 的, CGI 程 序 都 放 在 服 务 器 指 定 的 目 录 中, 在 我 们 的 OmniHTTPD 中, 在 cgi-bin 和 cgi-win 虚 拟 目 录 指 定 的 实 际 目 录 下, 分 别 为 c:\httpd\cgi-bin 和 c:\httpd\cgi-win 目 录。 您 可 以 在 OmniHTTPD 中 修 改 实 际 目 录, 也 可 以 添 加 虚 拟 目 录, 如: 将 虚 拟 目 录 cgi-test 指 定 为 c:\my-cgi ; 如 果 您 在 c:\my-cgi 目 录 下 有 一 个 名 为 test1.cgi 的 CGI 程 序, 您 可 以 在 浏 览 器 中 通 过 地 址 http://localhost/cgi-test/test1.cgi 调 用 它。

在 正 常 情 况 下 服 务 器 找 到 了 浏 览 器 请 求 的 CGI 程 序, 就 产 生 了 此 CGI 程 序 的 一 个 进 程。 这 样, 浏 览 器 与 服 务 器 就 建 立 好 了 连 接。 一 旦 CGI 程 序 执 行 完 毕, 此 进 程 就 消 失, 连 接 也 消 失 了。 上 图 中 所 有 的 操 作 都 是 在 建 立 了 连 接 的 时 间 内 完 成 的, 因 此, 每 个 CGI 程 序 完 成 的 任 务 要 尽 可 能 小, 否 则, 会 占 用 服 务 器 的 大 量 时 间 和 资 源, 客 户 端 浏 览 器 的 等 待 时 间 也 会 很 长。

在 上 面 的 图 中 您 可 以 看 到,CGI 程 序 一 般 分 为 数 据 输 入、 数 据 处 理 和 数 据 输 出 三 个 部 分; 有 时, 要 在 数 据 处 理 部 分 同 数 据 库 进 行 交 互( CGI 程 序 的 特 长 也 在 此)。 这 三 个 部 分 中, 数 据 输 入 和 数 据 输 出 有 严 格 的 规 范, 而 数 据 处 理 就 是 您 发 挥 想 象 力 的 地 方 了。 下 面, 我 将 着 重 讲 一 讲 数 据 输 入 和 数 据 输 出 的 规 范 及 注 意 事 项:

在 以 前, 我 们 曾 列 出 了 CGI 程 序 所 用 的 几 乎 所 有 环 境 变 量。 其 中, 有 相 当 一 部 分 是 同 数 据 的 输 入 和 输 出 有 密 切 关 系 的。 下 面, 我 们 就 分 类 列 出 其 中 最 常 用 的 环 境 变 量:

与 服 务 器 相 关 的 环 境 变 量:

GATEWAY_INTERFACE

SERVER_NAME

SERVER_PORT

SERVER_PROTOCOL

SERVER_SOFTWARE

与 客 户 机 相 关 的 环 境 变 量:

HTTP_ACCEPT

HTTP_ACCEPT_ENCODING

HTTP_ACCEPT_LANGUAGE

HTTP_AUTHORIZATION

HTTP_CHARGE_TO

HTTP_FROM

HTTP_IF_MODIFIED_SINCE

HTTP_PRAGMA

HTTP_REFERER

HTTP_USER_AGENT

与 请 求 相 关 的 环 境 变 量:

AUTH_TYPE

CONTENT_FILE

CONTENT_LENGTH

CONTENT_TYPE

OUTPUT_FILE

PATH_INFO

PATH_TRANSLATED

QUERY_STRING

REMOTE_ADDR

REMOTE_USER

REQUEST_LINE

REQUEST_METHOD

SCRIPT_NAME

在 这 里 值 得 说 明 的 是 CONTENT_FILE 和 OUTPUT_FILE 。 在 Windows 3.1 和 DOS 上 没 有 很 多 语 言 可 以 通 过 标 准 输 入 输 出( STDIN 和 STDOUT ) 读 和 写, 所 以 用 这 两 个 变 量 代 替。 其 他 的 环 境 变 量 可 以 参 考 以 前 的 详 细 列 表。

以 前 讲 过, GET 方 法 通 过 URL 传 递 数 据; POST 方 法 通 过 STDIN 传 递 数 据。 无 论 是 用 什 么 方 法, 数 据 传 递 过 程 中 数 据 是 经 过 编 码 的。 不 过, 我 们 不 用 担 心 编 码 和 解 码 的 问 题, 因 为 我 们 将 用 的 开 发 语 言 可 以 自 动 完 成 此 任 务: 在 Perl 中 是 cgi-lib.pl , 在 Delphi 中 是 TWebModule 等。

头 信 息 在 CGI 编 程 中 也 是 非 常 重 要 的。 头 信 息 是 CGI 程 序 在 向 客 户 机 发 信 息 前 的 信 号。 有 三 个 主 要 的 头 信 息 类 型:

Content-type//向浏览器传递HTML

Location//向浏览器传递新的URL

Status//通常在CGI程序出错使用来检查错误

Content-type 是 浏 览 器 处 理 的 信 息 类 型, 主 要 是 MIME 的 类 型。 定 义 的 方 法 为 类 型 和 子 类 型 的 组 合。 常 用 的 MIME 类 型 有: Text 、 Multipart 、 Message 、 Application 、 Image 、 Audio 和 Video 。

例 如, CGI 程 序 要 向 浏 览 器 传 送 一 个 HTML 文 档 前, 应 先 传 送 text/html 。 用 Perl 书 写 如 下:

print "Content-type:text/html\n\n"

print "< h1> Hi everyone! < /h1>\n"

Location 使 浏 览 器 转 向 新 的 URL 。 例 如:

print "Location:http://www.chinabyte.com"

这 段 Perl 程 序 使 浏 览 器 转 向 ChinaByte 的 主 页。

Status 指 出 CGI 程 序 的 状 态, 通 常 在 CGI 程 序 出 错 使 用 来 检 查 错 误。 下 表 列 出 了 常 用 的 状 态 码 及 含 义:

代 码结 果 描 述

200OK请 求 正 常 满 足

202Accept请 求 被 接 受, 处 理 中

301Moved 文 档 被 移 到 新 地 点

302Found 文 档 不 在 说 明 处, 但 在 服 务 器 别 处

400Bad Request HTTP请 求 的 语 法 不 对

401Unauthorized文 档 需 要 存 取 权

403Forbindden服 务 器 拒 绝 访 问 文 档

404No Found服 务 器 找 不 到 文 档

500Server Error服 务 器 发 生 严 重 错 误

502Service Overloaded服 务 器 忙, 无 法 处 理 请 求

这 一 讲 到 这 里 就 完 了。 各 位 有 了 这 些 CGI 的 基 础 知 识 后, 可 以 开 始 使 用 任 何 一 种 语 言 一 步 步 开 发 CGI 程 序 了。 我 再 一 次 告 诉 大 家, CGI 程 序 并 不 神 秘, 它 只 不 过 是 一 种 建 立 服 务 器 和 某 种 任 务 的 对 话。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有