Solicitud de reenvío

SE APLICA A: todos los niveles de API Management

La directiva forward-request reenvía la solicitud entrante al servicio back-end especificado en el forward-request de la solicitud. La dirección URL del servicio back-end se especifica en la configuración de la API y se puede cambiar mediante la directiva de establecimiento del servicio back-end.

Importante

  • Esta directiva es necesaria para reenviar solicitudes a un back-end de API. De forma predeterminada, API Management configura esta directiva de forma global.
  • Si quita los resultados de esta directiva en la solicitud, no se reenviarán al servicio back-end. Por lo tanto, las directivas de la sección de salida se evaluarán inmediatamente tras la finalización correcta de las directivas en la sección de entrada.

Nota:

Establezca los elementos de la directiva y los elementos secundarios en el orden proporcionado en la instrucción de directiva. Obtenga más información sobre el establecimiento o modificación de directivas de API Management.

Instrucción de la directiva

<forward-request http-version="1 | 2or1 | 2" timeout="time in seconds (alternatively, use timeout-ms)" | timeout-ms="time in milliseconds (alternatively, use timeout)" continue-timeout="time in seconds" follow-redirects="false | true" buffer-request-body="false | true" buffer-response="true | false" fail-on-error-status-code="false | true"/>

Atributos

Atributo Descripción Necesario Valor predeterminado
timeout La cantidad de tiempo en segundos de espera a que el servicio back-en devuelva los encabezados de respuesta HTTP antes de que se genere un error de tiempo de expiración. El valor mínimo es 0segundos. Puede que los valores que superen los 240 segundos no se respeten, ya que la infraestructura de red subyacente puede eliminar las conexiones inactivas después de este tiempo. Se permiten expresiones de directiva. Puede especificar timeout o timeout-ms, pero no ambos. No 300
timeout-ms La cantidad de tiempo en milisegundos de espera a que el servicio back-en devuelva los encabezados de respuesta HTTP antes de que se genere un error de tiempo de expiración. El valor mínimo es 0 ms. Se permiten expresiones de directiva. Puede especificar timeout o timeout-ms, pero no ambos. No N/D
continue-timeout La cantidad de tiempo en segundos de espera a que el código de estado de 100 Continue devuelva los encabezados de respuesta HTTP antes de que se genere un error de tiempo de expiración. Se permiten expresiones de directiva. No N/D
http-version La versión de especificación de HTTP que se usa al enviar la respuesta HTTP al servicio back-end. Al usar 2or1, la puerta de enlace favorecerá HTTP /2 frente a /1, pero revertirá a HTTP /1 si HTTP /2 no funciona. No 1
follow-redirects Especifica si la puerta de enlace sigue los redireccionamientos desde el servicio back-end o si estos se devuelven al autor de la llamada. Se permiten expresiones de directiva. No false
buffer-request-body Cuando se establece en true, la solicitud se almacena en el búfer y se volverá a usar si se realiza algún reintento. No false
buffer-response Afecta al procesamiento de respuestas fragmentadas. Cuando se establece en false, cada fragmento recibido del back-end se devuelve inmediatamente al autor de la llamada. Cuando se establece en true, los fragmentos se almacenan en búfer (8 KB, a menos que se detecte el final de la secuencia) y solo entonces se devuelven al autor de la llamada.

Se establece en false con servidores back-end como los que implementan eventos enviados por el servidor (SSE) que requieren que se devuelva contenido o se transmita inmediatamente al autor de la llamada. No se permiten expresiones de directiva.
No true
fail-on-error-status-code Cuando se establece en true, se desencadena la sección on-error para los códigos de respuesta incluidos en el intervalo de 400 a 599 (ambos incluidos). No se permiten expresiones de directiva. No false

Uso

Ejemplos

Envío de una solicitud al back-end HTTP/2

La siguiente directiva de nivel de API reenvía todas las solicitudes de API a un servicio back-end HTTP/2.

<!-- api level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <forward-request http-version="2or1"/>
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

Esto es necesario para las cargas de trabajo HTTP /2 o gRPC y actualmente solo se admite en la puerta de enlace autohospedada. Obtenga más información en nuestra información general de la puerta de enlace de API.

Reenviar la solicitud con intervalo de tiempo de espera

La siguiente directiva de nivel de API reenvía todas las solicitudes de API al servicio back-end con un intervalo de tiempo de expiración de 60 segundos.

<!-- api level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <forward-request timeout="60"/>
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

Heredar la directiva del ámbito primario

Esta directiva de nivel de operación utiliza el elemento base para heredar la directiva de back-end del ámbito de nivel de API principal.

<!-- operation level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <base/>
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

No heredar la directiva del ámbito primario

Esta directiva de nivel de operación reenvía explícitamente todas las solicitudes al servicio back-end con un tiempo de espera de 120 y no hereda la directiva de back-end de nivel de API principal. Si el servicio de back-end responde con un código de estado de error de 400 a 599 (ambos incluidos), se desencadenará la sección on-error.

<!-- operation level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <forward-request timeout="120" fail-on-error-status-code="true" />
        <!-- effective policy. note the absence of <base/> -->
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

No reenviar solicitudes al back-end

Esta directiva de nivel de operación no reenvía solicitudes al servicio back-end.

<!-- operation level -->
<policies>
    <inbound>
        <base/>
    </inbound>
    <backend>
        <!-- no forwarding to backend -->
    </backend>
    <outbound>
        <base/>
    </outbound>
</policies>

Para más información sobre el trabajo con directivas, vea: