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 dos campos (em inglês), 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 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 cópias e vários valores sejam transmitidos para a maioria dos cabeçalhos HTTP. No entanto, ela não permite determinados cabeçalhos listados em Cabeçalhos que não podem ter cópias e vários valores. Assim:
- Você vai receber
400 Bad Request
com o código de erroprotocol.http.DuplicateHeader
se 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 cópias/vários valores no Apigee Edge. - Da mesma forma, você vai receber
502 Bad Gateway
com o código de erroprotocol.http.DuplicateHeader
se 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 cópias ou diversos 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 aderir à especificação RFC 7230, seção 3.2.2: ordem de campos, conforme explicado nos seguintes manuais de solução de problemas:
No entanto, em alguns casos, convém adicionar uma exceção para incluir duplicatas e múltiplos valores para alguns cabeçalhos HTTP. Nessas situações, você pode 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 contém informações sobre essa propriedade, explica como ativá-la para evitar os erros mencionados acima e compartilha práticas recomendadas.
Propriedades do cabeçalho HTTP para permitir duplicatas 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. Observe que eles só podem ser configurados 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 cópias ou vários valores são permitidos para todos os cabeçalhos HTTP, incluindo os 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 cópias e valores múltiplos
Conforme explicado anteriormente, o Apigee Edge permite cópias e diversos valores na maioria dos cabeçalhos HTTP
por padrão. Isso ocorre porque a propriedade HTTPHeader.ANY
está configurada com o valor multivalued, allowDuplicate.
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, allowDuplicate
Essa configuração não muda o comportamento padrão. Ou seja, o cabeçalho específico pode ter duplicatas e valores múltiplos.
.HTTPHeader.HEADER_NAME=
Esta configuração muda o comportamento padrão. Ou seja, o cabeçalho específico não pode ter cópias e vários valores.
Determinar cabeçalhos que não podem ter cópias e vários valores
Esta seção descreve como identificar o seguinte:
- Os cabeçalhos específicos que não têm permissão para ter cópias e vários valores na configuração da nuvem privada do Apigee Edge e
- Os cabeçalhos específicos com configuração preexistente
Na máquina do processador de mensagens, pesquise 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 amostra de saída acima:
- O cabeçalho HTTP
Connection
é substituído, mas pode ter cópias e vários valores - Os cabeçalhos HTTP
Host
eExpires
foram substituídos e não podem ter cópias e vários valores - O cabeçalho HTTP
Date
é substituído e pode ter cópias, mas não vários valores. - Todos os cabeçalhos que aparecem aqui (
Connection
,Host
,Expires
eDate
no 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
estão
configuradas nos processadores de mensagens com um exemplo de HTTPHeader
de
test-header
.
Solicitação | CABEÇALHOS enviados com base no valor de conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<Em branco> | allowDuplicate | multiValued | allowDuplicate, multiValued (DEFAULT) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
Internamente, dividimos
em seguida, o erro |
Internamente, dividimos
mas o formulário original é enviado para a segmentação. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
Antes de começar
Antes de usar as etapas deste documento, entenda a configuração de propriedades para o Edge na nuvem privada, descritas em Como configurar o Edge.
Como configurar allowDuplicates e vários valores para cabeçalhos
Conforme explicado em Propriedades do 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 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 vários valores para esses cabeçalhos usando a propriedade HTTPHeader.HEADER_NAME
.
Esta seção explica como configurar a propriedade
HTTPHeader.HEADER_NAME
para permitir cópias e diversos valores de
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 exemplo de cabeçalho para o qual queremos permitir cópias e vários valores, conforme explicado abaixo:
-
Determine o valor atual da propriedade
HTTPHeaderHEADER_NAME
para verificar se ela já não está ativada para permitir duplicatas 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.Expires
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:
- Quando a propriedade é definida como em branco, isso significa que o valor é substituído (e esse
é um cabeçalho com configuração preexistente) para NÃO permitir cabeçalhos duplicados e vários
valores. Ou seja, você não tem permissão para enviar o cabeçalho
Expires
mais de uma vez como parte da solicitação HTTP ou resposta HTTP para a Apigee. - Não houver hits para a propriedade específica, isso 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.
- A propriedade é definida com o valor
allowDuplicates, multivalued
, o que significa que o valor foi substituído explicitamente (e esse é 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 à 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.Expires
está definida como em branco. Isso significa que a propriedade é substituída para não permitir valores duplicados ou múltiplos para o cabeçalhoExpires
. - Quando a propriedade é definida como em branco, isso significa que o valor é substituído (e esse
é um cabeçalho com configuração preexistente) para NÃO permitir cabeçalhos duplicados e vários
valores. Ou seja, você não tem permissão para 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, somente depois realize as etapas a seguir. Se ela não for substituída explicitamente, pule o restante das etapas nesta seção.
- Editar playlist. Se não existir, você poderá criá-lo:
/opt/apigee/customer/application/message-processor.properties
Por exemplo, para abrir o arquivo usando o 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 mudanças.
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 contínua dos processadores de mensagens sem impacto no 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, será necessário verificar se a propriedade HTTPHeader.Expires
real foi definida com o novo valor.
- Na máquina do processador de mensagens, pesquise a propriedade
HTTPHeader.HEADER_NAME
no diretório/opt/apigee/edge-message-processor/conf
e 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.Expires
está 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 com êxito para
HTTPHeader.HEADER_NAME
no processador de mensagens, o comando acima mostrará o novo valor no arquivohttp.properties
. O resultado de amostra do comando acima depois de configurar
allowDuplicates
emultiValued
é 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.Expires
foi definida com o novo valorallowDuplicates, multiValued
emhttp.properties
. Isso indica que o comportamento para permitir duplicatas e valores múltiplos emHTTPHeader
foi configurado com sucesso no processador de mensagens. - Se o valor antigo da propriedade
HTTPHeader.HEADER_NAME
ainda aparecer, verifique se você seguiu todas as etapas descritas em Como configurar allowDuplicates e vários valores para cabeçalhos corretamente. Se você esqueceu alguma etapa, repita todas as etapas corretamente.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
Desativação de allowDuplicates para cabeçalhos
Esta seção explica como configurar a propriedade HTTPHeader.{Headername}
para
não permitir duplicatas e valores múltiplos para 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 exemplo de cabeçalho para o qual não queremos permitir cópias, conforme explicado abaixo:
-
Determine o valor atual da propriedade
HTTPHeaderHEADER_NAME
para garantir que ela ainda não esteja desativada para permitir duplicatas 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.Expires
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:
- Se a propriedade for definida como em branco, isso implica que o valor será substituído por NOT
para permitir cabeçalhos duplicados e vários valores. Ou seja, você não tem permissão para enviar
o cabeçalho
Expires
mais de uma vez como parte da solicitação HTTP ou resposta HTTP para a Apigee. - Não houver hits para a propriedade específica. Isso significa que o valor não será substituído e esse é um cabeçalho NOT 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.
- A propriedade é definida com o valor
allowDuplicates, multivalued
, então isso significa que o valor foi 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 resposta HTTP à 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
O exemplo de saída mostra que a propriedade
HTTPHeader.Expires
está 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 2
Comando de exemplo e saída no 2 do comando de pesquisa
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
A saída da amostra não mostra nenhuma saída, o que significa que a propriedade
HTTPHeader.myheader
está definida comoallowDuplicates, multiValued
por padrão. Isso também significa que a propriedade não será substituída para o cabeçalho myheader, - Se a propriedade for definida como em branco, isso implica que o valor será substituído por NOT
para permitir cabeçalhos duplicados e vários valores. Ou seja, você não tem permissão para enviar
o cabeçalho
- Se uma das seguintes situações for exibida, 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 no Exemplo de saída no 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 2 acima (não um cabeçalho com configuração preexistente).
Caso contrário, pule as outras etapas desta seção.
- Edite o arquivo a seguir. Se ainda não existir, você poderá criá-lo.
/opt/apigee/customer/application/message-processor.properties
Por exemplo, para abrir o arquivo usando o vi, digite o seguinte:
vi /opt/apigee/customer/application/message-processor.properties
- Adicione uma linha no seguinte formato ao arquivo de propriedades:
Configuração preexistente
Cenário 1: cabeçalho com configuração preexistente:
conf_http_HTTPHeader.Expires=
Nenhuma configuração preexistente
Cenário n.o 2: não é um cabeçalho com configuração preexistente:
conf/http.properties+HTTPHeader.myheader=
- Salve as mudanças.
- Verifique se o arquivo de propriedades pertence ao usuário
apigee
. Caso contrário, 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 impacto no tráfego, consulte Reinicialização contínua dos processadores de mensagens sem impacto no tráfego.
- Se você tiver mais de um processador de mensagens, repita as etapas acima para todos eles.
Verificar se o cabeçalho está configurado para não permitir duplicatas e valores 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.
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, pesquise a propriedade
HTTPHeader.HEADER_NAME
no diretório/opt/apigee/edge-message- processor/conf
e 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.Expires
está definida com o novo valor, execute o seguinte comando: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 para
HTTPHeader.HEADER_NAME
I no processador de mensagens, o comando acima vai mostrar o novo valor no arquivohttp.properties
. - O resultado do comando acima, após a desativação de
allowDuplicates
, é o seguinte:Configuração preexistente
Cenário n.o 1: cabeçalho de expiração (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 duplicatas e diversos valores para o cabeçalho HTTP específicoExpires
(emyheader
) foi desativado com sucesso no processador de mensagens. Se o valor antigo da propriedade
HTTPHeader.Expires (or HTTPHeader.myheader)
ainda aparecer, verifique se você seguiu todas as etapas descritas em Como configurar allowDuplicates e vários valores para cabeçalhos corretamente. Se você esqueceu alguma etapa, repita todas as etapas corretamente.Verifique se os proxies estão funcionando conforme o esperado, especialmente se houver uma lógica funcional para acessar 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.