ADC
Gracias por los comentarios

Este artículo ha sido traducido automáticamente. (Aviso legal)

Evitar la recursividad de llamadas HTTP

Aunque el dispositivo NetScaler no comprueba la validez de la solicitud de llamada HTTP, analiza la solicitud una vez antes de enviarla al agente de llamadas HTTP. Este análisis permite que el dispositivo trate la solicitud de llamada como cualquier otra solicitud entrante, lo que a su vez le permite configurar varias funciones útiles de NetScaler (como el almacenamiento en caché integrado) para que funcionen en la solicitud de llamada.

Sin embargo, durante este análisis, la solicitud de llamada HTTP puede seleccionar la misma directiva y, por lo tanto, invocarse a sí misma de forma recursiva. El dispositivo detecta la invocación recursiva y genera una condición indefinida (UNDEF). Sin embargo, la invocación recursiva hace que los contadores de selección de llamadas HTTP y de directiva aumenten en dos recuentos cada uno en lugar de un recuento cada uno.

Para evitar que una llamada se invoque por sí misma, debe identificar al menos una función única de la solicitud de llamada HTTP y, a continuación, excluir todas las solicitudes con esta función de ser procesadas por la regla de directiva que invoca la llamada. Puede hacerlo si incluye otra expresión de directiva avanzada en la regla de directivas. La expresión debe preceder a la expresión SYS.HTTP_CALLOUT(<name>) para que se evalúe antes de evaluar la expresión de llamada. Por ejemplo:

<Expression that prevents callout recursion> OR SYS.HTTP_CALLOUT(<name>)

Al configurar una regla de directivas de esta manera, cuando el dispositivo genera la solicitud y la analiza, la regla compuesta se evalúa como FALSE, la llamada no se genera por segunda vez y los contadores de selección se incrementan correctamente.

Una forma de asignar una función única a una solicitud de llamada HTTP es incluir un encabezado HTTP personalizado único al configurar la llamada. A continuación se muestra un ejemplo de una llamada HTTP llamada “myCallout”.” La llamada genera una solicitud HTTP que comprueba si la dirección IP de un cliente está presente en una base de datos de direcciones IP en la lista de prohibidos. La llamada incluye un encabezado personalizado llamado “Solicitud”, que se establece en el valor “Solicitud de llamada”.” Una directiva de respuesta enlazada globalmente, “Pol1”, invoca la llamada HTTP pero excluye todas las solicitudes cuyo encabezado de solicitud esté configurado con este valor, lo que impide una segunda invocación de myCallout. La expresión que impide una segunda invocación es HTTP.REQ.HEADER(“Request”).EQ(“Callout Request”).NOT.

Ejemplo:

> add policy httpCallout myCallout Done > set policy httpCallout myCallout -IPAddress 10.102.3.95 -port 80 -returnType TEXT -hostExpr ""10.102.3.95"" -urlStemExpr ""/cgi-bin/check_clnt_from_database.pl"" -headers Request("Callout Request") -parameters cip(CLIENT.IP.SRC) -resultExpr "HTTP.RES.BODY(100)" Done > add responder policy Pol1 "HTTP.REQ.HEADER("Request").EQ("Callout Request").NOT && SYS.HTTP_CALLOUT(myCallout).CONTAINS("IP Matched")" RESET Done > bind responder global Pol1 100 END -type OVERRIDE Done

Nota: También puede configurar una expresión para comprobar si la URL de solicitud incluye la expresión raíz configurada para la llamada HTTP. Para implementar la solución, asegúrese de que el agente de llamada HTTP solo puede responder a las llamadas HTTP y no a otras solicitudes dirigidas a través del dispositivo. Si el agente de llamada HTTP es una aplicación o un servidor web que atiende otras solicitudes de cliente, dicha expresión impide que el dispositivo procese esas solicitudes de cliente. En su lugar, utilice un encabezado personalizado único como se describió anteriormente.

La versión oficial de este contenido está en inglés. Para mayor comodidad, parte del contenido de la documentación de Cloud Software Group solo tiene traducción automática. Cloud Software Group no puede controlar el contenido con traducción automática, que puede contener errores, imprecisiones o un lenguaje inadecuado. No se ofrece ninguna garantía, ni implícita ni explícita, en cuanto a la exactitud, la fiabilidad, la idoneidad o la precisión de las traducciones realizadas del original en inglés a cualquier otro idioma, o que su producto o servicio de Cloud Software Group se ajusten a cualquier contenido con traducción automática, y cualquier garantía provista bajo el contrato de licencia del usuario final o las condiciones de servicio, o cualquier otro contrato con Cloud Software Group, de que el producto o el servicio se ajusten a la documentación no se aplicará en cuanto dicha documentación se ha traducido automáticamente. Cloud Software Group no se hace responsable de los daños o los problemas que puedan surgir del uso del contenido traducido automáticamente.
Evitar la recursividad de llamadas HTTP