第二部分:第8章编写CGI程序 8.2.1.4报头 在这里,报头是指加在真正数据前的嵌入流中的一行文本,该文本 后跟回车符。在上面的例子中,数据上面那一行就是服务器发送到 浏览器的报头。之间用一行空白行把报头和正文分开。 例子中报头的内容类型“ content-type这一行用来说明数据的 MIME类型,这一行是专门应用于GG程序的,因为当Web服务器调用 一个CGI应用程序的服务来提供要传送给浏览器的信息时,它是忽 略CGI程序提供的数据MME类型的。所以,依照协议CGI程序必须 在实际数据前加上报头(用一个空白行分开)。这一点在编写CGI 应用程序的时候必须注意,因为不管是忘记了报头还是空白行(在 实际数据和报头之间),都会带来很多麻烦。 2004.11.3 A|程序设计
2004.11.3 AI程序设计 11 第二部分:第8章 编写CGI程序 8.2.1.4 报头 • 在这里,报头是指加在真正数据前的嵌入流中的一行文本,该文本 后跟回车符。在上面的例子中,数据上面那一行就是服务器发送到 浏览器的报头。之间用一行空白行把报头和正文分开。 • 例子中报头的内容类型“content-type”这一行用来说明数据的 MIME类型,这一行是专门应用于CGI程序的,因为当Web服务器调用 一个CGI应用程序的服务来提供要传送给浏览器的信息时,它是忽 略CGI程序提供的数据MIME类型的。所以,依照协议CGI程序必须 在实际数据前加上报头(用一个空白行分开)。这一点在编写CGI 应用程序的时候必须注意,因为不管是忘记了报头还是空白行(在 实际数据和报头之间),都会带来很多麻烦
第二部分:第8章编写CGI程序 8.2.2CG程序 CGI应用程序或网关程序(见图 Http Serve 8.2)是一个可执行程序(通常是 CGI eXe文件),它并不通过键盘或鼠 标接收任何信息。它并不是一个可 Gateway 交互程序(一个CGI程序应该是 RI (address 个可交互的应用程序)。这种程序 Http 通常被称作控制程序,它通过标准 stdin流接收输入信息,通过标准 stdout流输出。报头的其他部分 是在CGI应用程序完成其工作后由 wwwHTML Client Web服务器加上的,然后这些编 译好的信息被传送到浏览器。 图82cG应用程序或网关程序 2004.11.3 A|程序设计 12
2004.11.3 AI程序设计 12 第二部分:第8章 编写CGI程序 8.2.2 CGI程序 • CGI应用程序或网关程序(见图 8.2)是一个可执行程序(通常是 exe文件),它并不通过键盘或鼠 标接收任何信息。它并不是一个可 交互程序(一个CGI程序应该是一 个可交互的应用程序)。这种程序 通常被称作控制程序,它通过标准 stdin流接收输入信息,通过标准 stdout流输出。报头的其他部分 是在CGI应用程序完成其工作后由 Web服务器加上的,然后这些编 译好的信息被传送到浏览器。 图8.2 CGI应用程序或网关程序
第二部分:第8章编写CGI程序 82.2CGI程序 对CG程序来说,一旦启动,CGI应用程序在执行后会自动结束, 而不需要任何输入来作用。这就像DOS中的 Xcopy、 format命令 样,也是自动执行的。 CGI程序不仅仅是一个控制台应用程序,它还等待接收符合规范的 输入信息,并且输出信息也必须符合CG规范。 在特定环境下,CGI程序也可以写成DLL文件,但这种变更是依赖 于Web服务器的。甚至也可以是其它可能的外部变化。比如说,bat 文件也能做成CGI程序,前提是假设Web服务器被设置为支持该文 件作为CGI应用程序。我们不要陷入这些变更。在本章中我们把CG 程序都认为是符合CG规格的可执行控制台应用程序。 2004.11.3 A|程序设计 13
2004.11.3 AI程序设计 13 第二部分:第8章 编写CGI程序 8.2.2 CGI程序 • 对CGI程序来说,一旦启动,CGI应用程序在执行后会自动结束, 而不需要任何输入来作用。这就像DOS中的xcopy、format命令一 样,也是自动执行的。 • CGI程序不仅仅是一个控制台应用程序,它还等待接收符合规范的 输入信息,并且输出信息也必须符合CGI规范。 • 在特定环境下,CGI程序也可以写成DLL文件,但这种变更是依赖 于Web服务器的。甚至也可以是其它可能的外部变化。比如说,bat 文件也能做成CGI程序,前提是假设Web服务器被设置为支持该文 件作为CGI应用程序。我们不要陷入这些变更。在本章中我们把CGI 程序都认为是符合CGI规格的可执行控制台应用程序
第二部分:第8章编写CGI程序 8.2.2.1 stdin与 stdout 在很多程序语言中都有对stdn的定义,它是一个专门用来接收来自 操作系统底层输入的流。程序(比如用 Visual Prolog写的程序)可 以读取 stdin流并且将该流给出的字符作为程序的输入。同样, stdout也是一个由操作系统控制的流,用来接收程序的输出信息。 不同程序的 stdin和 stdout流可以连接在一起。例如,A程序写入信 息到 stdout,然后调用程序B,程序B用 stdin流接收由程序A输出的 信息。这就是网络服务器最基础的转换机制。在前面的例子中,A就 代表网络服务器,B代表CGI应用程序。而 stdin流和 stdout流通常 被放在一起称为控制台。 2004.11.3 A|程序设计 14
2004.11.3 AI程序设计 14 第二部分:第8章 编写CGI程序 8.2.2.1 stdin与stdout • 在很多程序语言中都有对stdin的定义,它是一个专门用来接收来自 操作系统底层输入的流。程序(比如用Visual Prolog写的程序)可 以读取stdin流并且将该流给出的字符作为程序的输入。同样, stdout也是一个由操作系统控制的流,用来接收程序的输出信息。 • 不同程序的stdin和stdout流可以连接在一起。例如,A程序写入信 息到stdout,然后调用程序B,程序B用stdin流接收由程序A输出的 信息。这就是网络服务器最基础的转换机制。在前面的例子中,A就 代表网络服务器,B代表CGI应用程序。而stdin流和stdout流通常 被放在一起称为控制台
第二部分:第8章编写CGI程序 8.2.2.2CGI中的信息流 信息流是在客户向服务器发送请求时产生的。就像前边提到的,客户端会 把它的处理能力和所请求的信息通知Web服务器。图8.3说明了浏览器 (客户)向服务器发送的信息内容 The following Information is sent to the server by the client(here by the Mosaic b wser) Get'/testS/f1le. html htTp/1.o Roquest Accept: text/plain Header Accept: application/html Accept: text/x-htell Accept: text/html Accept: audio/ 图8.3浏览器(客户) Accept:*/* 向服务器发送的信息 User-Agent: NCSA Mosaic for the x window System/2, 4 libwww/2.12 modified [a blank line, containing only CRLF J 2004.11.3 A|程序设计 15
2004.11.3 AI程序设计 15 第二部分:第8章 编写CGI程序 8.2.2.2 CGI中的信息流 • 信息流是在客户向服务器发送请求时产生的。就像前边提到的,客户端会 把它的处理能力和所请求的信息通知Web服务器。图8.3说明了浏览器 (客户)向服务器发送的信息内容。 图8.3 浏览器(客户) 向服务器发送的信息