Elementos básicos de una expresión de directiva avanzada

Una expresión de directiva avanzada consiste, como mínimo, en un prefijo (o un único elemento utilizado en lugar de un prefijo). La mayoría de las expresiones también especifican una operación que se realizará en los datos que identifica el prefijo. Dar formato a una expresión de hasta 1.499 caracteres de la siguiente manera:

<prefix>.<operation> [<compound-operator> <prefix>.<operation>. . .]

donde

  • <prefix>

    es un punto de anclaje para iniciar una expresión.

    El prefijo es una clave delimitada por períodos que identifica una unidad de datos. Por ejemplo, el prefijo siguiente examina las solicitudes HTTP para la presencia de un encabezado denominado Content-Type:

    http.req.header (“Tipo de contenido”)

    Los prefijos también se pueden usar por sí mismos para devolver el valor del objeto que el prefijo identifica.

  • <operation>

    identifica una evaluación que se va a realizar en los datos identificados por el prefijo.

    Por ejemplo, considere la siguiente expresión:

    http.req.header (“Tipo de contenido”).eq (“text/html”)

    En esta expresión, el siguiente es el componente del operador:

    eq (“texto/html”)

    Este operador hace que Citrix ADC evalúe cualquier solicitud HTTP que contenga un encabezado Content-Type y, en particular, determine si el valor de este encabezado es igual a la cadena “text/html”. Para obtener más información, consulte “Operaciones”.

  • <compound-operator>

    es un operador booleano o aritmético que forma una expresión compuesta a partir de varios elementos de prefijo o prefijo.operation.

    Por ejemplo, considere la siguiente expresión:

    http.req.header(“Content-Type”).eq(“text/html”) && http.req.url.contains(“.html”)

Prefijos

Un prefijo de expresión representa una parte discreta de datos. Por ejemplo, un prefijo de expresión puede representar una dirección URL HTTP, un encabezado HTTP Cookie o una cadena en el cuerpo de una solicitud HTTP POST. Un prefijo de expresión puede identificar y devolver una amplia variedad de tipos de datos, incluidos los siguientes:

  • Una dirección IP de cliente en un paquete TCP/IP
  • Hora del sistema Citrix ADC
  • Una llamada externa sobre HTTP
  • Un tipo de registro TCP o UDP

En la mayoría de los casos, un prefijo de expresión comienza con una de las siguientes palabras clave:

  • CLIENTE:
    • Identifica una función del cliente que está enviando una solicitud o recibiendo una respuesta, como en los siguientes ejemplos:
    • El prefijo client.ip.dst designa la dirección IP de destino en la solicitud o respuesta.
    • El prefijo client.ip.src designa la dirección IP de origen.
  • HTTP:
    • Identifica un elemento en una solicitud HTTP o una respuesta, como en los siguientes ejemplos:
    • El prefijo http.req.body (integer) designa el cuerpo de la solicitud HTTP como un objeto de texto de líneas múltiples, hasta la posición de carácter designada en entero.
    • El prefijo http.req.header (“header_name”) designa un encabezado HTTP, como se especifica en header_name.
    • El prefijo http.req.url designa una URL HTTP en formato codificado en URL.
  • SERVIDOR:

    Identifica un elemento del servidor que está procesando una solicitud o enviando una respuesta.

  • SYS:

    Identifica una función del dispositivo Citrix ADC que está procesando el tráfico.

    Nota: Tenga en cuenta que las directivas DNS solo admiten objetos SYS, CLIENT y SERVER.

    Además, en Citrix Gateway, la función VPN sin cliente puede usar los siguientes tipos de prefijos:

  • TEXTO:

    Identifica cualquier elemento de texto en una solicitud o respuesta.

  • OBJETIVO:

    Identifica el destino de una conexión.

  • URL:

    Identifica un elemento en la parte URL de una solicitud o respuesta HTTP.

Como regla general, cualquier prefijo de expresión puede ser una expresión autónoma. Por ejemplo, el prefijo siguiente es una expresión completa que devuelve el contenido del encabezado HTTP especificado en el argumento de cadena (entre comillas):

http.res.header.("myheader")

O puede combinar prefijos con operaciones simples para determinar los valores TRUE y FALSE. Por ejemplo, lo siguiente devuelve un valor TRUE o FALSE:

http.res.header.("myheader").exists

También puede utilizar operaciones complejas en prefijos individuales y varios prefijos dentro de una expresión, como en el ejemplo siguiente:

http.req.url.length + http.req.cookie.length <= 500

Los prefijos de expresión que se pueden especificar dependen de la función Citrix ADC. En la tabla siguiente se describen los prefijos de expresión que son de interés por entidad

