Filtros
Este documento describe cómo usar filtros en Apache.
Filtros en Apache 2
mod_filter
mod_deflate
mod_ext_filter
mod_include
mod_charset_lite
mod_reflector
mod_buffer
mod_data
mod_ratelimit
mod_reqtimeout
mod_request
mod_sed
mod_substitute
mod_xml2enc
mod_proxy_html
mod_policy
FilterChain
FilterDeclare
FilterProtocol
FilterProvider
AddInputFilter
AddOutputFilter
RemoveInputFilter
RemoveOutputFilter
ReflectorHeader
ExtFilterDefine
ExtFilterOptions
SetInputFilter
SetOutputFilter
La cadena de filtrado está disponible en Apache 2.0 y superiores.
Un filtro es un proceso que se aplica a los datos que
se reciben o se envían por el servidor. Los datos enviados
por los clientes al servidor son procesados por filtros de
entrada mientras que los datos enviados por el servidor se
procesan por los filtros de salida. A los datos se les
pueden aplicar varios filtros, y el orden en que se aplica cada
filtro puede especificarse explícitamente.
Todo este proceso es independiente de las tradicionales fase de
peticiones
Algunos ejemplos de filtrado en la distribución estándar de Apache son:
- mod_include, implementa server-side includes (SSI).
- mod_ssl, implementa cifrado SSL (https).
- mod_deflate, implementa compresión y descompresión en el acto.
- mod_charset_lite, transcodificación entre diferentes juegos de caracteres.
- mod_ext_filter, ejecuta un programa externo como filtro.
Los filtros se usan internamente por Apache para llevar a cabo
funciones tales como chunking y servir peticiones de
byte-range. Además, los módulos contienen filtros que se
pueden seleccionar usando directivas de configuración al
iniciar el servidor.
Una mayor amplitud de aplicaciones son implementadas con módulos de
filtros de terceros que estan disponibles en modules.apache.org y en otros lados.
algunos de ellos son:
- Procesamiento y reescritura de HTML y XML.
- Transformaciones de XSLT y XIncludes.
- Soporte de espacios de nombres en XML.
- Manipulación de carga de archivos y decodificación de los
formularios HTML.
- Procesamiento de imágenes.
- Protección de aplicaciones vulnerables, tales como scripts PHP
- Edición de texto de búsqueda y remplazo.
Filtrado Inteligente
mod_filter, incluido en Apache 2.1 y posterior,
habilita la cadena de filtrado para ser configurada dinámicamente en
tiempo de ejecución. Así, por ejemplo, usted puede configurar un
proxy para que reescriba HTML con un filtro de HTML y imágenes JPEG
con filtros completos por separado, a pesar de que el proxy no tiene
información previa sobre lo que enviará al servidor de origen.
Esto funciona usando un engranaje filtros, que envía a diferentes
proveedores dependiendo del contenido en tiempo de ejecución.
Cualquier filtro puede ser, ya sea insertado directamente en la
cadena y ejecutado incondicionalmente, o usado como proveedor y
añadido dinámicamente
Por ejemplo:
- Un filtro de procesamiento de HTML sólo se ejecuta si el
contenido es text/html o application/xhtml + xml.
- Un filtro de compresión sólo se ejecuta si la entrada es un tipo
compresible y no está ya comprimida.
- Se insertará un filtro de conversión de juego de caracteres,
si un documento de texto no está ya en el juego de caracteres
deseado.
Filtros expuestos como un servicio HTTP
Los filtros pueden ser usados para procesar contenido originado
desde el cliente además de usarse para procesar el contenido originado
desde el propio servidor usando el módulo mod_reflector.
mod_reflector acepta peticiones POST de los clientes, y
refleja el cuerpo de la petición POST recibida, dentro del contenido de la
respuesta de la petición, pasa a través de la pila del filtro de salida en
el camino de vuelta al cliente.
Esta técnica se puede utilizar como una alternativa a un servicio web
que se ejecuta en una pila de de aplicaciones dentro del servidor,
en donde el filtro de salida proporciona la transformación requerida en el
cuerpo de la petición. Por ejemplo, el módulo mod_deflate
puede ser usado para proporcionar un servicio de compresión general,
o un filtro de transformación de imagen, puede ser convertido en un
servicio de conversión de imágenes.
Usando los Filtros
Hay dos formas de usar el filtrado: de forma Simple y Dinámica.
Generalmente, deberá usar una forma u otra; ya que mezclarlas puede
causar consecuencias inesperadas (a pesar de que reglas de Entrada de
tipo simple pueden ser combinadas libremente con reglas de filtrado
de Salidas de tipo simple o dinámico).
La forma más sencilla es la única manera de configurar filtros de
Entrada, y es suficiente para filtros de Salida donde se necesita una
cadena de filtros estática.
Las directivas más relevantes son:
SetInputFilter,
SetOutputFilter,
AddInputFilter,
AddOutputFilter,
RemoveInputFilter, and
RemoveOutputFilter.
La forma Dinámica habilita ambas configuraciones estática, y dinámica, para los filtros de Salida, como se plantea en la página mod_filter.
Las directivas más relevantes son:
FilterChain,
FilterDeclare, and
FilterProvider.
Una directiva más como es AddOutputFilterByType sigue siendo
soportada pero esta obsoleta. Usa en cambio la configuración dinámica.