Citrix ADC

Acerca de las expresiones de texto

Puede configurar varias expresiones para trabajar con texto que fluye a través del dispositivo Citrix ADC. A continuación se presentan algunos ejemplos de cómo se puede analizar el texto mediante una expresión de sintaxis predeterminada:

  • Determine que existe un encabezado HTTP determinado.

    Por ejemplo, es posible que quiera identificar las solicitudes HTTP que contienen un encabezado de Accept-Language concreto con el fin de dirigir la solicitud a un servidor determinado.

  • Determine que una URL HTTP concreta contiene una cadena determinada.

    Por ejemplo, es posible que quiera bloquear las solicitudes de direcciones URL concretas. Tenga en cuenta que la cadena puede aparecer al principio, al centro o al final de otra cadena.

  • Identifique una solicitud POST dirigida a una aplicación concreta.

    Por ejemplo, puede que quiera identificar todas las solicitudes POST que se dirigen a una aplicación de base de datos con el fin de actualizar los datos de aplicación almacenados en caché.

Tenga en cuenta que hay herramientas especializadas para ver el flujo de datos para solicitudes y respuestas HTTP. Puede utilizar las herramientas para ver el flujo de datos.

Acerca de las operaciones en el texto

Una expresión basada en texto consiste en al menos un prefijo para identificar un elemento de datos y generalmente (aunque no siempre) una operación en ese prefijo. Las operaciones basadas en texto pueden aplicarse a cualquier parte de una solicitud o respuesta. Las operaciones básicas en el texto incluyen varios tipos de coincidencias de cadenas.

Por ejemplo, la siguiente expresión compara un valor de encabezado con una cadena:

http.req.header("myHeader").contains("some-text")

Las siguientes expresiones son ejemplos de coincidencia de un tipo de archivo en una solicitud:

http.req.url.suffix.contains("jpeg")

http.req.url.suffix.eq("jpeg")

En los ejemplos anteriores, el operador contiene permite una coincidencia parcial y el operador ecualizador busca una coincidencia exacta.

Otras operaciones están disponibles para dar formato a la cadena antes de evaluarla. Por ejemplo, puede utilizar operaciones de texto para eliminar comillas y espacios en blanco, convertir la cadena a todas las minúsculas o concatenar cadenas.

Nota: Las operaciones

complejas están disponibles para realizar coincidencias basadas en patrones o para convertir un tipo de formato de texto a otro tipo.

Para obtener más información, consulte estos temas:

Compuestos y precedencia en expresiones de texto

Puede aplicar varios operadores para combinar prefijos o expresiones de texto. Por ejemplo, la siguiente expresión concatena los valores devueltos de cada prefijo:

http.req.hostname + http.req.url

Lo que sigue es un ejemplo de una expresión de texto compuesto que utiliza un AND lógico. Ambos componentes de esta expresión deben ser TRUE para que una solicitud coincida con la expresión:

http.req.method.eq(post) && http.req.body(1024).startswith("destination=")

Nota:

Para obtener más información sobre los operadores para la composición, consulte Expresiones avanzadas compuestas.

Categorías de expresiones de texto

Las categorías principales de expresiones de texto que puede configurar son:

Nota: El

análisis de un cuerpo de documento, como el cuerpo de una solicitud POST, puede afectar al rendimiento. Es posible que quiera probar el impacto en el rendimiento de las directivas que evalúan un cuerpo de documento.

Directrices para expresiones de texto

Desde el punto de vista del rendimiento, normalmente es mejor usar funciones compatibles con el protocolo en una expresión. Por ejemplo, la siguiente expresión hace uso de una función compatible con protocolos:

HTTP.REQ.URL.QUERY

La expresión anterior funciona mejor que la siguiente expresión equivalente, que se basa en el análisis de cadenas:

HTTP.REQ.URL.AFTER_STR("?")

En el primer caso, la expresión mira específicamente la consulta URL. En el segundo caso, la expresión explora los datos para detectar la primera aparición de un signo de interrogación.

También hay un beneficio de rendimiento del análisis estructurado del texto, como en la siguiente expresión:

HTTP.REQ.HEADER("Example").TYPECAST_LIST_T(',').GET(1)

(Para obtener más información sobre la conversión de tipos, consulte Datos de conversión de tipos. La expresión de conversión de tipos, que recopila datos delimitados por comas y los estructura en una lista, normalmente tendría un mejor rendimiento que el siguiente equivalente no estructurado:

HTTP.REQ.HEADER("Example").AFTER_STR(",").BEFORE_STR(",")

Por último, las expresiones de texto no estructuradas suelen tener un mejor rendimiento que las expresiones regulares. Por ejemplo, la siguiente es una expresión de texto no estructurada:

HTTP.REQ.HEADER("Example").AFTER_STR("more")

La expresión anterior generalmente proporcionaría un mejor rendimiento que el siguiente equivalente, que usa una expresión regular:

HTTP.REQ.HEADER("Example").AFTER_REGEX(re/more/)

Para obtener más información sobre expresiones regulares, consulte Expresiones regulares.

Acerca de las expresiones de texto