Risoluzione dei problemi relativi agli errori di risposta

Questa pagina descrive come risolvere gli errori che ricevi in una risposta da una richiesta alla tua API.

BAD_GATEWAY

Se ricevi il codice di errore 13 e il messaggio BAD_GATEWAY, significa che Extensible Service Proxy (ESP) non è in grado di raggiungere il backend del servizio. Verifica quanto segue:

reset reason: connection failure

Se ricevi il codice HTTP 503 o il codice gRPC 14 e il messaggio upstream connect error or disconnect/reset before headers. reset reason: connection failure, significa che ESPv2 non è in grado di raggiungere il backend del servizio.

Per risolvere il problema, ricontrolla quanto segue.

Indirizzo backend

ESPv2 deve essere configurato con l'indirizzo di backend corretto. I problemi più comuni includono:

  • Lo schema dell'indirizzo di backend deve corrispondere al tipo di applicazione di backend. I backend OpenAPI devono essere http://, mentre quelli gRPC devono essere grpc://.
  • Per ESPv2 di cui è stato eseguito il deployment in Cloud Run, lo schema dell'indirizzo di backend deve essere https:// o grpcs://. s indica a ESPv2 di configurare TLS con il backend.

Ricerca DNS

Per impostazione predefinita, ESPv2 tenta di risolvere i nomi di dominio negli indirizzi IPv6. Se la risoluzione IPv6 non va a buon fine, ESPv2 utilizza gli indirizzi IPv4.

Per alcune reti, il meccanismo di riserva potrebbe non funzionare come previsto. Puoi invece forzare ESPv2 a utilizzare indirizzi IPv4 tramite il flag --backend_dns_lookup_family.

Questo errore è comune se configuri un connettore VPC serverless per ESPv2 di cui è stato eseguito il deployment in Cloud Run. I VPC non supportano il traffico IPv6.

API is not enabled for the project

Se hai inviato una chiave API nella richiesta, un messaggio di errore come "API my-api.endpoints.example-project-12345.cloud.goog non è abilitata per il progetto" indica che la chiave API è stata creata in un progetto Google Cloud diverso dall'API. Per risolvere il problema, puoi creare la chiave API nello stesso progetto Google Cloud a cui è associata l'API oppure abilitare l'API nel progetto Google Cloud in cui è stata creata la chiave API.

Service control request failed with HTTP response code 403

Se ricevi il codice di errore 14 e il messaggio Service control request failed with HTTP response code 403, significa che l'API Service Control (servicecontrol.googleapis.com) non è abilitata nel progetto.

  1. Consulta Verifica dei servizi richiesti per assicurarti che tutti i servizi richiesti da Endpoints ed ESP siano abilitati nel tuo progetto.

  2. Vedi Controllo delle autorizzazioni richieste per assicurarti che tutte le autorizzazioni necessarie per l'account di servizio siano associate all'istanza che esegue ESP.

Method doesn't allow unregistered callers

ESP risponde con l'errore Method doesn't allow unregistered callers se hai specificato una chiave API nella sezione security del tuo documento OpenAPI, ma la richiesta all'API non ha una chiave API assegnata a un parametro di query denominato key.

Se devi generare una chiave API per effettuare chiamate all'API, consulta Creazione di una chiave API.

Method does not exist

La risposta Method does not exist indica che non è stato trovato il metodo HTTP (GET, POST o altro) nel percorso dell'URL specificato. Per risolvere il problema, confronta la configurazione del servizio di cui hai eseguito il deployment per assicurarti che il nome del metodo e il percorso dell'URL che stai inviando nella richiesta corrispondano:

  1. Nella console Google Cloud, vai alla pagina Servizi endpoint relativa al tuo progetto.

    Vai alla pagina di Endpoints Services

  2. Se hai più di un'API, seleziona quella a cui hai inviato la richiesta.

  3. Fai clic sulla scheda Cronologia deployment.

  4. Seleziona il deployment più recente per visualizzare la configurazione del servizio.

Se il metodo che stai chiamando non è specificato nella sezione paths del documento OpenAPI, aggiungi il metodo o il flag x-google-allow al livello superiore del file:

x-google-allow: all

Questo flag indica che puoi evitare di elencare tutti i metodi supportati nel tuo backend nel documento OpenAPI. Quando viene utilizzato all, tutte le chiamate, con o senza una chiave API o l'autenticazione utente, passano attraverso ESP alla tua API. Per ulteriori informazioni, visita la pagina x-google-allow.

