CGI圖文詳細(xì)教程(3)
發(fā)表時(shí)間:2023-08-09 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]怎樣發(fā)回文檔給客戶端對(duì)于CGI的初學(xué)者,一個(gè)公共的錯(cuò)誤是沒(méi)有正確格式化輸出,這樣服務(wù)器不能解釋它。CGI程序可以返回各種文件類型。它們可以返回給客戶端一張圖片、HTML文檔、明文文檔或者可能是一個(gè)音...
怎樣發(fā)回文檔給客戶端
對(duì)于CGI的初學(xué)者,一個(gè)公共的錯(cuò)誤是沒(méi)有正確格式化輸出,這樣服務(wù)器不能解釋它。
CGI程序可以返回各種文件類型。它們可以返回給客戶端一張圖片、HTML文檔、明文文檔或者可能是一個(gè)音頻夾。它們同樣可能返回其它文檔給引用?蛻舳吮仨氈滥姆N類型的文檔你要發(fā)送,這樣它就可以相應(yīng)地將它顯示出來(lái)。為了讓客戶端知道這個(gè),CGI程序必須通知服務(wù)器哪種類型的文檔將被返回。
為了通知服務(wù)器哪種類型的文檔你想送回,而不管這個(gè)文檔是一個(gè)完整的文檔或者一個(gè)引用,CGI要求你放置一個(gè)短的數(shù)據(jù)頭到輸出中。這個(gè)數(shù)據(jù)頭是一個(gè)ASCII文本,它包含了被linefeeds 或者 carriage返回的行,其后還跟著一個(gè)空白行。
在本例子中,你必須通過(guò)一個(gè)MIME類型通知服務(wù)器什么類型的文檔你要輸出。公共的MIME類型是一些比如html/text以及ASCII文本。
比如,為了返回HTML給客戶端,你的輸出代碼為:
Content-type: text/html
<HTML><HEAD>
<TITLE>output of HTML from CGI script</TITLE>
</HEAD><BODY>
<H1>Sample output</H1>
What do you think of <STRONG>this?</STRONG>
</BODY></HTML>
如果不輸出文檔,你可以只通知瀏覽器哪兒可以得到這個(gè)新文檔或者讓服務(wù)器自動(dòng)為你輸出新的文檔。
比如,假如你想從Gopher服務(wù)器中引用一個(gè)文件。折中情況,你應(yīng)該知道你想引用和輸出的完整的URL,代碼如下:
Content-type: text/html
Location: gopher://httprules.foobar.org/0
<HTML><HEAD>
<TITLE>Sorry...it moved</TITLE>
</HEAD><BODY>
<H1>Go to gopher instead</H1>
Now available at
<A HREF="gopher://httprules.foobar.org/0">a new location</A>
on our gopher server.
</BODY></HTML>
但是,現(xiàn)在的瀏覽器很是聰明,它會(huì)自動(dòng)將新文檔顯示給你而不會(huì)看到上面的內(nèi)容。如果不想輸出上面的HTML,NCSA HTTPd會(huì)為你輸出一個(gè)缺省的文檔來(lái)支持舊的瀏覽器。
如果你想引用你自己服務(wù)器上另外文件(沒(méi)有受到返回驗(yàn)證的保護(hù)),你不必做太多的工作,而只需要輸出一個(gè)不完全的URL,代碼如下:
Location: /dir1/dir2/myfile.html
這時(shí)服務(wù)器就會(huì)認(rèn)為客戶端沒(méi)有請(qǐng)求你的腳本,而是請(qǐng)求http://yourserver/dir1/dir2/myfile.html。你要注意文件類型以及數(shù)據(jù)頭對(duì)不對(duì)。
如果你想引用一個(gè)受到訪問(wèn)驗(yàn)證保護(hù)的文檔,你就不得不鍵如完整的URL,因?yàn)榭蛻舳撕头⻊?wù)器需要重新處理來(lái)建立你訪問(wèn)引用文檔的連接。