Configura Message Processor para permitir encabezados duplicados

Estás viendo la documentación de Apigee Edge.
Ve a la Documentación de Apigee X.
información

Según la especificación de HTTP RFC 7230, sección 3.2.2: Orden de campo, Apigee Edge espera que la solicitud HTTP del o la respuesta HTTP del servidor de backend no contienen el mismo encabezado que se pasa más de una vez con los mismos valores o con valores distintos, a menos que el encabezado específico tenga una excepción y puede tener duplicados.

De forma predeterminada, Apigee Edge permite que se pasen duplicados y valores múltiples a la mayoría de las variables encabezados. Sin embargo, no permite ciertos encabezados que se enumeran en Encabezados que no pueden tener duplicados ni múltiples valores Por lo tanto:

  • Recibirás 400 Bad Request con un código de error protocol.http.DuplicateHeader si el cliente envía una solicitud HTTP con un encabezado más de una vez o con varios valores para los encabezados HTTP a los que no se les permite tener valores duplicados o múltiples en Apigee Edge
  • Del mismo modo, obtendrás 502 Bad Gateway con un código de error. protocol.http.DuplicateHeader si el servidor de backend envía una respuesta HTTP con encabezado particular más de una vez o con varios valores para los encabezados HTTP que no son tener duplicados o múltiples valores en Apigee Edge

La solución recomendada para abordar estos errores es corregir la aplicación cliente y el servidor de backend no envíen encabezados duplicados y cumplan con la especificación . RFC 7230, sección 3.2.2: Orden de campos, como se explica en las siguientes guías de solución de problemas:

Sin embargo, en algunos casos es posible que desees agregar una excepción para incluir duplicados y varios para algunos encabezados HTTP. En estas situaciones, puedes permitir encabezados duplicados y varias para un encabezado HTTP específico mediante la configuración de una propiedad HTTPHeader.HEADER_NAME en el nivel de Message Processor.

En este documento, se proporciona información sobre esta propiedad y se explica cómo habilitarla para evitar los errores mencionados anteriormente y compartir prácticas recomendadas en torno a ellos.

Propiedades del encabezado HTTP para permitir duplicados y valores múltiples

Apigee Edge proporciona las siguientes dos propiedades para controlar el comportamiento de permitir duplicados y varios valores para los encabezados HTTP. Ten en cuenta que solo pueden configurarse en el Mensajes de procesadores con la sintaxis de 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 todas las reglas encabezados que incluyen los encabezados personalizados enviados como parte de la solicitud HTTP que realiza el cliente o de backend que envía el servidor de backend a Apigee Edge.

Valor predeterminado:

multivalued, allowDuplicate,

  1. blank: No se permiten duplicados ni valores múltiples para los encabezados HTTP.
  2. multiValued: Divide el encabezado con valores múltiples en varios encabezados. Se permiten varios valores para los encabezados HTTP, pero no se permiten duplicados. El valor multiValued está habilitado, lo que implica que test-header=a,b se convertirá en test-header=a y test-header=b.
  3. allowDuplicate: Permite varios encabezados HTTP (duplicados) con el mismo nombre.
  4. multivalued, allowDuplicate: tanto los valores múltiples como los duplicados se para los encabezados HTTP.

HTTPHeader.HEADER_NAME

Esta propiedad se usa para anular el comportamiento de un encabezado específico de lo que especificado por HTTPHeader.ANY

Se aplican las mismas especificaciones del punto anterior.

Encabezados que no pueden tener duplicados ni múltiples valores

Como se explicó anteriormente, Apigee Edge permite duplicados y valores múltiples para la mayor parte de la configuración encabezados de forma predeterminada. Esto se debe a que la propiedad HTTPHeader.ANY está configurado con el valor multivalued, allowDuplicate.

Se reemplazó la configuración

Para algunos encabezados específicos, la configuración predeterminada se reemplaza por medio de una de las siguientes opciones: 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 múltiples valores.

    .
  • HTTPHeader.HEADER_NAME=

    Esta configuración cambia el comportamiento predeterminado. Es decir, el rendimiento no puede tener duplicados ni múltiples valores.

