Apache 2 のフィルタ
mod_filter
mod_deflate
mod_ext_filter
mod_include
mod_charset_lite
FilterChain
FilterDeclare
FilterProtocol
FilterProvider
AddInputFilter
AddOutputFilter
RemoveInputFilter
RemoveOutputFilter
ExtFilterDefine
ExtFilterOptions
SetInputFilter
SetOutputFilter
Apache 2.0 以降ではフィルタチェイン機能が使え、データが
どこから来るかに関わらず、非常に柔軟で調整しやすい方法で
入出力データを処理できます。
入力データをプリプロセスしたり出力データをポストプロセスしたりできます。
この処理は、これまでのリクエスト処理フェーズとは根本的に独立した
処理になります。
Apache の標準的なディストリビューションでのフィルタ例は :
- mod_include で、サーバサイドインクルード SSI を実装しています
- mod_ssl で、SSL 暗号化 (https) を実装しています。
- mod_deflate で、on-the-fly のデータ圧縮・展開機能を実装しています。
- mod_charset_lite で、異なる文字セット間の変換を実装しています。
- mod_ext_filter で、外部プログラムをフィルタとして実行します。
チャンキングやバイトレンジ処理といった処理を行うために
Apache は、内部的にいくつかのフィルタを使っています。
様々なアプリケーションがサードパーティ製のフィルタモジュールとして
実装されていて、modules.apache.org
などから取得できます。たとえば :
- HTML や XML の処理と書き換え
- XSLT 変換と XIncludes
- XML 名前空間のサポート
- ファイルアップロード処理や HTML フォームのデコード
- 画像処理
- PHP スクリプトなどのアプリケーションに対する保護機能
- テキストの検索置換・編集機能
フィルタの使い方
フィルタの使い方には二つの方法があります: シンプルとダイナミック。
一般的にはどちらかのみを使ったほうがよいでしょう。
これらを組み合わせて使用すると、予期しない結果になるかもしれません。
(とはいえ、シンプルな入力フィルタとシンプルあるいはダイナミックな
出力フィルタを組み合わせることは自由に出来ます。)
シンプルな方法は、入力フィルタのみを設定し、必要に応じて
静的なフィルタチェインを出力フィルタとして設定する方法です。
関連するディレクティブは、
SetInputFilter,
SetOutputFilter,
AddInputFilter,
AddOutputFilter,
RemoveInputFilter,
RemoveOutputFilter
になります。
ダイナミックな方法は、静的なものとフレキシブルなものを両方有効にする
方法で、mod_filter のページで述べられています。
関連するディレクティブは、
FilterChain,
FilterDeclare,
FilterProvider
になります。
ディレクティブ AddOutputFilterByType
はまだサポートされていますが、種々の問題をはらんでおり、非推奨です。
ダイナミックな設定方法を代わりに使ってください。