乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Mongoose源碼剖析:外篇之web服務器

       alanlyh 2011-05-24
        Mongoose源碼剖析:外篇之web服務器 收藏
      引言
      在深入Mongoose源碼剖析之前,我們應該清楚web服務器是什么?它提供什么服務?怎樣提供服務?使用什么協(xié)議?客戶端如何唯一標識web服務器的資源?下面我們拋開Mongoose,來介紹一個web服務的這些通性。
      web服務器:通常是指一個計算機程序(web服務器是什么?),在World Wide Web上提供諸如web頁面的服務(提供什么服務?),使用HyperText Transfer Protocol(HTTP)(使用什么協(xié)議?)。當然web服務器也可以指運行這個程序的計算機或虛擬機,我們這里講到的web服務器是指程序。
      本文的主要內容如下:
      •1、web服務器
      •2、web服務器怎樣提供服務
      •3、web服務器使用的協(xié)議
      •4、客戶端如何唯一標識web服務器的資源
      •5、當前比較流行的web服務器
      1、web服務器
      web服務器的主要功能就是傳送web頁面給clients。這意味著,傳送HTML文檔和其它包含在文檔中的內容,諸如images、style sheets、JavaScripts。client通常是一個web瀏覽器或web爬蟲,使用HTTP發(fā)起一個指定資源的請求,web服務器用指定的內容響應請求,或當不能做指定請求時返回一個錯誤消息。請求的資源通常是web服務器的輔助存儲器上的一個實際文件,但是這不是必須,取決于web服務器的實現(xiàn)。
      雖然web服務器的主要功能是提供內容,但一個完整的HTTP實現(xiàn)還包括接收來自client的內容。這個功能用于提交web表單,包括上載文件。
      許多web服務器也支持服務器端腳本,例如,Apache Http服務器和PHP。這意味著,web服務器的行為可以寫成腳本分離到分散的文件中,然而實際的服務器軟件仍然保持不變。通常的,這個功能用于創(chuàng)建HTML文檔,相對于返回固定的文檔。這分別涉及到動態(tài)和靜態(tài)內容。前者主要檢索和(或)修改數(shù)據(jù)庫中的信息,然而后者通常更快和更容易緩存。
      web服務器并不總是用在萬維網(wǎng)上,也可以嵌入到諸如打印機、路由器、網(wǎng)絡攝像機和本地網(wǎng)絡,這時web服務器可用于系統(tǒng)的監(jiān)視部分,或設備的管理部分。
      2、web服務器怎樣提供服務
      你想過沒有,當你在瀏覽器中看到我這篇日志的時候,它是如何顯示到你的瀏覽器的呢?雖然這個過程很大程度上去取決于web服務器,但他們仍有共性。典型的,當用戶通過點擊一個超鏈接或在瀏覽器的地址欄中輸入一個URL瀏覽一個web站點。但是同一個站點如何同時在網(wǎng)絡上的不同計算機上顯示的呢?
      以我博客的主頁為例,當你在瀏覽器的地址欄中輸入http://home.cnblogs.com/skynet/時,通過一個Internet連接,通過將域名轉換為ip地址,然后定位到博客園服務器,你的瀏覽器初始化一個與博客園web服務器的連接。web服務器上存儲了我的博客里所有的資源,如我寫的每篇文章、文章中用到的圖片、還有博客模板中用到的css、腳本等等。
      一旦連接建立,瀏覽器使用HTTP從web服務器請求數(shù)據(jù),服務器傳輸數(shù)據(jù)給你的瀏覽器。瀏覽器接著轉換和格式化數(shù)據(jù)顯示到你的瀏覽器中。類似的,web服務器可以同時發(fā)生文件到多個client,允許多個client同時瀏覽同一頁面。
       
      圖1、Web客戶端與服務器端的交互
      當然,我這里描述的比較簡單,更詳細的步驟請參考:
      •What really happens when you navigate to a URL
      •當你輸入一個網(wǎng)址的時候,實際會發(fā)生什么?
      3、web服務器使用的協(xié)議
      相信通過上面的介紹,你已經(jīng)知道了web服務器與client是通過HTTP來交互的。關于HTPP,我以前寫過博文介紹過:HTTP協(xié)議及其POST與GET操作差異 & C#中如何使用POST、GET等,我非常自信的推薦你去閱讀以下這篇文章,比較詳細地介紹了HTTP及其與client的交互過程,我這里就不再累述了。
      4、客戶端如何唯一標識web服務器的資源
      URI,沒錯就是它統(tǒng)一資源定位符(Uniform Resource Identifiers),用它唯一標識Internet的一個web頁面。不過你可能聽的更多的是URL,它是Uniform Resource Location的縮寫,譯為“統(tǒng)一資源定位符”。通俗地說,URL是Internet上用來描述信息資源的字符串,主要用在各種WWW客戶程序和服務器程序上。采用URL可以用一種統(tǒng)一的格式來描述各種信息資源,包括文件、服務器的地址和目錄等。
      URL的格式,URL的格式由下列三部分組成:
      •第一部分是協(xié)議(或稱為服務方式)
      •第二部分是存有該資源的主機IP地址(有時也包括端口號)
      •第三部分是主機資源的具體地址,如目錄和文件名等。
      第一部分和第二部分之間用“://”符號隔開,第二部分和第三部分用“/”符號隔開。第一部分和第二部分是不可缺少的,第三部分有時可以省略。其實關于://不是必須的,只是萬維網(wǎng)當初是這樣設計的,請Google or 百度《萬維網(wǎng)之父說http://中的兩道斜杠其實多余》。完整的URL的格式如下所示:
      scheme://username:password@domain:port/path?query_string#anchor
      scheme就是上面我們所說的協(xié)議部分,web服務器中通常用的就是HTTP和HTTPS,但它還可以是gopher、wais、ftp、mailto。
      username:password@domain:port就是我們上面說的第二部分,一般我們都不用輸入用戶名和密碼、還有端口(HTTP協(xié)議的端口號是80,一般默認都用的這個),而只是直接輸入域名orIP地址。
      path?query_string#anchor就是我們上面說的第三部分,path指定資源在服務器上的路徑(注意:像這種archive/2010/05/18/1738301.html,不一定就是web服務器上的絕對路徑,而是經(jīng)過URL重寫之后的路徑,但不管怎么樣說,它還是唯一標識了資源在服務器上的路徑);后面的query_string包含傳遞給web應用程序(如CGI)的數(shù)據(jù)。查詢字符串以鍵/值對的形式,并且每個鍵值對之間用&隔開,如userId=skynet&password=123456;最后當使用HTTP,#anchor表示web頁面的某一個部分。
      以HTTP協(xié)議及其POST與GET操作差異 & C#中如何使用POST、GET等為例它的URL是:http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html
      上面說到URI和URL,肯定還有人不知道他們的區(qū)別,下面我來解釋一下。URI:Uniform Resource Identifier,統(tǒng)一資源標識符;URL:Uniform Resource Locator,統(tǒng)一資源定位符;URN:Uniform Resource Name,統(tǒng)一資源名稱。 其中,URL、URN是URI的子集。他們的關系如下圖所示:
       
      圖2、URI、URL、URN的關系
      Web上地址的基本形式是URI,它代表統(tǒng)一資源標識符。有兩種形式:URL、URN。URL與URN好比,URN就像一個人的名字,然而URL就像這個人所在的位置地址。換句話說,URN定義了一個元素的標識符,URL提供方法來找到它。即URN不依賴于位置,并且有可能減少失效連接的個數(shù)。但是其流行還需假以時日,因為它需要更精密軟件的支持。
      5、當前比較流行的web服務器
      下面是目前比較流行的幾個web服務器軟件,及他們2010年的市場份額。
      Vendor
       Product
       Web Sites Hosted (millions)
       Percent
       
      Apache
       Apache
       111
       54%
       
      Microsoft
       IIS
       50
       24%
       
      Igor Sysoev
       nginx
       16
       8%
       
      Google
       GWS
       15
       7%
       
      lighttpd
       lighttpd
       1
       0.46%
       

      而我現(xiàn)在所研究的web服務器軟件不在其中,之所以選Mongoose來研究,原因有三:
      •Mongoose比較小巧、容易使用,而且能夠嵌入到現(xiàn)有的應用程序中。
      •麻雀雖小,五臟俱全!Mongoose雖小巧,它具有基本的web服務器應該有的功能。通過研究它,可以更快地學習到web服務器軟件的特性、實現(xiàn)細節(jié)。
      •Mongoose是開源的,可以自由使用。
      來源: http://www.cnblogs.com/skynet/archive/2010/07/24/1784110.html

      本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/expleeve/archive/2010/09/02/5859359.aspx

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多