Errore sconosciuto nel riquadro Prova questa API

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Sintomo

La chiamata API dal portale per sviluppatori integrato non riesce e restituisce Unknown Error o 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, vedrai 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.

Un messaggio di errore generico visualizzato nella scheda Strumenti per sviluppatori > Console è il seguente:

messaggio di errore generico, fai clic per ingrandire l'immagine messaggio di errore generico

Possibili cause

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili a
Errore di policy non gestito La risposta di errore predefinita viene inviata senza le intestazioni CORS quando una policy non riesce nel flusso di runtime della richiesta API. Utenti di Edge Public Cloud
Più valori per Access-Control-Allow-Origin Utilizzo di Add anziché Set nella policy Assign Message. Utenti di Edge Public Cloud

Causa: errore di policy non gestito

Diagnosi

  1. Verifica che il problema si verifichi solo se è prevista una risposta non 2XX.
  2. Per le richieste non riuscite, verifica che siano presenti policy nel flusso del proxy.
  3. Traccia la richiesta e verifica se una policy con continueOnError="false" non riesce e genera un errore.
    1. In caso affermativo, verifica se la policy AssignMessage CORS è stata eseguita o meno nel flusso della risposta di errore.
    2. In caso contrario, questa è la causa del problema.
      Questo perché quando una policy con l'elemento continueOnError="false" non riesce, la richiesta entra nel flusso della risposta di errore. Se non è presente una gestione esplicita degli errori nel flusso della risposta di errore, viene inviata la risposta di errore predefinita corrispondente alla policy. Questa risposta di errore non ha intestazioni CORS. Di conseguenza, la chiamata API dal portale per sviluppatori integrato non riesce e restituisce Unknown error.

Gli screenshot seguenti mostrano un esempio di messaggio di errore e un esempio messaggio di successo.

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

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

Esempio di messaggio di successo nel riquadro Prova questa API del portale integrato e nella finestra Traccia del proxy:

Esempio di messaggio di conferma, fai clic per visualizzare un'immagine più grande esempio di messaggio di riuscita

Risoluzione

  1. Anziché fare affidamento sul messaggio di errore predefinito, è necessario implementare una regola di errore per gestire la risposta di errore. Includi una policy AssignMessage CORS con le intestazioni appropriate e richiamala 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 la policy AssignMessage CORS:
<?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

Diagnosi

  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ù di un valore può causare un problema CORS e il portale per sviluppatori non riuscirà a eseguire il rendering delle risposte.
  3. Se il valore dell'intestazione Access-Control-Allow-Origin nella traccia è simile a:
    *,*
    significa che sia il server di destinazione sia la policy AssignMessage CORS ne impostano il valore.
  4. Questo potrebbe accadere quando un utente ha utilizzato il <Add> element per Access-Control-Allow-Origin in una policy oppure il backend stesso sta impostando più valori.

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

Esempio di più valori utilizzati, fai clic per ingrandire l'immagine esempio di più valori utilizzati

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

Esempio di valore singolo utilizzato, fai clic per ingrandire l'immagine esempio di valore singolo utilizzato

Esempio di utilizzo di <Add>:

Esempio di utilizzo di Aggiungi, fai clic per ingrandire l'immagine Esempio di utilizzo di Add

Esempio di utilizzo di <Set>:

Esempio di utilizzo di Set, fai clic per visualizzare l'immagine più grande esempio utilizzando Set

Risoluzione

  1. L'approccio consigliato è utilizzare il <Set> element (anziché il <Add> element) per Access-Control-Allow-Origin , poiché è consentito un solo valore.
  2. In alternativa, imposta l'intestazione Access-Control-Allow-Origin in un solo punto: la policy AssignMessage CORS 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 dell'assistenza di Apigee, vai a Raccogliere informazioni di diagnostica.

Raccogliere informazioni di diagnostica

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

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