我们知道 CGI 除了文本外还可以输出其他不同的资料例如图片、声音等数据流,为了让
WEBSEVER能辨认不同的数据型态,所以CGI 的输出包括两部分,前面的是相应头告诉
Server要输出的信息属于何种MIME类型,后面才是我们要输出的数据;具体上响应头与
输出正文、响应头与响应头之间是用两个空行作为分隔的,通常大部分的CGI程序都会有
一行 print "Content-type: text/html\n\n"; 下面跟着才是要输出的信息。这个响应
头地意思是告诉Server要输出的信息的MIME类型是文本/超文本。如果你是要输出的是一
张图片的print "Content-Type: image/gif\n\n"; 跟着是图片的数据流就可以了。
当然响应头的作用不仅仅是这些,利用响应头我们在编写CGI时大有文章可作,下面有几
个重要的响应头是在我们写程序时也是很有用的:
print "Pragma:no-cache\n\n";
这个响应头是通知浏览器不要把该页面保存在缓冲区中
print "Location: URL"
返回一个指定的URL,有时如果你想让程序动态得返回一个URL给来访者就得用到这个响应
头,但每次只能返回一个URL,举个应用的例子,当你主页访问量较大而想减轻服务器的
负担,那么可以建立多个镜像站点,通过CGI随机发送镜像站点的URL从而减轻服务器的负担。
print "Set-Cookie:name1=value;name2=value2;exprires=DATE;PATH=PATH;domiam=DOMAIN_NAME;SECURE\n";
CGI这个响应头就是利用这个响应头在来访者的计算机上设置Cookie的,如果你想知道如何
具体用CGI在来访者的计算机上设置Cookie那么请看本站的关于CGI读写COOKIE的编程。
如果CGI程式所送出的结果不希望经过 Server 的 包 装,而希望直接送到客户端的浏览器,
则CGI必须负责送出完整的超本文传输协定(HTTP)讯息 封包(Message Packaged)。当Server
收到CGI程式输出的结果时,会先检查是否有 "HTTP/1.0" 的讯 息。如果有则Server会认为
以下的讯息已 经包 含 了完整的超本文传输协定(HTTP)回应,并将其直接送至客户端的浏
览程式(Browser)。以下是一简短的范例 ∶
print "HTTP/1.0 200 OK\n"
print "Date: Tuesday, 31-May-94 19:04:30 GMT\n";
print "erver: WebSite 2.0\n";
print "MIME-version: 1.0\n"
print "Content-type: text/html";
print "Last-modified: Sunday, 15-May-94 02:12:32 GMT\n";
print "Content-length: 4109\n\n";
print " ";
print "";
为了让WEBSERVER知道不必为CGI生成响应头,CGI程序的文件明必须有前缀 "HPH-" 或 "nph-",
例如nph-mycgi.cgi
Status: 说明CGI执行的况状,其值必须是超本文传输协定(HTTP)所认可的。
原文地址:http://fanqiang.chinaunix.net/a4/b8/20010822/1000001164.html