Tipo de medio no admitido 415: codificación no admitida

Estás viendo la documentación de Apigee Edge.
Ve a la Documentación de Apigee X.
información

Síntoma

La aplicación cliente obtiene un código de estado HTTP de 415 Unsupported Media Type con código de error protocol.http.UnsupportedEncoding como respuesta a llamadas a la API.

Mensaje de error

La aplicación cliente obtiene el siguiente código de respuesta:

HTTP/1.1 415 Unsupported Media Type

Además, es posible que veas un mensaje de error similar al que se muestra a continuación:

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

Causas posibles

Este error se produce si el valor del encabezado Content-Encoding especificado en la solicitud HTTP enviada por el cliente a Apigee o la respuesta HTTP enviada por el servidor de backend a Apigee no contiene codificación compatible con Apigee, según la especificación RFC 7231, sección 6.5.13: 415 Tipo de medio no admitido.

Las posibles causas de este error son las siguientes:

Causa Descripción Instrucciones de solución de problemas aplicables para
Se usó codificación no compatible en la solicitud El encabezado de solicitud Content-Encoding contiene una codificación que no es compatible de Apigee Edge. Usuarios perimetrales de nubes públicas y privadas
Se usó codificación no compatible en la respuesta El encabezado de respuesta del servidor de backend Content-Encoding contiene la codificación que no es compatible con Apigee Edge. Usuarios perimetrales de nubes públicas y privadas

Pasos comunes de diagnóstico

Para diagnosticar el error, puedes usar cualquiera de los siguientes métodos:

Supervisión de API

Para diagnosticar el error con la supervisión de API, haz lo siguiente:

  1. Accede a tu cuenta de Apigee Edge.
  2. Cambia a la organización en la que quieres investigar el problema:

    Menú desplegable de la organización de la IU
  3. Navega a Analyze > Supervisión de API > Investigar.
  4. Selecciona el período específico en el que observaste los errores.
  5. Asegúrate de que el filtro Proxy esté configurado en Todos.
  6. Traza Código de error en Tiempo.
  7. Selecciona una celda que tenga el código de falla protocol.http.UnsupportedEncoding, como se muestra a continuación:

    celda de código de falla seleccionada
  8. La información sobre el código de falla protocol.http.UnsupportedEncoding se muestra como se muestra a continuación:

  9. Haz clic en Ver registros y expande una de las solicitudes que fallan con 415 para ver más información:

  10. En la ventana Registros, observa los siguientes detalles:
    • Fuente del error: Muestra que apigee muestra el error. o target.
    • Código de error: Debe coincidir con protocol.http.UnsupportedEncoding.
  11. Si la Fault Source es apigee, eso indica que la solicitud contenía codificación incompatible en el encabezado Content-Encoding.
  12. Si la fuente del error es target, eso indica que el servidor de backend contenía una codificación incompatible en el encabezado Content-Encoding.

Herramienta de seguimiento

Para diagnosticar el error con la herramienta Trace, sigue estos pasos:

  1. Habilita el de registro y una de las siguientes opciones:
    • Espera a que se produzca el error 415 Unsupported Media Type.
    • Si puedes reproducir el problema, realiza la llamada a la API para hacerlo. 415 Unsupported Media Type error.
  2. Asegúrate de que Show all FlowInfos esté habilitado:

    ver panel de opciones, mostrar todos los flowinfos
  3. Selecciona una de las solicitudes fallidas y examina el seguimiento.
  4. Navega por las diferentes fases del seguimiento y localiza dónde ocurrió la falla.
  5. Generalmente, encontrarás el error en un flujo después de la solicitud enviada al destino servidor, como se muestra a continuación:

  6. Anota el valor del error del seguimiento.

    En el seguimiento de ejemplo anterior, se muestra el error como Unsupported Encoding "utf-8". Desde Apigee genera el error después de que se envió la solicitud al servidor de backend, indica que el servidor de backend envió el encabezado de respuesta Content-Encoding con el valor de "utf-8", que no es una codificación compatible con Apigee.

  7. Navega a la fase AX (datos registrados de Analytics) en el seguimiento y haz clic en ella.
  8. Desplázate hacia abajo hasta la sección Encabezados de error / respuesta en Detalles de fase. panel y determinar los valores de X-Apigee-fault-code y X-Apigee-fault-source como se muestra a continuación:

  9. Verás los valores de X-Apigee-fault-code y X-Apigee-fault-source como protocol.http.UnsupportedEncoding y target, lo que indica que este se produce porque el valor de codificación no admitido de "utf-8" pasó de backend en el encabezado de respuesta Content-Encoding.

    Encabezados de respuesta Valor
    X-Apigee-fault-code protocol.http.UnsupportedEncoding
    X-Apigee-fault-source target

  10. Comprueba si estás usando encadenamiento de proxy; es decir, si el servidor o extremo de destino invoca a otro proxy en Apigee.
    1. Para determinarlo, regresa a la fase Solicitud enviada al servidor de destino. Haz clic en Show Curl.

    2. Se abrirá la ventana Curl para la solicitud enviada al servidor de destino, donde podrás determinar el alias del host del servidor de destino.
    3. Si el alias del host del servidor de destino apunta a un alias de host virtual, es un proxy el encadenamiento. En este caso, debes repetir todos los pasos anteriores para el proxy en cadena hasta que determinas qué está causando realmente el error 415 Unsupported Media Type.
    4. Si el alias del host del servidor de destino apunta a tu servidor backend, eso indica tu servidor de backend pasa la codificación no compatible a Apigee.

