1. 程式人生 > >web伺服器之mongoose:簡介

web伺服器之mongoose:簡介

原文網址:https://blog.csdn.net/yangxuan12580/article/details/51659790

 

引言

在深入Mongoose原始碼剖析之前,我們應該清楚web伺服器是什麼?它提供什麼服務?怎樣提供服務?使用了什麼協議?客戶端如何唯一標識web伺服器的資源?下面我們就拋開Mongoose,來介紹一個web服務的這些通性。

web伺服器:指駐留於因特網上某種型別計算機的程式(web伺服器是什麼)。當Web瀏覽器(客戶端)連到伺服器上並請求檔案時,伺服器將處理該請求並將檔案傳送到該瀏覽器上(提供什麼服務),附帶的資訊會告訴瀏覽器如何檢視該檔案(即檔案型別)。伺服器使用HTTP(使用什麼協議)進行資訊交流,這就是人們常把它們稱為HTTPD伺服器的原因。Web伺服器不僅能夠儲存資訊,還能在使用者通過Web瀏覽器提供的資訊的基礎上執行指令碼和程式。

本文的主要內容如下:

  • 1、web伺服器
  • 2、web伺服器怎樣提供服務
  • 3、web伺服器使用的協議
  • 4、客戶端如何唯一標識web伺服器的資源
  • 5、當前比較流行的web伺服器

1、web伺服器

web伺服器的主要功能就是傳送web頁面給clients。這就意味著,傳送HTML文件和其他包含在文件中的內容,諸如images、style sheets。client通常是一個web瀏覽器或web爬蟲,使用HTTP發起一個指定資源的請求,web伺服器用指定的內容響應請求,或當不能指定請求時返回一個錯誤訊息。請求的資源通常是web伺服器的輔助儲存器上的一個實際檔案,但是這不是必須,取決於web伺服器的實現。

雖然web伺服器的主要功能是提供內容,但一個完整的HTTP實現還包括接收來自client的內容。這個功能用於提交web表單,包括上載檔案。

許多web伺服器也支援伺服器端指令碼,例如,Apache HTTP伺服器和PHP。這意味著,web伺服器的行為可以寫成指令碼分離到分散的檔案中,然而實際的伺服器軟體仍然保持不變。通常的,這個功能用於建立HTML文件,相對於返回固定的文件。這分別涉及倒動態和靜態內容。前者主要檢索或修改資料庫中資訊,然後後者通常更快和更容易快取。

web伺服器並不總是用在全球資訊網上,也可以嵌入道諸如印表機、路由器、網路攝像機和本地網路中等,這時web伺服器可用於系統的監視部分,或裝置的管理部分。(這部分我不太明白是怎麼實現的~~)

 

2、web伺服器怎樣提供服務

 

你想過沒有,當你在瀏覽器中看這篇日誌的時候,它是如何顯示在你的瀏覽器中的?雖然這個過程很大程度上取決於web伺服器,但它們仍有共性。典型的,當用戶通過點選一個超連結或在瀏覽器的位址列中輸入一個URL瀏覽一個web站點。但是同一個站點如何同時在網路上的不同計算機上顯示的呢?

以我的部落格的首頁為主,當你在瀏覽器的位址列中輸入http://blog.chinaunix.net/uid/26548237.html時,通過一個Internet連線,通過將域名轉換為ip地址,然後定位到CU伺服器,你的瀏覽器初始化一個與CU伺服器的連線。web伺服器上儲存了我的部落格中的所有資源,如寫的這篇文章、文章中用到的圖片、還有部落格模板中用到的css、指令碼等等。

一旦連線建立,瀏覽器使用HTTP從web伺服器請求資料,伺服器傳輸資料給你的瀏覽器。瀏覽器接著轉換和格式化資料顯示倒你的瀏覽器中。類似的,web伺服器可以同時傳送檔案到多個client,允許多個client同時瀏覽同一個網頁。

              

                                  圖1 web客戶端與伺服器端的互動

當然,這裡描述的比較簡單,更詳細的步驟請參考:

3、web伺服器使用的協議

 

相信通過上面的介紹,你已經知道了web伺服器與client是通過HTTP來互動的。關於HTTP,請參考:(http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html),這篇文章比較詳細的介紹HTTP及其與client的互動過程,這裡就不在累述了。

 

4、客戶端如何唯一的標識web伺服器的資源

 

URI,沒錯就是它,統一資源識別符號(Uniform Resource Identifiers),用它唯一的標識Internet的一個web頁面。不過,你可能聽的更多的是URL,它就是Uniform Resource Location的縮寫,譯為“統一資源定位符”。通俗的說,URL是Internet上用來描述資訊資源的字串,主要用在各種WWW客戶程式和伺服器程式上。採用URL可以用一種統一的格式來描述各種資訊資源,包括檔案、伺服器地址和目錄等。

 

URL的格式,URL的格式由下列三部分組成:

  • 第一部分是協議(或稱服務方式)
  • 第二部分是存有所請求資源的主機IP地址(有時也包括埠號)
  • 第三部分是主機資源的具體地址,如目錄和檔名等

第一部分和第二部分之間用“://”符號隔開,第二部分和第三部分用“/"符合隔開。第一部分和第二部分是不可缺少的,第三部分可以省略。其實關於://不是必須的,只是全球資訊網當初是這樣設計的,請Google or 百度《全球資訊網之父說http://中的兩道斜槓其實多餘》。完整的URL的格式如下所示:

 

scheme://username:[email protected]:port/path?query_string#anchor

scheme就是上面我們所說的協議部分,web伺服器中通常用的就是HTTP和HTTPS,但它還可以是gopher、wais、ftp、mailto。

usename:[email protected]:port就是我們上面說的第二部分,一般我們都不用輸入使用者名稱和密碼、還有埠(http協議的埠號是80,一般預設都用這個),而只是直接輸入域名或者ip地址。path?query_string#anchor就是我們說的第三部分,path指定資源在伺服器上的路徑(注意,不一定是web伺服器上的絕對路徑,而是經過URL重寫之後的路徑,但不管怎麼說,它還是唯一標識了資源在伺服器上的路徑);後面的query_string包含傳遞個web應用程式(如CGI)的資料。查詢字串以鍵/值對的形式,並且每個鍵值對之間用&隔開,如useId=aa&password=13;最後當使用HTTP,#anchor表示web頁面的某一個部分。

上面說到URI和URL,肯定還有人不知道它們的區別,下面解釋下。URI:統一資源識別符號;URL:統一資源定位符;URN:統一資源名稱。其中,URL、URN是URI的子集。它們的關係如下圖所示:

                                                                             

Web上地址的基本形式是URI,它代表統一資源識別符號。有兩種形式:URL、URN。二者好比,URN就像一個人的名字,然後URL就像這個人所在的位置地址。換句話說,URN定義了一個元素的識別符號,URL提供方法找到它。即URN不依賴於位置,並且有可能減少失效連線的個數。

 

5、當今比較流行的幾款web伺服器

 

下面是目前比較流行的幾個web伺服器軟體:Apache、IIS、nginx、lighttpd等等。

而今天所研究的web伺服器軟體不再其中,之所以選Mongoose來研究,原因有三:

  • Mongoose比較小巧,容易使用,而且能夠嵌入到現有的應用程式中;
  • 麻雀雖小,五臟俱全!Mongoose雖小巧,它具有基本的web伺服器應該有的功能。通過研究它,可以更快地學習倒web伺服器軟體的特性和實現細節;
  • Mongoose是開源的,可以自由使用;