boa-0.94.13:Hello CGI

CGI是什麼

         CGI全稱是CommonGateway Interface,簡稱CGI,中文名叫做通用網關接口。

CGI程序就是符合CGI接口規範的程序,相對於WebServer來說也叫外部程序。

CGI接口規範的定義,使得WebSever具備了動態服務功能。客戶端或者瀏覽器通過HTTP協議的GETPOST方法將將form表單數據提交給Web Sever,然後Web Sever 再將客戶端的數據交給CGI程序處理,最後由CGI程序將用戶數據的處理結果返回給Web SeverWeb Sever將處理結果返回給客戶端。

Web Server收到客戶端的數據,怎麼傳遞給CGI程序? CGI程序處理後的結果怎麼傳回給Web Server?這些內容都在CGI規範裏定義了。具體參考http://www.ietf.org/rfc/rfc3875.txt

CGI程序

         CGI程序就是按照CGI規範,從WebServer獲取客戶端數據,然後進行相應處理,將處理結果返回給Web Server。因此CGI程序可以用任何編程語言實現,pythonshellCjava等等。

         linux下,CGI程序通過環境變量QUERY_STRING獲取客戶端數據,具有如下形式:”name1=value1&name2=value2&name3=value3”CGI程序通過標準輸出(stdout)將處理結果返回給WebServer

Hello CGI

         實現一個最簡單的CGI程序,不處理任何客戶端數據,只簡單返回類似Hello World的頁面。在實現CGI程序之前,需要有一個支持CGIWeb Sever運行起來,這裏使用BOA Web Sever。具體編譯安裝方法請參考文章《boa-0.94.13 Web服務器的編譯與運行》。

BOA CGI配置

只需修改一項,具體如下:ScriptAlias/cgi-bin/ /home/hyx/BOA/cgi-bin/

所有的cgi程序需要放入/home/hyx/BOA/cgi-bin/目錄。

假設BOA服務器爲http://192.168.181.100:8080

Shell實現

 

#!/bin/sh

echo "Content-type:text/html"

echo ""

echo "<html>"

echo"<head><title>cgiShellHello</title></head>"

echo "<body>"

echo '<h1>Hello World! <fontcolor="red">"CGI Shell"</font>  </h1>'

echo "</body>"

echo "</html>"

安裝:cp  cgiShellHello/home/hyx/BOA/cgi-bin/

測試:瀏覽器訪問http://192.168.181.100:8080/cgi-bin/cgiShellHello

<html>

<head><title>cgiCHello.c</title></head>

<body>

<h1>Hello World! <fontcolor="red">"CGI C"</font> </h1>

</body>

</html>


C實現

#include<stdio.h>

int main(int argc, char** argv)

{

printf("Content-type:text/html\n\n");

printf("<html>\n");

printf("<head><title>cgiCHello.c</title></head>\n");

printf("<body>\n");

printf("<h1>Hello World! <font color=\"blue\">\"CGI C\"</font>  </h1>\n");

printf("</body>\n");

printf("</html>\n");

return 0;

}


編譯:gcc  –o cgiCHello cgiCHello.c

安裝:cp  cgiCHello/home/hyx/BOA/cgi-bin/

測試:瀏覽器訪問http://192.168.181.100:8080/cgi-bin/cgiCHello

<html>

<head><title>cgiCHello.c</title></head>

<body>

<h1>Hello World! <fontcolor="blue">"CGI C"</font> </h1>

</body>

</html>


關鍵點

上面C Shell編程實現的CGI程序,一方面說明了CGI程序可以有任意語言編程實現,另一方面也說明了兩點:

一、Web ServerCGI程序通過標準輸出交互信息,C語言的printfShellecho都是標準輸出接口。

二、上述CGI程序返回的的HTML文件,但是在真正的HTML文件之前都有一句Content-type:text/htmlContent-type表明了後續的數據是什麼類型,最終到達客戶端瀏覽器時,瀏覽器根據此項指示決定如何處理後面的數據,如果是HTML就顯示HTML頁面。具體Content-type還有哪些內容,google&baidu吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章