Você está vendo a documentação do Apigee Edge.
  Acesse a documentação da
     Apigee X. informações
De acordo com a especificação HTTP RFC 7230, seção 3.2.2: ordem do campo, o Apigee Edge espera que a solicitação HTTP do cliente ou a resposta HTTP do servidor de back-end não contenha o mesmo cabeçalho transmitido mais de uma vez com os mesmos valores ou diferentes, a menos que o cabeçalho específico tenha uma exceção e possa ter duplicações.
Por padrão, o Apigee Edge permite que duplicatas e vários valores sejam transmitidos para a maioria dos cabeçalhos HTTP. No entanto, ele não permite determinados cabeçalhos listados em Cabeçalhos que não podem ter valores duplicados e múltiplos. Assim:
- Você vai receber 400 Bad Requestcom o código de erroprotocol.http.DuplicateHeaderse o cliente enviar uma solicitação HTTP com um cabeçalho específico mais de uma vez ou com vários valores para os cabeçalhos HTTP que não podem ter valores duplicados/vários no Apigee Edge.
- Da mesma forma, você vai receber 502 Bad Gatewaycom o código de erroprotocol.http.DuplicateHeaderse o servidor de back-end enviar uma resposta HTTP com um cabeçalho específico mais de uma vez ou com vários valores para os cabeçalhos HTTP que não podem ter duplicações ou vários valores no Apigee Edge.
A solução recomendada para resolver esses erros é corrigir o aplicativo cliente e o servidor de back-end para que não envie cabeçalhos duplicados e siga a especificação RFC 7230, seção 3.2.2: ordem de campo, conforme explicado nos seguintes playbooks de solução de problemas:
    No entanto, em alguns casos, talvez você queira adicionar uma exceção para incluir valores duplicados e
    múltiplos para alguns cabeçalhos HTTP.  Nessas situações, permita cabeçalhos duplicados e vários valores para um cabeçalho HTTP específico definindo uma propriedade HTTPHeader.HEADER_NAME no nível do processador de mensagens.
  
Este documento fornece informações sobre essa propriedade, explica como ativá-la para evitar os erros mencionados acima e compartilha as práticas recomendadas.
Propriedades de cabeçalho HTTP para permitir valores duplicados e múltiplos
O Apigee Edge oferece as duas propriedades a seguir para controlar o comportamento de permitir cópias e vários valores para cabeçalhos HTTP. Elas só podem ser configuradas nos processadores de mensagens usando a sintaxe de token explicada em Como configurar o Edge.
| Nome da propriedade | Descrição | Valores permitidos | 
|---|---|---|
| HTTPHeader.ANY | Essa propriedade indica se valores duplicados ou múltiplos são permitidos para todos os cabeçalhos HTTP, incluindo os cabeçalhos personalizados enviados como parte da solicitação HTTP feita pelo cliente ou a resposta HTTP enviada pelo servidor de back-end para o Apigee Edge. Valor padrão: 
 | 
 | 
| 
 | Essa propriedade é usada para substituir o comportamento de um cabeçalho específico do que é
          especificado por  | As mesmas informações mencionadas acima. | 
Cabeçalhos que não podem ter valores duplicados e múltiplos
    Como explicado anteriormente, o Apigee Edge permite duplicações e vários valores para a maioria dos cabeçalhos HTTP
    (por padrão). Isso ocorre porque a propriedade HTTPHeader.ANY está configurada com o valor multiValued, allowDuplicates.
  
Configuração substituída
Para alguns cabeçalhos específicos, a configuração padrão é substituída usando um dos seguintes métodos:
- HTTPHeader.HEADER_NAME=multiValued, allowDuplicates- Essa configuração não muda o comportamento padrão. Ou seja, o cabeçalho específico pode ter valores duplicados e múltiplos .
- HTTPHeader.HEADER_NAME=- Essa configuração altera o comportamento padrão. Ou seja, o cabeçalho específico não pode ter valores duplicados e múltiplos. 
Como determinar cabeçalhos que não podem ter valores duplicados e múltiplos
Esta seção descreve como identificar o seguinte:
- Os cabeçalhos específicos que não podem ter valores duplicados e múltiplos na configuração do Apigee Edge para nuvem privada e
- Os cabeçalhos específicos com configuração preexistente
- Na máquina do Processador de mensagens, procure a propriedade - HTTPHeader.no diretório- /opt/apigee/edge-message-processor/conf, conforme mostrado abaixo:- grep -ri "HTTPHeader." /opt/apigee/edge-message-processor/conf - Exemplo de resposta: - # 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> 
- Conforme explicado na seção Configuração substituída,
        observe as seguintes informações na saída de amostra acima:
        - O cabeçalho HTTP Connectioné substituído, mas pode ter cópias e vários valores
- Os cabeçalhos HTTP HosteExpiressão substituídos e não podem ter valores duplicados e múltiplos
- O cabeçalho HTTP Dateé substituído e pode ter duplicatas, mas não pode ter vários valores
- Todos os cabeçalhos que aparecem aqui (Connection,Host,ExpireseDateno exemplo acima) são chamados de cabeçalhos com configuração preexistente neste documento.
 
- O cabeçalho HTTP 
Comportamento do Apigee Edge
    A tabela a seguir descreve o comportamento da Apigee Edge quando os cabeçalhos são enviados como
    duplicatas e com vários valores, dependendo de como as propriedades HTTPHeader são
    configuradas nos processadores de mensagens com um exemplo de HTTPHeader de
    test-header.
| Solicitação | Cabeçalhos de saída com base no valor de conf/http.properties+HTTPHeader.test-header= | |||
|---|---|---|---|---|
| <Em branco> | allowDuplicates | multiValued | allowDuplicates, multiValued (PADRÃO) | |
| test‑header=a,b | test‑header=a,b | test‑header=a,b | 
 Internamente, dividimos  
 e, em seguida, o erro  | 
 Internamente, dividimos  
 mas o formulário original é enviado para o destino. | 
| test‑header=atest‑header=b | protocol.http. | test‑header=atest‑header=b | protocol.http. | test‑header=atest‑header=b | 
Antes de começar
Antes de usar as etapas neste documento, entenda como configurar as propriedades do Edge em uma nuvem privada, conforme descrito em Como configurar o Edge.
Como configurar o allowDuplicates e vários valores para cabeçalhos
Conforme explicado em Propriedades do cabeçalho HTTP para permitir cópias e
    vários valores,o valor da propriedade HTTPHeader.ANY = allowDuplicates,
    multiValued implica que todos os cabeçalhos têm permissão para ter cópias e vários valores no
    Apigee Edge. No entanto, há alguns cabeçalhos com valores que são substituídos explicitamente para não permitir cabeçalhos duplicados ou múltiplos valores para eles usando a propriedade HTTPHeader.HEADER_NAME.
  
    Esta seção explica como configurar a propriedade
    HTTPHeader.HEADER_NAME para permitir valores duplicados e múltiplos para qualquer um desses cabeçalhos HTTP nos processadores de mensagens, usando o token correspondente de acordo com a sintaxe
    descrita em Como configurar o Edge.
  
    Nesta seção, usaremos Expires (e myheader) como um cabeçalho de exemplo para o qual queremos permitir cópias e vários valores, conforme explicado abaixo:
  
- 
        Determine o valor atual da propriedade HTTPHeaderHEADER_NAMEpara garantir que ela não esteja ativada para permitir duplicações e vários valores usando o seguinte comando:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf Por exemplo, se você estiver tentando definir a propriedade do cabeçalho Expires, verifique o valor atual do tokenHTTPHeader.Expiresda propriedade no processador de mensagens:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf A saída do comando acima resulta em uma das seguintes opções: - A propriedade é definida como em branco, e isso implica que o valor será substituído (e este é um cabeçalho com configuração pré-existente) para NÃO permitir cabeçalhos duplicados e vários valores. Ou seja, não é permitido enviar o cabeçalho Expiresmais de uma vez como parte da solicitação HTTP ou da resposta HTTP para a Apigee.
- Não há correspondências para a propriedade específica. Isso significa que o valor não é substituído (e não é um cabeçalho com config preexistente). Isso significa que o cabeçalho específico pode ser enviado mais de uma vez (cópias são permitidas) como parte da solicitação ou resposta HTTP para o Apigee Edge.
- A propriedade é definida com o valor allowDuplicates, multiValued, o que significa que o valor é substituído explicitamente (e é um cabeçalho com configuração preexistente). Isso significa que o cabeçalho específico pode ser enviado mais de uma vez (cópias são permitidas) como parte da solicitação HTTP ou da resposta HTTP para a Apigee.
 Exemplo de saída do comando de pesquisa: /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires= O exemplo de saída acima mostra que a propriedade HTTPHeader.Expiresestá definida como em branco. Isso significa que a propriedade é substituída para não permitir valores duplicados ou múltiplos para o cabeçalhoExpires.
