[WDC] 淺談 Web Server 及 Application Server (上)

拖稿了好久,終於寫出來啦...XD

這篇文章打算談 Web Server (網站伺服器) 及 Application Server (應用程式伺服器)。首先來談談「Server」(伺服器)這個詞,當你說:「買臺 Server 來架站吧!」這樣的話時,你口中的「Server」指的是一臺實體的機器,它也許是一臺配備較好的 PC 或者是特別設計的一臺電腦,上面一樣跑了一個作業系統,可以在上面執行應用程式;而如果是:「HTTP server 掛掉了,重新啟動一下吧~」,這裡講的「Server」,就是你用來提供某種服務(如:HTTP)的軟體。一個「server」就有許多不同表意,而且都很常見,不過本篇文章想談的是後者,也就是從軟體的角度來談 server。

Web server,顧名思義就是提供 web 服務的伺服器,比方說 apache httpdlighttpdIIS 等都是 web server 軟體,當你在機器上執行這些軟體時,它會在你電腦上開一個網路連接埠(port,預設是 80),如果你的電腦在 Internet 上,並且有一個獨立的 IP address,那別人就能夠透過 Internet 連接到你的電腦,然後它的網頁瀏覽器(browser)就會用 HTTP 這種通訊協定來跟你的 web server 進行溝通,看看是要取得某個網頁,或者是傳送什麼資料(像填表單、留言等等)到 web server 來。當 web server 發現你想要讀取某個頁面時,它就會把伺服器上的某個檔案傳給你,如果是一般的網頁,就是直接把 HTML 檔案內容吐給你,然後你的瀏覽器再根據 HTML 的標準來把內容作排版。

其實一個「純」的 web server 要做的事情就這麼簡單,當連線上來的使用者(後面以 client 代替)要什麼資料,我就吐什麼檔案回去,但是現今 web 的應用早就不只是 server 單方面吐資料了,client 這一方也會丟一些資料到 server 上作互動(比方說 blog、討論區等),也有可能 client 要求的是一個動態產生的頁面而不是一個靜態的網頁(如討論區,總不會每次連上來都看到同樣的東西)。這時 web server 就得想辦法處理這些需求了。

所以這時候就出現了 CGI 這個東西,這裡不想解釋太深的技術,簡單地說,它是 web server 上的一個程式,當 web server 設定好這個程式為一個 CGI 時,client 可以直接送一個讀取這個 CGI 的請求,然後這個 CGI 程式就會開始執行,它可以接收 client 送過來的資料,也可以送一些訊息回去給 client。

舉例來說,假設是個 blog 系統,總要有一個程式是能夠把使用者發表的文章放到資料庫裡,所以 web server 端可能準備好了一個 post 程式,這個程式可能是用 C 或是各種語言寫成的,只要 web server 的機器能夠執行它就 OK。當使用者 post 好文章,要發表時就會送一個請求到這個 CGI 程式,這個 CGI 程式就會接收這些文章的內容,然後塞到資料庫裡,最後可能還會送一些成功或失敗的訊息給 client,完成工作。同理,如果你是要讀取這 blog 的某篇文章,可能又送給 read 這樣的程式,並且帶了文章的 id,好讓 read 程式能夠到資料庫中找到文章,然後丟出來給你看。

所謂一張圖勝過千百句話,所以這裡有個示意圖:

當然,資料庫也有可能跟網頁伺服器放在同一個機器上面。

像現在最多人用的 PHP,也是一種 CGI(當然也是可以把 PHP 作成 apache 的一個模組),而它的好處就是做好了很多 web 請求、回應的處理,寫起 CGI 來簡單了不少,所以才會有那麼多人在寫 web 時,都是使用 PHP 來處理這些動態的請求及回應。

(待續...)

  • wendy

    写的非常好!

  • youyou

    下呢?很想继续看!

  • Ryanjao

    感謝分享 不過我看不到圖 可惜了 

  • Amy

    請問還會出下集嗎?
    文章非常淺顯易懂!!希望能出下集QQ

  • Pingback: IT及專案管理小菜鳥名詞解釋 | GG()