Estás viendo la documentación de Apigee Edge.
Ir a la
documentación de Apigee X. info
Síntoma
La aplicación cliente obtiene un código de estado HTTP 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 observes 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 se produce 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-LengthContent-EncodingTransfer-Encoding
Según las especificaciones
RFC 7231, sección 6.3.5: 204 No Content y
RFC 7231, sección 6.3.6: 205 Reset Content, se espera que el servidor de origen no envíe contenido adicional
como parte del cuerpo de la carga útil de la respuesta con el 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 Reset Content |
| Cuerpo de la respuesta | ERROR | ERROR |
Encabezado (establecido en un valor distinto de cero) |
ERROR | ERROR |
(establecido en una codificación compatible en Apigee Edge) |
ERROR | NO ERROR |
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 una respuesta 204 No Content o 205 Reset Content
con un cuerpo de respuesta o uno o más de los 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 API, haz lo siguiente:
- Accede a la IU de Apigee Edge como usuario con una función adecuada.
Cambia a la organización en la que deseas investigar el problema.
- Navega a la página Analizar > Supervisión de API > Investigar.
- Selecciona el período específico en el que observaste los errores.
- Traza el Código de falla en función del Tiempo.
Selecciona una celda que tenga el código de falla
protocol.http.ResponseWithBodycomo se muestra a continuación:( aumentar el tamaño de la imagen)
Verás la información sobre el código de falla
protocol.http.ResponseWithBodycomo se muestra a continuación:( aumentar el tamaño de la imagen)
Haz clic en Ver registros y expande la fila de la solicitud con errores.
( aumentar el tamaño de la imagen)
- En la ventana Registros, observa los siguientes detalles:
- Código de estado:
502 - Fuente de falla:
target - Código de falla:
protocol.http.ResponseWithBody.
- Código de estado:
- Si la Fuente de falla tiene el valor
targety el Código de falla tiene el valorprotocol.http.ResponseWithBody, eso indica que el error se produjo porque el servidor de backend envió un código de estado204 No Contento205 Reset Contentcon el cuerpo de la respuesta o uno de los encabezados mencionados en la sección Causas posibles.
Herramienta de Trace
Para diagnosticar el error con la herramienta Trace, haz lo siguiente:
- Habilita la sesión de seguimiento trace session
y haz lo siguiente:
- Espera a que se produzca el error
502 Bad Gateway. - Si puedes reproducir el problema, haz la llamada a la API y reproduce el error
502 Bad Gateway.
- Espera a que se produzca el error
Asegúrate de que Mostrar todos los FlowInfos esté habilitado:
- Selecciona una de las solicitudes con errores y examina el seguimiento.
- Navega por las diferentes fases del seguimiento y ubica dónde se produjo la falla.
Por lo general, encontrarás el error en el
flowinfoError justo 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 Contentque contiene el cuerpo de la respuesta o uno de los encabezados que se enumeran 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 Contentque contiene el cuerpo de la respuesta o uno de los encabezados que se enumeran 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 de Analytics registrados) 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:
( aumentar el tamaño de la imagen)
- Ten en cuenta que los valores de X-Apigee-fault-code y X-Apigee-fault-source
are protocol.http.ResponseWithBodyytarget, respectivamente. Esto indica que el error se produjo porque el servidor de backend envió un código de estado204 No Contento205 Reset Contentcon el cuerpo de la respuesta o uno de los encabezados mencionados en Causas posibles.Error Valor X-Apigee-fault-code protocol.http.ResponseWithBodyX-Apigee-fault-source target
NGINX
Para diagnosticar el error con los registros de acceso de NGINX, haz lo siguiente:
- Si eres usuario de la nube privada, puedes usar los registros de acceso de NGINX para
determinar la información clave sobre HTTP
502 Bad Gateway. Verifica los registros de acceso de NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDonde: ORG, ENV y PORT# se reemplazan por valores reales.
- Busca para ver si hay errores
502con el código de errorprotocol.http.ResponseWithBodydurante un período específico (si el problema ocurrió en el pasado) o si aún hay solicitudes que fallan con502. Si encuentras errores
502con el X-Apigee-fault-code que coincida 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 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.ResponseWithBodyX-Apigee-fault-source target- Ten en cuenta que los valores de X-Apigee-fault-code y X-Apigee-fault-source
son
protocol.http.ResponseWithBodyytarget, respectivamente. Esto indica que el error se produjo porque el servidor de backend envió un código de estado204 No Contento205 Reset Contentcon 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 de falla y la Fuente de falla del error observado con la Supervisión de API la herramienta Trace o los registros de acceso de NGINX, como se explica en Pasos comunes de diagnóstico.
- Si el Código de falla es
protocol.http.ResponseWithBodyy Fuente de falla tiene el valortarget, esto indica que el servidor de backend respondió con un código de estado204 No Contento205 Reset Contentcon el cuerpo de la respuesta o uno de los encabezados mencionados en Causas posibles. Para validar si el servidor de backend envió un cuerpo de carga útil de respuesta o uno o más de los encabezados mencionados en Causas posibles, puedes seguir estos pasos:
Si eres 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 usuario de la nube privada, puedes realizar la misma solicitud a la API al servidor de backend directamente desde uno de los Message Processors asociados con la organización y el entorno específicos en los que se observa la falla.
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 de este error.
Ejemplo 1
Ejemplo 1: Respuesta 204 del servidor de backend con encabezado Content-Encoding
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 Contentcódigo de estado yContent-Encoding: gzipEjemplo 2
Ejemplo 2: Respuesta 204 del servidor de backend 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 Contentcódigo de estado yContent-Length: 48Ejemplo 3
Ejemplo 3: Respuesta 205 del servidor de backend 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 ResponseEn este ejemplo, el servidor de backend respondió con
205 Reset Contentcódigo de estado con el cuerpo de respuestaThis is a sample Response.- En todos los ejemplos anteriores, el servidor de backend envió
204 No Contento205 Reset Contentcódigo de estado con el cuerpo de la respuesta o uno de los encabezados mencionados en Causas posibles. - Por lo tanto, Apigee Edge envió
502 Bad Gatewaycódigo de estado con código de errorprotocol.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 Reset Content, cuando envíe la 204 No Content
o 205 Reset Content respuesta 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
- Y cualquiera de los siguientes encabezados:
Content-LengthContent-EncodingTransfer-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
204 No Content o 205 Reset Content respuesta, pero
no cumple con las siguientes especificaciones de RFC:
| Especificación |
|---|
| RFC 7231, sección 6.3.5: 204 No Content |
| RFC 7231, sección 6.3.6: 205 Reset Content |
Aspectos clave que debes tener en cuenta
La solución recomendada es corregir el servidor de backend para que envíe el 204 No Content
y 205 Reset Content código de estado sin el cuerpo de la respuesta ni ninguno de los
encabezados (`Content-Length`, `Content-Encoding` y
`Transfer-Encoding`) y cumpla con las especificaciones
RFC 7231, sección 6.3.5: 204 No Content y
RFC 7231, sección 6.3.6: 205 Reset Content.
Si aún necesitas ayuda de Asistencia de Apigee, consulta Se debe 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 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
- Comando
curlcompleto que se usó para reproducir el error502 - Archivo de seguimiento de las solicitudes a la API
Si eres 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 de las solicitudes a la API
Registros de acceso de NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDonde: ORG, ENV y PORT# se reemplazan por valores reales.
- Registros del sistema de Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log