Registros de acceso de Nginix

Para diagnosticar el error con los registros de acceso de NGINX, haz lo siguiente:

  1. Si eres un usuario de la nube privada, puedes usar los registros de acceso de NGINX para determinar la información clave sobre los errores 415 de HTTP.
  2. Verifica los registros de acceso de NGINX:

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

  3. Busca errores 415 durante un período específico (si el problema ocurrió en el pasado) o si todavía hay solicitudes que fallan con 415.
  4. Si encuentras algún error 415 con la coincidencia X-Apigee-fault-code el valor de protocol.http.UnsupportedEncoding y, luego, determina el valor de la X-Apigee-fault-source.

    Error 415 de muestra del registro de acceso de NGINX:

    La entrada de ejemplo anterior del registro de acceso de NGINX tiene los siguientes valores para X- Apigee-fault-code y X-Apigee-fault-source:

    Encabezados de respuesta Valor
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source MP

    La fuente X-Apigee-fault-source también podría tener el valor target.

Causa: Codificación no admitida en la solicitud

Diagnóstico

  1. Determina el código de error y la fuente de errores del error observado con la API. Registros de acceso de Monitoring o NGINX, como se explica en Pasos comunes del diagnóstico.
  2. Si el Fault Code es protocol.http.UnsupportedEncoding y el Fault Source tiene el valor apigee o MP, por lo tanto, esto indica que el valor que envió la aplicación cliente contiene una codificación incompatible en el encabezado de la solicitud Content-Encoding
  3. Puedes determinar el valor de la codificación no admitida que se pasa como parte de la solicitud HTTP. con uno de los siguientes métodos:

    Mensaje de error

    Si aparece el mensaje de error:
    1. Si tienes acceso al mensaje de error completo que recibiste de Apigee Edge, consulta a faultstring. faultstring contiene el valor de la clase y el final de la codificación.

      Ejemplo de mensaje de error:

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. En el mensaje de error anterior, observa que el valor de la codificación incompatible está “UTF-8”, como se ve en faultstring.

      Dado que “UTF-8” no es una codificación compatible con Apigee Edge, esta solicitud falla con el error 415 Unsupported Media Type con el código de error: protocol.http.UnsupportedEncoding

    Solicitud real

    Usa la solicitud real:
    1. Si no tienes acceso a la solicitud real que realizó la aplicación cliente, ve a Resolución.
    2. Si tienes acceso a la solicitud real que realizó la aplicación cliente, realiza la los siguientes pasos:
      1. Determina el valor que se pasa al encabezado de la solicitud Content-Encoding..
      2. Si el valor que se pasa al encabezado de la solicitud Content-Encoding no es uno. de los valores que aparecen en Codificación compatible, este es el la causa de este error.

        Solicitud de muestra:

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

        La solicitud de ejemplo anterior envía el valor "UTF-8" al encabezado Content- Encoding, que no es un Codificación compatible en Apigee Edge. Por lo tanto, esta solicitud falla y muestra el error 415 Unsupported Media Type con el siguiente código de error: protocol.http.UnsupportedEncoding

Solución

  1. Consulta la lista de codificación compatible con Apigee en Codificación compatible.
  2. Asegúrate de que la aplicación cliente siempre envíe lo siguiente:
    • Solo la codificación admitida como valor del encabezado Content-Encoding en la solicitud
    • La carga útil de la solicitud en el formato admitido para Apigee Edge y coincide con el formato especificado en el encabezado Content-Encoding
  3. En el ejemplo anterior, la carga útil de la solicitud tiene una extensión gz que indica que el contenido debe ser gzip. Para solucionar el problema, envía el encabezado de la solicitud como Content-Encoding: gzip y la carga útil de la solicitud en formato gzip:

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