- A propriedade é definida como em branco, e isso implica que o valor será substituído (e este é um cabeçalho com configuração pré-existente) para NÃO permitir cabeçalhos duplicados e vários valores. Ou seja, não é permitido enviar o cabeçalho 
- Se você perceber que a propriedade correspondente ao cabeçalho específico foi substituída explicitamente para não permitir valores duplicados ou múltiplos, como no exemplo de saída acima, só então execute as etapas a seguir. Se ele não for substituído explicitamente, pule o restante das etapas desta seção.
- Editar. Se não existir, você pode criar:
/opt/apigee/customer/application/message-processor.properties Por exemplo, para abrir o arquivo usando vi, digite o seguinte: vi /opt/apigee/customer/application/message-processor.properties 
- Adicione uma linha no seguinte formato:
conf_http_HTTPHeader.Expires=allowDuplicates, multiValued 
- Salve as alterações.
- Verifique se o arquivo de propriedades pertence ao usuário - apigee. Se não estiver, execute o seguinte comando:- chown apigee:apigee /opt/apigee/customer/application/message-processor.properties 
- Reinicie o processador de mensagens: - /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart - Para reiniciar sem impacto no tráfego, consulte Reinicialização progressiva dos processadores de mensagens sem impacto no tráfego. 
- Se você tiver mais de um processador de mensagens, repita as etapas acima em todos os processadores.
Verificação de que o cabeçalho está configurado para ter valores duplicados e múltiplos
    Nesta seção, explicamos como verificar se a propriedade
    HTTPHeader.HEADER_NAME de um cabeçalho específico foi atualizada
    para permitir duplicatas nos processadores de mensagens.
  
    Usaremos Expires como um exemplo de cabeçalho e verificaremos se a propriedade
    HTTPHeader.Expires correspondente foi atualizada.
  
    Mesmo que você use o token conf_http_HTTPHeader.Expires para atualizar o valor no processador de mensagens, é necessário verificar se a propriedade HTTPHeader.Expires foi definida com o novo valor.
  
- Na máquina do processador de mensagens, procure a propriedade
      HTTPHeader.HEADER_NAMEno diretório/opt/apigee/edge-message-processor/confe verifique se ela foi definida com o novo valor, conforme mostrado abaixo:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf Por exemplo, se você quiser verificar se a propriedade HTTPHeader.Expiresestá definida com o novo valor, execute o seguinte comando:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf 
- Se o novo valor for definido para HTTPHeader.HEADER_NAMEno processador de mensagens, o comando acima vai mostrar o novo valor no arquivohttp.properties.
- O resultado de amostra do comando acima após a configuração - allowDuplicatese- multiValuedé o seguinte:- /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued 
- No exemplo de saída acima, observe que a propriedade HTTPHeader.Expiresfoi definida com o novo valorallowDuplicates, multiValuedemhttp.properties. Isso indica que o comportamento para permitir duplicatas e vários valores emHTTPHeaderfoi configurado corretamente no processador de mensagens.
- Se o valor antigo da propriedade HTTPHeader.HEADER_NAMEainda aparecer, verifique se você seguiu corretamente todas as etapas descritas em Como configurar allowDuplicates e vários valores para cabeçalhos. Se você tiver pulado alguma etapa, repita-a corretamente.Verifique se os proxies estão funcionando como esperado, especialmente se houver uma lógica funcional para receber e definir os cabeçalhos no proxy. 
- Se ainda não for possível modificar a propriedade, entre em contato com o suporte do Apigee Edge.
Como desativar allowDuplicates para cabeçalhos
    Nesta seção, explicamos como configurar a propriedade HTTPHeader.{Headername} para não permitir cópias e valores múltiplos de um cabeçalho HTTP específico nos processadores de mensagens, usando o token correspondente de acordo com a sintaxe descrita em Como configurar o Edge.
  
    Nesta seção, usaremos Expires (e myheader) como um cabeçalho de exemplo em que não queremos permitir cópias, conforme explicado abaixo:
  
- 
      Determine o valor atual da propriedade HTTPHeaderHEADER_NAMEpara garantir que ela não esteja desativada para permitir duplicações e vários valores usando o seguinte comando:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf Por exemplo, se você estiver tentando definir a propriedade do cabeçalho Expires, verifique o valor atual da propriedadeHTTPHeader.Expiresno processador de mensagens:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf A saída do comando acima resulta em uma das seguintes opções: - A propriedade está definida como em branco, o que implica que o valor ifoi substituído para NÃO
          permitir cabeçalhos duplicados e vários valores. Isso significa que não é permitido enviar
          o cabeçalho Expiresmais de uma vez como parte da solicitação ou resposta HTTP para a Apigee.
