Errore sconosciuto nel riquadro Prova questa API

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:

messaggio di errore generico, fai clic per visualizzare un'immagine più grande messaggio di errore generico

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

  1. Verifica che il problema si verifichi solo se è prevista una risposta diversa da 2XX.
  2. Per le richieste non riuscite, verifica che siano presenti criteri nel flusso del proxy.
  3. Tracciare la richiesta e controllare se un criterio continueOnError="false" non funziona e sta causando un errore.
    1. In caso affermativo, verifica se Il criterio CORS AttributionMessage è stato eseguito o non è stato eseguito nell'errore flusso di risposta.
    2. Se la risposta è no, il problema è quello.
      Questo perché quando qualsiasi criterio con l'elemento continueOnError="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 con Unknown 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:

messaggio di errore di esempio, fai clic per visualizzare un'immagine più grande messaggio di errore di esempio

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

esempio di messaggio di operazione riuscita, fai clic per visualizzare un'immagine più grande esempio di messaggio di successo

Risoluzione

  1. 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.
  2. 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

  1. Verifica il valore dell'intestazione Access-Control-Allow-Origin in un . sessione di tracciamento.
  2. 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.
  3. 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.
  4. 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 più valori utilizzati, fai clic per visualizzare un&#39;immagine più grande esempio più valori utilizzati

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

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

Esempio che utilizza <Add>:

esempio utilizzando Aggiungi, fai clic per visualizzare un&#39;immagine più grande esempio Utilizzo di Aggiungi

Esempio che utilizza <Set>:

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

Risoluzione

  1. L'approccio consigliato consiste nell'utilizzare <Set> element (anziché <Add> element) per Access-Control-Allow-Origin come è consentito un solo valore.
  2. 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