Apache HTTP Server 版本2.2

本文闡述Apache中過濾器的用法。
| 相關模塊 | 相關指令 |
|---|---|
Apache 2.0 及以后的版本中使用了過濾器鏈,使得應用程序能夠以高度靈活的、可配置的方式處理進入的數(shù)據(jù)和輸出的數(shù)據(jù),而無需關心這些數(shù)據(jù)來自哪里。我們可以預處理進入的數(shù)據(jù)和后處理(post-process)輸出的數(shù)據(jù)。這些過程基本上獨立于傳統(tǒng)的請求處理階段。
標準Apache發(fā)行版中的一些過濾器實例:
mod_include實現(xiàn)了服務端包含。mod_ssl實現(xiàn)了SSL加密(https)。mod_deflate實現(xiàn)了實時壓縮/解壓。mod_charset_lite在不同的字符集之間自動轉換。mod_ext_filter將一個外部程序作為過濾器運行。Apache還在內(nèi)部使用許多過濾器來對請求執(zhí)行諸如分塊、字節(jié)層次處理(byte-range handling)等功能。
可以從modules.apache.org或別處得到許多通過第三方過濾器模塊實現(xiàn)的應用程序。其中的一些是:
Apache 2.1 及以后的版本中包含的mod_filter模塊允許過慮器鏈在運行時進行動態(tài)配置。舉例來說,你可以在代理無法得到原始服務器發(fā)送的初始信息的情況下,安裝一個使用不同的過濾器來分別重寫HTML、處理JPEG圖片的代理。這是通過使用一個過濾器束(filter harness)來工作的,該過慮器束在運行時根據(jù)實際內(nèi)容的不同將任務分配給不同的提供者(provider)。任何一個過濾器都何以被直接插入到過濾器鏈中并無條件的運行,或者動態(tài)的作為一個提供者(provider)插入。例如:
有兩種使用過濾器的方法:簡單方法和動態(tài)方法。通常,你應當使用兩者之一;混合使用它們可能會導致意想不到的后果(雖然簡單方法的輸入過濾器可以和簡單或動態(tài)方法的輸出過濾器混合使用)。
簡單方法是配置輸出過濾器的唯一方法,并且對于需要靜態(tài)過濾器鏈的輸出過濾器來說是足夠的。相關的指令有:
SetInputFilter,
SetOutputFilter,
AddInputFilter,
AddOutputFilter,
RemoveInputFilter,
RemoveOutputFilter 。
動態(tài)方法使輸出過濾器能夠進行靜態(tài)的或者靈活的動態(tài)配置成為可能,詳情請參見mod_filter模塊文檔。相關指令有:
FilterChain,
FilterDeclare,
FilterProvider 。
一個更高級的指令AddOutputFilterByType也被支持,但是可能存在一些問題,目前還不贊成使用它,而代之以動態(tài)配置。