415 Tipo di media non supportato - Codifica non supportata

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Sintomo

L'applicazione client riceve un codice di stato HTTP 415 Unsupported Media Type con codice di errore protocol.http.UnsupportedEncoding in risposta alle chiamate API.

Messaggio di errore

L'applicazione client riceve il seguente codice di risposta:

HTTP/1.1 415 Unsupported Media Type

Inoltre, potrebbe essere visualizzato un messaggio di errore simile a quello mostrato di seguito:

{
   "fault":{
      "faultstring":"Unsupported Encoding \"UTF-8\"",
      "detail":{
         "errorcode":"protocol.http.UnsupportedEncoding"
      }
   }
}

Possibili cause

Questo errore si verifica se il valore dell'intestazione Content-Encoding specificato nella richiesta HTTP inviata dal client ad Apigee o nella risposta HTTP inviata dal server di backend ad Apigee non contiene la codifica supportata da Apigee, secondo la specifica RFC 7231, sezione 6.5.13: 415 tipo di media non supportato.

Le possibili cause di questo errore sono le seguenti:

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili a
Codifica non supportata utilizzata nella richiesta L'intestazione della richiesta Content-Encoding contiene una codifica non supportata da Apigee Edge. Utenti di cloud pubblico e privato perimetrale
Codifica non supportata utilizzata nella risposta L'intestazione della risposta del server di backend Content-Encoding contiene una codifica non supportata da Apigee Edge. Utenti di cloud pubblico e privato perimetrale

Passaggi di diagnosi più comuni

Per diagnosticare l'errore, puoi utilizzare uno dei seguenti metodi:

Monitoraggio delle API

Per diagnosticare l'errore utilizzando il monitoraggio delle API:

  1. Accedi al tuo account Apigee Edge.
  2. Passa all'organizzazione in cui vuoi esaminare il problema:

    menu a discesa organizzazione ui
  3. Vai alla pagina Analizza > Monitoraggio API > Esamina.
  4. Seleziona il periodo di tempo specifico in cui hai riscontrato gli errori.
  5. Assicurati che il filtro Proxy sia impostato su Tutti.
  6. Traccia Codice di errore su Ora.
  7. Seleziona una cella con il codice di errore protocol.http.UnsupportedEncoding come mostrato di seguito:

    cella di codice di errore selezionata
  8. Le informazioni sul codice di errore protocol.http.UnsupportedEncoding vengono visualizzate come mostrato di seguito:

  9. Fai clic su Visualizza log ed espandi una delle richieste non riuscite con errore 415 per visualizzare ulteriori informazioni:

  10. Nella finestra Log, prendi nota dei seguenti dettagli:
    • Origine errore: viene visualizzato che l'errore viene restituito da apigee o target.
    • Codice di errore: deve corrispondere a protocol.http.UnsupportedEncoding.
  11. Se l'origine dell'errore è apigee, significa che la richiesta conteneva una codifica non supportata nell'intestazione Content-Encoding.
  12. Se l'origine dell'errore è target, significa che la risposta del server di backend conteneva una codifica non supportata nell'intestazione Content-Encoding.

Strumento Traccia

Per diagnosticare l'errore utilizzando lo strumento Trace:

  1. Abilita la sessione di traccia e:
    • Attendi che si verifichi l'errore 415 Unsupported Media Type oppure
    • Se riesci a riprodurre il problema, esegui la chiamata API per riprodurre l'errore 415 Unsupported Media Type.
  2. Assicurati che l'opzione Mostra tutte le FlowInfos sia attivata:

    riquadro delle opzioni di visualizzazione, mostra tutte le informazioni di flusso
  3. Seleziona una delle richieste non riuscite ed esamina la traccia.
  4. Naviga tra le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
  5. In genere, l'errore si trova in un flusso successivo alla fase Richiesta inviata al server di destinazione, come mostrato di seguito:

  6. Prendi nota del valore dell'errore della traccia.

    La traccia di esempio precedente mostra l'errore come Unsupported Encoding "utf-8". Poiché l'errore viene generato da Apigee dopo l'invio della richiesta al server di backend, indica che il server di backend ha inviato l'intestazione della risposta Content-Encoding con il valore "utf-8", che non è una codifica supportata in Apigee.

  7. Vai alla fase AX (Analytics Data Recorded) della traccia e fai clic.
  8. Scorri verso il basso fino alla sezione Intestazioni errore / risposta nel riquadro Dettagli fase e determina i valori di X-Apigee-fault-code e X-Apigee-fault-source, come mostrato di seguito:

  9. Vedrai i valori di X-Apigee-fault-code e X-Apigee-fault-source come protocol.http.UnsupportedEncoding e target, a indicare che questo errore è dovuto al fatto che il valore di codifica non supportato di "utf-8" è stato trasmesso dal server di backend nell'intestazione della risposta Content-Encoding.

    Intestazioni della risposta Valore
    X-Apigee-fault-code protocol.http.UnsupportedEncoding
    X-Apigee-fault-source target

  10. Verifica se stai utilizzando un concatenamento di proxy, ovvero se l'endpoint del server/target di destinazione richiama un altro proxy in Apigee.
    1. Per determinarlo, torna alla fase Richiesta inviata al server di destinazione. Fai clic su Mostra arricciatura.

    2. Si apre la finestra Curl per la richiesta inviata al server di destinazione dalla quale puoi determinare l'alias host del server di destinazione.
    3. Se l'alias dell'host del server di destinazione rimanda a un alias host virtuale, si tratta di un concatenamento dei proxy. In questo caso, devi ripetere tutti i passaggi precedenti per il proxy concatenato fino a determinare la causa effettiva dell'errore 415 Unsupported Media Type.
    4. Se l'alias dell'host del server di destinazione rimanda al tuo server di backend, ciò indica che il server di backend passa la codifica non supportata ad Apigee.

