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