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 502 Bad Gateway
con el código de error 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, es posible que veas 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 el cuerpo de la respuesta o uno o más de los siguientes encabezados:
Content-Length
Content-Encoding
Transfer-Encoding
De acuerdo con las especificaciones
RFC 7231, sección 6.3.5: 204 Sin contenido y
RFC 7231, sección 6.3.6: Restablecer contenido 205, se espera que el servidor de origen no envíe contenido adicional como parte del cuerpo de la carga útil de respuesta con código de estado 204 No
Content
o 205 Reset Content
. Los encabezados de respuesta, como Content-Length
, Content-Encoding
o Transfer-Encoding
, indican 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 en las siguientes 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 (establecido en un valor distinto de cero) |
ERROR | ERROR |
(configurado en la codificación compatible en Apigee Edge) |
ERROR | SIN ERROR |
Transfer-Encoding |
ERROR | ERROR |
A continuación, se muestran 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 una respuesta 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 de la nube pública y privada de Edge |
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 la API, sigue estos pasos:
- Accede a la IU de Apigee Edge como un usuario con el rol adecuado.
Cambia a la organización en la que quieres investigar el problema.
- Navega a la página Analyze > API Monitoring > Investigate.
- Selecciona el período específico en el que observaste los errores.
- Traza el código de falla en función del valor Time.
Selecciona una celda que tenga el código de falla
protocol.http.ResponseWithBody
, 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, ten en cuenta los siguientes detalles:
- Código de estado:
502
- Fuente de la falla:
target
- Código de fallas:
protocol.http.ResponseWithBody
.
- Código de estado:
- Si Fuente de errores tiene el valor
target
y Código de fallas tiene el valorprotocol.http.ResponseWithBody
, eso indica que el error se produjo porque el servidor de 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 la sección Posibles causas.
Herramienta de seguimiento
Para diagnosticar el error con la herramienta Trace, sigue estos pasos:
- Habilita la sesión de seguimiento y realiza una de estas acciones:
- Espera a que ocurra el error
502 Bad Gateway
. - Si puedes reproducir el problema, realiza la llamada a la API y reproduce el error
502 Bad Gateway
.
- Espera a que ocurra el error
Asegúrate de que la opción Show all FlowInfos esté habilitada:
- Selecciona una de las solicitudes con errores y examina el seguimiento.
- Navega por las diferentes fases del seguimiento y localiza dónde ocurrió la falla.
Por lo general, encontrarás el error en
flowinfo
Error justo después de la fase Request sent to target server, 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.Observa los valores de lo siguiente en el 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 el código de estado
204 No Content
que contiene el cuerpo de la respuesta o uno de los encabezados enumerados en Causas posibles.Observa los valores de lo siguiente en el seguimiento:
- error:
Received 205 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
.
- error:
- Navega a la fase AX (datos registrados de Analytics) en el seguimiento y haz clic en ella.
Desplázate hacia abajo hasta la sección Detalles de la fase, Encabezados de error y determina 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 se produjo porque el servidor de 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 Causas posibles.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, sigue estos pasos:
- Si eres un usuario de la nube privada, puedes usar los registros de acceso de NGINX para determinar la información clave de
502 Bad Gateway
de HTTP. Verifica los 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.
- Busca para ver si hay errores
502
con el código de errorprotocol.http.ResponseWithBody
durante un período específico (si el problema ocurrió en el pasado) o si hay alguna solicitud que aún falla con502
. Si encuentras algún error
502
con el X-Apigee-fault-code que coincide con el valor deprotocol.http.ResponseWithBody
, determina el valor de X-Apigee-fault-source.Ejemplo de error 502 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.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 se produjo porque el servidor de 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 Causas posibles.
Causa: Cuerpo de la respuesta o encabezados con respuesta 204 del servidor de backend
Diagnóstico
- Determina el código con fallas y la fuente de errores del error observado con la supervisión de la API, la herramienta de Trace o los registros de acceso de NGINX, como se explica en Pasos comunes de diagnóstico.
- Si Fault Code es
protocol.http.ResponseWithBody
y Fault Source tiene el valortarget
, esto indica que el servidor de backend respondió con un código de estado204 No Content
o205 Reset Content
con el cuerpo de respuesta o uno de los encabezados mencionados en Posibles causas. 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 Causas posibles, puedes realizar los siguientes pasos:
Si eres un usuario de la nube pública y puedes realizar la misma solicitud a la API al 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 servidor de backend directamente desde uno de los procesadores de mensajes asociados con la organización y el entorno específicos en los que se observa el error.
Revisa la respuesta recibida del servidor de backend y verifica que contenga un cuerpo de carga útil de respuesta o uno o más de los encabezados mencionados anteriormente. Si es así, esa es la causa del error.
Ejemplo 1
Muestra n.o 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 esta muestra, el servidor de backend respondió con el código de estado
204 No Content
yContent-Encoding: gzip
.Muestra n.o 2
Muestra n.o 2: Respuesta del servidor de backend 204 con el 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 esta muestra, el servidor de backend respondió con el código de estado
204 No Content
yContent-Length: 48
.Ejemplo 3
Muestra n.o 3: Respuesta del servidor de backend 205 con cuerpo de la 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 esta muestra, el servidor de backend respondió con el código de estado
205 Reset Content
con el cuerpo de respuestaThis is a sample Response.
.- En todos los ejemplos anteriores, el servidor de backend envió el código de estado
204 No Content
o205 Reset Content
con el cuerpo de la respuesta o uno de los encabezados mencionados en Causas posibles. - Por lo tanto, Apigee Edge envió el código de estado
502 Bad Gateway
con el código de errorprotocol.http.ResponseWithBody
.
Resolución
Asegúrate de que el servidor de backend siempre cumpla con la especificación
RFC 7231, sección 6.3.6: 205 Reset Content, cuando envíes la respuesta 204 No Content
o 205 Reset Content
a Apigee Edge. Es decir, el servidor de backend NO DEBE enviar lo siguiente como parte de una respuesta 204 No Content
o 205 Reset Content
:
- Cuerpo de la carga útil de la respuesta
- 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 una 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 Restablecimiento de contenido |
Puntos clave para tener en cuenta
La solución recomendada es corregir el servidor de backend para enviar los códigos de estado 204 No Content
y 205 Reset Content
sin cuerpo de respuesta y ninguno de los encabezados, Content-Length
, Content-Encoding
y Transfer-Encoding
, y cumplir con las especificaciones
RFC 7231, sección 6.3.5: 204, sin contenido y
RFC 7231, sección 6.3.6: Restablecer contenido 205.
Si aún necesitas asistencia de la asistencia de Apigee, consulta Debes recopilar información de diagnóstico.
Se debe recopilar información de diagnóstico
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 error502
. - 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