Configuración de una llamada HTTP
Al configurar una llamada HTTP, especifica el tipo de solicitud (HTTP o HTTPS), el destino y el formato de la solicitud. El formato esperado de la respuesta y, por último, la parte de la respuesta que desea analizar.
Para el destino, debe especificar la dirección IP y el puerto del agente de llamada HTTP. O bien, utilice un servidor virtual de equilibrio de carga, conmutación de contenido o redirección de caché para administrar las solicitudes de llamada HTTP.
En el primer caso, las solicitudes de llamada HTTP se envían directamente al agente de llamada HTTP. En el segundo caso, las solicitudes de llamada HTTP se envían a la dirección IP virtual (VIP) del servidor virtual especificado. El servidor virtual procesa la solicitud de la misma manera que procesa una solicitud de cliente. Por ejemplo, si espera que se generen muchas llamadas, puede configurar instancias del agente de llamadas HTTP en varios servidores, vincular estas instancias (como servicios) a un servidor virtual de equilibrio de carga y, a continuación, especificar el servidor virtual de equilibrio de carga en la configuración de llamada HTTP. A continuación, el servidor virtual de equilibrio de carga equilibra la carga en las instancias configuradas según lo determinado por el algoritmo de equilibrio de carga.
Para el formato de la solicitud de llamada HTTP, puede especificar los atributos individuales de la solicitud de llamada HTTP (una llamada HTTP basada en atributos) o bien especificar toda la solicitud de llamada HTTP como expresión de directiva avanzada (una llamada HTTP basada en expresiones).
En la tabla siguiente se describen los elementos de una directiva de llamadas HTTP:
Para obtener más información, consulte Policy-httpCallout
Parámetro | Descripción |
---|---|
Nombre | Nombre de la llamada, máximo de 127 caracteres |
Dirección IP y puerto (dirección IP/ puerto) o nombre del servidor virtual (vserver) | Dirección IPv4 o IPv6 del servidor al que se envía la llamada, o un comodín y el puerto del servidor al que se envía la llamada o un comodín. O bien, el nombre de un servidor virtual de equilibrio de carga, cambio de contenido o redirección de caché con un tipo de servicio HTTP. |
Método HTTP (método HttpTp) | Método HTTP (HttpMethod). Método utilizado en la solicitud HTTP que envía esta llamada. Valores válidos: GET o POST. Predeterminado: GET. |
Expresión de host (HostExpr) | Expresión de host (HostExpr). Expresión de texto avanzada para configurar el encabezado Host. Longitud máxima: 255. La expresión puede ser un valor literal o puede ser una expresión avanzada que deriva el valor. Ejemplos: “10.101.10.11”, “http.req.header (“Host”)” |
Expresión de raíz de URL (URLStemExpr) | Expresión de raíz de URL (URLStemExpr) Expresión de cadena avanzada para generar el sistema URL. Longitud máxima: 8191. La expresión puede ser una cadena literal o una expresión que deriva el valor. Ejemplos: “” /mysite/index.html “” “http.req.url” |
Encabezados HTTP (encabezados) | Encabezados HTTP (encabezados). Expresión de texto avanzada para insertar encabezados HTTP y sus valores en la solicitud de llamada HTTP. Especifique un valor para cada encabezado. El nombre del encabezado se especifica como cadena y el valor del encabezado como expresión avanzada. Especifique los encabezados separados por espacio. Como -headers cip (client.ip.src) hdr (http.req.header (“HDR”)). El número de encabezados puede ser de 8 |
Solicitud basada en expresiones para enviar al servidor (FullReqExpr) | Solicitud HTTP exacta que Citrix ADC debe enviar como expresión avanzada a 8191 caracteres. Si especifica este parámetro, debe omitir los argumentos HttpMethod, HostExpr, URLStemExpr, encabezados y parámetros. La expresión de solicitud está restringida por la entidad en la que se utiliza la llamada. Por ejemplo, una expresión HTTP.RES no se puede utilizar en un banco de directivas de tiempo de solicitud ni en un banco de directivas de conmutación de contenido TCP. |
Solicitud basada en expresiones para enviar al servidor (BodyExpr) | Expresión de cadena avanzada para generar el cuerpo de la solicitud. La expresión puede contener una cadena literal o una expresión que deriva el valor (por ejemplo, client.ip.src). Exclusiva mutuamente con -FullReqExpr. |
Parámetros | Expresión avanzada para insertar parámetros de consulta en la solicitud HTTP que envía la llamada. Especifique un valor para cada parámetro que configure. Si la solicitud de llamada utiliza el método GET, estos parámetros se insertan en la URL. Si la solicitud de llamada utiliza el método POST, estos parámetros se insertan en el cuerpo POST. El nombre del parámetro de consulta se configura como cadena y el valor como expresión avanzada. Los valores de los parámetros están codificados por URL. Especifique los parámetros separados por espacios como ፦parámetros name1 (“name1”) name2 (http.req.header (“hdr”)). Se pueden configurar 8 parámetros como máximo. |
Tipo de devolución (ReturnType) | Tipo de datos que devuelve la aplicación de destino en la respuesta a la llamada. Valores válidos: TEXTO: trata el valor devuelto como una cadena de texto. NUM: trata el valor devuelto como un número. BOOL: trata el valor devuelto como un valor booleano. Nota: No se puede cambiar el tipo de devolución después de configurarlo. |
Expresión para extraer datos de la respuesta (ResultExpr) | Expresión avanzada que extrae objetos HTTP.RES de la respuesta a la llamada HTTP. La longitud máxima es de 8191. Las operaciones de esta expresión deben coincidir con el tipo de devolución. Por ejemplo, si configura un tipo de texto de retorno, la expresión de resultado debe ser una expresión basada en texto. Si el tipo de devolución es num, la expresión de resultado (ResultExpr) debe devolver un valor numérico similar al siguiente: “http.res.body (10000) .length” Nota: A veces, si establece un tipo de devolución de TEXTO y el resultado enviado desde el servidor supera los 16 KB, la expresión de resultado puede devolver NULL. Por ejemplo, cuando el resultado es una cadena concatenada que supera los 16 KB. |
Esquema | Tipo de esquema del servidor de llamadas. Ejemplo: HTTP, https |
Caché para Secs | Duración, en segundos, durante la que se almacena en caché la respuesta de la llamada. Las respuestas almacenadas en caché se almacenan en un grupo de contenido de almacenamiento en caché integrado denominado “CalloutContentGroup”. Si no se configura ninguna duración, las respuestas de llamada no se almacenan en caché a menos que se utilice una configuración normal de almacenamiento en caché para almacenarlas en caché. Este parámetro tiene prioridad sobre cualquier configuración normal de almacenamiento en caché que de otro modo se aplicaría a estas respuestas. |
Nota: El dispositivo no comprueba la validez de la solicitud. Debes asegurarte de que la solicitud sea válida y no contiene ninguna información confidencial. Una configuración de llamada HTTP incorrecta o incompleta da como resultado una condición UNDEF en tiempo de ejecución que no está asociada a una acción. La condición UNDEF se limita a actualizar el contador de visitas no definidas, lo que permite solucionar problemas de una llamada HTTP configurada incorrectamente. Sin embargo, el dispositivo analiza la solicitud de llamada HTTP para permitirle configurar ciertas características de Citrix ADC para la llamada. Esto puede conducir a una llamada HTTP que se invoca a sí misma. Para obtener información sobre la recursión de llamadas y cómo puede evitarla, consulte Evitar la recursión de llamadas HTTP.
Por último, independientemente de si utiliza atributos de solicitud HTTP o una expresión para definir el formato de la solicitud de llamada HTTP, debe especificar el formato de la respuesta del agente de llamada HTTP y la parte de la respuesta que quiere evaluar. El tipo de respuesta puede ser un valor booleano, un número o un texto. Basándose únicamente en este tipo de devolución, puede utilizar los métodos de expresión adicionales en la respuesta de llamada. Si el tipo de devolución es un número, puede utilizar la expresión basada en números en la respuesta de llamada. La parte de la respuesta que quiere evaluar se especifica mediante una expresión. Por ejemplo, si especifica que la respuesta contiene texto, se puede utilizar HTTP.RES.BODY(<unit>)
para especificar que el dispositivo debe evaluar solo los primeros <unit>bytes de la respuesta del agente de llamada.
En la línea de comandos, primero se crea una llamada HTTP mediante el comando add. Cuando se agrega una llamada, todos los parámetros se establecen en un valor predeterminado de NONE, excepto el método HTTP, que se establece en un valor predeterminado de GET. A continuación, configure los parámetros de la llamada mediante el comando set. El comando set se utiliza para configurar ambos tipos de llamadas (basadas en atributos y basadas en expresiones). La diferencia radica en los parámetros que se utilizan para configurar los dos tipos de llamadas. Por lo tanto, las instrucciones de línea de comandos siguientes incluyen un comando set para configurar una llamada basada en atributos y un comando set para configurar una llamada basada en expresiones. En la utilidad de configuración, todas estas tareas de configuración se realizan en un solo cuadro de diálogo.
Nota: Antes de incluir una llamada HTTP en una directiva, puede modificar todos los parámetros configurados excepto el tipo de devolución. Una vez que se encuentra una llamada HTTP en una directiva, no se puede modificar por completo una expresión configurada en la llamada. Por ejemplo, no puede cambiar HTTP.REQ.HEADER (“myval”) a CLIENT.IP.SRC. Puede modificar los operadores y argumentos que se pasan a la expresión. Por ejemplo, puede cambiarHTTP.REQ.HEADER("myVal1")
aHTTP.REQ.HEADER("myVal2")
oHTTP.REQ.HEADER("myVal")
aHTTP.REQ.HEADER("myVal").AFTER_STR(<string>)
. Si el comando set falla, cree una llamada HTTP.
La configuración de la llamada HTTP implica configurar expresiones de directivas avanzadas. Para obtener más información sobre la configuración de expresiones de directivas avanzadas, consulte Configuración de la expresión de directiva avanzada: tema de introducción .
Para configurar una llamada HTTP mediante la interfaz de línea de comandos
En el símbolo del sistema, haga lo siguiente:
Cree una llamada HTTP.
add policy httpCallout <name> [-IPAddress <ip_addr|ipv6_addr>] [-port<port>] [-vServer <string>] [-returnType <returnType>] [-httpMethod (GET | POST )] [-hostExpr <expression>] [-urlStemExpr <expression>] [-headers <name(value)> ...] [-parameters <name(value)> ...] [-bodyExpr <expression>] [-fullReqExpr <expression>] [-scheme ( http | https )] [-resultExpr <expression>] [-cacheForSecs <secs>] [-comment <string>]
<!--NeedCopy-->
Ejemplo:
add policy httpCallout mycallout -vserver lbv1 -returnType num -httpMethod GET -hostExpr 'http.req.header("Host")'-urlStemExpr "http.req.url" -parameters Name("My Name") -headers Name("MyHeader")-resultExpr "http.res.body(10000).length"
<!--NeedCopy-->
Modifique la configuración de la llamada HTTP.
set policy httpCallout <name> [-IPAddress <ip_addr|ipv6_addr|\*>] [-port <port|\*>] [-vServer <string>] [-returnType <returnType>] [-httpMethod ( GET | POST )] [-hostExpr <string>] [-urlStemExpr <string>] [-headers <name(value)> ...] [-parameters <name(value)> ...] [-resultExpr <string>]
<!--NeedCopy-->
Ejemplo:
> set policy httpCallout mycallout -vserver lbv1 -returnType num -httpMethod GET -hostExpr 'http.req.header("Host")'-urlStemExpr "http.req.url" -parameters Name("My Name") -headers Name("MyHeader") -resultExpr "http.res.body(10000).length"
<!--NeedCopy-->
Configure la llamada HTTP mediante el parámetro FullReqExpr.
set policy httpCallout <name> [-vServer <string>] [-returnType <returnType>] [-fullReqExpr <string>] [-resultExpr <string>]
<!--NeedCopy-->
Ejemplo:
> set policy httpCallout mycallout1 -vserver lbv1 -returnType num fullReqExpr q{"GET " + http.req.url + "HTTP/" + http.req.version.major + "." + http.req.version.minor.sub(1) + "r\nHost:10.101.10.10\r\nAccept: \*/\*\r\n\r\n"}
<!--NeedCopy-->
Verifique las configuraciones de la llamada HTTP.
show policy httpCallout `<name>`
sh policy httpCallout mycallout1
> Name: mycallout1
>Vserver: lbv1 (UP)
Effective Vserver state: UP
Return type: TEXT
Scheme: HTTP
Full REQ expr: "GET " + http.req.url + "HTTP/" + http.req.version.major + "." + http.req.version.minor.sub(1)+ "r\nHost:10.101.10.10\r\nAccept: \*/\*\r\n\r\n"
Result expr: http.res.body(100)
Hits: 0
Undef Hits: 0
Done
>
<!--NeedCopy-->
Para configurar una llamada HTTP mediante la utilidad de configuración
- Vaya a AppExpert > Llamadas HTTP.
- En el panel de detalles, haga clic en Agregar.
- En el cuadro de diálogo Crear llamada HTTP, configure los parámetros de la llamada HTTP. Para obtener una descripción del parámetro, desplace el cursor del ratón sobre la casilla de verificación.
- Haga clic en Create y, luego, en Close.