ADC

Acerca de expresiones de texto

Puede configurar varias expresiones para trabajar con el texto que fluye a través del dispositivo NetScaler. A continuación se muestran algunos ejemplos de cómo analizar texto mediante una expresión de directiva avanzada:

  • Determina que existe un encabezado HTTP concreto.

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

  • Determina que una URL HTTP concreta contiene una cadena concreta.

    Por ejemplo, es posible que quiera bloquear las solicitudes de URL específicas. Tenga en cuenta que la cadena puede aparecer al principio, al medio o al final de otra cadena.

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

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

Tenga en cuenta que existen herramientas especializadas para ver el flujo de datos de 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 consta de al menos un prefijo para identificar un elemento de datos y, por lo general, (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 sobre 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 contains permite una coincidencia parcial y el operador eq busca una coincidencia exacta.

Hay otras operaciones disponibles para dar formato a la cadena antes de evaluarla. Por ejemplo, puede utilizar operaciones de texto para eliminar las comillas y los espacios en blanco, convertir la cadena a 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

A continuación se muestra 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 de composición, consulte Expresiones avanzadas compuestas.

Categorías de expresiones de texto

Las categorías principales de expresiones de texto que se pueden 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 el cuerpo de un documento.

Directrices para expresiones de texto

Desde el punto de vista del rendimiento, normalmente es mejor utilizar funciones con reconocimiento de protocolo en una expresión. Por ejemplo, la siguiente expresión utiliza una función con reconocimiento de protocolo:

HTTP.REQ.URL.QUERY

La expresión anterior tiene un mejor rendimiento 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 examina específicamente la consulta de URL. En el segundo caso, la expresión explora los datos en busca de 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 fundición de tipos, consulte Datos de fundición por tipografía. 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, lo 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 las expresiones regulares, consulte Expresiones regulares.

Acerca de expresiones de texto