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 código de error.
protocol.http.DuplicateHeader
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 un mensaje de error similar al que se muestra a continuación:
{ "fault":{ "faultstring":"Duplicate Header \"Expires\"", "detail":{ "errorcode":"protocol.http.DuplicateHeader" } } }
Causas posibles
Este error ocurre si un encabezado HTTP específico que no puede tener duplicados en Apigee Edge, aparece más de una vez con valores iguales o diferentes, como parte de la respuesta HTTP enviada por el servidor de backend a Apigee Edge.
Según
RFC 7230, sección 3.2.2: Orden de campo, un remitente NO DEBE generar varios encabezados
campos con el mismo nombre de campo en un mensaje, a menos que el valor completo del campo
campo de encabezado se define como una lista separada por comas, [es decir, #(values)] o el campo de encabezado es un
excepción conocida. Si Apigee Edge encuentra un mismo encabezado específico, eso no está permitido
tienen duplicados, se envía más de una vez en la respuesta HTTP que envía el
servidor de destino o backend,
Luego, este responde con 502 Bad Gateway
y un código de error.
protocol.http.DuplicateHeader
Estas son las posibles causas de este error:
Causa | Descripción | Instrucciones de solución de problemas aplicables para |
---|---|---|
Encabezado duplicado en la respuesta | La respuesta del servidor de backend contiene encabezados duplicados. | 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.
- Asegúrate de que el filtro Proxy esté configurado en Todos.
- Traza Código de error en Tiempo.
Selecciona una celda que tenga el código de falla
protocol.http.DuplicateHeader
, como se muestra a continuación:La información sobre el código de falla
protocol.http.DuplicateHeader
se muestra como se muestra a continuación:- Asegúrate de que el código de estado sea
502
, como se muestra en el ejemplo anterior. - 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.DuplicateHeader
.
- Código de estado:
- La Fuente del error es
target
, lo que indica que la respuesta del servidor de backend contenía encabezados duplicados.
Herramienta de seguimiento
Para diagnosticar el error con la herramienta Trace, sigue estos pasos:
- Habilita la sesión de seguimiento y haz lo siguiente:
- Espera a que se produzca el error
502 Bad Gateway
. - Si puedes reproducir el problema, realiza la llamada a la API y reproduce el
502 Bad Gateway
error
- Espera a que se produzca el error
Asegúrate de que la opción Show all Flow Infos esté habilitada:
- Selecciona una de las solicitudes fallidas y examina el seguimiento.
- Navega por las diferentes fases del seguimiento y localiza dónde ocurrió la falla.
Generalmente, encontrarás el error en un flujo después de la solicitud enviada al destino servidor, como se muestra a continuación:
Anota el valor del error del seguimiento.
En el seguimiento de ejemplo anterior, se muestra el error como
Duplicate Header "Expires"
. 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 encabezadoExpires
más de una vez.- 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 la respuesta y determina el valores de X-Apigee-fault-code y X-Apigee-fault-source como se muestra a continuación:
- Verás los valores X-Apigee-fault-code y X-Apigee-fault-source.
como
protocol.http.DuplicateHeader
ytarget
, lo que indica que este error se produce porque el servidor backend pasó los encabezados duplicados para el encabezado de respuestaExpires
.Encabezados de respuesta Valor X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source target
Comprueba si estás usando encadenamiento de proxy; es decir, si el servidor o extremo de destino invoca a otro proxy en Apigee.
Para determinarlo, regresa a la fase del servidor Solicitud enviada al destino. Haz clic en Show Curl.
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.
- 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
502 Bad Gateway
. - Si el alias del host del servidor de destino apunta a tu servidor backend, indica que Su servidor de backend está enviando los encabezados duplicados en la respuesta a Apigee.
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
Determinar la información clave sobre los errores
502
de 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
durante una duración específica (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 coincide con el valor deprotocol.http.DuplicateHeader
y, luego, y determinar 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.DuplicateHeader
X-Apigee-fault-source target
Causa: encabezado duplicado en respuesta
Diagnóstico
- 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 del diagnóstico comunes.
- Si la Fuente del error tiene el valor
target
, esto indica que la respuesta que envió el servidor de destino contienen encabezados duplicados. Puedes determinar el encabezado real que se envía más de una vez como parte de la respuesta. con uno de los siguientes métodos:
Mensaje de error
Si aparece el mensaje de error:
Si tienes acceso al mensaje de error completo que recibiste de Apigee Edge, consulta a
faultstring
. Elfaultstring
contiene el nombre del encabezado que se envió más de una vez.Ejemplo de mensaje de error:
"faultstring":"Duplicate Header \"Expires\""
- En el mensaje de error anterior, puedes ver que se envió el encabezado
Expires
. más de una vez, como se ve enfaultstring
.
Solicitud real
Usa la solicitud real:
- Si no tienes acceso a la solicitud real que se hizo al servidor de destino, obtén
el comando
curl
correspondiente de Usa la herramienta Trace en el paso 10.a y Paso 10.b. Si tienes acceso a la solicitud real realizada a la aplicación del servidor de destino, Luego, sigue estos pasos:
Realiza una llamada al servidor de destino.
Solicitud de muestra para el servidor de destino que se usa en este ejemplo:
curl -X GET "https://BACKEND_SERVER_HOST/response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT" -v
Verifica la lista de encabezados que se muestran en la respuesta.
Respuesta de muestra del servidor de destino que se usa en este ejemplo:
* ...Trimmed... > GET /response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT HTTP/2 > Host: BACKEND_SERVER_HOST > User-Agent: curl/7.64.1 > Accept: */* > * Connection state changed (MAX_CONCURRENT_STREAMS == 128)! < HTTP/2 200 < date: Fri, 02 Jul 2021 05:29:07 GMT < content-type: application/json < content-length: 166 < server: gunicorn/19.9.0 < Expires: Mon, 21 June 2021 07:28:00 GMT < Expires: Mon, 21 June 2021 07:28:00 GMT < access-control-allow-origin: * < access-control-allow-credentials: true < ----<Response BODY>------ * Connection #0 to host httpbin.org left intact * Closing connection 0
En la solicitud de ejemplo anterior, el encabezado
Expires
recibe más de una vez. Por lo tanto, esta solicitud falla con502 Bad Gateway
. y el código de error:protocol.http.DuplicateHeader
.Si aparece el encabezado cuyo nombre aparece en
faultstring
más de una vez en la respuesta del servidor backend, esa es la causa de . En el caso anterior, el encabezadoExpires
se envía más de una vez.
Solución
Cómo corregir la duplicación
Opción 1 [Opción recomendada] Corrige el servidor de backend para que no incluya encabezados duplicados
- Analiza el motivo por el que el servidor de backend específico envía un encabezado duplicado.
Expires
y verifica si está bien que los proxies de API lo acepten. En en la mayoría de los casos, no será conveniente según la especificación HTTP RFC7230: - Si no lo deseas, modifica la aplicación de servidor de destino para que no envíe encabezados duplicados.
En el ejemplo anterior, se observa que el encabezado
Expires
se envía dos veces con el mismo valor, lo cual no es conveniente. Para solucionar el problema, asegúrate de que que el servidor de destino pase el encabezadoExpires
solo una vez. - Si deseas permitir los encabezados duplicados, dirígete a Opción 2: Usa la propiedad CwC.
CwC
Opción 2: Usa la propiedad CwC
Apigee proporciona una propiedad CwC
HTTPHeader.<HeaderName>
,que permite que las aplicaciones cliente
para enviar encabezados duplicados a proxies de API en Apigee Edge.
Propiedad de CwC | Valores |
---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Por ejemplo, se puede configurar la siguiente propiedad en Message Processor para permitir duplicados
y varios valores para el encabezado Expires
.
HTTPHeader.Expires=allowDuplicates, multiValued
- Si eres un usuario de la nube privada, puedes configurar la propiedad para evitar que Apigee
Edge no muestre un error
502 Bad Gateway
, incluso si la solicitud contiene encabezados duplicados Guía práctica sobre cómo configurar los procesadores de mensajes para usar encabezados duplicados - Si eres usuario de la nube pública, comunícate con el equipo de asistencia de Apigee Edge para configurar propiedad de tu organización.
Especificación
Apigee responde con la respuesta de error 502 Bad Gateway
, ya que espera que
el servidor de backend se comportaría de acuerdo con las siguientes especificaciones de RFC:
Especificación |
---|
RFC 7230, sección 3.2.2: Orden de campo |
RFC 7230, sección 3.2: Campos de encabezado |
Si aún necesitas asistencia 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