?
This document uses PHP Chinese website manual Release
本文闡述Apache中過濾器的用法。
相關(guān)模塊 | 相關(guān)指令 |
---|---|
|
|
Apache 2.0 及以后的版本中使用了過濾器鏈,使得應用程序能夠以高度靈活的、可配置的方式處理進入的數(shù)據(jù)和輸出的數(shù)據(jù),而無需關(guān)心這些數(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
在不同的字符集之間自動轉(zhuǎn)換。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)過濾器鏈的輸出過濾器來說是足夠的。相關(guān)的指令有:
SetInputFilter
,
SetOutputFilter
,
AddInputFilter
,
AddOutputFilter
,
RemoveInputFilter
,
RemoveOutputFilter
。
動態(tài)方法使輸出過濾器能夠進行靜態(tài)的或者靈活的動態(tài)配置成為可能,詳情請參見mod_filter
模塊文檔。相關(guān)指令有:
FilterChain
,
FilterDeclare
,
FilterProvider
。
一個更高級的指令AddOutputFilterByType
也被支持,但是可能存在一些問題,目前還不贊成使用它,而代之以動態(tài)配置。