Esta é a documentação do Apigee Edge.
Acesse
Documentação da Apigee X. informações
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 a resposta HTTP ou do cliente do servidor de back-end não contêm 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 pode ter duplicatas.
Por padrão, o Apigee Edge permite que cópias e vários valores sejam transmitidos para a maioria dos dados e cabeçalhos de cache válidos. No entanto, ele não permite certos cabeçalhos que estão listados em Cabeçalhos que não podem ter cópias e valores múltiplos. Assim:
- Você vai receber
400 Bad Request
com o código do erroprotocol.http.DuplicateHeader
se o cliente enviar uma solicitação HTTP com informações cabeçalho mais de uma vez ou com diversos valores para os cabeçalhos HTTP que não têm permissão para têm cópias/vários valores no Apigee Edge. - Da mesma forma, você vai receber
502 Bad Gateway
com o código do erro.protocol.http.DuplicateHeader
se o servidor de back-end enviar uma resposta HTTP com cabeçalho específico mais de uma vez ou com vários valores para os cabeçalhos HTTP que não são têm permissão para ter cópias 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 aderir à especificação RFC 7230, seção 3.2.2: ordem dos campos, conforme explicado nos seguintes manuais de solução de problemas:
No entanto, em alguns casos você pode querer adicionar uma exceção para incluir duplicatas e vários
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
em
no nível do processador de mensagens.
Este documento contém informações sobre a propriedade e explica como ativar a propriedade para evitar os erros mencionados acima e compartilhar práticas recomendadas sobre eles.
Propriedades do cabeçalho HTTP para permitir cópias e vários valores
O Apigee Edge oferece as duas propriedades a seguir para controlar o comportamento de permitir duplicatas e diversos valores para cabeçalhos HTTP. Eles só podem ser configurados no Processadores de mensagens que usam a sintaxe de token explicada em Como configurar o Edge.
Nome da propriedade | Descrição | Valores permitidos |
---|---|---|
HTTPHeader.ANY |
Esta propriedade indica se valores duplicados ou múltiplos são permitidos para todos os valores cabeçalhos, incluindo os cabeçalhos personalizados enviados como parte da solicitação HTTP feita pelo cliente ou resposta enviada pelo servidor de back-end à Apigee Edge. Valor padrão:
|
|
|
Esta 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 vários valores para a maioria dos dados
e cabeçalhos por padrão. Isso ocorre porque a propriedade HTTPHeader.ANY
é
configurado com o valor multivalued, allowDuplicate.
Configuração substituída
Em 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 cópias e valores múltiplos.
.HTTPHeader.HEADER_NAME=
Essa configuração muda o comportamento padrão. Ou seja, a parte específica cabeçalho não pode ter cópias e valores múltiplos.
Determinar cabeçalhos que não podem ter cópias e valores múltiplos
Esta seção descreve como identificar o seguinte:
- Os cabeçalhos específicos que não podem ter cópias e valores múltiplos a configuração da nuvem privada do Apigee Edge e
- os cabeçalhos específicos com configuração pré-existente;
Na máquina do Processador de mensagens, pesquise a propriedade
HTTPHeader.
no/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>
- Como explicado na seção Configuração substituída,
observe as seguintes informações no exemplo 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
são substituídos e não podem ter valores duplicados e vários valores - O cabeçalho HTTP
Date
é substituído e pode ter cópias mas não podem ter diversos valores - Todos os cabeçalhos que aparecem aqui (
Connection
,Host
,Expires
eDate
na amostra acima) são chamadas de cabeçalhos com configuração pré-existente 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
cópias e com vários valores, dependendo de como as propriedades HTTPHeader
estão
configurados 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 (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 ao alvo. |
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, certifique-se de entender a configuração de propriedades para Borda em nuvem privada, descrita em Como configurar o Edge
Como configurar allowDuplicates e diversos valores para cabeçalhos
Conforme explicado em Propriedades do cabeçalho HTTP para permitir duplicações e
vários valores, o valor da propriedade HTTPHeader.ANY = allowDuplicates,
multivalued
implica que todos os cabeçalhos podem ter cópias e valores múltiplos em
Apigee Edge. No entanto, há alguns cabeçalhos cujos valores são substituídos explicitamente para não
permitir cabeçalhos duplicados ou vários valores para thi usando a propriedade
HTTPHeader.HEADER_NAME
:
Nesta seção, explicamos como configurar a propriedade
HTTPHeader.HEADER_NAME
para permitir cópias e vários valores para qualquer
esses cabeçalhos HTTP nos processadores de mensagens, usando o token correspondente de acordo com a sintaxe
descrito em Como configurar o Edge.
Nesta seção, usaremos Expires
(e myheader
) como exemplo.
cabeçalho para o qual desejamos permitir duplicatas e vários valores, conforme explicado abaixo:
-
Determinar o valor atual da propriedade
HTTPHeaderHEADER_NAME
para certificar-se de que ele ainda não está habilitado para permitir cópias e valores múltiplos usando a propriedade 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
, verifica o valor atual do token de propriedadeHTTPHeader.Expires
no Message Processador:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
A saída do comando acima resulta em uma das seguintes situações:
- A propriedade é definida 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
e a distribuição dos valores dos dados. Ou seja, você não tem permissão para enviar o cabeçalho
Expires
mais de uma vez como parte da solicitação 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 NÃO é um cabeçalho com uma configuração pré-existente). Isso significa que que o cabeçalho específico possa ser enviado mais de uma vez (é permitido duplicar) como parte da a solicitação HTTP ou a resposta HTTP para o Apigee Edge.
- A propriedade é definida com o valor
allowDuplicates, multivalued
e, em seguida, isso significa que o valor é substituído explicitamente (e é um cabeçalho com configuração pré-existente). Isso significa que o cabeçalho específico pode ser enviado mais de uma vez (é permitido duplicar) 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.Expires
está definida como em branco. Isso significa que a propriedade é substituída para não permitir cópias ou vários valores para o cabeçalhoExpires
. - A propriedade é definida 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
e a distribuição dos valores dos dados. 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 está explicitamente substituído para não permitir valores duplicados ou múltiplos, como no exemplo saída acima, só então execute as etapas a seguir. Se não for explicitamente sejam substituídos, ignore o restante das etapas nesta seção.
- Editar. Se ele não existir, você poderá criá-lo:
/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 contínua de processadores de mensagens sem impacto no tráfego.
- Se você tiver mais de um processador de mensagens, repita as etapas acima em todos Processadores de mensagens
Como verificar se o cabeçalho está configurado para ter cópias e vários valores
Nesta seção, explicamos como verificar se a propriedade
O HTTPHeader.HEADER_NAME
para um cabeçalho específico foi atualizado
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 atualizado.
Mesmo que você use o token conf_http_HTTPHeader.Expires
para atualizar o valor na
o processador de mensagens, você precisa verificar se a propriedade HTTPHeader.Expires
foi definido com o novo valor.
- Na máquina do processador de mensagens, pesquise a propriedade
HTTPHeader.HEADER_NAME
no/opt/apigee/edge-message-processor/conf
e verifique se ele tem foi definido 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 e execute o seguinte comando:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- Se o novo valor for definido para
HTTPHeader.HEADER_NAME
em o processador de mensagens, o comando acima mostrará o novo valor na arquivohttp.properties
. O exemplo de resultado do comando acima depois de você ter configurado
allowDuplicates
emultiValued
ficam assim:/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 definido com o novo valorallowDuplicates, multiValued
nohttp.properties
Isso indica que o comportamento para permitir duplicatas e valores emHTTPHeader
foram configurados com sucesso no processador de mensagens. - Se você ainda estiver vendo o valor antigo da propriedade
HTTPHeader.HEADER_NAME
, Depois, verifique se você seguiu todas as etapas descritas Como configurar allowDuplicates e diversos valores para cabeçalhos corretamente. Se você tiver pulado alguma etapa, repita-a corretamente.Certifique-se de que seus proxies estejam funcionando como esperado, especialmente se houver uma lógica funcional para get e defina 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
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 em Message
Processadores, que usam o token correspondente de acordo com a sintaxe descrita em
Como configurar o Edge
Nesta seção, usaremos Expires
(e myheader
) como exemplo.
cabeçalho para o qual não queremos permitir duplicatas, conforme explicado abaixo:
-
Determinar o valor atual da propriedade
HTTPHeaderHEADER_NAME
para garantir que ele não esteja desativado para permitir cópias e valores múltiplos 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 de 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 situações:
- A propriedade é definida como em branco, e isso implica que o valor is foi 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 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 este é um cabeçalho NOT com uma configuração preexistente. Isso significa que que o cabeçalho específico possa ser enviado mais de uma vez (é permitido duplicar) como parte da Solicitação HTTP ou resposta HTTP para o Apigee Edge.
- A propriedade é definida com o valor
allowDuplicates, multivalued
, depois o significa que o valor é substituído explicitamente e esta é 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 permitido) como parte da solicitação ou resposta HTTP para a Apigee.
Exemplo de saída 1
Exemplo de saída no 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ído para permitir valores duplicados ou múltiplos no cabeçalhoExpires
.Amostra de saída 2
Exemplo 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 nenhum resultado, o que implica que a propriedade
HTTPHeader.myheader
é definido comoallowDuplicates, multiValued
por padrão. Isso também significa que a propriedade não é substituída pelo cabeçalho "myheader", - A propriedade é definida como em branco, e isso implica que o valor is foi 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 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 cópias e vários valores, como no Exemplo de saída 1 acima (cabeçalho com configuração pré-existente)
- 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 pré-existente)
Caso contrário, pule o restante das etapas nesta seção.
- Edite o seguinte arquivo. Se ele não existir, você poderá criá-lo.
/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 preexistente
Cenário 1: cabeçalho com configuração pré-existente:
conf_http_HTTPHeader.Expires=
Nenhuma configuração pré-existente
Cenário 2: não é um cabeçalho com 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, 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 de processadores de mensagens sem impacto no tráfego.
- Se você tiver mais de um processador de mensagens, repita as etapas acima em todas Processadores.
Como verificar se o cabeçalho está configurado para não permitir cópias e valores múltiplos
Nesta seção, explicamos como verificar se a propriedade
O HTTPHeader.HEADER_NAME
para um cabeçalho específico foi atualizado
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 atualizado.
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 foi definido com o novo valor como mostrados 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 pré-existente
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_NAME
I no processador de mensagens e depois no botão acima mostra o novo valor no arquivohttp.properties
. - O exemplo de resultado do comando acima depois da desativação
allowDuplicates
é o seguinte:Configuração preexistente
Cená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 pré-existente
Cená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 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 ainda aparecer para a propriedade
HTTPHeader.Expires (or HTTPHeader.myheader)
, verifique se você seguiu todas as etapas descritas em Como configurar allowDuplicates e diversos valores para cabeçalhos corretamente. Se você tiver pulado alguma etapa, repita-a corretamente.Certifique-se de que seus proxies estejam funcionando como esperado, especialmente se houver uma lógica funcional para receber e definir os cabeçalhos no proxy.
- Se mesmo assim não for possível modificar a propriedade, entre em contato com o suporte do Apigee Edge.