Determinación de encabezados que no pueden tener valores duplicados y múltiples

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 la nube privada de Apigee Edge y
  • Los encabezados específicos con configuración preexistente
  1. En la máquina del procesador de mensajes, busca la propiedad HTTPHeader. en /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>
    
  2. Como se explica en la sección Configuración reemplazada, Ten en cuenta la siguiente información en el resultado de muestra anterior:
    1. El encabezado HTTP Connection se sobrescribe, pero puede tener duplicados y múltiples valores
    2. Los encabezados HTTP Host y Expires se reemplazan y no pueden tener duplicados y múltiples valores
    3. El encabezado HTTP Date se sobrescribe y puede tener duplicados. pero no pueden tener varios valores
    4. Todos los encabezados que aparecen aquí (Connection, Host, Expires y Date en el ejemplo anterior) se denominan encabezados con configuración preexistente en este .

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 múltiples valores según cómo estén las propiedades de HTTPHeader configurado en Message Processor con un HTTPHeader de ejemplo de test-header

Solicitud Encabezados de salida basados 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

protocol.http.
DuplicateHeader

De forma interna, dividimos test-header=a,b en lo siguiente:

  • test-header=a y
  • test-header=b,

y, luego, se arroja el error DuplicateHeader.

test‑header=a,b

De forma interna, dividimos test-header=a,b en lo siguiente:

  • test-header=a y
  • test-header=b,

pero, luego, el formulario original se envía al destino.

test‑header=a
test‑header=b
protocol.http.
DuplicateHeader
test‑header=a
test‑header=b
protocol.http.
DuplicateHeader
test‑header=a
test‑header=b

Antes de comenzar

Antes de seguir los pasos de este documento, asegúrate de que entiendes la configuración de propiedades para Perímetro en la nube privada, descrito en Cómo configurar Edge

Configura allowDuplicates y varios valores para los encabezados

Como se explica en Propiedades del encabezado HTTP para permitir duplicados y varios valores, el valor de la propiedad HTTPHeader.ANY = allowDuplicates, multivalued implica que todos los encabezados pueden tener duplicados y múltiples valores en Apigee Edge Sin embargo, existen determinados encabezados cuyos valores se reemplazan de forma explícita para no permitir encabezados duplicados o varios valores para esto usando la propiedad HTTPHeader.HEADER_NAME

En esta sección, se explica cómo configurar la propiedad HTTPHeader.HEADER_NAME para permitir duplicados y múltiples valores para cualquier los encabezados HTTP en los procesadores de mensajes, con el token correspondiente según la sintaxis descrito en Cómo configurar Edge.

En esta sección, usaremos Expires (y myheader) como ejemplo. encabezado para el que queremos permitir duplicados y múltiples valores, como se explica a continuación:

  1. Determina el valor actual de la propiedad HTTPHeaderHEADER_NAME para asegurarse de que no esté habilitada para permitir duplicados y múltiples valores mediante el siguiente comando:
    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    Por ejemplo, si intentas establecer la propiedad para el encabezado Expires, verifica el valor actual del token HTTPHeader.Expires de la propiedad en el campo Mensaje Procesador:

    grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
    

    El resultado del comando anterior da como resultado una de las siguientes opciones:

    1. Si la propiedad se deja en blanco, implica que el valor se reemplaza es un encabezado con configuración preexistente) para NO permitir encabezados duplicados y varias de salida. Es decir, no puedes enviar el encabezado Expires más de una vez como parte de la solicitud o respuesta HTTP a Apigee.
    2. No hay hits para la propiedad específica, por lo tanto, ese valor no es reemplazado (y este NO es un encabezado con una configuración preexistente). Esto significa que el encabezado específico se pueda enviar más de una vez (se permiten duplicados) como parte del la solicitud o respuesta HTTP a Apigee Edge.
    3. Se establece la propiedad con el valor allowDuplicates, multivalued y, luego, Esto 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 puede enviarse más de una vez (se permiten los duplicados) como parte de la solicitud o respuesta HTTP a Apigee.

    Resultado de muestra del comando de búsqueda:

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
    

    El resultado de ejemplo anterior muestra que la propiedad HTTPHeader.Expires se estableció en en blanco. Esto significa que la propiedad se reemplaza para no permitir duplicados o varios valores para el encabezado Expires.

  2. Si observas que la propiedad que corresponde al encabezado específico se indica explícitamente se reemplaza por no permitir valores duplicados o múltiples, como en el ejemplo. solo entonces realiza los siguientes pasos. Si no se indica explícitamente reemplaza y omite el resto de los pasos de esta sección.
  3. 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
    
  4. Agrega una línea con el siguiente formato:
    conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
    
  5. Guarda los cambios.
  6. 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
    
  7. Reinicia el procesador de mensajes:

    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    

    Para reiniciar sin afectar el tráfico, consulta Reinicio progresivo de Message Processor sin impacto en el tráfico

  8. Si tienes más de un Message Processor, repite los pasos anteriores en todos Procesadores de mensajes.