Errori specifici per l'ambiente flessibile di App Engine

Questa sezione descrive le risposte di errore delle API distribuite nell'ambiente flessibile di App Engine.

Codice di errore 502 o 503

App Engine potrebbe impiegare alcuni minuti per rispondere correttamente alle richieste. Se invii una richiesta e ricevi un errore di tipo HTTP 502, 503 o di altro tipo del server, attendi un minuto e riprova a inviare la richiesta.

Messaggio di errore BAD_GATEWAY

Un codice di errore 502 con BAD_GATEWAY nel messaggio indica di solito che App Engine ha terminato l'applicazione perché ha esaurito la memoria. La VM flessibile di App Engine predefinita ha solo 1 GB di memoria, con solo 600 MB disponibili per il container dell'applicazione.

Per risolvere il problema relativo al codice di errore 502:

  1. Nella console Google Cloud, vai alla pagina Logging:

    Vai alla pagina Esplora log

  2. Seleziona il progetto Google Cloud applicabile nella parte superiore della pagina.

  3. Seleziona Applicazione Google App Engine e apri vm.syslog.

  4. Cerca una voce di log simile alla seguente:

    kernel: [  133.706951] Out of memory: Kill process 4490 (java) score 878 or sacrifice child
    kernel: [  133.714468] Killed process 4306 (java) total-vm:5332376kB, anon-rss:2712108kB, file-rss:0kB
    

    Se vedi una voce Out of memory nel log:

    1. Aggiungi quanto segue al tuo file app.yaml per aumentare le dimensioni della VM predefinita:

      resources:
        memory_gb: 4
      
    2. Esegui nuovamente il deployment dell'API:

      gcloud app deploy
      

Se hai specificato l'opzione rollout_strategy: managed nella sezione endpoints_api_service del file app.yaml, utilizza il seguente comando per eseguire nuovamente il deployment dell'API:

  gcloud app deploy

Consulta la pagina relativa al deployment di API ed ESP per ulteriori informazioni.

Controllo dei log di Cloud Logging

Per utilizzare i log di Cloud Logging per risolvere gli errori di risposta:

  1. Nella console Google Cloud, vai alla pagina Logging.

    Vai alla pagina Esplora log

  2. Nella parte superiore della pagina, seleziona il progetto Google Cloud.

  3. Utilizzando il menu a discesa a sinistra, seleziona API prodotta > [YOUR_SERVICE_NAME].

  4. Modifica l'intervallo di tempo finché non viene visualizzata una riga che mostra l'errore di risposta.

  5. Espandi il payload JSON e cerca error_cause.

    • Se error_cause è impostato su application, significa che c'è un problema nel codice.

    • Se il error cause non è altro e non riesci a risolvere il problema, esporta il log e includilo in tutte le tue comunicazioni con Google.

Vai ai seguenti argomenti per ulteriori informazioni:

Problemi con l'esempio Invoke-WebRequest

In alcune versioni di Windows PowerShell, l'esempio Invoke-WebRequest nei tutorial non riesce. Abbiamo anche ricevuto una segnalazione secondo cui la risposta conteneva un elenco di byte non firmati che dovevano essere convertiti in caratteri. Se l'esempio Invoke-WebRequest non ha restituito il risultato previsto, prova a inviare la richiesta utilizzando un'altra applicazione. Di seguito sono riportati alcuni suggerimenti:

  • Avvia Cloud Shell e segui i passaggi di Linux del tutorial che stavi utilizzando per inviare la richiesta.
  • Installa un'applicazione di terze parti, come l'estensione del browser Chrome Postman (offerta da www.getpostman.com). Quando crei la richiesta in Postman:

    • Seleziona POST come verbo HTTP.
    • Per l'intestazione, seleziona la chiave content-type e il valore application/json.
    • Per il corpo, inserisci: {"message":"hello world"}
    • Nell'URL, utilizza la chiave API effettiva anziché la variabile di ambiente. Ad esempio:

      • Nell'ambiente flessibile di App Engine: https://example-project-12345.appspot.com/echo?key=AIza...
      • Su altri backend: http://192.0.2.0:80/echo?key=AIza...
  • Scarica e installa curl, che devi eseguire nel prompt dei comandi. Poiché Windows non gestisce le virgolette doppie nidificate all'interno di virgolette singole, devi modificare l'opzione --data nell'esempio in:

    --data "{\"message\":\"hello world\"}"