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 400 Bad Request 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 400 Bad Request
Además, es posible que observes 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 se produce si un encabezado HTTP específico que no puede tener duplicados en Apigee Edge aparece más de una vez con los mismos valores o con valores diferentes como parte de la solicitud HTTP que envía el cliente a Apigee Edge.
Según
la RFC 7230, sección 3.2.2: Orden de los campos, un emisor NO DEBE generar varios campos de encabezado
con el mismo nombre de campo en un mensaje, a menos que el valor de campo completo para ese
campo de encabezado se defina como una lista separada por comas [es decir, #(values)] o que el campo de encabezado sea una
excepción conocida. Si Apigee Edge encuentra un encabezado específico, que no puede tener
duplicados, más de una vez en la solicitud HTTP que envía el cliente, responde con 400 Bad Request y el 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 solicitud | La solicitud HTTP de la aplicación cliente a Apigee contiene encabezados duplicados. | 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.
- Asegúrate de que el filtro de proxy esté configurado en Todo.
- Traza el código de falla en función del tiempo.
Selecciona una celda que tenga el código de falla
protocol.http.DuplicateHeadercomo se muestra a continuación:
La información sobre el código de falla
protocol.http.DuplicateHeaderse muestra de la siguiente manera:
- Haz clic en Ver registros y expande la fila de la solicitud con errores.
- En la ventana Registros, anota los siguientes detalles:
- Código de estado:
400 - Fuente de falla:
apigee - Código de falla:
protocol.http.DuplicateHeader.
- Código de estado:
- Si la fuente de falla tiene el valor
apigeeoMPy el código de falla tiene el valorprotocol.http.DuplicateHeader, eso indica que la solicitud HTTP del cliente contenía encabezados duplicados.
Herramienta Trace
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 los errores HTTP
400. Consulta 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
400durante un período específico (si el problema ocurrió en el pasado) o si hay solicitudes que aún fallan con400. Si encuentras errores
400con el X-Apigee-fault-code que coincida con el valor deprotocol.http.DuplicateHeader, entonces determina el valor de la X-Apigee-fault-source.Ejemplo de error 400 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.DuplicateHeaderX-Apigee-fault-source MP
Causa: Encabezado duplicado en la solicitud
Diagnóstico
- Determina el código de falla y la fuente de falla del error observado con la supervisión de API o los registros de acceso de NGINX, como se explica en Pasos comunes de diagnóstico.
- Si la fuente de falla tiene el valor
apigeeoMP, esto indica que la solicitud que envió la aplicación cliente a Apigee contiene encabezados duplicados. Puedes determinar el encabezado real que se envía más de una vez como parte de la solicitud con uno de los siguientes métodos:
Mensaje de error
Uso del mensaje de error
Si tienes acceso al mensaje de error completo que recibiste de Apigee Edge, entonces consulta el
faultstring. Elfaultstringcontiene el nombre del encabezado que se envió más de una vez.Mensaje de error de muestra:
"faultstring":"Duplicate Header \"Expires\""
- En el mensaje de error anterior, puedes ver que el encabezado
Expiresse envía más de una vez, como se ve en elfaultstring.
Solicitud real
Uso de la solicitud real
Si tienes acceso a la solicitud real que realizó la aplicación cliente, entonces sigue estos pasos:
- Verifica la lista de encabezados que se pasaron en la solicitud.
- Si encuentras que un encabezado en particular aparece más de una vez en la solicitud con el mismo valor o valores diferentes , esa es la causa de este error.
Solicitud de ejemplo:
curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT" -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
En la solicitud de ejemplo anterior, el encabezado
Expiresse envía más de una vez. Por lo tanto, esta solicitud falla con el400 Bad Requesterror y el código de error:protocol.http.DuplicateHeader.- Como alternativa, si tienes acceso a los registros del cliente, puedes ver si tienes información sobre la solicitud real que se realizó a Apigee Edge y determinar el encabezado que se envía más de una vez.
Solución
Cómo corregir la duplicación
Opción 1 [opción recomendada]: Corrige la aplicación cliente para que no incluya encabezados duplicados
- Analiza el motivo por el que el cliente específico envía un encabezado duplicado. Por ejemplo,
Expiresen el caso anterior. Verifica que esté bien que los proxies de API acepten el encabezado duplicado. Por lo general, no es conveniente según la especificación HTTP RFC7230. - Si no es conveniente, modifica tu aplicación cliente para que no envíe encabezados duplicados.
En el ejemplo que se analizó antes, se observa que el encabezado
Expiresse envía dos veces con el mismo valor, lo que no es conveniente. Para solucionar el problema, pasa elExpiresencabezado solo una vez, como se muestra a continuación:curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- Si es conveniente y deseas permitir los encabezados duplicados, ve a la Opción 2: Uso de la propiedad CwC.
CwC
Opción 2: Uso de la propiedad CwC
Apigee proporciona una
propiedad CwC HTTPHeader.<HeaderName> ,que permite que las aplicaciones cliente
y los servidores de destino envíen encabezados duplicados a los proxies de API en Apigee Edge.
| Propiedad CwC | Valores |
|---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
Por ejemplo, la siguiente propiedad se puede configurar en los procesadores de mensajes para permitir duplicados y
valores múltiples para el encabezado Expires.
HTTPHeader.Expires=allowDuplicates, multiValued
- Si eres usuario de la nube privada, puedes configurar la propiedad para evitar que Apigee Edge genere un error
400 Bad Request, incluso si la solicitud contiene encabezados duplicados con la guía práctica Configura los procesadores de mensajes para usar encabezados duplicados. - Si eres usuario de la nube pública, comunícate con Asistencia de Apigee Edge para configurar esta propiedad para tu organización.
Especificación
Apigee espera que la aplicación cliente no envíe encabezados duplicados como parte de la solicitud según las siguientes especificaciones de RFC:
| Especificación |
|---|
| RFC 7230, sección 3.2.2: Orden de los campos |
| RFC 7230, sección 3.2: Campos de encabezado |
Si aún necesitas 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 error400 - 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
- Comando
curlcompleto que usaste para reproducir el error400 - 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 del Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log