Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X. info
In base alla specifica HTTP RFC 7230, sezione 3.2.2: Ordine dei campi, Apigee Edge si aspetta che la richiesta HTTP del client o la risposta HTTP del server di backend non contengano la stessa intestazione passata più di una volta con valori uguali o diversi, a meno che l'intestazione specifica non abbia un'eccezione e sia consentito avere duplicati.
Per impostazione predefinita, Apigee Edge consente di passare duplicati e più valori alla maggior parte delle intestazioni HTTP. Tuttavia, non sono consentite alcune intestazioni elencate in Intestazioni che non possono avere duplicati e più valori. Pertanto:
- Visualizzerai
400 Bad Request
con il codice di erroreprotocol.http.DuplicateHeader
se il client invia una richiesta HTTP con un'intestazione particolare più di una volta o con più valori per le intestazioni HTTP che non sono consentite avere duplicati/più valori in Apigee Edge. - Analogamente, riceverai
502 Bad Gateway
con il codice di erroreprotocol.http.DuplicateHeader
se il server di backend invia una risposta HTTP con una determinata intestazione più di una volta o con più valori per le intestazioni HTTP che non possono avere duplicati o più valori in Apigee Edge
La soluzione consigliata per risolvere questi errori è correggere l'applicazione client e il server di backend in modo che non inviino intestazioni duplicate e rispettino la specifica RFC 7230, sezione 3.2.2: Ordine dei campi come spiegato nei seguenti playbook per la risoluzione dei problemi:
Tuttavia, in alcuni casi potresti voler aggiungere un'eccezione per includere duplicati e più valori per alcune intestazioni HTTP. In questi casi, puoi consentire intestazioni duplicate e più valori per una specifica intestazione HTTP impostando una proprietà HTTPHeader.HEADER_NAME
a livello di processore di messaggi.
Questo documento fornisce informazioni su questa proprietà, spiega come attivarla per evitare gli errori sopra menzionati e condivide le best practice in merito.
Proprietà dell'intestazione HTTP per consentire duplicati e più valori
Apigee Edge fornisce le due proprietà seguenti per controllare il comportamento di accettazione di duplicati e valori multipli per le intestazioni HTTP. Tieni presente che possono essere configurati solo nei processori di messaggi utilizzando la sintassi dei token descritta in Come configurare Edge.
Nome proprietà | Descrizione | Valori consentiti |
---|---|---|
HTTPHeader.ANY |
Questa proprietà indica se sono consentiti duplicati o più valori per tutte le intestazioni HTTP, incluse le intestazioni personalizzate inviate nell'ambito della richiesta HTTP effettuata dal client o della risposta HTTP inviata dal server di backend ad Apigee Edge. Valore predefinito:
|
|
|
Questa proprietà viene utilizzata per eseguire l'override del comportamento di un'intestazione specifica rispetto a quanto specificato da |
Come l'attributo precedente. |
Intestazioni che non possono contenere duplicati e più valori
Come spiegato in precedenza, Apigee Edge consente per impostazione predefinita duplicati e più valori per la maggior parte delle intestazioni HTTP. Questo perché la proprietà HTTPHeader.ANY
è
configurata con il valore multiValued, allowDuplicates.
Configurazione sovrascritta
Per alcune intestazioni specifiche, la configurazione predefinita viene sovrascritta utilizzando uno dei seguenti metodi:
HTTPHeader.HEADER_NAME=multiValued, allowDuplicates
Questa configurazione non modifica il comportamento predefinito. In altre parole, l'intestazione specifica può avere duplicati e più valori
.HTTPHeader.HEADER_NAME=
Questa configurazione modifica il comportamento predefinito. In altre parole, per l'intestazione specifica non sono consentiti duplicati e più valori.
Determinare le intestazioni che non possono avere duplicati e più valori
Questa sezione descrive come identificare quanto segue:
- Le intestazioni specifiche che non possono avere duplicati e valori multipli nella configurazione di Apigee Edge Private Cloud, e
- Le intestazioni specifiche con configurazione preesistente
Sul computer del processore di messaggi, cerca la proprietà
HTTPHeader.
nella directory/opt/apigee/edge-message-processor/conf
come mostrato di seguito:grep -ri "HTTPHeader." /opt/apigee/edge-message-processor/conf
Esempio di output:
# 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>
- Come spiegato nella sezione Configurazione sovrascritta,
prendi nota delle seguenti informazioni nell'output di esempio riportato sopra:
- L'intestazione HTTP
Connection
viene sovrascritta, ma è consentito avere duplicati e più valori - Le intestazioni HTTP
Host
eExpires
vengono sovrascritte e non è consentito avere duplicati e più valori - L'intestazione HTTP
Date
viene sovrascritta ed è consentita la presenza di duplicati, ma non di più valori - Tutte le intestazioni visualizzate qui (
Connection
,Host
,Expires
eDate
nel sample precedente) sono chiamate intestazioni con configurazione preesistente in questo documento.
- L'intestazione HTTP
Comportamento di Apigee Edge
La tabella seguente descrive il comportamento di Apigee Edge quando le intestazioni vengono inviate come duplicate e con più valori, a seconda di come le proprietà HTTPHeader
sono configurate sui processori di messaggi con un esempio HTTPHeader
di
test-header
.
Richiesta | HEADERS in uscita in base al valore di conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<Vuoto> | allowDuplicates | multiValued | allowDuplicates, multiValued (DEFAULT) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
Internamente abbiamo suddiviso
e viene generato l'errore |
All'interno, suddividiamo
ma poi il modulo originale viene inviato alla destinazione. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
protocol.http. |
test‑header=a test‑header=b |
Prima di iniziare
Prima di seguire i passaggi descritti in questo documento, assicurati di aver compreso la configurazione delle proprietà per Edge su Private Cloud, descritta in Come configurare Edge.
Configurazione di allowDuplicates e di più valori per le intestazioni
Come spiegato in Proprietà dell'intestazione HTTP per consentire duplicati e più valori,il valore della proprietà HTTPHeader.ANY = allowDuplicates,
multiValued
implica che tutte le intestazioni possono avere duplicati e più valori in Apigee Edge. Tuttavia, esistono alcune intestazioni i cui valori vengono sovrascritti esplicitamente per non consentire intestazioni duplicate o più valori utilizzando la proprietà HTTPHeader.HEADER_NAME
.
Questa sezione spiega come configurare la proprietà
HTTPHeader.HEADER_NAME
per consentire duplicati e più valori per qualsiasi
di queste intestazioni HTTP nei Message Processor, utilizzando il token corrispondente in base alla sintassi
descritta in Come configurare Edge.
In questa sezione, utilizzeremo Expires
(e myheader
) come intestazione di esempio per la quale vogliamo consentire duplicati e più valori, come spiegato di seguito:
-
Determina il valore corrente della proprietà
HTTPHeaderHEADER_NAME
per assicurarti che non sia già attivata per consentire duplicati e più valori utilizzando il seguente comando:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Ad esempio, se stai cercando di impostare la proprietà per l'intestazione
Expires
, controlla il valore corrente del token della proprietàHTTPHeader.Expires
nel Processore di messaggi:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
L'output del comando precedente restituisce uno dei seguenti risultati:
- Se la proprietà è vuota, significa che il valore viene sovrascritto (e questa è un'intestazione con configurazione preesistente) per NON consentire intestazioni duplicate e più valori. Ciò significa che non puoi inviare l'intestazione
Expires
più di una volta come parte di una richiesta HTTP o di una risposta HTTP ad Apigee. - Non ci sono hit per la proprietà specifica, ciò significa che il valore non viene sovrascritto (e questa NON è un'intestazione con una configurazione preesistente). Ciò significa che l'intestazione specifica può essere inviata più di una volta (sono consentiti duplicati) nell'ambito della richiesta HTTP o della risposta HTTP ad Apigee Edge.
- La proprietà è impostata con il valore
allowDuplicates, multiValued
, il che significa che il valore viene sovrascritto esplicitamente (e questa è un'intestazione con una configurazione preesistente). Ciò significa che l'intestazione specifica può essere inviata più di una volta (sono consentiti i duplicati) nell'ambito della richiesta HTTP o della risposta HTTP ad Apigee.
Esempio di output del comando di ricerca:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
L'output di esempio riportato sopra mostra che la proprietà
HTTPHeader.Expires
è impostata su vuoto. Ciò significa che la proprietà viene sovrascritta in modo da non consentire valori duplicati o multipli per l'intestazioneExpires
. - Se la proprietà è vuota, significa che il valore viene sovrascritto (e questa è un'intestazione con configurazione preesistente) per NON consentire intestazioni duplicate e più valori. Ciò significa che non puoi inviare l'intestazione
- Se noti che la proprietà corrispondente all'intestazione specifica è esplicitamente soprascritta per non consentire valori duplicati o multipli come nell'esempio di output riportato sopra, solo allora esegui i passaggi che seguono. Se non viene sovrascritta esplicitamente, ignora gli altri passaggi di questa sezione.
- Modifica. Se non esiste, puoi crearlo:
/opt/apigee/customer/application/message-processor.properties
Ad esempio, per aprire il file utilizzando vi, inserisci quanto segue:
vi /opt/apigee/customer/application/message-processor.properties
- Aggiungi una riga nel seguente formato:
conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
- Salva le modifiche.
Assicurati che il file delle proprietà sia di proprietà dell'utente
apigee
. In caso contrario, esegui il seguente comando:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
Riavvia il processore di messaggi:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Per il riavvio senza impatto sul traffico, consulta Riavvio graduale dei processori di messaggi senza impatto sul traffico.
- Se disponi di più processori di messaggi, ripeti i passaggi precedenti su tutti i processori di messaggi.
Verificare che l'intestazione sia configurata per avere duplicati e più valori
Questa sezione spiega come verificare che la proprietà
HTTPHeader.HEADER_NAME
per un'intestazione specifica sia stata aggiornata
correttamente per consentire i duplicati nei processori dei messaggi.
Utilizzeremo Expires
come intestazione di esempio e controlleremo se la proprietà corrispondente
HTTPHeader.Expires
è stata aggiornata.
Anche se utilizzi il token conf_http_HTTPHeader.Expires
per aggiornare il valore nel Processore messaggi, devi verificare se la proprietà effettiva HTTPHeader.Expires
è stata impostata con il nuovo valore.
- Nella macchina del processore di messaggi, cerca la proprietà
HTTPHeader.HEADER_NAME
nella directory/opt/apigee/edge-message-processor/conf
e controlla se è stata impostata con il nuovo valore, come mostrato di seguito:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Ad esempio, se vuoi verificare che la proprietà
HTTPHeader.Expires
sia impostata con il nuovo valore, esegui il seguente comando:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- Se il nuovo valore viene impostato correttamente per
HTTPHeader.HEADER_NAME
nel processore di messaggi, il comando riportato sopra mostra il nuovo valore nel filehttp.properties
. Il risultato di esempio del comando riportato sopra dopo aver configurato
allowDuplicates
emultiValued
è il seguente:/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- Nell'output di esempio riportato sopra, nota che la proprietà
HTTPHeader.Expires
è stata impostata con il nuovo valoreallowDuplicates, multiValued
inhttp.properties
. Questo indica che il comportamento per consentire duplicati e valori multipli inHTTPHeader
è stato configurato correttamente nel processore di messaggi. - Se continui a vedere il vecchio valore per la proprietà
HTTPHeader.HEADER_NAME
, verifica di aver seguito correttamente tutti i passaggi descritti in Configurare allowDuplicates e più valori per le intestazioni. Se hai saltato qualche passaggio, ripeti tutti i passaggi correttamente.Assicurati che i proxy funzionino come previsto, in particolare se esiste una logica funzionale per recuperare e impostare le intestazioni nel proxy.
- Se non riesci ancora a modificare la proprietà, contatta l'assistenza Apigee Edge.
Disattivazione di allowDuplicates per le intestazioni
Questa sezione spiega come configurare la proprietà HTTPHeader.{Headername}
in modo che non consenta duplicati e più valori per un'intestazione HTTP specifica nei processori di messaggi, utilizzando il token corrispondente in base alla sintassi descritta in Come configurare Edge.
In questa sezione, utilizzeremo Expires
(e myheader
) come intestazione di esempio per la quale non vogliamo consentire duplicati, come spiegato di seguito:
-
Determina il valore corrente della proprietà
HTTPHeaderHEADER_NAME
per assicurarti che non sia già disattivata per consentire duplicati e più valori utilizzando il seguente comando:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Ad esempio, se stai cercando di impostare la proprietà per l'intestazione
Expires
, controlla il valore corrente del token della proprietàHTTPHeader.Expires
in Message Processor:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
L'output del comando precedente restituisce uno dei seguenti risultati:
- Se la proprietà è impostata su un valore vuoto, si presume che il valore ivenga sovrascritto in modo da NON
consentire intestazioni duplicate e più valori. Ciò significa che non puoi inviare
l'intestazione
Expires
più di una volta come parte della richiesta HTTP o della risposta HTTP ad Apigee. - Se non ci sono hit per la proprietà specifica, significa che il valore non è sovrascritto e che si tratta di un'intestazione NOT con configurazione preesistente. Ciò significa che l'intestazione specifica può essere inviata più di una volta (sono consentiti duplicati) come parte della richiesta HTTP o della risposta HTTP ad Apigee Edge.
- La proprietà è impostata con il valore
allowDuplicates, multiValued
, ciò significa che il valore viene sovrascritto esplicitamente e questa è una configurazione esistente. Tuttavia, ciò significa che l'intestazione specifica può essere inviata più di una volta (sono consentiti duplicati) nell'ambito della richiesta HTTP o della risposta HTTP ad Apigee.
Output di esempio 1
Output di esempio n. 1 del comando di ricerca:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
L'output di esempio mostra che la proprietà
HTTPHeader.Expires
è impostata suallowDuplicates, multiValued
. Ciò significa che la proprietà viene sovrascritta per consentire valori duplicati o più multipli per l'intestazioneExpires
.Esempio di output 2
Comando di esempio e output 2 del comando di ricerca
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
L'output di esempio non mostra alcun output, il che implica che la proprietà
HTTPHeader.myheader
è impostata suallowDuplicates, multiValued
per impostazione predefinita. Ciò implica anche che la proprietà non viene sovrascritta per l'intestazione myheader. - Se la proprietà è impostata su un valore vuoto, si presume che il valore ivenga sovrascritto in modo da NON
consentire intestazioni duplicate e più valori. Ciò significa che non puoi inviare
l'intestazione
- Se noti uno dei seguenti problemi, esegui il resto dei passaggi di questa sezione:
- La proprietà corrispondente all'intestazione specifica viene sovrascritta per consentire duplicati e più valori come nell'output di esempio n. 1 riportato sopra (intestazione con configurazione preesistente)
- Non ci sono hit per la proprietà corrispondente all'intestazione specifica, come nell'output di esempio n. 2 riportato sopra (non un'intestazione con configurazione preesistente)
In caso contrario, salta il resto dei passaggi di questa sezione.
- Modifica il seguente file. Se non esiste, puoi crearlo.
/opt/apigee/customer/application/message-processor.properties
Ad esempio, per aprire il file utilizzando vi, inserisci quanto segue:
vi /opt/apigee/customer/application/message-processor.properties
- Aggiungi una riga nel seguente formato al file delle proprietà:
Configurazione esistente
Scenario 1: intestazione con configurazione preesistente:
conf_http_HTTPHeader.Expires=
Nessuna configurazione preesistente
Scenario 2: non è un'intestazione con configurazione preesistente:
conf/http.properties+HTTPHeader.myheader=
- Salva le modifiche.
- Assicurati che il file delle proprietà sia di proprietà dell'utente
apigee
. In caso contrario, esegui questo comando:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Riavvia il processore di messaggi:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Per il riavvio senza impatto sul traffico, consulta Riavvio graduale dei processori di messaggi senza impatto sul traffico.
- Se hai più di un Message Processor, ripeti i passaggi precedenti su tutti i Message Processor.
Verificare che l'intestazione sia configurata per non consentire duplicati e più valori
Questa sezione spiega come verificare che la proprietà
HTTPHeader.HEADER_NAME
per un'intestazione specifica sia stata aggiornata
correttamente per non consentire duplicati negli elaboratori di messaggi.
Utilizzeremo Expires
(e myheader
) come intestazione di esempio e verificheremo se la proprietà corrispondente HTTPHeader.Expires
(e HTTPHeader.myheader
) è stata aggiornata.
Nella macchina del processore di messaggi, cerca la proprietà
HTTPHeader.HEADER_NAME
nella directory/opt/apigee/edge-message- processor/conf
e controlla se è stata impostata con il nuovo valore, come mostrato di seguito:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Ad esempio, se vuoi verificare che la proprietà
HTTPHeader.Expires
sia impostata con il nuovo valore, puoi eseguire questo comando:Configurazione esistente
grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
Nessuna configurazione preesistente
grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
- Se il nuovo valore dell'intestazione HTTP viene impostato correttamente per
HTTPHeader.HEADER_NAME
I nel Message Processor, il comando riportato sopra mostra il nuovo valore nel filehttp.properties
. - Il risultato di esempio del comando precedente dopo aver disattivato
allowDuplicates
è il seguente:Configurazione esistente
Scenario 1: intestazione della scadenza (con configurazione preesistente)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Nessuna configurazione preesistente
Scenario 2: intestazione myheader (non un'intestazione con una configurazione preesistente)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
- Nell'output di esempio riportato sopra, tieni presente che la proprietà
HTTPHeader.Expires
( eHTTPHeader.myheader
) è stata impostata con il nuovo valore {blank}
inhttp.properties
. Ciò indica che il comportamento che consente i duplicati e più valori per l'intestazione HTTP specificaExpires
(emyheader
) è stato disattivato correttamente nel Message Processor. Se vedi ancora il valore precedente per la proprietà
HTTPHeader.Expires (or HTTPHeader.myheader)
, verifica di aver seguito correttamente tutti i passaggi descritti in Configurare allowDuplicas e più valori per le intestazioni. Se hai saltato qualche passaggio, ripeti tutti i passaggi correttamente.Assicurati che i proxy funzionino come previsto, in particolare se esiste una logica funzionale per recuperare e impostare le intestazioni nel proxy.
- Se non riesci ancora a modificare la proprietà, contatta l'assistenza Apigee Edge.