Error desconocido en el panel Prueba esta API

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Síntoma

La llamada a la API desde el portal para desarrolladores integrado falla con Unknown Error o una respuesta vacía en el panel Prueba esta API.

Mensajes de error

Es posible que veas una respuesta vacía o el siguiente mensaje de error para las solicitudes a la API en el portal integrado:

Unknown Error

En la pestaña Herramientas para desarrolladores > Consola, verás el siguiente error:

Access to XMLHTTPRequest at 'API_URL' from origin 'URL_of_Integrated_DevPortal'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is
present on the requested resource.

A continuación, se muestra un mensaje de error genérico, como se muestra en la pestaña Herramientas para desarrolladores > Consola:

mensaje de error genérico; haz clic para obtener una imagen más grande. mensaje de error genérico

Causas posibles

Causa Descripción Instrucciones de solución de problemas aplicables para
Falla de política no controlada La respuesta de error predeterminada se envía sin encabezados CORS cuando falla alguna política en el flujo de tiempo de ejecución de la solicitud a la API. Usuarios de la nube pública perimetral
Varios valores para Access-Control-Allow-Origin Usar la opción Agregar en lugar de Configurar en la política de asignación de mensajes Usuarios de la nube pública perimetral

Causa: Error de política no controlado

Diagnóstico

  1. Verifica que el problema se produzca solo si se espera una respuesta que no sea 2XX.
  2. Para las solicitudes con errores, verifica que haya políticas en el flujo del proxy.
  3. Haz un seguimiento de la solicitud y verifica si una política con continueOnError="false" falla y genera errores.
    1. En caso afirmativo, verifica si la política de CORS de AssignMessage se ejecutó o no en el flujo de respuesta de errores.
    2. Si no es así, esa es la causa del problema.
      Esto se debe a que, cuando falla una política con el elemento continueOnError="false", la solicitud ingresa al flujo de respuesta de error. Si no hay un manejo de errores explícito en el flujo de respuesta de errores, se devuelve la respuesta de error predeterminada correspondiente a la política. Esta respuesta de error no tiene ningún encabezado de CORS. Como resultado, la llamada a la API desde el portal para desarrolladores integrado falla con Unknown error.

En las siguientes capturas de pantalla, se muestra un mensaje de error y un mensaje de éxito de ejemplo.

Ejemplo de mensaje de error en el panel Prueba esta API del portal integrado y en la ventana Trace del proxy:

ejemplo de mensaje de error, haz clic para obtener una imagen más grande ejemplo de mensaje de error

Ejemplo de mensaje de éxito en el panel Prueba esta API del portal integrado y en la ventana Trace del proxy:

Ejemplo de mensaje de éxito, haz clic para obtener una imagen más grande ejemplo de mensaje de éxito

Resolución

  1. En lugar de depender del mensaje de error predeterminado, se debe implementar una regla de fallas para controlar la respuesta de error. Incluye una política de CORS de AssignMessage con los encabezados adecuados y de invocarla en la FaultRule.
  2. En ocasiones, puede no ser factible tener una regla de fallas definida para cada falla; por lo tanto, se puede implementar una regla de fallas predeterminada para ejecutar la política de CORS deAssignMessage:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="proxy-endpoint-name">
    <Description/>
    <!-- Add a default fault rule to add CORS -->
    <DefaultFaultRule name="fault-rule">
        <Step>
            <Name>add-cors</Name>
        </Step>
    </DefaultFaultRule>
    <FaultRules/>
    <!--
    <Flows />
    Rest of the proxy definition
    -->
</ProxyEndpoint>

Causa: Varios valores para Access-Control-Allow-Origin

Diagnóstico

  1. Verifica el valor del encabezado Access-Control-Allow-Origin en una sesión de seguimiento.
  2. El encabezado Access-Control-Allow-Origin permite establecer un solo valor. Configurar más de un valor puede causar un problema de CORS y el portal para desarrolladores no podrá procesar ninguna respuesta.
  3. Si el valor del encabezado Access-Control-Allow-Origin en el seguimiento se ve de la siguiente manera:
    *,*
    , eso significa que el servidor de destino y la política de CORS deAssignMessage establecen su valor.
  4. Esto puede ocurrir cuando un usuario usó <Add> element para Access-Control-Allow-Origin en una política o cuando el backend está configurando varios valores.

Ejemplo de Access-Control-Allow-Origin igual a *,*:

Ejemplo de varios valores usados; haz clic para obtener una imagen más grande. ejemplo de varios valores usados

Ejemplo de Access-Control-Allow-Origin igual a *:

ejemplo de un valor único utilizado; haz clic para obtener una imagen más grande ejemplo de valor único utilizado

Ejemplo de uso de <Add>:

ejemplo con la opción Agregar; haz clic para obtener una imagen más grande ejemplo con Agregar

Ejemplo de uso de <Set>:

ejemplo con Configurar; haz clic para obtener una imagen más grande ejemplo con Set

Resolución

  1. El enfoque recomendado es usar <Set> element (en lugar de <Add> element) para Access-Control-Allow-Origin, ya que se permite un solo valor.
  2. También puedes configurar el encabezado Access-Control-Allow-Origin en un solo lugar, ya sea la política de CORS deAssignMessage o el servidor de destino.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="set-cors">
    <DisplayName>Set CORS</DisplayName>
    <FaultRules/>
    <Properties/>
    <Set>
        <Headers>
            <Header name="Access-Control-Allow-Origin">*</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

Si aún necesitas asistencia de la asistencia de Apigee, consulta Debes recopilar información de diagnóstico.

Se debe recopilar información de diagnóstico

Recopila la siguiente información de diagnóstico y, luego, comunícate con el equipo de asistencia de Apigee Edge:

  • Nombre de la organización
  • Nombre del entorno
  • Nombre del proxy de API
  • Comando completo de curl que se usa para reproducir el error
  • Archivo de seguimiento para las solicitudes a la API
  • Resultado completo de la respuesta desde el servidor de destino/backend junto con el tamaño de la carga útil