Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
Sintomo
La chiamata API dal portale per sviluppatori integrato non va a buon fine con
Unknown Error
o una risposta vuota nel
Prova questa API
dal riquadro.
Messaggi di errore
Potresti visualizzare una risposta vuota o il seguente messaggio di errore per l'API richieste nel portale integrato:
Unknown Error
Nella pagina Strumenti per sviluppatori > Console, vedrai quanto segue 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 come visualizzato Strumenti per sviluppatori > Console ha il seguente aspetto:
Possibili cause
Causa | Descrizione | Le istruzioni di risoluzione dei problemi applicabili a |
---|---|---|
Errore del criterio non gestito | La risposta di errore predefinita viene inviata senza intestazioni CORS, quando un criterio ha esito negativo nel flusso di runtime della richiesta API. | Utenti perimetrali del cloud pubblico |
Più valori per Access-Control-Allow-Origin | Utilizzare Aggiungi anziché Imposta in Assegna criterio per i messaggi. | Utenti perimetrali del cloud pubblico |
Causa: errore dei criteri non gestito
Diagnosi
- Verifica che il problema si verifichi solo se è prevista una risposta diversa da
2XX
. - Per le richieste non riuscite, verifica che siano presenti criteri nel flusso del proxy.
-
Tracciare la richiesta e controllare se un criterio
continueOnError="false"
non funziona e sta causando un errore. - In caso affermativo, verifica se Il criterio CORS AttributionMessage è stato eseguito o non è stato eseguito nell'errore flusso di risposta.
- Se la risposta è no, il problema è quello.
Questo perché quando qualsiasi criterio con l'elementocontinueOnError="false"
non riesce, la richiesta entra nel il flusso di risposte agli errori. Se non è presente una gestione esplicita dei guasti il flusso di risposte di errore, la risposta di errore predefinita corrispondente al criterio viene restituito. Questa risposta di errore non ha CORS. Di conseguenza, la chiamata API dallo sviluppatore integrato del portale in errore conUnknown error
.
Gli screenshot seguenti mostrano un messaggio di errore e un esempio messaggio di riuscita.
Esempio di messaggio di errore nel riquadro Prova questa API del portale integrato e nella finestra Trace del proxy:
Esempio di messaggio di successo nel riquadro Prova questa API del portale integrato e nella finestra Trace del proxy:
Risoluzione
- Anziché affidarti al messaggio di errore predefinito, di errore deve essere implementata per poter gestire la risposta di errore. Includi un Assegna il criterio CORS di Message con intestazioni appropriate e richiamalo nel FaultRule.
- A volte potrebbe non essere possibile definire una regola di errore per ogni errore; perciò è possibile implementare una regola di errore predefinita per eseguire il criterio CORS 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
Diagnosi
- Verifica il valore dell'intestazione Access-Control-Allow-Origin in un . sessione di tracciamento.
- L'intestazione Access-Control-Allow-Origin consente un solo valore da impostare. L'impostazione di più valori può causare un problema CORS e il portale per gli sviluppatori non risponderà ad alcuna risposta.
- Se il valore dell'intestazione Access-Control-Allow-Origin nella traccia
ha il seguente aspetto:
*,*
significa che sia il server di destinazione il criterio CORS diAssignMessage ne imposta il valore. - Questo può accadere quando un utente ha utilizzato
<Add> element
per Access-Control-Allow-Origin in un o il backend 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 consiste nell'utilizzare
<Set> element
(anziché<Add> element
) per Access-Control-Allow-Origin come è consentito un solo valore. - In alternativa, imposta l'intestazione Access-Control-Allow-Origin solo in un solo posto; o il . Assegna il criterio CORS diMessage 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 a Devi raccogliere dati diagnostici.
Raccogliere dati diagnostici
Raccogli le seguenti informazioni diagnostiche e contatta Assistenza Apigee Edge:
- Nome 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 a la dimensione del payload