Errore sconosciuto nel riquadro Prova questa API

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Sintomo

La chiamata API dal portale per sviluppatori integrato non riesce con Unknown Error o con una risposta vuota nel riquadro Prova questa API.

Messaggi di errore

Potresti visualizzare una risposta vuota o il seguente messaggio di errore per le richieste API nel portale integrato:

Unknown Error

Nella scheda Strumenti per sviluppatori > Console, verrà visualizzato il seguente errore:

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.

Di seguito è riportato un messaggio di errore generico visualizzato nella scheda Strumenti per sviluppatori > Console:

messaggio di errore generico; fai clic per ingrandire messaggio di errore generico

Possibili cause

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili a
Errore relativo ai criteri non gestiti La risposta di errore predefinita viene inviata senza intestazioni CORS in caso di errore di un criterio nel flusso di runtime della richiesta API. Utenti del cloud pubblico perimetrale
Più valori per Access-Control-Allow-Origin Utilizzando Aggiungi anziché Imposta in Assegna criterio messaggi. Utenti del cloud pubblico perimetrale

Causa: errore relativo ai criteri non gestiti

Diagnostica

  1. Verifica che il problema si verifichi solo se è prevista una risposta diversa da 2XX.
  2. Per le richieste con esito negativo, verifica che siano presenti criteri nel flusso proxy.
  3. Traccia la richiesta e controlla se un criterio con continueOnError="false" ha esito negativo e genera un errore.
    1. In caso affermativo, verifica se il criterio CORS di AssegnaMessage è stato eseguito o meno nel flusso di risposta di errore.
    2. In caso contrario, è questa la causa del problema.
      Questo perché, in caso di errore di qualsiasi criterio con l'elemento continueOnError="false", la richiesta entra nel flusso di risposta di errore. Se nel flusso di risposta di errore non è presente una gestione esplicita degli errori, viene inviata la risposta di errore predefinita corrispondente al criterio. Questa risposta di errore non ha intestazioni CORS. Di conseguenza, la chiamata API dal portale integrato per gli sviluppatori non riesce e restituisce Unknown error.

Gli screenshot seguenti mostrano un esempio di messaggio di errore e un esempio di messaggio di operazione riuscita.

Esempio di messaggio di errore nel riquadro integrato Prova questa API e nella finestra Trace del proxy:

Esempio di messaggio di errore, fai clic per ingrandire esempio di messaggio di errore

Esempio di messaggio di operazione riuscita nel riquadro Prova questa API del portale integrato e nella finestra Trace del proxy:

Esempio di messaggio di operazione riuscita, fai clic per ingrandire l'immagine esempio di messaggio di operazione riuscita

Risoluzione

  1. Anziché fare affidamento sul messaggio di errore predefinito, è necessario implementare una regola di errore per gestire la risposta di errore. Includi un criterio CORS AssegnaMessage con le intestazioni appropriate e richiamalo in FaultRule.
  2. A volte potrebbe non essere possibile definire una regola di errore per ogni errore. Pertanto, è possibile implementare una regola di errore predefinita per eseguire il criterio CORS di AssegnaMessage:
<?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: più valori per Access-Control-Allow-Origin

Diagnostica

  1. Controlla il valore dell'intestazione Access-Control-Allow-Origin in una sessione di traccia.
  2. L'intestazione Access-Control-Allow-Origin consente di impostare un solo valore. L'impostazione di più valori può causare un problema CORS e il portale per gli sviluppatori non restituirà alcuna risposta.
  3. Se il valore dell'intestazione Access-Control-Allow-Origin nella traccia è simile al seguente:
    *,*
    , significa che sia il server di destinazione sia il criterio CORS di AssegnaMessage stanno impostando il proprio valore.
  4. Questo può accadere quando un utente ha utilizzato <Add> element per Access-Control-Allow-Origin in un criterio o quando il backend stesso imposta più valori.

Esempio di Access-Control-Allow-Origin uguale a *,*:

esempio di più valori utilizzati, fai clic per ingrandire l&#39;immagine esempio di più valori utilizzati

Esempio di Access-Control-Allow-Origin uguale a *:

Esempio di valore singolo utilizzato, fai clic per un&#39;immagine più grande valore singolo di esempio utilizzato

Esempio che utilizza <Add>:

Esempio con Aggiungi, fai clic per un&#39;immagine più grande Esempio di utilizzo di Aggiungi

Esempio che utilizza <Set>:

Esempio: usando Set, fai clic per un&#39;immagine più grande esempio utilizzando Imposta

Risoluzione

  1. L'approccio consigliato prevede di utilizzare <Set> element (anziché <Add> element) per Access-Control-Allow-Origin perché è consentito un solo valore.
  2. In alternativa, imposta l'intestazione Access-Control-Allow-Origin in una sola posizione: il criterio CORS di AssegnaMessage o il server di destinazione.
<?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>

Se hai ancora bisogno di aiuto dall'Assistenza Apigee, vai alla pagina Devi raccogliere informazioni diagnostiche.

Devi raccogliere dati diagnostici

Raccogli le seguenti informazioni diagnostiche e poi contatta l'assistenza Apigee Edge:

  • Nome dell'organizzazione.
  • Nome ambiente
  • Nome proxy API
  • Comando curl completo utilizzato per riprodurre l'errore
  • File di traccia per le richieste API
  • Output completo della risposta dal server di destinazione/backend insieme alle dimensioni del payload