新浪網

  新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(81):超文本傳輸協議HTTP
 


FreeBSD連載(81):超文本傳輸協議HTTP

http://www.sina.com.cn 2000年1月22日 18:15 王波

第9章 設置WWW服務

  由于能夠提供圖形、聲音等多媒體數據,WWW已經成為Internet使用者最喜愛的訪問方式,當前的大部分 Internet流量均是由WWW瀏覽產生的。由于這種多媒體瀏覽方式的幫助,Internet不再僅僅是由專業人員 使用,對計算機了解不多的普通使用者也能進入Internet的世界,享受Internet帶來的新鮮內容。

  雖然WWW服務非常之流行,然而要建立一個WWW服務器以提供WWW服務卻仍然屬于專業領域的任務。當前能夠 提供WWW服務的軟件有很多種,分別運行在不同的操作系統之上,其中有一些軟件能夠運行在個人使用的Windows桌 面系統上,具備圖形界面且易于配置,因此很多希望嘗試提供WWW服務的使用者常常會安裝并試運行過這些系統。然而這些 系統基本上是只能提供極其有限的服務能力的系統,如果要想提供一個能夠允許正常的Internet訪問的服務器系統, 至少應該使用Windows NT系統。當要求更高的性能和穩定性系統時,就應該選擇Unix。FreeBSD顯然是 使用Intel平台系統時,可供選擇的極其優秀的WWW服務器操作系統。

  • 基本概念

  雖然普通使用者只需要了解一些常識性的概念,如URL、HTML等,就能通過瀏覽器很輕松的訪問Internet 上的Web資源。然而要建立一個Web服務器,卻需要更多的相關概念,如HTTP、MIME、CGI等,這樣才能 了解Web服務器的設置參數,以正確設置這些參數建立一個真正可用的服務器系統。

  • 超文本傳輸協議HTTP

  用于支持WWW瀏覽的網絡協議為HTTP,這是一種最基本的客戶機/服務器的訪問協議。瀏覽器向服務器發送請 求,而服務器回應相應的網頁。HTTP協議從1990年開始出現,發展到當前的HTTP 1.1標准,已經有了相當多 的擴展,然而其最基本的實現是非常簡單的,服務器需要進行的額外處理相當少,這也是為什么Web服務器軟件如此眾多的 原因之一。

  • 請求方法
  • 通常,HTTP協議使用端口80來提供客戶訪問,因此也可以使用其他的網絡軟件,如telnet,模擬客戶向服務器發送請求,來查看HTTP的傳輸方式。

    $ telnet webserver 80
    Trying 192.168.0.1...
    Connected to webserver.
    Escape character is '^]'.
    GET /index.html

      當telnet顯示了Connect等信息建立了連接之后,服務器就等待使用者輸入請求,而不進行任何提示。 上例中,使用者輸入GET /index.html指令,則服務器立即將相應的網頁返回,然后關閉連接。

      客戶程序向服務器發送的請求可以有不同的類型,這樣服務器可以根據不同的請求類型進行不同的處理。在HTTP 1.0中,定義了三種最基本的請求類型,GET、POST和HEAD,這些請求方法的實現方式均與上例相同,客戶程序 用大寫指令將請求發送給服務器,后面跟隨具體的數據。

      GET請求最為常見,它后面跟隨一個網頁的位置,服務器接受請求并返回其請求的頁面。除了頁面位置作參數之外 ,請求還可以跟隨協議的版本如HTTP/1.0等作為參數,以發送給服務器更多的信息。

      POST請求要求服務器接收大量的信息,除了POST后面跟隨的參數之外,瀏覽器還會在后面持續發送數據,讓 服務器進行處理。通常,POST方法是和CGI程序分不開的,服務器應該啟動一個CGI程序來處理POST發送來的數 據。

      HEAD請求在客戶程序和服務器之間進行交流,而不會返回具體的文檔。當使用GET和POST方法時,服務器 最后都將結果文檔返回給客戶程序,瀏覽器將刷新顯示。而HEAD請求則不同,它僅僅交流一些內部數據,這些數據不會影 響瀏覽的過程。因此HEAD方法通常不單獨使用,而是和其他的請求方法一起起到輔助作用。一些搜尋引擎使用的自動搜索 機器人使用這個方法來獲得網頁的標志信息,或者進行安全認証時,使用這個方法來傳遞認証信息。

      除了這三種最常見的訪問方法之外,在HTTP 1.1中還定義了更多的訪問方法類型,如PUT,用于將網頁放 置到正確位置,DELETE用于刪除相關文檔等。這些方法并不常用,因而大部分Web服務器軟件并沒有實現他們。然而 對于特定場合他們還是非常有用的,例如使用軟件編輯網頁時,網頁編輯器可以使用這些方法,管理不同的網頁。

      如果服務器不支持客戶發送的請求方法,服務器將返回錯誤并立即關閉連接。

  • 服務器對HTTP的處理方式
  •   HTTP協議的這種請求/回應的模式,使得服務器只能根據客戶程序的請求發送回信息,這樣的好處是客戶具備很 大的自由度,可以任意訪問服務器上的信息。因此就存在多個客戶同時訪問一個服務器的問題。

      在Unix下,由一個守護進程來監視來自客戶程序的請求,當守護進程接受到一個請求時,就建立一個新的進程對 請求進行處理。通常服務器能創建足夠多的新進程來回應客戶的請求,然而如果同時發送請求的客戶太多,那么服務器就有可 能出現超載的情況,創建進程的速度跟不上眾多客戶發送請求的速度,這樣就造成了服務器對外表現反應遲緩。此外,為了提 高用戶使用瀏覽器時的性能,現代瀏覽器還支持并發的訪問方式,瀏覽一個網頁時同時建立多個連接,以迅速獲得一個網頁上 的多個圖標,這樣能更快速完成整個網頁的傳輸。但是對服務器來講,更增加了瞬間負載。

      顯然,造成這個問題的關鍵是服務器對HTTP協議的處理方式,一次請求就要建立一個連接,在網頁上充滿了多個 較小的圖象文件的時候,那么服務器和客戶程序之間的大部分工作是用于建立連接,而真正用于傳遞數據的工作卻很輕松。因 此,更好的利用現有連接,減少建立連接的消耗,就需要能在一次連接中回應多個請求。在HTTP 1.1中提供了這種持 續連接的方式,而下一代HTTP協議:HTTP-NG更增加了有關會話控制、丰富的內容協商等方式的支持,來提供更高 效率的連接。

      除了針對每次請求都建立一個新進程的處理方式之外,HTTP守護進程也能使用其他的方式處理多個請求,例如使 用多線程,或者使用異步方式在不同請求之間進行切換,就能在一個進程內處理多個請求。雖然比起建立新進程來講,這樣消 耗的處理器資源略微減少,但是并不能從根本上消除并發訪問帶來的處理器資源不足的問題。一般使用線程和異步方式的程序 較為復雜,不能很容易擴充對新特性的支持,并有可能因為程序內部要自己進行同步等原因也會造成資源消耗。使用這些方式 ,雖然對處理靜態的網頁有好處,但對于執行CGI程序,仍然要創建子進程進行處理。因此,大部分運行在Unix上的守 護程序仍然使用多進程的方式,這種方式簡單卻有效。

      即使對于使用多進程方式進行處理的Web服務器,也有不同的處理方式。Unix系統中提供了超級服務器進程inetd ,因此簡單的Web服務器可以使用inetd來啟動真正的Web服務器。然而,inetd效率不高,使用in etd的服務器不能用作高負載的服務器系統,因此高負載的Web服務器,本身來監聽客戶連接請求,并負責啟動子進程真 正處理客戶的請求。

      如果選擇的服務器程序的確需要使用inetd來啟動,可以選擇與inetd功能相同,但效率更高的超級服務器 進程tcpserver,它可以比inetd更高效的啟動服務進程。

    未完,待續。。。  



     
      新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(81):超文本傳輸協議HTTP


    網站簡介 | 網站導航 | 廣告服務 | 中文閱讀 | 聯系方式 | 招聘信息 | 幫助信息

    Copyright(C) 1999 SINA.com, Stone Rich Sight. All Rights Reserved

    版權所有  四通利方 新浪網