- Não há hits para a propriedade específica. Isso significa que o valor não é substituído e este é um cabeçalho NOT com uma configuração preexistente. Isso significa que o cabeçalho específico pode ser enviado mais de uma vez (cópias são permitidas) como parte da solicitação HTTP ou resposta HTTP para o Apigee Edge.
- A propriedade é definida com o valor allowDuplicates, multiValued, o que significa que o valor é substituído explicitamente e é uma configuração existente. No entanto, isso significa que o cabeçalho específico pode ser enviado mais de uma vez (cópias são permitidas) como parte da solicitação HTTP ou resposta HTTP para a Apigee.
 Exemplo de saída 1Exemplo de resposta #1 do comando de pesquisa: /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued O exemplo de saída mostra que a propriedade HTTPHeader.Expiresestá definida comoallowDuplicates, multiValued. Isso significa que a propriedade é substituída para permitir valores duplicados ou múltiplos do cabeçalhoExpires.Exemplo de saída 2Exemplo de comando e saída 2 do comando de pesquisa grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf O exemplo de saída não mostra saída, o que implica que a propriedade HTTPHeader.myheaderestá definida comoallowDuplicates, multiValuedpor padrão. Isso também implica que a propriedade não é substituída para o cabeçalho myheader.
- A propriedade está definida como em branco, o que implica que o valor ifoi substituído para NÃO
          permitir cabeçalhos duplicados e vários valores. Isso significa que não é permitido enviar
          o cabeçalho 
- Se você encontrar uma das seguintes opções, siga as outras etapas desta seção:
      - A propriedade correspondente ao cabeçalho específico é substituída para permitir duplicatas e vários valores, como na saída de exemplo 1 acima (cabeçalho com configuração preexistente).
- Não há correspondências para a propriedade correspondente ao cabeçalho específico, como na saída de exemplo 2 acima (não um cabeçalho com configuração preexistente).
 Caso contrário, pule o restante das etapas nesta seção. 
- Edite o arquivo a seguir. Se não existir, você pode criar uma.
/opt/apigee/customer/application/message-processor.properties Por exemplo, para abrir o arquivo usando vi, digite o seguinte: vi /opt/apigee/customer/application/message-processor.properties 
- Adicione uma linha no seguinte formato ao arquivo de propriedades:
      Configuração preexistenteCenário 1: cabeçalho com configuração pré-existente: conf_http_HTTPHeader.Expires= Nenhuma configuração pré-existenteCenário 2: não é um cabeçalho com uma configuração pré-existente: conf/http.properties+HTTPHeader.myheader= 
- Salve as alterações.
- Verifique se o arquivo de propriedades pertence ao usuário apigee. Caso contrário, faça o seguinte:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties 
- Reinicie o processador de mensagens:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart Para reiniciar sem impacto no tráfego, consulte Reinicialização progressiva dos processadores de mensagens sem impacto no tráfego. 
- Se você tiver mais de um processador de mensagens, repita as etapas acima em todos os processadores.
Verificar se o cabeçalho está configurado para não permitir valores duplicados e múltiplos
    Esta seção explica como verificar se a propriedade
    HTTPHeader.HEADER_NAME de um cabeçalho específico foi atualizada
    para não permitir duplicatas nos processadores de mensagens.
  
    Usaremos Expires (e myheader) como um cabeçalho de exemplo e verificaremos se a propriedade correspondente HTTPHeader.Expires (e HTTPHeader.myheader) foi atualizada.
  
- Na máquina do processador de mensagens, procure a propriedade - HTTPHeader.HEADER_NAMEno diretório- /opt/apigee/edge-message- processor/confe verifique se ela foi definida com o novo valor, conforme mostrado abaixo:- grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf - Por exemplo, se você quiser verificar se a propriedade - HTTPHeader.Expiresestá definida com o novo valor, execute o comando abaixo:- Configuração preexistente- grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf - Nenhuma configuração preexistente- grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf 
- Se o novo valor do cabeçalho HTTP for definido com sucesso para
        HTTPHeader.HEADER_NAMEI no processador de mensagens, o comando acima mostrará o novo valor no arquivohttp.properties.
- O resultado de amostra do comando acima, depois de desativar allowDuplicates, é o seguinte:Configuração preexistenteCenário 1: cabeçalho de expiração (cabeçalho com configuração pré-existente) /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires= Nenhuma configuração preexistenteCenário 2: cabeçalho myheader (não é um cabeçalho com configuração pré-existente) /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader= 
- No exemplo de saída acima, observe que a propriedade HTTPHeader.Expires( eHTTPHeader.myheader) foi definida com o novo valor {blank}emhttp.properties. Isso indica que o comportamento de permitir duplicatas e vários valores para o cabeçalho HTTP específicoExpires(emyheader) foi desativado no processador de mensagens.
- Se o valor antigo da propriedade - HTTPHeader.Expires (or HTTPHeader.myheader)ainda aparecer, verifique se você seguiu corretamente todas as etapas descritas em Como configurar allowDuplicates e vários valores para cabeçalhos. Se você tiver perdido alguma etapa, repita todas as etapas novamente.- Verifique se os proxies estão funcionando conforme o esperado, especialmente se houver uma lógica funcional para receber e definir os cabeçalhos no proxy. 
- Se ainda não for possível modificar a propriedade, entre em contato com o suporte do Apigee Edge.