Verifica que el encabezado esté configurado para tener duplicados y varios valores

En esta sección, se explica cómo verificar que la propiedad Se actualizó HTTPHeader.HEADER_NAME para un encabezado específico para permitir duplicados en los Message Processor.

Usaremos Expires como encabezado de ejemplo y verificaremos si la propiedad correspondiente Se actualizó HTTPHeader.Expires.

Si bien usas el token conf_http_HTTPHeader.Expires para actualizar el valor en Message Processor, debes verificar si la propiedad real HTTPHeader.Expires se estableció con el valor nuevo.

  1. En la máquina del procesador de mensajes, busca la propiedad. HTTPHeader.HEADER_NAME en /opt/apigee/edge-message-processor/conf y verifica si tiene con el valor nuevo, como se muestra a continuación:
    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    Por ejemplo, si quieres comprobar que la propiedad HTTPHeader.Expires esté configurada con el valor nuevo, luego, ejecuta el siguiente comando:

    grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
    
  2. Si el valor nuevo se configura correctamente para HTTPHeader.HEADER_NAME el Message Processor, el comando anterior muestra el valor nuevo en la archivo http.properties.
  3. El resultado de muestra del comando anterior después de configurar allowDuplicates y multiValued son los siguientes:

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
    
  4. En el resultado de ejemplo anterior, ten en cuenta que la propiedad HTTPHeader.Expires se establecer con el nuevo valor allowDuplicates, multiValued en http.properties Esto indica que el comportamiento al permitir duplicados y múltiples en HTTPHeader se configuró correctamente en Message Processor.
  5. Si aún ves el valor anterior de la propiedad HTTPHeader.HEADER_NAME, haz lo siguiente: luego, verifica que hayas seguido todos los pasos descritos Configura allowDuplicates y varios valores para los encabezados de forma correcta. Si omitiste algún paso, vuelve a repetirlo correctamente.

    Asegúrate de que tus proxies funcionen como se espera, en especial si hay una lógica funcional para get y set para los encabezados en el proxy.

  6. Si aún no puedes modificar la propiedad, comunícate con el equipo de asistencia de Apigee Edge

Inhabilitar allowDuplicates para los encabezados

En esta sección, se explica cómo configurar la propiedad HTTPHeader.{Headername} para no permitir duplicados ni múltiples valores para un encabezado HTTP específico en el mensaje Procesadores, usando el token correspondiente según la sintaxis descrita en Cómo configurar Edge.

