Você está lendo a documentação do Apigee Edge.
Acesse a documentação da
Apigee X. info
De acordo com a especificação HTTP RFC 7230, seção 3.2.2: ordem dos campos, o Apigee Edge espera que a solicitação HTTP do cliente ou a resposta HTTP do servidor de back-end não contenham o mesmo cabeçalho sendo transmitido mais de uma vez com valores iguais ou diferentes, a menos que o cabeçalho específico tenha uma exceção e possa ter duplicatas.
Por padrão, o Apigee Edge permite que duplicatas e vários valores sejam transmitidos para a maioria dos cabeçalhos HTTP. No entanto, não permite determinados cabeçalhos listados em Cabeçalhos que não podem ter duplicidades e vários valores. 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 duplicados/vários valores 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 duplicatas 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 não enviar cabeçalhos duplicados e obedecer à especificação RFC 7230, seção 3.2.2: ordem dos campos, conforme explicado nos seguintes playbooks de solução de problemas:
No entanto, em alguns casos, talvez seja necessário adicionar uma exceção para incluir duplicados e vários valores para alguns cabeçalhos HTTP. Nessas situações, é possível permitir 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 práticas recomendadas relacionadas a ela.
Propriedades de cabeçalho HTTP para permitir duplicados e vários valores
O Apigee Edge fornece as duas propriedades a seguir para controlar o comportamento de permitir duplicatas e vários valores para cabeçalhos HTTP. Esses parâmetros só podem ser configurados nos Message Processors usando a sintaxe de token explicada em Como configurar o Edge.
| Nome da propriedade | Descrição | Valores permitidos |
|---|---|---|
HTTPHeader.ANY |
Essa propriedade indica se duplicatas ou vários valores 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 da 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 duplicados e vários valores
Conforme explicado anteriormente, o Apigee Edge permite duplicados 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, allowDuplicatesEssa configuração não muda o comportamento padrão. Ou seja, o cabeçalho específico pode ter duplicados e vários valores
.HTTPHeader.HEADER_NAME=Essa configuração muda o comportamento padrão. Ou seja, o cabeçalho específico não pode ter duplicidades nem vários valores.
Como determinar cabeçalhos que não podem ter duplicatas e vários valores
Esta seção descreve como identificar o seguinte:
- Os cabeçalhos específicos que não podem ter duplicados e vários valores na configuração da nuvem privada do Apigee Edge.
- 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 exemplo acima:
- O cabeçalho HTTP
Connectioné substituído, mas pode ter duplicatas e vários valores - Os cabeçalhos HTTP
HosteExpiressão substituídos e não podem ter duplicatas e vários valores - O cabeçalho HTTP
Dateé substituído e pode ter duplicados, 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 do Apigee Edge quando os cabeçalhos são enviados como
duplicados e com vários valores, dependendo de como as propriedades HTTPHeader são
configuradas nos processadores de mensagens com um exemplo HTTPHeader de
test-header.
| Solicitação | Cabeçalhos de saída com base no valor de conf/http.properties+HTTPHeader.test-header= | |||
|---|---|---|---|---|
| <Blank> | allowDuplicates | multiValued | allowDuplicates, multiValued (PADRÃO) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
Internamente, dividimos
e o erro |
Internamente, dividimos
mas depois 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 deste documento, entenda como configurar propriedades para o Edge para nuvem privada, conforme descrito em Como configurar o Edge.
Como configurar allowDuplicates e vários valores para cabeçalhos
Conforme explicado em Propriedades de cabeçalho HTTP para permitir duplicatas e
vários valores,o valor da propriedade HTTPHeader.ANY = allowDuplicates,
multiValued implica que todos os cabeçalhos podem ter duplicatas e vários valores no
Apigee Edge. No entanto, há determinados cabeçalhos cujos valores são substituídos explicitamente para não permitir cabeçalhos duplicados ou vários valores para isso usando a propriedade HTTPHeader.HEADER_NAME.
Esta seção explica como configurar a propriedade
HTTPHeader.HEADER_NAME para permitir duplicados e vários valores para qualquer
cabeçalho HTTP nos processadores de mensagens, usando o token correspondente de acordo com a sintaxe
descrita em Como configurar o Edge.
Nesta seção, vamos usar Expires (e myheader) como um exemplo de cabeçalho para o qual queremos permitir duplicatas e vários valores, conforme explicado abaixo:
-
Determine o valor atual da propriedade
HTTPHeaderHEADER_NAMEpara garantir que ela ainda não esteja ativada para permitir duplicados e vários valores usando o comando a seguir:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Por exemplo, se você estiver tentando definir a propriedade para o cabeçalho
Expires, verifique o valor atual do token 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 é definida como em branco, o que implica que o valor é substituído (e este
é um cabeçalho com configuração preexistente) 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 ou resposta HTTP para a Apigee. - Não há hits para a propriedade específica, o que significa que o valor não é substituído (e NÃO é 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 resposta HTTP para o Apigee Edge.
- Se a propriedade for definida com o valor
allowDuplicates, multiValued, isso significa que o valor será substituído explicitamente (e esse é um cabeçalho 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 ou 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, o que implica que o valor é substituído (e este
é um cabeçalho com configuração preexistente) para NÃO permitir cabeçalhos duplicados e vários
valores. Ou seja, não é permitido enviar o cabeçalho
- Se você notar que a propriedade correspondente ao cabeçalho específico é explicitamente substituída para não permitir valores duplicados ou múltiplos, como no exemplo de saída acima, só então siga as etapas abaixo. Se ele não for substituído explicitamente, pule as etapas restantes nesta seção.
- Editar. Se ele não existir, crie-o:
/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 afetar o tráfego, consulte Reinicialização gradual dos processadores de mensagens sem afetar o tráfego.
- Se você tiver mais de um processador de mensagens, repita as etapas acima em todos eles.
Verificar se o cabeçalho está configurado para ter duplicatas e vários valores
Esta seção explica como verificar se a propriedade
HTTPHeader.HEADER_NAME de um cabeçalho específico foi atualizada
para permitir duplicatas nos processadores de mensagens.
Vamos usar Expires como um cabeçalho de exemplo e verificar se a propriedade correspondente HTTPHeader.Expires 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 real 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 corretamente 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 depois de configurar
allowDuplicatesemultiValuedé 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 duplicados e vários valores emHTTPHeaderfoi configurado com sucesso no processador de mensagens. - Se você ainda encontrar o valor antigo da propriedade
HTTPHeader.HEADER_NAME, verifique se seguiu todas as etapas descritas em Configurar allowDuplicates e vários valores para cabeçalhos corretamente. Se você perdeu alguma etapa, repita todas as etapas corretamente.Verifique se os proxies estão funcionando conforme o esperado, principalmente 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.
Desativar allowDuplicates para cabeçalhos
Esta seção explica como configurar a propriedade HTTPHeader.{Headername} para
não permitir duplicados e vários valores em 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, vamos usar Expires (e myheader) como um cabeçalho de exemplo para o qual não queremos permitir duplicados, conforme explicado abaixo:
-
Determine o valor atual da propriedade
HTTPHeaderHEADER_NAMEpara garantir que ela não esteja desativada e permita duplicados 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 para o cabeçalho
Expires, verifique o valor atual do token 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 é definida como em branco, o que implica que o valor ié substituído por NOT
para permitir cabeçalhos duplicados e vários valores. 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, o que significa que o valor não é substituído. Esse é 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. Isso significa que o valor é substituído explicitamente, e essa é 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 da resposta HTTP para a Apigee.
Exemplo de saída 1
Exemplo de saída 1 do comando de pesquisa:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
A saída de exemplo mostra que a propriedade
HTTPHeader.Expiresestá definida comoallowDuplicates, multiValued. Isso significa que a propriedade é substituída para permitir valores duplicados ou múltiplos para o cabeçalhoExpires.Exemplo de saída nº 2
Exemplo de comando e saída nº 2 do comando de pesquisa
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
A saída de exemplo não mostra nada, 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 é definida como em branco, o que implica que o valor ié substituído por NOT
para permitir cabeçalhos duplicados e vários valores. Não é permitido enviar o cabeçalho
- Se você notar uma das seguintes situações, siga as etapas restantes nesta seção:
- A propriedade correspondente ao cabeçalho específico é substituída para permitir duplicados e vários valores, como na Saída de amostra nº 1 acima (cabeçalho com configuração preexistente).
- Não há hits para a propriedade correspondente ao cabeçalho específico, como no Exemplo de saída nº 2 acima (não é um cabeçalho com uma configuração preexistente).
Caso contrário, pule as etapas restantes nesta seção.
- Edite o seguinte arquivo: Se ele não existir, crie um.
/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 pré-existente
Cenário 1: cabeçalho com uma configuração preexistente
conf_http_HTTPHeader.Expires=
Nenhuma configuração preexistente
Cenário 2: não é um cabeçalho com configuração preexistente:
conf/http.properties+HTTPHeader.myheader=
- Salve as alterações.
- Verifique se o arquivo de propriedades pertence ao usuário
apigee. Se não for, execute 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 afetar o tráfego, consulte Reinicialização gradual dos processadores de mensagens sem afetar o tráfego.
- Se você tiver mais de um processador de mensagens, repita as etapas acima em todos eles.
Verificar se o cabeçalho está configurado para não permitir duplicados e vários valores
Esta seção explica como verificar se a propriedade
HTTPHeader.HEADER_NAME de um cabeçalho específico foi atualizada
com êxito para não permitir duplicados nos processadores de mensagens.
Vamos usar Expires (e myheader) como um cabeçalho de exemplo e verificar 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 seguinte comando:Configuração pré-existente
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 corretamente para
HTTPHeader.HEADER_NAMEI no processador de mensagens, o comando acima vai mostrar o novo valor no arquivohttp.properties. - O exemplo de resultado do comando acima depois de desativar
allowDuplicatesé o seguinte:Configuração pré-existente
Cenário 1: cabeçalho "Expires" (cabeçalho com configuração preexistente)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Nenhuma configuração preexistente
Cenário 2: cabeçalho myheader (não é um cabeçalho com configuração preexistente)
/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 para permitir duplicados e vários valores para o cabeçalho HTTP específicoExpires(emyheader) foi desativado com sucesso no processador de mensagens. Se você ainda encontrar o valor antigo da propriedade
HTTPHeader.Expires (or HTTPHeader.myheader), verifique se seguiu todas as etapas descritas em Configurar allowDuplicates e vários valores para cabeçalhos corretamente. Se você perdeu alguma etapa, repita todas as etapas corretamente.Verifique se os proxies estão funcionando conforme o esperado, principalmente 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.