Log degli accessi Nginix

Per diagnosticare l'errore utilizzando i log degli accessi di NGINX:

  1. Se sei un utente Private Cloud, puoi utilizzare i log degli accessi di NGINX per determinare le informazioni chiave sugli errori HTTP 415.
  2. Controlla i log degli accessi di NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. Cerca eventuali errori 415 durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che continuano a non funzionare con 415.
  4. Se riscontri errori 415 con X-Apigee-fault-code corrispondente al valore di protocol.http.UnsupportedEncoding, determina il valore di X-Apigee-fault-code

    Esempio di errore 415 dal log degli accessi di NGINX:

    La voce di esempio precedente del log degli accessi NGINX ha i seguenti valori per X- Apigee-fault-code e X-Apigee-fault-source:

    Intestazioni della risposta Valore
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source MP

    X-Apigee-fault-source potrebbe avere anche il valore target.

Causa: codifica non supportata nella richiesta

Diagnostica

  1. Determina il codice di errore e l'origine dell'errore per l'errore osservato utilizzando i log di accesso dell'API Monitoring o NGINX, come spiegato nella sezione Passaggi comuni della diagnostica.
  2. Se il codice di errore è protocol.http.UnsupportedEncoding e l'origine dell'errore ha il valore apigee o MP, significa che la richiesta inviata dall'applicazione client contiene una codifica non supportata nell'intestazione della richiesta Content-Encoding.
  3. Puoi determinare il valore della codifica non supportata trasmessa come parte della richiesta HTTP utilizzando uno dei seguenti metodi:

    Messaggio di errore

    Tramite il messaggio di errore:
    1. Se hai accesso al messaggio di errore completo ricevuto da Apigee Edge, fai riferimento all'faultstring. faultstring contiene il valore della codifica di fine non supportata.

      Esempio di messaggio di errore:

      "faultstring":"Unsupported Encoding \"UTF-8\""
      
    2. Nel messaggio di errore riportato sopra, nota che il valore della codifica non supportata è “UTF-8” come indicato in faultstring.

      Poiché “UTF-8” non è una codifica supportata in Apigee Edge, questa richiesta non va a buon fine e viene restituito l'errore 415 Unsupported Media Type con il codice di errore: protocol.http.UnsupportedEncoding.

    Richiesta effettiva

    Con la richiesta effettiva:
    1. Se non hai accesso alla richiesta effettiva effettuata dall'applicazione client, vai a Risoluzione.
    2. Se hai accesso alla richiesta effettiva effettuata dall'applicazione client, segui questi passaggi:
      1. Determina il valore passato all'intestazione della richiesta Content-Encoding.
      2. Se il valore passato all'intestazione della richiesta Content-Encoding non è uno dei valori elencati in Codifica supportata, questa è la causa di questo errore.

        Richiesta di esempio:

        curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: UTF-8" -X POST -d @request_payload.gz
        

        La richiesta di esempio precedente invia il valore "UTF-8" all'intestazione Content- Encoding, che non è una codifica supportata in Apigee Edge. Pertanto, questa richiesta ha esito negativo e genera un errore 415 Unsupported Media Type con il codice di errore: protocol.http.UnsupportedEncoding.

