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 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 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 solicitud HTTP que envía el cliente a Apigee Edge.
Según
RFC 7230, sección 3.2.2: Orden de campos, un remitente 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 esté definido como una lista. #(values)] o el campo del encabezado es 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, entonces
este responde con 400 Bad Request
y el código de error
protocol.http.DuplicateHeader
.
A continuación, se muestran 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 la API, sigue estos pasos:
- Accede a la IU de Apigee Edge como un usuario con un 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.
- Asegúrate de que el filtro Proxy esté establecido en Todos.
- Traza el código de falla en función del valor Time.
Selecciona una celda que tenga el código de falla
protocol.http.DuplicateHeader
, como se muestra a continuación:A continuación, se muestra información sobre el código de falla
protocol.http.DuplicateHeader
:- 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:
400
- Fuente de la falla:
apigee
- Código de fallas:
protocol.http.DuplicateHeader
.
- Código de estado:
- Si la Fuente de errores tiene el valor
apigee
oMP
y el Código de fallas tiene el valorprotocol.http.DuplicateHeader
, eso indica que la solicitud HTTP del cliente contenía encabezados duplicados.
Herramienta de seguimiento
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 los errores HTTP
400
. 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
400
durante un período específico (si el problema ocurrió en el pasado) o si hay alguna solicitud que aún falla con400
. Si encuentras algún error
400
con el código X-Apigee-fault-code que coincide con el valor deprotocol.http.DuplicateHeader
, determina el valor de X-Apigee-fault-source.Ejemplo de error 400 del registro de acceso de NGINX:
La entrada de ejemplo anterior del registro de acceso de NGINX tiene los siguientes valores para X-Apigee-fall-code y X-Apigee-fault-source:
Encabezados de respuesta Valor X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source MP
Causa: encabezado duplicado en la solicitud
Diagnóstico
- Determina el código de error y la fuente de errores del error observado con la supervisión de la API o los registros de acceso de NGINX, como se explica en Pasos comunes de diagnóstico.
- Si Fuente con errores tiene el valor
apigee
oMP
, 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 mediante 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, consulta la
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 el encabezado
Expires
se envía más de una vez, como se ve enfaultstring
.
Solicitud real
Usa la solicitud real
Si tienes acceso a la solicitud real que realizó la aplicación cliente, sigue estos pasos:
- Verifica la lista de encabezados pasados en la solicitud.
- Si descubres que un encabezado en particular aparece más de una vez en la solicitud con el mismo valor o con valores diferentes , esa es la causa del error.
Solicitud de muestra:
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
Expires
se envía más de una vez. Por lo tanto, esta solicitud falla con el error400 Bad Request
y el código de errorprotocol.http.DuplicateHeader
.- Como alternativa, si tienes acceso a los registros del cliente, puedes ver si tienes información sobre la solicitud real realizada a Apigee Edge y determinar el encabezado que se envía más de una vez.
Resolución
Corregir duplicación
Opción 1 (opción recomendada) Corrige la aplicación cliente para que no incluya encabezados duplicados
- Analizar el motivo por el que el cliente específico envía un encabezado duplicado. Por ejemplo,
Expires
en el caso anterior. Verifica que los proxies de API acepten el encabezado duplicado. Por lo general, no es conveniente según la especificación HTTP RFC7230. - Si no lo deseas, modifica tu aplicación cliente 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, puedes pasar el encabezadoExpires
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 quieres permitir los encabezados duplicados, ve a Opción 2: Cómo usar la propiedad CwC.
CwC
Opción 2: Mediante la propiedad CwC
Apigee proporciona una propiedad HTTPHeader.<HeaderName>
de
CwC ,que permite que las aplicaciones cliente y los servidores de destino envíen encabezados duplicados a los 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 en el encabezado Expires
.
HTTPHeader.Expires=allowDuplicates, multiValued
- Si eres un usuario de Private Cloud, puedes configurar la propiedad para evitar que Apigee Edge genere un error
400 Bad Request
, incluso si la solicitud contiene encabezados duplicados mediante la guía práctica Configura Message Processor para usar encabezados duplicados. - Si eres usuario de la nube pública, comunícate con la asistencia de Apigee Edge para configurar esta propiedad en tu organización.
Especificación
Apigee espera que la aplicación cliente no envíe encabezados duplicados como parte de la solicitud 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 de los campos de encabezado |
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 error400
. - 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
- Completa el comando
curl
que usaste para reproducir el error400
. - 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