415 Tipo di media non supportato - Codifica non supportata

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Sintomo

L'applicazione client riceve un codice di stato HTTP di 415 Unsupported Media Type con il 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, potresti visualizzare 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 in la richiesta HTTP inviata dal client ad Apigee o la risposta HTTP inviata dal server di backend per Apigee non contiene codifica supportata da Apigee, secondo la specifica RFC 7231, sezione 6.5.13: 415 supported Media Type (Tipo di supporto non supportato).

Le possibili cause di questo errore sono le seguenti:

Causa Descrizione Le istruzioni di risoluzione dei problemi applicabili a
Utilizzata codifica non supportata nella richiesta L'intestazione della richiesta Content-Encoding contiene una codifica non supportata di Apigee Edge. Utenti perimetrali di cloud pubblici e privati
Utilizzata codifica non supportata nella risposta L'intestazione della risposta del server di backend Content-Encoding contiene una codifica non è supportato da Apigee Edge. Utenti perimetrali di cloud pubblici e privati

Passaggi diagnostici comuni

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

Monitoraggio delle API

Per diagnosticare l'errore utilizzando API Monitoring:

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

    menu a discesa ui org
  3. Vai al menu Analizza > Monitoraggio delle API > Esamina.
  4. Seleziona il periodo di tempo specifico in cui hai osservato gli errori.
  5. Assicurati che il filtro Proxy sia impostato su Tutti.
  6. Traccia il codice di errore in base all'ora.
  7. Seleziona una cella con il codice di errore protocol.http.UnsupportedEncoding, come mostrato di seguito:

    cella del 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 che non vanno a buon fine con 415 per visualizzare ulteriori informazioni:

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

Strumento Trace

Per diagnosticare l'errore utilizzando lo strumento Trace:

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

    visualizza riquadro opzioni, mostra tutte le info di flusso
  3. Seleziona una delle richieste non riuscite ed esamina la traccia.
  4. Naviga attraverso le diverse fasi della traccia e individua dove si è verificato l'errore.
  5. In genere troverai l'errore in un flusso successivo al messaggio Richiesta inviata al target server come mostrato di seguito:

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

    La traccia di esempio riportata sopra mostra l'errore come Unsupported Encoding "utf-8". Dal giorno 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 di "utf-8", che non è un codifica supportata in Apigee.

  7. Vai alla fase AX (dati registrati di Analytics) della traccia e fai clic su quest'ultima.
  8. Scorri verso il basso fino alla sezione Intestazioni errore / risposta in Dettagli fase. e stabilire 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, che indicano che è dovuto al fatto che il valore di codifica di "utf-8" non supportato è 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 concatenamento dei proxy; ovvero se il server/endpoint di destinazione richiama un altro 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 richieste inviate 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 dell'host virtuale, si tratta di un proxy concatenamento. In questo caso, devi ripetere tutti i passaggi precedenti per il proxy concatenato fino a quando sei tu a determinare la causa dell'errore 415 Unsupported Media Type.
    4. Se l'alias dell'host del server di destinazione rimanda al tuo server di backend, questo indica che il tuo server di backend trasmette ad Apigee la codifica non supportata.

Log di accesso Nginix

Per diagnosticare l'errore utilizzando i log di accesso NGINX:

  1. Se sei un utente Private Cloud, puoi utilizzare i log di accesso NGINX per determinare le informazioni principali sugli errori HTTP 415.
  2. Controlla i log di accesso 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 non vanno a buon fine con 415.
  4. Se trovi errori 415 con la corrispondenza X-Apigee-fault-code il valore di protocol.http.UnsupportedEncoding, quindi determina il valore della X-Apigee-fault-source.

    Esempio di errore 415 nel log di accesso NGINX:

    La voce di esempio riportata sopra del log di accesso NGINX ha i seguenti valori per X- Codice di errore Apigee e fonte-fault-X-Apigee:

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

    La X-Apigee-fault-source potrebbe avere anche ilX-Apigee-fault-source valoreX-Apigee-fault-source

