FreeBSD資料處理方式(轉)

gugu99發表於2007-08-11
FreeBSD資料處理方式(轉)[@more@]

  當瀏覽器透過各種請求方法,試圖從伺服器獲得資料的時候,伺服器就必須將正確的資料返回給瀏覽器。瀏覽器並不關心伺服器是如何進行處理的,伺服器可以返回一個預先編輯好的HTML文件,也能根據請求動態生成返回的資料。而WW W的一大特點就是能用來傳送多媒體資料,並且這些資料的傳送是完全透明的,透過同樣的HTTP連線,可以傳送不同格式的聲音、圖象等資料。當伺服器僅僅用於返回靜態的HTML文件的時候,瀏覽器能夠很容易的識別其資料型別,但當伺服器不但用於返回靜態的HTML文件,還可以動態返回各種型別的多媒體資訊時,瀏覽器就不能僅僅從URL請求本身上判斷伺服器將會返回何種資料了。

  伺服器和瀏覽器之間是採用了另外的方式來標識資料的型別,這種方式下透過在傳輸真正的資料之前,預先傳輸一個資料的MIME型別的方法,來標識資料型別。

  • 多媒體檔案格式MIME

  最早的HTTP協議中,並沒有附加的資料型別資訊,所有傳送的資料都被客戶程式解釋為超文字標記語言HTML 文件,而為了支援多媒體資料型別,HTTP協議中就使用了附加在文件之前的MIME資料型別資訊來標識資料型別。

  MIME意為多目Internet郵件擴充套件,它設計的最初目的是為了在傳送電子郵件時附加多媒體資料,讓郵件客戶程式能根據其型別進行處理。然而當它被HTTP協議支援之後,它的意義就更為顯著了。它使得HTTP傳輸的不僅是普通的文字,而變得豐富多彩。

  每個MIME型別由兩部分組成,前面是資料的大類別,例如聲音audio、圖象image等,後面定義具體的種類。

  常見的MIME型別

超文字標記語言文字 .html,.html text/html
普通文字 .txt text/plain
RTF文字 .rtf application/rtf
GIF圖形 .gif image/gif
JPEG圖形 .ipeg,.jpg image/jpeg
au聲音檔案 .au audio/basic
MIDI音樂檔案 mid,.midi audio/midi,audio/x-midi
RealAudio音樂檔案 .ra, .ram audio/x-pn-realaudio
MPEG檔案 .mpg,.mpeg video/mpeg
AVI檔案 .avi video/x-msvideo
GZIP檔案 .gz application/x-gzip
TAR檔案 .tar application/x-tar

  Internet中有一個專門組織IANA來確認標準的MIME型別,但Internet發展的太快,很多應用程式等不及IANA來確認他們使用的MIME型別為標準型別。因此他們使用在類別中以x-開頭的方法標識這個類別還沒有成為標準,例如:x-gzip,x-tar等。事實上這些型別運用的很廣泛,已經成為了事實標準。只要客戶機和伺服器共同承認這個MIME型別,即使它是不標準的型別也沒有關係,客戶程式就能根據MIME型別,採用具體的處理手段來處理資料。而Web伺服器和瀏覽器(包括作業系統)中,預設都設定了標準的和常見的MIME型別,只有對於不常見的 MIME型別,才需要同時設定伺服器和客戶瀏覽器,以進行識別。

  由於MIME型別與文件的字尾相關,因此伺服器使用文件的字尾來區分不同檔案的MIME型別,伺服器中必須定義文件字尾和MIME型別之間的對應關係。而客戶程式從伺服器上接收資料的時候,它只是從伺服器接受資料流,並不瞭解文件的名字,因此伺服器必須使用附加資訊來告訴客戶程式資料的MIME型別。伺服器在傳送真正的資料之前,就要先傳送標誌資料的MIME型別的資訊,這個資訊使用Content-type關鍵字進行定義,例如對於HTML文件,伺服器將首先傳送以下兩行MIME標識資訊,這個標識並不是真正的資料檔案的一部分。

  Content-type: text/html

  注意,第二行為一個空行,這是必須的,使用這個空行的目的是將MIME資訊與真正的資料內容分隔開。

  • CGI與SSI

  普通伺服器返回的文件為靜態的HTML文件,文件中的內容為靜態的。而很多情況下,需要根據瀏覽器傳送請求時的條件改變瀏覽器返回的文件的內容。有些情況下,伺服器能提供更復雜的功能,如透過瀏覽器登記使用者的資訊等,這些情況就要求Web伺服器能根據請求執行一些特定的應用程式,來完成更復雜的服務功能。

  返回動態文件的基本方法是使用通用閘道器介面CGI,它定義了Web伺服器和由它執行的程式共享資訊的方法。這樣Web伺服器可以根據瀏覽器的請求,在伺服器端執行CGI程式,這個程式可以根據HTTP伺服器設定的各種環境變數、伺服器磁碟檔案中儲存的相關資訊、以及伺服器輸入的客戶端的請求資訊,建立動態網頁,並透過伺服器返回給瀏覽器。CGI 標準十分簡單,一個CGI程式就是一個標準Unix程式,它從命令列引數和標準輸入中獲得使用者在瀏覽器上輸入的資訊,使用環境變數獲得當前瀏覽客戶的設定情況,最後使用標準輸出輸出它建立的動態網頁。因此可以使用各種程式語言編寫 CGI程式,如sh、C或Perl。

  可以使用C這樣的編譯型語言來編寫CGI程式,也可以使用解釋型的語言來編寫CGI程式,這兩種方法各有優劣。使用C程式設計效率較高,但由於要處理的內容大部分為文字,因此需要大量的編寫、除錯工作,效率不高。而解釋型語言編寫、除錯程式比較容易,並且由於大部分解釋語言都有強大的內建文字處理功能,本身就比較適合處理文件,因此解釋語言在CGI 編寫方面有一定的優勢。例如Perl語言本身功能就十分強大,是用於CGI程式設計一種主要程式語言工具。但是解釋型的語言本身存在效率問題,伺服器執行解釋型的CGI程式時首先要將解釋語言器載入記憶體,這增加了伺服器的額外開銷。

  CGI需要啟動一個額外的CGI程式以建立動態文件,由於每處理一個CGI請求都要啟動一個程式,這樣就加重了伺服器端的負擔。另一種產生動態文件的方式是使用伺服器端分析文件,HTTP伺服器不啟動外部CGI程式來產生動態文件,而是由伺服器本身分析要返回的html文件,對其中的一些特殊標記進行解釋,並根據情況生成為符合HTML語法的具體資料,從而產生動態HTML文件。顯然伺服器端分析文件需要特殊功能的伺服器,因此與CGI不同,並不存在伺服器分析文件的標準。常見的伺服器端分析方式有SSI、PHP、ASP等,然而由於這並不是標準,Web伺服器可以有選擇的支援這些特殊功能。

  最基本的伺服器分析文件標準為SSI(Server Side Include),它能快速的處理一些簡單的標誌,使得建立動態HTML文件更為容易。SSI主要是採用宏替換的方式處理網頁,當一個使用SSI處理過的HTML 檔案被返回給瀏覽器時,有些與文件本身相關的資訊,如文件最後一次修改時間等原本在HTML文件中使用特殊的標記來表示的資訊,都會被替換為正確的資料。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-944589/,如需轉載,請註明出處,否則將追究法律責任。

相關文章