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

Filters can be chained, in a Data Axis orthogonal to request processing

Algunos ejemplos de filtrado en la distribución estándar de Apache son:

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:

Filtrado Inteligente

Smart filtering applies different filter providers according to the state of request processing

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:

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.