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 502 Bad Gateway
con el error
el código protocol.http.ResponseWithBody
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 502 Bad Gateway
Además, puedes observar uno de los siguientes mensajes de error:
{ "fault":{ "faultstring":"Received 204 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
{ "fault":{ "faultstring":"Received 205 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
Causas posibles
Este error ocurre si la respuesta HTTP del servidor de backend a Apigee Edge es
204 No Content
o 205 Reset Content
, pero contiene la respuesta
body o uno o más de los siguientes encabezados:
Content-Length
Content-Encoding
Transfer-Encoding
Según las especificaciones
RFC 7231, sección 6.3.5: 204 Sin contenido y
RFC 7231, sección 6.3.6: 205 Restablecer contenido, se espera que no haya
Debe enviarse como parte del cuerpo de la carga útil de la respuesta con el código de estado 204 No
Content
o 205 Reset Content
mediante el servidor de origen. Los encabezados de respuesta
como Content-Length
, Content-Encoding
o
Transfer-Encoding
indica el tamaño, el tipo o el formato de la carga útil de la respuesta.
Por lo tanto, Apigee Edge muestra un código de estado 502 Bad Gateway
con
el código de error protocol.http.ResponseWithBody
al cliente con el siguiente comando
circunstancias:
Código de estado del servidor de backend | ||
---|---|---|
La respuesta del servidor de backend contiene | 204 No Content | 205 Restablecer contenido |
Cuerpo de la respuesta | ERROR | ERROR |
Encabezado (configurado en un valor distinto de cero) |
ERROR | ERROR |
(configurada en codificación compatible con Apigee Edge) |
ERROR | SIN ERRORES |
Transfer-Encoding |
ERROR | ERROR |
Estas son las posibles causas de este error:
Causa | Descripción | Instrucciones de solución de problemas aplicables para |
---|---|---|
Cuerpo de la respuesta o encabezados con respuesta 204 del servidor de backend | El servidor de backend envía un 204 No Content o 205 Reset Content .
con un cuerpo de respuesta o uno o más encabezados Content-Type
Content-Encoding o Transfer-Encoding . |
Usuarios perimetrales de nubes públicas y privadas |
Pasos comunes de diagnóstico
Usa una de las siguientes herramientas o técnicas para diagnosticar este error:
Supervisión de API
Para diagnosticar el error con la supervisión de API, haz lo siguiente:
- Accede a la IU de Apigee Edge como usuario con un el puesto adecuado.
Cambia a la organización en la que quieres investigar el problema.
- Navega a Analyze > Supervisión de API > Investigar.
- Selecciona el período específico en el que observaste los errores.
- Traza Código de error en Tiempo.
Selecciona una celda que tenga el código de error
protocol.http.ResponseWithBody
como como se muestra a continuación:Verás la información sobre el código de falla.
protocol.http.ResponseWithBody
, como se muestra a continuación:Haz clic en Ver registros y expande la fila de la solicitud con errores.
- En la ventana Registros, observa los siguientes detalles:
- Código de estado:
502
- Fuente del error:
target
- Código de error:
protocol.http.ResponseWithBody
.
- Código de estado:
- Si la Fault Source tiene el valor
target
y la Fault Code tiene el valorprotocol.http.ResponseWithBody
, luego indica que el error ocurrió porque el servidor backend envió un Código de estado204 No Content
o205 Reset Content
con el cuerpo de la respuesta o uno de los encabezados mencionados en el Causas posibles.
Herramienta de seguimiento
Para diagnosticar el error con la herramienta Trace, sigue estos pasos:
- Habilita la sesión de seguimiento.
y:
- Espera a que se produzca el error
502 Bad Gateway
. o - Si puedes reproducir el problema, realiza la llamada a la API y reproduce el error
502 Bad Gateway
.
- Espera a que se produzca el error
Asegúrate de que Show all FlowInfos esté habilitado:
- Selecciona una de las solicitudes fallidas y examina el seguimiento.
- Navega por las diferentes fases del seguimiento y localiza dónde se produjo la falla para determinar si se produjo un error.
Por lo general, encontrarás el error en
flowinfo
Error después de la fase Solicitud enviada al servidor de destino, como se muestra a continuación:Situación 1
Situación 1: El servidor de backend responde con el código de estado
204 No Content
. que contiene el cuerpo de la respuesta o uno de los encabezados enumerados en Causas posibles.Toma nota de los valores de lo siguiente del seguimiento:
- error:
Received 204 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
Situación 2
Situación 2: El servidor de backend responde con un código de estado
204 No Content
que contiene el cuerpo de la respuesta o uno de los encabezados enumerados en Posibles causas.Toma nota de los valores de lo siguiente del seguimiento:
- error:
Received 205 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
- error:
- Navega a la fase AX (datos de Analytics registrados) en el seguimiento y hago clic en ella.
Desplázate hacia abajo hasta la sección Detalles de la fase, Encabezados del error y determinar los valores de X-Apigee-fault-code y X-Apigee-fault-source como se muestra a continuación:
- Ten en cuenta que los valores de X-Apigee-fault-code y X-Apigee-fault-source
are protocol.http.ResponseWithBody
ytarget
respectivamente. Esto indica que el error ocurrió porque el servidor backend envió un el código de estado204 No Content
o205 Reset Content
con el el cuerpo de la respuesta o uno de los encabezados mencionados en la sección Posibles causas.Error Valor X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
NGINX
Para diagnosticar el error con los registros de acceso de NGINX, haz lo siguiente:
- Si eres un usuario de la nube privada, puedes usar los registros de acceso de NGINX para
determina la información clave sobre
502 Bad Gateway
HTTP. Verifica los 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.
- Realiza una búsqueda para ver si hay algún error
502
con el código de errorprotocol.http.ResponseWithBody
durante un período específico (si el problema ocurrió en el pasado) o si todavía hay solicitudes que fallan502
Si encuentras algún error
502
con el código X-Apigee-fault-code coincida con el valor deprotocol.http.ResponseWithBody
y, luego, determina el valor de X-Apigee-fault-source.Ejemplo de error 502 del registro de acceso de NGINX:
La entrada de muestra 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.ResponseWithBody
X-Apigee-fault-source target
- Ten en cuenta que los valores de X-Apigee-fault-code y X-Apigee-fault-source
son
protocol.http.ResponseWithBody
ytarget
respectivamente. Esto indica que el error ocurrió porque el servidor backend envió un el código de estado204 No Content
o205 Reset Content
con el el cuerpo de la respuesta o uno de los encabezados mencionados en la sección Posibles causas.
Causa: Cuerpo de la respuesta o encabezados con respuesta 204 del servidor de backend
Diagnóstico
- Determina el código de error y la fuente de errores del error observado con la API. los registros de acceso de Monitoring, Trace o NGINX, como se explica en Pasos comunes del diagnóstico.
- Si el Código de error es
protocol.http.ResponseWithBody
y La fuente del error tiene el valortarget
; esto indica que el backend el servidor respondió con un estado204 No Content
o205 Reset Content
con el cuerpo de la respuesta o uno de los encabezados mencionados en Causas posibles. Para validar si el servidor de backend realmente envió un cuerpo de carga útil de respuesta o uno o más de los encabezados mencionados en Posibles causas, puedes realiza los siguientes pasos:
Si eres un usuario de la nube pública y puedes realizar la misma solicitud a la API al un servidor de backend directamente desde cualquiera de tus sistemas.
- Si eres un usuario de la nube privada, puedes realizar la misma solicitud a la API al un servidor de backend directamente desde uno de los procesadores de mensajes asociados de la organización y el entorno en los que se observa la falla.
Revisa la respuesta recibida del servidor backend y verifica que contenga un el cuerpo de la carga útil de respuesta y/o uno o más de los encabezados antes mencionados. Si es así, entonces la causa de este error.
Ejemplo 1
Ejemplo 1: Respuesta del servidor de backend 204 con encabezado de codificación de contenido
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Encoding: gzip
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveEn este ejemplo, el servidor de backend respondió con
204 No Content
código de estado yContent-Encoding: gzip
Ejemplo 2
Ejemplo n.° 2: Respuesta del servidor de backend 204 con encabezado Content-Length
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Length: 48
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveEn este ejemplo, el servidor de backend respondió con
204 No Content
código de estado yContent-Length: 48
Ejemplo 3
Ejemplo n.o 3: Respuesta del servidor de backend 205 con cuerpo de respuesta
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 205 Reset Content < Date: Sat, 31 Jul 2021 17:14:09 GMT < Content-Length: 12 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host X.X.X.X left intact
This is a sample Response
En este ejemplo, el servidor de backend respondió con Código de estado
205 Reset Content
con cuerpo de respuestaThis is a sample Response.
- En todos los ejemplos anteriores, el servidor de backend envió
204 No Content
o Código de estado205 Reset Content
con el cuerpo de la respuesta o uno de los encabezados que se mencionan en Posibles causas. - Por lo tanto, Apigee Edge envió un código de estado
502 Bad Gateway
con código de error.protocol.http.ResponseWithBody
Solución
Asegúrate de que el servidor de backend siempre cumpla con la especificación
RFC 7231, sección 6.3.6: 205 Restablecer contenido, cuando se envía el 204 No Content
o 205 Reset Content
a Apigee Edge. Es decir, el servidor de backend
NO SE DEBE enviar lo siguiente como parte de un 204 No Content
o
Respuesta de 205 Reset Content
:
- Cuerpo de la carga útil de la respuesta
- Y cualquiera de los siguientes encabezados:
Content-Length
Content-Encoding
Transfer-Encoding
Especificación
Apigee Edge responde con el código de estado 502 Bad Gateway
y el código de error
protocol.http.ResponseWithBody
si el servidor de backend envía un
Respuesta 204 No Content
o 205 Reset Content
, pero
no cumple con las siguientes especificaciones de RFC:
Especificación |
---|
RFC 7231, sección 6.3.5: 204 Sin contenido |
RFC 7231, sección 6.3.6: 205 Restablecer contenido |
Puntos clave para tener en cuenta
La solución recomendada es corregir el servidor de backend para enviar 204 No Content
.
y 205 Reset Content
sin cuerpo de respuesta y ninguna de las
encabezados: Content-Length
, Content-Encoding
y
Transfer-Encoding
y cumpla con las especificaciones
RFC 7231, sección 6.3.5: 204 Sin contenido y
RFC 7231, sección 6.3.6: 205 Restablecer contenido.
Si aún necesitas ayuda del equipo de asistencia de Apigee, ve a Se debe recopilar información de diagnóstico.
Se debe recopilar información de diagnóstico
Obtén la siguiente 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 error502
- 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