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:
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
- Verifica che il problema si verifichi solo se è prevista una risposta diversa da
2XX
. - Per le richieste con esito negativo, verifica che siano presenti criteri nel flusso proxy.
-
Traccia la richiesta e controlla se un criterio con
continueOnError="false"
ha esito negativo e genera un errore. - In caso affermativo, verifica se il criterio CORS di AssegnaMessage è stato eseguito o meno nel flusso di risposta di errore.
- In caso contrario, è questa la causa del problema.
Questo perché, in caso di errore di qualsiasi criterio con l'elementocontinueOnError="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 restituisceUnknown 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 operazione riuscita nel riquadro Prova questa API del portale integrato e nella finestra Trace del proxy:
Risoluzione
- 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.
- 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
- Controlla il valore dell'intestazione Access-Control-Allow-Origin in una sessione di traccia.
- 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.
- 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. - 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 Access-Control-Allow-Origin uguale a *
:
Esempio che utilizza <Add>
:
Esempio che utilizza <Set>
:
Risoluzione
- L'approccio consigliato prevede di utilizzare
<Set> element
(anziché<Add> element
) per Access-Control-Allow-Origin perché è consentito un solo valore. - 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