Risoluzione

  1. Consulta l'elenco delle codifiche supportate da Apigee in Codifica supportata.
  2. Assicurati che l'applicazione client invii sempre quanto segue:
    • Solo la codifica supportata come valore dell'intestazione Content-Encoding nella richiesta
    • Il payload della richiesta nel formato supportato su Apigee Edge e corrisponde al formato specificato nell'intestazione Content-Encoding
  3. Nell'esempio precedente, il payload della richiesta ha un'estensione gz, che indica che i contenuti devono essere gzip. Puoi risolvere il problema inviando l'intestazione della richiesta come Content-Encoding: gzip e il payload della richiesta in formato gzip:

    curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
    

Causa: codifica non supportata nella risposta

Diagnostica

  1. Determina il codice di errore e l'origine dell'errore per l'errore osservato mediante i log degli accessi di API Monitoring, Trace Tool o NGINX, come spiegato nella sezione Passaggi comuni della diagnostica.
  2. Se Origine dell'errore ha il valore target, significa che la risposta inviata dal server di backend contiene una codifica non supportata nell'intestazione Content-Encoding.
  3. Puoi determinare il valore della codifica non supportata trasmessa come parte della risposta HTTP dal server di backend utilizzando uno dei seguenti metodi:

    Messaggio di errore

    Tramite il messaggio di errore:
    1. Se hai accesso al messaggio di errore completo ricevuto da Apigee Edge, fai riferimento all'faultstring. faultstring contiene il valore di una codifica non supportata.

      Esempio di messaggio di errore:

      "faultstring":"Unsupported Encoding \"UTF-8\""
      
    2. Nel messaggio di errore riportato sopra, nota che il valore della codifica non supportata è “UTF-8” come indicato in faultstring.

      Poiché “UTF-8” non è una codifica supportata in Apigee Edge, questa richiesta non va a buon fine e genera un errore 415 Unsupported Media Type con il codice di errore: protocol.http.UnsupportedEncoding.

    Strumento Traccia

    Utilizzo di Trace:
    1. Se non hai la traccia per la richiesta non riuscita, vai a Risoluzione.
    2. Se hai acquisito una traccia per l'errore, puoi determinare la codifica non supportata trasmessa dal server di backend nell'ambito dell'intestazione della risposta Content-Encoding, come spiegato nello strumento Traccia.

Risoluzione

  1. Consulta l'elenco delle codifiche supportate da Apigee in Codifica supportata
  2. Assicurati che il server di backend invii sempre quanto segue:
    • Solo la codifica supportata come valore dell'intestazione Content-Encoding nella richiesta
    • Il payload della risposta nel formato supportato su Apigee Edge corrisponde al formato specificato nell'intestazione Content-Encoding

Codifica supportata

Nella tabella seguente sono elencati i formati di codifica supportati da Apigee Edge:

Titolo Codifica Descrizione
Content-Encoding gzip Formato Unix gzip
deflate Questo formato utilizza la struttura zlib con l'algoritmo di compressione deflate.

Specifiche

Apigee risponde con la risposta di errore 415 Unsupported Media Type in base alla seguente specifica RFC:

Specifiche
RFC 7231, sezione 6.5.13: 415 Tipo di supporto non supportato

Punti chiave da considerare

Tieni presente quanto segue:

  • Se l'errore 415 viene restituito da Apigee a causa di una codifica non supportata passata nell'intestazione Content-Encoding come parte della richiesta API:
    • Non potrai acquisire la traccia per queste richieste.
    • Non potrai modificare il formato o il contenuto della risposta di errore inviata da Apigee Edge utilizzando criteri come RaiseFault, AssignMessage.

    Il motivo è che questo errore si verifica in una fase iniziale del processore di messaggi prima di poter eseguire qualsiasi criterio.

  • Se Apigee restituisce l'errore 415 a causa di una codifica non supportata trasmessa nell'intestazione della risposta dal server di backend, deve essere corretta nel server di backend per evitare questo errore. Collabora con il team di backend per risolvere il problema.

Se hai ancora bisogno di assistenza da parte dell'Assistenza Apigee Edge, visita la pagina Raccogliere informazioni diagnostiche.

Devi raccogliere dati diagnostici

Se hai ancora bisogno di aiuto dall'Assistenza Apigee, raccogli le seguenti informazioni di diagnostica e contatta l'Assistenza Apigee Edge:

Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:

  • Nome dell'organizzazione.
  • Nome ambiente
  • Nome proxy API
  • Comando curl completo utilizzato per riprodurre l'errore 415
  • File di traccia per le richieste API

Se sei un utente Private Cloud, fornisci le seguenti informazioni:

  • Messaggio di errore completo osservato per le richieste non riuscite
  • Nome ambiente
  • Bundle del proxy API
  • File di traccia per le richieste API
  • Log degli accessi NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Dove: ORG, ENV e PORT# vengono sostituiti con i valori effettivi.

  • Log di sistema del processore di messaggi /opt/apigee/var/log/edge-message- processor/logs/system.log