Causa: Codificación no compatible en la respuesta

Diagnóstico

  1. Determina el código de error y la fuente de errores del error observado con la API. Registros de acceso de Monitoring, Trace Tool o NGINX como se explica en Pasos comunes del diagnóstico.
  2. Si la Fuente del error tiene el valor target, esto indica que de respuesta enviada por el servidor de backend contiene una codificación incompatible en el Content-Encoding.
  3. Puedes determinar el valor de la codificación no admitida que se pasó como parte de la respuesta HTTP desde el servidor de backend con uno de los siguientes métodos:

    Mensaje de error

    Si aparece el mensaje de error:
    1. Si tienes acceso al mensaje de error completo que recibiste de Apigee Edge, consulta faultstring. faultstring contiene el valor de codificación incompatible.

      Ejemplo de mensaje de error:

      "faultstring":"Unsupported Encoding \"UTF-8\""
    2. En el mensaje de error anterior, observa que el valor de la codificación incompatible está “UTF-8”, como se ve en faultstring.

      Como “UTF-8” no es una codificación compatible con Apigee Edge, esta La solicitud falla y genera el error 415 Unsupported Media Type con el siguiente código de error: protocol.http.UnsupportedEncoding

    Herramienta de seguimiento

    Usa Trace:
    1. Si no tienes el seguimiento de la solicitud con errores, dirígete a Resolución.
    2. Si has capturado un registro de la falla, puedes determinar los la codificación que pasa el servidor de backend como parte de la respuesta Content-Encoding encabezado, como se explica en la herramienta Trace.

Solución

  1. Consulta la lista de codificación compatible con Apigee en Codificación compatible
  2. Asegúrate de que el servidor de backend siempre envíe lo siguiente:
    • Solo la codificación admitida como el valor de la Encabezado Content-Encoding en la solicitud
    • La carga útil de respuesta en el formato admitido para Apigee Edge y coincide con el formato especificado en el encabezado Content-Encoding

Codificación compatible

En la siguiente tabla, se muestra el formato de codificación que admite Apigee Edge:

Encabezado Codificación Descripción
Content-Encoding gzip El formato gzip de Unix
deflate Este formato usa la estructura zlib con el algoritmo de compresión de desinflación.

Especificación

Apigee responde con la respuesta de error 415 Unsupported Media Type según el siguiente especificación de RFC:

Especificación
RFC 7231, sección 6.5.13: 415 Tipo de medio no admitido

Puntos clave para tener en cuenta

Ten en cuenta lo siguiente:

  • Si Apigee muestra el error 415 debido a que se pasó una codificación no compatible el encabezado Content-Encoding como parte de la solicitud a la API y, luego, haz lo siguiente:
    • No podrás capturar el registro de esas solicitudes.
    • No podrás modificar el formato ni el contenido de la respuesta de error enviada por Apigee Edge usa políticas como IncreaseFault yAssignMessage.

    Esto se debe a que este error ocurre en una fase temprana del Message Processor antes de que de que se pueda ejecutar la política.

  • Si Apigee muestra el error 415 debido a que se pasó una codificación no compatible en el encabezado de respuesta de tu servidor de backend, debes corregirlo el servidor de backend para evitar este error. Trabaja con tu equipo de backend según corresponda para solucionar este problema.

Si aún necesitas asistencia del equipo de asistencia de Apigee Edge, ve a Debe recopilar información de diagnóstico.

Se debe recopilar información de diagnóstico

Si aún necesitas ayuda del equipo de asistencia de Apigee, reúne los siguientes datos información de diagnóstico y, luego, comunícate con el equipo de asistencia de Apigee Edge:

Si eres usuario de la nube pública, proporciona la siguiente información:

  • Nombre de la organización
  • Nombre del entorno
  • Nombre del proxy de API
  • Completa el comando curl que se usa para reproducir el error 415
  • Archivo de seguimiento de las solicitudes a la API

Si eres un usuario de la Nube privada, proporciona la siguiente información:

  • Mensaje de error completo observado para las solicitudes fallidas
  • Nombre del entorno
  • Paquete de proxy de API
  • Archivo de seguimiento de las solicitudes a la API
  • Registros de acceso de NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Dónde: ORG, ENV y PORT# se reemplazan por valores reales.

  • Registros del sistema del procesador de mensajes /opt/apigee/var/log/edge-message- processor/logs/system.log