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

Estás consultando la documentación de Apigee Edge.
Consulta 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 el código de error protocol.http.UnsupportedEncoding como respuesta a las 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 ocurre si el valor del encabezado Content-Encoding especificado en la solicitud HTTP que envió el cliente a Apigee o en la respuesta HTTP que envió el servidor de backend a Apigee no contiene la codificación compatible con Apigee, según la especificación RFC 7231, sección 6.5.13: 415 Tipo de medio no compatible.

Las posibles causas de este error son las siguientes:

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

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 la API, sigue estos pasos:

  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 la página Analyze > API Monitoring > Investigate.
  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 el código de falla en función del valor Time.
  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. A continuación, se muestra información sobre el código de falla protocol.http.UnsupportedEncoding:

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

  10. En la ventana Registros, ten en cuenta los siguientes detalles:
    • Fuente de errores: Muestra que apigee o target muestran el error.
    • Código de fallas: Debe coincidir con protocol.http.UnsupportedEncoding.
  11. Si la fuente de errores es apigee, esto indica que la solicitud contenía una codificación no compatible en el encabezado Content-Encoding.
  12. Si la fuente de errores es target, eso indica que la respuesta del servidor de backend contenía una codificación no compatible en el encabezado Content-Encoding.

Herramienta de seguimiento

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

  1. Habilita la sesión de registro y realiza una de estas acciones:
    • Espera a que ocurra el error 415 Unsupported Media Type.
    • Si puedes reproducir el problema, realiza la llamada a la API para reproducir el error 415 Unsupported Media Type.
  2. Asegúrate de que la opción Show all FlowInfos esté habilitada:

    Ver panel de opciones, mostrar todos los datos de flujo
  3. Selecciona una de las solicitudes con errores y examina el seguimiento.
  4. Navega por las diferentes fases del seguimiento y localiza dónde ocurrió la falla.
  5. Por lo general, encontrarás el error en un flujo después de la fase Solicitud enviada al servidor de destino, como se muestra a continuación:

  6. Observa el valor del error del seguimiento.

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

  7. Navega a la fase AX (datos de Analytics registrados) en el seguimiento y haz clic en ella.
  8. Desplázate hacia abajo hasta la sección Encabezados de error / respuesta en el panel Detalles de la fase y determina 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 error se debe a que el servidor de backend pasó el valor de codificación no compatible de "utf-8" en el encabezado de respuesta Content-Encoding.

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

  10. Verifica si usas encadenamiento de proxy, es decir, si el servidor o extremo de destino invoca a otro proxy en Apigee.
    1. Para determinar esto, regresa a la fase Solicitud enviada al servidor de destino. Haz clic en Mostrar rizos.

    2. Se abrirá la ventana Curl for Request Sent to Target Server, desde la cual puedes 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 encadenamiento de proxy. En este caso, debes repetir todos los pasos anteriores para el proxy en cadena hasta determinar qué está causando el error 415 Unsupported Media Type.
    4. Si el alias del host del servidor de destino apunta a tu servidor de backend, eso indica que el servidor de backend está pasando la codificación no compatible a Apigee.

Registros de acceso de Nginix

Para diagnosticar el error con los registros de acceso de NGINX, sigue estos pasos:

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

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

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

    Ejemplo de error 415 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

    X-Apigee-fault-source también podría tener elX-Apigee-fault-source valorX-Apigee-fault-source

Causa: No se admite la codificación en la solicitud.

Diagnóstico

  1. Determina el código de error y la fuente de errores del error observado con la supervisión de la API o los registros de acceso de NGINX, como se explica en Pasos comunes de diagnóstico.
  2. Si el código de falla es protocol.http.UnsupportedEncoding y la fuente de errores tiene el valor apigee o MP, esto indica que la solicitud enviada por la aplicación cliente contiene una codificación no compatible en el encabezado de la solicitud Content-Encoding.
  3. Puedes determinar el valor de la codificación no compatible que se pasó como parte de la solicitud HTTP mediante uno de los siguientes métodos:

    Mensaje de error

    Uso del mensaje de error:
    1. Si tienes acceso al mensaje de error completo que recibiste de Apigee Edge, consulta la faultstring. faultstring contiene el valor de la codificación final no compatible.

      Ejemplo de mensaje de error:

      "faultstring":"Unsupported Encoding \"UTF-8\""
      
    2. En el mensaje de error anterior, ten en cuenta que el valor de la codificación no compatible es “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, sigue estos 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 enumerados en la Codificación compatible, entonces esa es la causa del error.

        Ejemplo de solicitud:

        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 una codificación compatible en Apigee Edge. Por lo tanto, esta solicitud falla con el error 415 Unsupported Media Type y el código de error protocol.http.UnsupportedEncoding.

Resolució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 compatible como el valor del encabezado Content-Encoding en la solicitud
    • La carga útil de la solicitud en el formato compatible con Apigee Edge y que 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 con fallas y la fuente de errores del error observado con la supervisión de la API, la herramienta de seguimiento o los registros de acceso de NGINX, como se explica en Pasos comunes de diagnóstico.
  2. Si Fuente de errores tiene el valor target, esto indica que la respuesta que envió el servidor de backend contiene una codificación no compatible en el encabezado Content-Encoding.
  3. Puedes determinar el valor de la codificación no compatible que se pasa como parte de la respuesta HTTP desde el servidor de backend con uno de los siguientes métodos:

    Mensaje de error

    Uso del mensaje de error:
    1. Si tienes acceso al mensaje de error completo que recibiste de Apigee Edge, consulta la faultstring. faultstring contiene el valor de la codificación no compatible.

      Ejemplo de mensaje de error:

      "faultstring":"Unsupported Encoding \"UTF-8\""
      
    2. En el mensaje de error anterior, ten en cuenta que el valor de la codificación no compatible es “UTF-8”, como se ve en faultstring.

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

    Herramienta de seguimiento

    Con Trace:
    1. Si no tienes el seguimiento de la solicitud que falla, ve a Resolución.
    2. Si capturaste un seguimiento para la falla, puedes determinar la codificación no compatible que pasó el servidor de backend como parte del encabezado de respuesta Content-Encoding, como se explica en la Herramienta de seguimiento.

Resolució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 compatible como valor para el encabezado Content-Encoding en la solicitud
    • La carga útil de respuesta en el formato compatible con Apigee Edge y 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 reducción de tamaño.

Especificación

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

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

Puntos clave para tener en cuenta

Ten en cuenta lo siguiente:

  • Si Apigee muestra el error 415 debido a una codificación no compatible que se pasó en el encabezado Content-Encoding como parte de la solicitud a la API, sucede 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 que envió Apigee Edge con políticas como ElevateFault yAssignMessage.

    Esto se debe a que este error ocurre en una fase inicial en Message Processor, antes de que se pueda ejecutar cualquier política.

  • Si Apigee muestra el error 415 debido a una codificación no compatible que se pasó en el encabezado de respuesta de tu servidor de backend, se debe corregir en 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 de la Asistencia de Apigee Edge, consulta Debes recopilar información de diagnóstico.

Se debe recopilar información de diagnóstico

Si aún necesitas ayuda de la asistencia de Apigee, recopila la siguiente información de diagnóstico y, luego, comunícate con el equipo de asistencia de Apigee Edge:

Si eres un 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 para 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 con errores
  • Nombre del entorno
  • Paquete de proxy de API
  • Archivo de seguimiento para las solicitudes a la API
  • Registros de acceso de NGINX/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

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

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