Estás consultando la documentación de Apigee Edge.
Consulta la
documentación de Apigee X. Información
Según la especificación HTTP RFC 7230, sección 3.2.2: Orden de campo, Apigee Edge espera que la solicitud HTTP del cliente o la respuesta HTTP del servidor de backend no contenga el mismo encabezado que se pasa más de una vez con el mismo valor o con valores diferentes, a menos que el encabezado específico tenga una excepción y pueda tener duplicados.
De forma predeterminada, Apigee Edge permite que se pasen duplicados y varios valores a la mayoría de los encabezados HTTP. Sin embargo, no permite ciertos encabezados que se enumeran en Encabezados que no pueden tener duplicados y varios valores. Por lo tanto:
- Obtendrás
400 Bad Request
con el código de errorprotocol.http.DuplicateHeader
si el cliente envía una solicitud HTTP con un encabezado específico más de una vez o con múltiples valores para los encabezados HTTP que no pueden tener valores duplicados o múltiples en Apigee Edge. - Del mismo modo, obtendrás
502 Bad Gateway
con el código de errorprotocol.http.DuplicateHeader
si el servidor de backend envía una respuesta HTTP con un encabezado específico más de una vez o con varios valores para los encabezados HTTP que no pueden tener valores duplicados ni múltiples en Apigee Edge
La solución recomendada para abordar estos errores es corregir la aplicación cliente y el servidor de backend de modo que no envíen encabezados duplicados y cumplan con la especificación RFC 7230, sección 3.2.2: Orden de campo, como se explica en las siguientes guías de solución de problemas:
Sin embargo, en algunos casos, es posible que quieras agregar una excepción para incluir duplicados y varios valores para algunos encabezados HTTP. En esas situaciones, puedes permitir encabezados duplicados y varios valores para un encabezado HTTP específico si configuras una propiedad HTTPHeader.HEADER_NAME
a nivel de Message Processor.
En este documento, se proporciona información sobre esta propiedad, se explica cómo habilitarla para evitar los errores mencionados con anterioridad y se comparten las prácticas recomendadas en torno a esto.
Propiedades del encabezado HTTP para permitir duplicados y varios valores
Apigee Edge proporciona las siguientes dos propiedades para controlar el comportamiento de permitir duplicados y múltiples valores para los encabezados HTTP. Ten en cuenta que estos se pueden configurar solo en los procesadores de mensajes con la sintaxis del token que se explica en Cómo configurar Edge.
Nombre de la propiedad | Descripción | Valores permitidos |
---|---|---|
HTTPHeader.ANY |
Esta propiedad indica si se permiten valores duplicados o múltiples para todos los encabezados HTTP, incluidos los encabezados personalizados que se enviaron como parte de la solicitud HTTP que realizó el cliente o la respuesta HTTP que envió el servidor de backend a Apigee Edge. Valor predeterminado:
|
|
|
Esta propiedad se usa para anular el comportamiento de un encabezado específico de lo que especifica |
Se aplican las mismas especificaciones del punto anterior. |
Encabezados que no pueden tener duplicados y varios valores
Como se explicó anteriormente, Apigee Edge permite duplicados y múltiples valores para la mayoría de los encabezados HTTP de forma predeterminada. Esto se debe a que la propiedad HTTPHeader.ANY
está
configurada con el valor multivalued, allowDuplicate.
Se reemplazó la configuración
Para algunos encabezados específicos, la configuración predeterminada se reemplaza mediante uno de los siguientes métodos:
HTTPHeader.HEADER_NAME=multivalued, allowDuplicate
Esta configuración no cambia el comportamiento predeterminado. Es decir, el encabezado específico puede tener duplicados y varios valores.
.HTTPHeader.HEADER_NAME=
Esta configuración cambia el comportamiento predeterminado. Es decir, el encabezado específico no puede tener duplicados ni varios valores.
Determina los encabezados que no pueden tener duplicados y varios valores
En esta sección, se describe cómo identificar lo siguiente:
- Los encabezados específicos que no pueden tener duplicados ni múltiples valores en tu configuración de nube privada de Apigee Edge
- Los encabezados específicos con configuración preexistente
En la máquina de Message Processor, busca la propiedad
HTTPHeader.
en el directorio/opt/apigee/edge-message-processor/conf
, como se muestra a continuación:grep -ri "HTTPHeader." /opt/apigee/edge-message-processor/conf
Resultado de muestra:
# grep -ri "HTTPHeader" /opt/apigee/edge-message-processor/conf /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.ANY=allowDuplicates, multiValued /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Connection=allowDuplicates, multiValued … <snipped> /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Host= /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires= /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Date=allowDuplicates … <snipped>
- Como se explica en la sección Configuración reemplazada, ten en cuenta la siguiente información en el resultado de muestra anterior:
- El encabezado HTTP
Connection
se reemplaza, pero se puede tener duplicados y varios valores - Los encabezados HTTP
Host
yExpires
se reemplazan y no se permite tener duplicados ni varios valores - El encabezado HTTP
Date
se reemplaza y se permite tener duplicados, pero no puede tener varios valores - Todos los encabezados que aparecen aquí (
Connection
,Host
,Expires
yDate
en el ejemplo anterior) se denominan encabezados con configuración preexistente en este documento.
- El encabezado HTTP
Comportamiento de Apigee Edge
En la siguiente tabla, se describe el comportamiento de Apigee Edge cuando los encabezados se envían como duplicados y con varios valores, según cómo se configuren las propiedades de HTTPHeader
en los procesadores de mensajes con un ejemplo HTTPHeader
de test-header
.
Solicitud | Los HEADERS salientes se basan en el valor de conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<En blanco> | allowDuplicate | multiValued | allowDuplicate, multiValued (PREDETERMINADO) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
Internamente, dividimos
y, luego, se genera el error |
Internamente, dividimos
pero el formulario original se envía al destino. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
Antes de comenzar
Antes de seguir los pasos de este documento, asegúrate de comprender la configuración de las propiedades de Edge en la nube privada, que se describe en Cómo configurar Edge.
Configura allowDuplicates y varios valores para los encabezados
Como se explica en las propiedades del encabezado HTTP para permitir duplicados y múltiples valores,el valor de la propiedad HTTPHeader.ANY = allowDuplicates,
multivalued
implica que todos los encabezados pueden tener duplicados y varios valores en Apigee Edge. Sin embargo, hay ciertos encabezados cuyos valores se reemplazan de forma explícita para no permitir encabezados duplicados o múltiples valores mediante la propiedad HTTPHeader.HEADER_NAME
.
En esta sección, se explica cómo configurar la propiedad HTTPHeader.HEADER_NAME
a fin de permitir duplicados y varios valores para cualquiera de estos encabezados HTTP en los procesadores de mensajes mediante el token correspondiente según la sintaxis descrita en Cómo configurar Edge.
En esta sección, usaremos Expires
(y myheader
) como encabezado de ejemplo para el que queremos permitir duplicados y varios valores, como se explica a continuación:
-
Determina el valor actual de la propiedad
HTTPHeaderHEADER_NAME
para asegurarte de que aún no esté habilitada para permitir duplicados y varios valores mediante el siguiente comando:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Por ejemplo, si intentas configurar la propiedad del encabezado
Expires
, verifica el valor actual del token de la propiedadHTTPHeader.Expires
en Message Processor:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
El resultado del comando anterior da como resultado una de las siguientes opciones:
- La propiedad está configurada en blanco, lo que significa que se reemplaza el valor (y este es un encabezado con configuración preexistente) para NO permitir encabezados duplicados ni varios valores. Es decir, no puedes enviar el encabezado
Expires
más de una vez como parte de la solicitud HTTP o la respuesta HTTP a Apigee. - No hay hits para la propiedad específica, lo que significa que el valor no se reemplaza (y este NO es un encabezado con una configuración preexistente). Esto significa que el encabezado específico se puede enviar más de una vez (se permiten duplicados) como parte de la solicitud HTTP o la respuesta HTTP a Apigee Edge.
- La propiedad se establece con el valor
allowDuplicates, multivalued
, lo que significa que el valor se reemplaza de forma explícita (y este es un encabezado con configuración preexistente). Esto significa que el encabezado específico se puede enviar más de una vez (se permiten duplicados) como parte de la solicitud HTTP o la respuesta HTTP a Apigee.
Resultado de muestra del comando de búsqueda:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
En el resultado de ejemplo anterior, se muestra que la propiedad
HTTPHeader.Expires
está configurada en blanco. Esto significa que la propiedad se sobrescribe y no permite valores duplicados o múltiples para el encabezadoExpires
. - La propiedad está configurada en blanco, lo que significa que se reemplaza el valor (y este es un encabezado con configuración preexistente) para NO permitir encabezados duplicados ni varios valores. Es decir, no puedes enviar el encabezado
- Si observas que la propiedad correspondiente al encabezado específico se reemplaza de forma explícita para no permitir valores duplicados o múltiples, como en el resultado de ejemplo anterior, solo entonces realiza los siguientes pasos. Si no se reemplaza de forma explícita, omite el resto de los pasos de esta sección.
- Editar. Si no existe, puedes crearla:
/opt/apigee/customer/application/message-processor.properties
Por ejemplo, para abrir el archivo con vi, ingresa lo siguiente:
vi /opt/apigee/customer/application/message-processor.properties
- Agrega una línea con el siguiente formato:
conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
- Guarda los cambios.
Asegúrate de que el archivo de propiedades sea propiedad del usuario
apigee
. De lo contrario, ejecuta el siguiente comando:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
Reinicia Message Processor:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Para reiniciar sin impacto en el tráfico, consulta Reinicio progresivo de Message Processor sin impacto en el tráfico.
- Si tienes más de un Message Processor, repite los pasos anteriores en todos ellos.
Verifica que el encabezado esté configurado para tener duplicados y varios valores
En esta sección, se explica cómo verificar que la propiedad HTTPHeader.HEADER_NAME
para un encabezado específico se haya actualizado correctamente a fin de permitir duplicados en Message Processor.
Usaremos Expires
como encabezado de ejemplo y verificaremos si se actualizó la propiedad HTTPHeader.Expires
correspondiente.
Aunque uses el token conf_http_HTTPHeader.Expires
para actualizar el valor en Message Processor, debes verificar si se configuró la propiedad real HTTPHeader.Expires
con el valor nuevo.
- En la máquina de Message Processor, busca la propiedad
HTTPHeader.HEADER_NAME
en el directorio/opt/apigee/edge-message-processor/conf
y verifica si se configuró con el valor nuevo, como se muestra a continuación:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Por ejemplo, si deseas verificar que la propiedad
HTTPHeader.Expires
esté configurada con el valor nuevo, ejecuta el siguiente comando:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- Si el valor nuevo se establece de forma correcta para
HTTPHeader.HEADER_NAME
en Message Processor, el comando anterior muestra el valor nuevo en el archivohttp.properties
. El resultado de muestra del comando anterior después de configurar
allowDuplicates
ymultiValued
es el siguiente:/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- En el resultado de ejemplo anterior, ten en cuenta que la propiedad
HTTPHeader.Expires
se estableció con el valor nuevoallowDuplicates, multiValued
enhttp.properties
. Esto indica que el comportamiento para permitir duplicados y varios valores enHTTPHeader
se configuró correctamente en el procesador de mensajes. - Si aún ves el valor anterior de la propiedad
HTTPHeader.HEADER_NAME
, verifica si seguiste todos los pasos descritos en Configura allowDuplicates y varios valores para los encabezados de forma correcta. Si omitiste algún paso, repite todos los pasos correctamente.Asegúrate de que tus proxies funcionen como se espera, en especial si hay una lógica funcional para obtener y configurar los encabezados en el proxy.
- Si aún no puedes modificar la propiedad, comunícate con el equipo de asistencia de Apigee Edge
Cómo inhabilitar allowDuplicates para los encabezados
En esta sección, se explica cómo configurar la propiedad HTTPHeader.{Headername}
a fin de no permitir duplicados y múltiples valores para un encabezado HTTP específico en los procesadores de mensajes mediante el token correspondiente de acuerdo con la sintaxis descrita en Cómo configurar Edge.
En esta sección, usaremos Expires
(y myheader
) como encabezado de ejemplo para el que no queremos permitir duplicados, como se explica a continuación:
-
Determina el valor actual de la propiedad
HTTPHeaderHEADER_NAME
para asegurarte de que aún no esté inhabilitada para permitir duplicados y múltiples valores con el siguiente comando:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Por ejemplo, si intentas configurar la propiedad para el encabezado
Expires
, verifica el valor actual del token de propiedadHTTPHeader.Expires
en Message Processor:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
El resultado del comando anterior da como resultado una de las siguientes opciones:
- La propiedad está en blanco, lo que implica que el valor se reemplaza por NOT para permitir encabezados duplicados y valores múltiples. Es decir, no puedes enviar el encabezado
Expires
más de una vez como parte de la solicitud HTTP o la respuesta HTTP a Apigee. - No hay hits para la propiedad específica, eso significa que el valor no se reemplaza y es un encabezado NOT con una configuración preexistente. Esto significa que el encabezado específico se puede enviar más de una vez (se permiten duplicados) como parte de la solicitud HTTP o la respuesta HTTP a Apigee Edge.
- La propiedad se establece con el valor
allowDuplicates, multivalued
, lo que significa que ese valor se reemplaza de forma explícita y esta es una configuración existente. Sin embargo, esto significa que el encabezado específico se puede enviar más de una vez (se permiten duplicados) como parte de la solicitud HTTP o la respuesta HTTP a Apigee.
Resultado de muestra n.o 1
Resultado de muestra núm. 1 del comando de búsqueda:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
El resultado de muestra indica que la propiedad
HTTPHeader.Expires
está configurada comoallowDuplicates, multiValued
. Esto significa que la propiedad se reemplaza para permitir valores duplicados o múltiples para el encabezadoExpires
.Resultado de muestra n.o 2
Comando de muestra y resultado n.o 2 del comando search
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
El resultado de muestra no muestra ningún resultado, lo que significa que la propiedad
HTTPHeader.myheader
se establece enallowDuplicates, multiValued
de forma predeterminada. Esto también implica que la propiedad no se reemplaza del encabezado myheader. - La propiedad está en blanco, lo que implica que el valor se reemplaza por NOT para permitir encabezados duplicados y valores múltiples. Es decir, no puedes enviar el encabezado
- Si observas una de las siguientes opciones, realiza el resto de los pasos de esta sección:
- La propiedad correspondiente al encabezado específico se reemplaza para permitir duplicados y varios valores, como en el Resultado de muestra núm. 1 anterior (encabezado con configuración preexistente).
- No hay hits para la propiedad que corresponde al encabezado específico, como en el resultado de muestra n.o 2 anterior (no es un encabezado con una configuración preexistente).
De lo contrario, omite el resto de los pasos de esta sección.
- Edita el siguiente archivo. Si no existe, puedes crearla.
/opt/apigee/customer/application/message-processor.properties
Por ejemplo, para abrir el archivo con vi, ingresa lo siguiente:
vi /opt/apigee/customer/application/message-processor.properties
- Agrega al archivo de propiedades una línea con el siguiente formato:
Configuración preexistente
Situación 1: Encabezado con configuración preexistente:
conf_http_HTTPHeader.Expires=
Sin configuración preexistente
Situación 2: No es un encabezado con una configuración preexistente:
conf/http.properties+HTTPHeader.myheader=
- Guarda los cambios.
- Asegúrate de que el archivo de propiedades sea propiedad del usuario
apigee
. De lo contrario, ejecuta el siguiente comando:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Reinicia Message Processor:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Para reiniciar sin impacto en el tráfico, consulta Reinicio progresivo de Message Processor sin impacto en el tráfico.
- Si tienes más de un Message Processor, repite los pasos anteriores en todos ellos.
Verifica que el encabezado esté configurado para no permitir duplicados y varios valores
En esta sección, se explica cómo verificar que la propiedad HTTPHeader.HEADER_NAME
para un encabezado específico se haya actualizado correctamente a fin de no permitir duplicados en Message Processor.
Usaremos Expires
(y myheader
) como encabezado de ejemplo y verificaremos si se actualizó la propiedad correspondiente HTTPHeader.Expires
(y HTTPHeader.myheader
).
En el procesador de mensajes, busca la propiedad
HTTPHeader.HEADER_NAME
en el directorio/opt/apigee/edge-message- processor/conf
y verifica si se configuró con el valor nuevo, como se muestra a continuación:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Por ejemplo, si deseas verificar que la propiedad
HTTPHeader.Expires
esté configurada con el valor nuevo, puedes ejecutar el siguiente comando:Configuración preexistente
grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Sin configuración preexistente
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
- Si el nuevo valor del encabezado HTTP se configura correctamente para
HTTPHeader.HEADER_NAME
I en Message Processor, el comando anterior muestra el valor nuevo en el archivohttp.properties
. - El resultado de muestra del comando anterior después de inhabilitar
allowDuplicates
es el siguiente:Configuración preexistente
Situación 1: Encabezado de vencimiento (encabezado con configuración preexistente)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Sin configuración preexistente
Situación 2: Encabezado myheader (no es un encabezado con configuración preexistente)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
- En el resultado de ejemplo anterior, ten en cuenta que la propiedad
HTTPHeader.Expires
( yHTTPHeader.myheader
) se estableció con el valor nuevo {blank}
enhttp.properties
. Esto indica que el comportamiento para permitir duplicados y varios valores para el encabezado HTTP específicoExpires
(ymyheader
) se inhabilitó correctamente en el procesador de mensajes. Si aún ves el valor anterior de la propiedad
HTTPHeader.Expires (or HTTPHeader.myheader)
, verifica si seguiste todos los pasos descritos en Configura allowDuplicates y varios valores para los encabezados de forma correcta. Si omitiste algún paso, repite todos los pasos correctamente.Asegúrate de que los proxies funcionen como se espera, en especial si hay una lógica funcional para obtener y configurar los encabezados en el proxy.
- Si aún no puedes modificar la propiedad, comunícate con el equipo de asistencia de Apigee Edge.