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:
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
- Verifica che il problema si verifichi solo se è prevista una risposta non
2XX. - Per le richieste non riuscite, verifica che siano presenti policy nel flusso del proxy.
-
Traccia la richiesta e verifica se una policy con
continueOnError="false"non riesce e genera un errore. - In caso affermativo, verifica se la policy AssignMessage CORS è stata eseguita o meno nel flusso della risposta di errore.
- In caso contrario, questa è la causa del problema.
Questo perché quando una policy con l'elementocontinueOnError="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 restituisceUnknown 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 successo nel riquadro Prova questa API del portale integrato e nella finestra Traccia del proxy:
Risoluzione
- 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.
- 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
- 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ù di un valore può causare un problema CORS e il portale per sviluppatori non riuscirà a eseguire il rendering delle risposte.
- 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. - Questo potrebbe accadere quando un utente ha utilizzato il
<Add> elementper 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 Access-Control-Allow-Origin uguale a *:
Esempio di utilizzo di <Add>:
Esempio di utilizzo di <Set>:
Risoluzione
- L'approccio consigliato è utilizzare il
<Set> element(anziché il<Add> element) per Access-Control-Allow-Origin , poiché è consentito un solo valore. - 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