Causa: codifica non supportata nella richiesta

Diagnosi

  1. Determinare il codice di errore e l'origine errore per l'errore osservato utilizzando l'API Log di accesso di Monitoring o NGINX come spiegato in Passaggi diagnostici comuni.
  2. Se il codice di errore è protocol.http.UnsupportedEncoding e il valore di errore L'origine ha il valore apigee o MP, questo indica che l'elemento 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 passata come parte della richiesta HTTP utilizzando uno dei seguenti metodi:

    Messaggio di errore

    Utilizzo del messaggio di errore:
      .
    1. Se hai accesso al messaggio di errore completo ricevuto da Apigee Edge, consulta al faultstring. faultstring contiene il valore del parametro non supportato endcoding.

      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 riesce e restituisce l'errore 415 Unsupported Media Type con il codice di errore: protocol.http.UnsupportedEncoding.

    Richiesta effettiva

    Mediante 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, esegui la seguenti 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, sarà la causa di questo errore.

        Esempio di richiesta:

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

        La richiesta di esempio riportata sopra invia il valore "UTF-8" all'intestazione Content- Encoding, che non è Codifica supportata in Apigee Edge. Pertanto, questa richiesta non va a buon fine e restituisce 415 Unsupported Media Type errore 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 in la richiesta
    • Il payload della richiesta nel formato supportato per Apigee Edge 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

Diagnosi

  1. Determinare il codice di errore e l'origine errore per l'errore osservato utilizzando l'API Log di accesso di Monitoring, dello strumento di tracciamento o di NGINX, come spiegato in Passaggi comuni per la diagnosi.
  2. Se il campo Origine errore ha il valore target, significa che la risposta inviata dal server di backend contiene una codifica non supportata nel Content-Encoding intestazione.
  3. Puoi determinare il valore della codifica non supportata passata come parte della risposta HTTP da al server di backend utilizzando uno dei seguenti metodi:

    Messaggio di errore

    Utilizzo del messaggio di errore:
      .
    1. Se hai accesso al messaggio di errore completo ricevuto da Apigee Edge, consulta il faultstring. faultstring contiene il valore del parametro 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, richiesta non riuscita e genera 415 Unsupported Media Type errore con il codice di errore: protocol.http.UnsupportedEncoding.

    Strumento Trace

    Utilizzo di Trace:
      .
    1. Se non disponi della traccia per la richiesta non riuscita, vai a Risoluzione.
    2. Se hai acquisito una traccia per l'errore, puoi determinare quali codifica passata dal server di backend come parte della risposta Content-Encoding come spiegato nello strumento Trace.

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 del valore Intestazione Content-Encoding nella richiesta
    • Il payload della risposta nel formato supportato per 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:

Intestazione Codifica Descrizione
Content-Encoding gzip Il formato Unix gzip
deflate Questo formato utilizza la struttura zlib con algoritmo di compressione deflate.

Specifica

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

Specifica
RFC 7231, sezione 6.5.13: 415 Tipo di media non supportato

Punti chiave da tenere presente

Tieni presente quanto segue:

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

    Il motivo è che questo errore si verifica in una fase iniziale nel processore di messaggi prima che è possibile eseguire.

  • Se Apigee restituisce l'errore 415 a causa di una codifica non supportata superata nell'intestazione della risposta dal server di backend, quindi deve essere corretto in il server di backend per evitare questo errore. Collabora con il team backend in modo da per risolvere il problema.

Se hai ancora bisogno di assistenza da parte dell'Assistenza Apigee Edge, vai a Devi raccogliere i dati diagnostici.

Raccogliere dati diagnostici

Se hai ancora bisogno di aiuto dall'assistenza Apigee, raccogli quanto segue informazioni diagnostiche e contattare l'assistenza Apigee Edge:

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

  • Nome organizzazione
  • Nome ambiente
  • Nome proxy API
  • Completa il comando curl utilizzato per riprodurre l'errore 415
  • File di traccia per le richieste API

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

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

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

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