Función Tipos de prefijo de expresión utilizados en la entidad
DNS SYS, CLIENTE, SERVIDOR
Responder en funciones de protección HTTP, SYS, CLIENT
Conmutación de contenido HTTP, SYS, CLIENT
Reescribir HTTP, SYS, CLIENT, SERVER, URL, TEXT, TARGET, VPN
Almacenamiento en caché integrado HTTP, SYS, CLIENTE, SERVIDOR
Citrix Gateway, acceso sin cliente HTTP, SYS, CLIENT, SERVER, URL, TEXT, TARGET, VPN

Tabla 1. Tipos permitidos de prefijos de expresión en varias funciones de Citrix ADC

Nota: Para obtener más información sobre los prefijos de expresión permitidos en una función, consulte la documentación de esa función.

Expresiones de un solo elemento

El tipo más simple de expresión de directiva avanzada contiene un único elemento. Este elemento puede ser uno de los siguientes:

  • Es cierto. Una expresión de directiva avanzada puede consistir simplemente en el valor verdadero. Este tipo de expresión siempre devuelve un valor TRUE. Es útil para encadenar acciones de directiva y activar expresiones GoTo.
  • Falsa. Una expresión de directiva avanzada puede consistir simplemente en el valor false. Este tipo de expresión siempre devuelve un valor de FALSE.
  • Prefijo para una expresión compuesta. Por ejemplo, el prefijo HTTP.REQ.HOSTNAME es una expresión completa que devuelve un nombre de host y HTTP.REQ.URL es una expresión completa que devuelve una dirección URL. El prefijo también se puede utilizar junto con operaciones y prefijos adicionales para formar una expresión compuesta.

Operaciones

En la mayoría de las expresiones, también se especifica una operación en los datos que identifica el prefijo. Por ejemplo, supongamos que especifica el prefijo siguiente:

http.req.url

Este prefijo extrae las URL en las solicitudes HTTP. Este prefijo de expresión no requiere que se utilice ningún operador en una expresión. Sin embargo, al configurar una expresión que procesa direcciones URL de solicitud HTTP, puede especificar operaciones que analicen funciones particulares de la dirección URL. A continuación se presentan algunas posibilidades:

  • Busque un nombre de host concreto en la URL.
  • Busque una ruta en particular en la URL.
  • Evalúe la longitud de la URL.
  • Busque una cadena en la URL que indique una marca de tiempo y conviértala a GMT.

A continuación se muestra un ejemplo de un prefijo que identifica un encabezado HTTP denominado Servidor y una operación que busca la cadena IIS en el valor del encabezado:

http.res.header("Server").contains("IIS")

A continuación se muestra un ejemplo de un prefijo que identifica nombres de host y una operación que busca la cadena “www.mycompany.com” como el valor del nombre:

http.req.hostname.eq("www.mycompany.com")

Operaciones básicas en prefijos de expresión

En la tabla siguiente se describen algunas de las operaciones básicas que se pueden realizar en prefijos de expresión.

Operación Determina si o no
CONTIENE (<string>) El objeto coincide <string>. A continuación se presenta un ejemplo: http.req.header (“Cache-Control”).contains (“no-cache”)
EXISTE Un elemento en particular está presente en un objeto. Lo que sigue es un ejemplo: http.res.header (“MyHDR”).exists
EQ (<text>) Un valor no numérico determinado está presente en un objeto. Lo que sigue es un ejemplo: http.req.method.eq (post)
EQ (<integer>) Un valor numérico determinado está presente en un objeto. A continuación se presenta un ejemplo: client.ip.dst.eq (10.100.10.100)
LT (<integer>) El valor de un objeto es menor que un valor determinado. A continuación se presenta un ejemplo: http.req.content_length.lt (5000)
GT (<integer>) El valor de un objeto es mayor que un valor determinado. Lo que sigue es un ejemplo: http.req.content_length.gt (5)

En la siguiente tabla se resumen algunos de los tipos de operaciones disponibles.

Tipo de operación Descripción
Operaciones de texto Coincide cadenas individuales y conjuntos de cadenas con cualquier parte de un destino. El destino puede ser una cadena completa, el inicio de una cadena o cualquier parte de texto entre el inicio y el final de la cadena. Por ejemplo, puede extraer la cadena “XYZ” de “XYZSOMEText”. O bien, puede comparar un valor de encabezado HTTP con una matriz de cadenas diferentes. También puede transformar texto en otro tipo de datos. Los siguientes son ejemplos: Transformar una cadena en un valor entero, crear una lista a partir de las cadenas de consulta en una URL, y transformar una cadena en un valor de tiempo.
Operaciones numéricas Las operaciones numéricas incluyen la aplicación de operadores aritméticos, la evaluación de la longitud del contenido, el número de elementos de una lista, fechas, horas y direcciones IP.

Elementos básicos de una expresión de directiva avanzada