En esta sección, usaremos Expires (y myheader) como ejemplo. encabezado para el que no queremos permitir duplicados, como se explica a continuación:

  1. Determina el valor actual de la propiedad HTTPHeaderHEADER_NAME para asegurarse de que aún no esté inhabilitado para permitir duplicados y varios valores con el siguiente comando:
    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    Por ejemplo, si intentas establecer la propiedad para el encabezado Expires, verifica el valor actual del token HTTPHeader.Expires de la propiedad 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:

    1. La propiedad se deja en blanco, lo que implica que el valor en reemplazado por NOT para permitir encabezados duplicados y varios valores. Es decir, no tienes permiso para enviar el encabezado Expires más de una vez como parte de la solicitud o la respuesta HTTP a Apigee.
    2. No hay hits para la propiedad específica, por lo tanto, ese valor no es reemplazado y este es un encabezado NOT con una configuración preexistente. Esto significa que el encabezado específico se pueda enviar más de una vez (se permiten los duplicados) como parte del solicitud HTTP o respuesta HTTP a Apigee Edge.
    3. Se establece la propiedad con el valor allowDuplicates, multivalued y, luego, significa que el valor se reemplaza de manera explícita y es una configuración existente. Sin embargo, esto significa que el encabezado específico se puede enviar más de una vez (los duplicados son permitido) como parte de la solicitud o respuesta HTTP a Apigee.

    Resultado de muestra 1

    Resultado de muestra n.o 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 en allowDuplicates, multiValued Esto significa que la propiedad es se reemplazan para permitir valores duplicados o múltiples para el encabezado. Expires

    Resultado de muestra núm. 2

    Comando de ejemplo y resultado no 2 del comando de búsqueda

    grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
    

    El resultado de muestra no muestra ningún resultado, lo que implica que la propiedad HTTPHeader.myheader se configura como allowDuplicates, multiValued de forma predeterminada. Esto también implica que la propiedad no se reemplaza por el encabezado myheader,

  2. Si observas alguno de los siguientes pasos, realiza el resto de los pasos de esta sección:
    1. La propiedad correspondiente al encabezado específico se reemplaza para permitir duplicados y múltiples valores, como en el Resultado de muestra no 1 anterior (encabezado con configuración preexistente).
    2. No hay hits para la propiedad que correspondan al encabezado específico, como en el Resultado de muestra n.o 2 anterior (no es un encabezado con configuración preexistente)

    De lo contrario, omite el resto de los pasos de esta sección.

  3. 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
    
  4. Agrega una línea con el siguiente formato al archivo de propiedades:

    Configuración preexistente

    Situación 1: Encabezado con una configuración preexistente:

    conf_http_HTTPHeader.Expires=
    

    No hay ninguna configuración preexistente

    Situación 2: No es un encabezado con una configuración preexistente:

    conf/http.properties+HTTPHeader.myheader=
    
  5. Guarda los cambios.
  6. Asegúrate de que el archivo de propiedades sea propiedad del usuario apigee. Si no lo es, ejecute lo siguiente:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
    
  7. Reinicia el procesador de mensajes:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    

    Para reiniciar sin afectar el tráfico, consulta Reinicio progresivo de Message Processor sin impacto en el tráfico

  8. Si tienes más de un Message Processor, repite los pasos anteriores en todos los mensajes Procesadores.

Verificar si el encabezado está configurado para no permitir duplicados ni múltiples valores

En esta sección, se explica cómo verificar que la propiedad Se actualizó HTTPHeader.HEADER_NAME para un encabezado específico con éxito para no permitir duplicados en Message Processor.

Usaremos Expires (y myheader) como encabezado de ejemplo y verificaremos si la propiedad HTTPHeader.Expires correspondiente (y HTTPHeader.myheader).

  1. En la máquina del 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 como se muestra a continuación:

    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    Por ejemplo, si quieres comprobar 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
    

    No hay ninguna configuración preexistente

    grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
    
  2. Si el nuevo valor del encabezado HTTP se configuró correctamente para HTTPHeader.HEADER_NAME I en el procesador de mensajes y, luego, la opción anterior muestra el valor nuevo en el archivo http.properties.
  3. El resultado de muestra del comando anterior después de haber inhabilitado 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=
    

    No hay ninguna configuración preexistente

    Situación 2: Encabezado myheader (no es un encabezado con una configuración preexistente)

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
    
  4. En el resultado de ejemplo anterior, ten en cuenta que la propiedad HTTPHeader.Expires ( y HTTPHeader.myheader ) se estableció con el nuevo valor {blank} en http.properties Esto indica que el comportamiento al permitir duplicados y varios valores para el encabezado HTTP específico Expires (y myheader) se inhabilitó correctamente en Message Processor.
  5. Si sigues viendo el valor anterior de la propiedad HTTPHeader.Expires (or HTTPHeader.myheader), verifica que hayas seguido todos los pasos que se indican en Cómo configurar allowDuplicates y varios valores para los encabezados correctamente. Si omitiste algún paso, vuelve a repetirlo 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.

  6. Si aún no puedes modificar la propiedad, comunícate con el equipo de asistencia de Apigee Edge.