程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用Delphi編寫CGI程序(二)

用Delphi編寫CGI程序(二)

編輯:Delphi
在 上 一 講 中, 我 們 介 紹 了 CGI 程 序 的 功 能。 今 天, 我 們 進 入: 第 二 部 分、 CGI 程 序 設 計 的 概 念 。本 講 的 內 容 是 深 入 了 解 CGI 程 序 的 基 礎。
  
  本 系 列 講 座 是 用 Delphi 編 寫 CGI 程 序, 對 於 本 次 的 內 容 Delphi 已 經 封 裝 在 它 的 類 中, 您 也 許 認 為 本 講 沒 有 必 要。 但 我 認 為 CGI 的 優 勢 之 一 是 可 用 的 開 發 語 言 多( 下 面 將 提 到 這 個 問 題), 而 本 講 的 內 容 可 用 於 任 何 程 序 設 計 語 言 中( 包 括 Delphi )。 所 以, 要 發 揮 CGI 的 優 勢, 本 講 的 內 容 還 是 必 要 的; 再 說, 本 講 的 內 容 是 深 入 了 解 CGI 程 序 的 基 礎。
  
  2 、 CGI 規 范:
  
      通 常, WEB 服 務 器 是 一 台 功 能 強 大 的 計 算 機, 但 不 可 能 利 用 所 有 處 理 能 力。 CGI 的 產 生 使 得 人 們 可 以 用 WEB 服 務 器 的 處 理 能 力 為 遠 程 客 戶 提 供 有 趣 的、 動 態 的 內 容。 CGI 規 范 應 用 於 WEB 服 務 器 及 運 行 在 WEB 上 的 應 用 程 序。 它 不 是 HTTP 協 議 的 一 部 分, 但 大 多 數 WEB 服 務 器 都 支 持 這 個 規 范, 如 NCSA httpd 、 CERN httpd 、 apache httpd 、 IIS 及 我 們 使 用 的 OmniHTTPD 。
  
  2.1 、 CGI 概 覽
  
      CGI 定 義 WEB 服 務 器、 浏 覽 器 和 應 用 程 序 之 間 的 相 互 操 作 中 共 同 遵 守 的 規 則 集。 例 如 通 過 WEB 浏 覽 器 查 詢 遠 程 數 據 庫 系 統:
  
  
  2.2 、 語 言:
  
      CGI 程 序 可 以 使 用 WEB 服 務 器 上 可 以 執 行 的 任 何 語 言 來 編 寫。 您 應 該 選 用 最 熟 悉 和 最 適 合 目 前 工 作 的 語 言。 如: Perl 語 言 適 合 字 符 串 和 文 件 處 理, C 對 大 型 的、 復 雜 的 程 序 更 合 適, Visual Basic 和 Delphi 則 適 合 數 據 庫 的 處 理, 等 等。 下 面 是 常 用 的 CGI 編 程 語 言:
  
  C
  C++
  Perl
  Tcl
  Python
  Shell Scripts
  Visual Basic
  Delphi
  Applescript
  
  2.3 、 CGI 方 法:
      調 用 CGI 的 途 徑 稱 為 CGI 方 法。 主 要 有 三 種 CGI 方 法:
  
  2.3.1 、 GET 方 法:
      GET 方 法 是 浏 覽 器 向 WEB 服 務 器 提 出 請 求 的 方 法。 使 用 這 種 方 法 時, CGI 程 序 從 環 境 變 量 QUERY_STRING 中 獲 取 數 據。 CGI 程 序 為 了 得 到 輸 入 的 參 數, 必 須 分 析 這 個 環 境 變 量。 當 傳 輸 的 數 據 很 長 時, 應 使 用 POST 方 法。
  
  2.3.2 、 POST 方 法:
      使 用 POST 方 法 時, CGI 程 序 從 stdin ( 標 准 輸 入) 得 到 輸 入 數 據。 由 於 輸 入 數 據 的 最 後 沒 有 EOF ( 文 件 結 束 標 志 End Of File ), CGI 程 序 為 了 正 確 讀 取 輸 入 數 據, 必 須 使 用 環 境 變 量 CONTENT_LENGTH 值。 用 這 種 方 法 的 最 大 優 點 在 於 可 以 傳 輸 大 量 數 據, 而 GET 方 法 由 於 受 URL 長 度 的 限 制( 一 般 不 超 過 1024 字 節), 無 法 傳 輸 大 量 數 據。 這 時, POST 方 法 是 唯 一 的 選 擇。
  
  2.3.3 、 HEAD 方 法:
      HEAD 方 法 基 本 同 於 GET 方 法, 只 是 它 是 從 WEB 服 務 器 向 浏 覽 器 傳 輸 數 據。 而 且, 傳 輸 的 僅 僅 是 HTTP 的 頭 信 息。
  
  2.4 、 接 口 規 范:
      下 面 將 介 紹 WEB 服 務 器 與 CGI 程 序 通 信 的 四 種 主 要 方 法: 環 境 變 量、 命 令 行、 標 准 輸 入 和 標 准 輸 出。( 根 據 CGI Version 1.1 給 出)
  
  2.4.1 、 環 境 變 量:
  
  AUTH_TYPE : 如 果 服 務 器 支 持 確 認 並 且 腳 本 得 到 保 護, 給 出 確 認 的 類 型。
  
  CONTENT_LENGTH : 給 出 以 字 節 為 單 位 的 用 POST 方 法 傳 輸 的 數 據 長 度。 用 GET 方 法 時 變 量 為 空。
  
  CONTENT_TYPE : 給 出 用 POST 方 法 時 傳 輸 數 據 的 MINE 類 型。 當 使 用 GET 方 法 時 變 量 為 空。 如: application/x-www-form-urlencoded 。
  
  GETWAY_INTERFACE : 給 出 CGI 規 范 名 和 版 本 號, 如: CGI/1.1 。
  
  PATH_INFO : 給 出 了 URL 中 CGI 程 序 名 之 後 的 附 加 路 徑 信 息。
  
  PATH_TRANSLATED : CGI 程 序 的 物 理 路 徑, 通 常 是 WEB 根 目 錄、 腳 本 名 和 附 加 路 徑 信 息。
  
  QUERY_STRING : URL 中 " ? " 字 符 後 的 信 息。 使 用 GET 方 法 時 此 環 境 變 量 給 出 輸 入 數 據。
  
  REMOTE_ADDR : 提 出 請 求 的 遠 程 計 算 機 的 IP 。
  
  REMOTE_HOST : 提 出 請 求 的 遠 程 計 算 機 的 名 字。
  
  REMOTE_IDENT : 給 出 RFC 931 中 定 義 的 用 戶 名。
  
  注: RFC 931 是 Internet 的 權 威 文 檔, 描 述 了 確 認 TCP 連 接 中 識 別 用 戶 的 方 法。 文 檔 在: http://sunsite.auc.dk/RFC/rfc/rfc931.Html 。
  
  REMOTE_USER : 給 出 提 出 請 求 的 客 戶 端 的 授 權 用 戶 名。
  
  REQUEST_METHOD : 提 出 請 求 的 方 法, 可 以 是 GET 、 HEAD 和 POST 。
  
  SCRIPT_NAME : 要 執 行 CGI 程 序 的 虛 擬 路 徑, 如: /cgi-bin/query.CGI 。
  
  SERVER_NAME : 運 行 WEB 服 務 器 軟 件 的 計 算 機 域 名 或 IP 地 址, 如: www.chinabyte.com 。
  
  SERVER_PORT : WEB 服 務 器 的 端 口 號, 缺 省 值 是 80 。
  
  SERVER_PROTOCOL : WEB 服 務 器 使 用 的 協 議 名 和 版 本 號, 如: HTTPD/1.0 。
  
  SERVER_SOFTWARE : 執 行 CGI 程 序 的 WEB 服 務 器 名。 格 式 為 " 服 務 器 名 / 版 本 號 " , 如: NCSA/1.5b5 。
  
  HTTP_ACCEPT : 客 戶 端 發 送 的 "Accpect : 標 題 行 " , 對 應 於 客 戶 端 能 處 理 的 MIME 類 型, 格 式 為 " 類 型 / 子 類 型, 類 型 / 子 類 型 等 " , 如: */* , image/gif , image/jpeg 。
  
  HTTP_REFERER : 是 Referer : 標 題 行 的 目 錄, 包 含 了 CGI 請 求 時 的 表 單( Form ) 的 URL , 如: http://www.chinabyte.com/register.form 。
  
  HTTP_USER_AGENT : 提 出 請 求 的 客 戶 端 浏 覽 器 名, 如: Mozilla/1.2N ( Windows;I;32bit )。
  
      以 上 的 這 些 環 境 變 量 您 可 以 用 上 一 講 的 示 范 程 序 看 到。
  
  2.4.2 、 命 令 行:
  
      CGI 命 令 行 只 在 用 ISINDEX 查 詢 時 才 用 到。 ISINDEX 查 詢 是 包 含 在 < ISINDEX> 和 < BASE HREP=".."> 之 間 的 特 殊 查 詢。 命 令 行 可 以 帶 多 個 參 數。
  
  2.4.3 、 標 准 輸 入:
  
      使 用 POST 方 法 時, CGI 程 序 從 stdin 得 到 傳 輸 數 據。 前 面 講 過, 必 須 使 用 CONTENT_TYPE 和 CONTENT_LENGTH 環 境 變 量 值。 其 中 要 注 意 的 是, 數 據 中 的 URL 被 編 碼 了, 如 空 格 用 加 號 代 替、 ~ 由 %7E 代 替 等。
  
  2.4.4 、 標 准 輸 出:
  
      CGI 程 序 通 過 標 准 輸 出 將 數 據 送 給 浏 覽 器, 或 是 WEB 服 務 器 可 解 釋 的 命 令。 CGI 程 序 可 以 通 過 WEB 服 務 器 同 浏 覽 器 對 話, 它 們 的 程 序 名 必 須 以 "nph-" 開 頭, 代 表 未 經 分 析 的 頭 信 息。 CGI 程 序 負 責 返 回 給 浏 覽 器 的 HTTP 頭 信 息 的 正 確 性。
  
      在 不 使 用 nph- 程 序 時, 服 務 器 查 找 CGI 可 能 返 回 的 三 種 特 殊 的 頭 信 息:
  
  Content-type : MIME 類 型 的 頭 信 息, 如: 輸 入 HTML 時, 常 用 "Content-type:text/Html " 。
  
  Location : 告 知 服 務 器 你 正 指 向 別 的 文 檔。 服 務 器 或 者 重 定 向 客 戶, 或 者 發 送 文 檔 內 容, 這 取 決 於 URL 是 完 整 路 徑 還 是 相 對 路 徑。
  
  Status : 服 務 器 送 給 客 戶 端 的 狀 態 行。 格 式 為: nnnXXXXX , nnn 是 一 個 三 位 數 編 碼, 而 XXXXX 是 相 對 應 的 描 述 文 本。
  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved