Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Come da specifica HTTP RFC 7230, sezione 3.2.2: Ordine dei campi, Apigee Edge prevede che la richiesta HTTP dal client o la risposta HTTP dal 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 non sia consentito avere duplicati.
Per impostazione predefinita, Apigee Edge consente di passare duplicati e più valori alla maggior parte delle intestazioni HTTP. Tuttavia, non consente determinate intestazioni elencate in Intestazioni per le quali non sono consentiti duplicati e più valori. Pertanto:
- Riceverai
400 Bad Requestcon il codice di erroreprotocol.http.DuplicateHeaderse il client invia una richiesta HTTP con una particolare intestazione più di una volta o con più valori per le intestazioni HTTP che non possono avere duplicati/più valori in Apigee Edge. - Analogamente, riceverai
502 Bad Gatewaycon il codice di erroreprotocol.http.DuplicateHeaderse 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 un'intestazione HTTP specifica impostando una proprietà HTTPHeader.HEADER_NAME a
livello di processore di messaggi.
Questo documento fornisce informazioni su questa proprietà, spiega come abilitarla per evitare gli errori sopra menzionati e condivide le best practice in merito.
Proprietà delle intestazioni HTTP per consentire duplicati e più valori
Apigee Edge fornisce le seguenti due proprietà per controllare il comportamento di autorizzazione di duplicati e più valori per le intestazioni HTTP. Tieni presente che questi possono essere configurati solo sui processori di messaggi utilizzando la sintassi dei token spiegata 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 ignorare il comportamento di un'intestazione specifica rispetto a quanto specificato da |
Come l'attributo precedente. |
Intestazioni per cui non sono consentiti duplicati e più valori
Come spiegato in precedenza, Apigee Edge consente duplicati e più valori per la maggior parte delle intestazioni HTTP
per impostazione predefinita. 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, allowDuplicatesQuesta configurazione non modifica il comportamento predefinito. ovvero l'intestazione specifica può avere duplicati e più valori
.HTTPHeader.HEADER_NAME=Questa configurazione modifica il comportamento predefinito. ovvero l'intestazione specifica non può avere duplicati e più valori.
Determinare le intestazioni per le quali non sono consentiti duplicati e più valori
Questa sezione descrive come identificare:
- Le intestazioni specifiche che non possono avere duplicati e più valori nella configurazione di Apigee Edge Private Cloud e
- Le intestazioni specifiche con configurazione preesistente
Sulla macchina processore di messaggi, cerca la proprietà
HTTPHeader.nella directory/opt/apigee/edge-message-processor/confcome 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
Connectionviene sovrascritta, ma è consentito avere duplicati e più valori - Le intestazioni HTTP
HosteExpiresvengono sovrascritte e non possono avere duplicati e più valori - L'intestazione HTTP
Dateviene sovrascritta e può avere duplicati, ma non può avere più valori - Tutte le intestazioni visualizzate qui (
Connection,Host,ExpireseDatenell'esempio precedente) sono denominate 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
duplicati e con più valori a seconda di come sono configurate le proprietà HTTPHeader
sui Message Processor con un esempio HTTPHeader di
test-header.
| Richiesta | HEADERS in uscita in base al valore di conf/http.properties+HTTPHeader.test-header= | |||
|---|---|---|---|---|
| <Blank> | allowDuplicates | multiValued | allowDuplicates, multiValued (PREDEFINITO) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
Internamente, dividiamo
e poi viene generato l'errore |
Internamente, dividiamo
ma poi il modulo originale viene inviato alla destinazione. |
test‑header=atest‑header=b |
protocol.http. |
test‑header=atest‑header=b |
protocol.http. |
test‑header=atest‑header=b |
Prima di iniziare
Prima di utilizzare i passaggi descritti in questo documento, assicurati di comprendere 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à delle intestazioni 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 in modo esplicito per non
consentire intestazioni duplicate o più valori per l'utilizzo della proprietà
HTTPHeader.HEADER_NAME.
Questa sezione spiega come configurare la proprietà
HTTPHeader.HEADER_NAME per consentire duplicati e più valori per qualsiasi
intestazione HTTP sui 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 cui vogliamo consentire duplicati e più valori, come spiegato di seguito:
-
Determina il valore corrente della proprietà
HTTPHeaderHEADER_NAMEper assicurarti che non sia già abilitata 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 attuale del token della proprietàHTTPHeader.Expiresnel processore di messaggi:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
L'output del comando precedente genera uno dei seguenti risultati:
- La proprietà è impostata su vuoto, il che implica che il valore viene sovrascritto (e questo
è un'intestazione con una configurazione preesistente) per NON consentire intestazioni duplicate e più
valori. ovvero non è consentito inviare l'intestazione
Expirespiù 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 NON si tratta di un'intestazione con una configurazione preesistente). Ciò significa che l'intestazione specifica può essere inviata più di una volta (i duplicati sono consentiti) come parte della richiesta HTTP o della risposta HTTP a Apigee Edge.
- La proprietà è impostata con il valore
allowDuplicates, multiValued, il che significa che il valore è sovrascritto in modo esplicito (e questa è un'intestazione con una configurazione preesistente). Ciò significa che l'intestazione specifica può essere inviata più di una volta (i duplicati sono consentiti) come parte della richiesta HTTP o della risposta HTTP ad Apigee.
Output di esempio 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. - La proprietà è impostata su vuoto, il che implica che il valore viene sovrascritto (e questo
è un'intestazione con una configurazione preesistente) per NON consentire intestazioni duplicate e più
valori. ovvero non è consentito inviare l'intestazione
- Se noti che la proprietà corrispondente all'intestazione specifica è sovrascritta esplicitamente per non consentire valori duplicati o multipli come nell'output di esempio riportato sopra, solo allora esegui i seguenti passaggi. Se non viene sovrascritta in modo esplicito, salta i passaggi rimanenti 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 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 riavviare senza influire sul traffico, consulta Riavvio graduale dei processori di messaggi senza influire sul traffico.
- Se hai più di un processore di messaggi, ripeti i passaggi precedenti su tutti i processori di messaggi.
Verifica 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 di 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 di messaggi, devi verificare se la proprietà effettiva HTTPHeader.Expires è stata impostata con il nuovo valore.
- Sulla macchina processore di messaggi, cerca la proprietà
HTTPHeader.HEADER_NAMEnella directory/opt/apigee/edge-message-processor/confe 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.Expiressia 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_NAMEsul processore di messaggi, il comando precedente mostra il nuovo valore nel filehttp.properties. Il risultato di esempio del comando precedente dopo aver configurato
allowDuplicatesemultiValuedè il seguente:/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
- Nell'output di esempio riportato sopra, tieni presente che la proprietà
HTTPHeader.Expiresè stata impostata con il nuovo valoreallowDuplicates, multiValuedinhttp.properties. Ciò indica che il comportamento per consentire duplicati e più valori inHTTPHeaderè configurato correttamente nel processore di messaggi. - Se continui a visualizzare il vecchio valore per la proprietà
HTTPHeader.HEADER_NAME, verifica di aver seguito correttamente tutti i passaggi descritti in Configurazione di allowDuplicates e di più valori per le intestazioni. Se hai saltato qualche passaggio, ripeti correttamente tutti i passaggi.Assicurati che i proxy funzionino come previsto, soprattutto se esiste una logica funzionale per recuperare e impostare le intestazioni nel proxy.
- Se ancora non riesci a modificare la proprietà, contatta l'assistenza Apigee Edge.
Disattivazione di allowDuplicates per le intestazioni
Questa sezione spiega come configurare la proprietà HTTPHeader.{Headername} per
non consentire duplicati e valori multipli per un'intestazione HTTP specifica nei Message
Processors, 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 cui non vogliamo consentire i duplicati, come spiegato di seguito:
-
Determina il valore corrente della proprietà
HTTPHeaderHEADER_NAMEper 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 attuale del token della proprietàHTTPHeader.Expiresnel processore di messaggi:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
L'output del comando precedente genera uno dei seguenti risultati:
- La proprietà è impostata su vuoto, il che implica che il valore is viene sovrascritto su NON
per consentire intestazioni duplicate e più valori. ovvero non è consentito inviare
l'intestazione
Expirespiù di una volta nell'ambito 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 questa è un'intestazione NOT con una configurazione preesistente. Ciò significa che l'intestazione specifica può essere inviata più di una volta (i duplicati sono consentiti) come parte della richiesta HTTP o della risposta HTTP ad Apigee Edge.
- La proprietà è impostata con il valore
allowDuplicates, multiValued, il che significa che questo valore è sovrascritto in modo esplicito e questa è una configurazione esistente. Tuttavia, ciò significa che l'intestazione specifica può essere inviata più di una volta (i duplicati sono consentiti) come parte della richiesta HTTP o della risposta HTTP ad Apigee.
Esempio di output n. 1
Esempio di output 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 multipli per l'intestazioneExpires.Esempio di output n. 2
Comando e output di esempio n. 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, multiValuedper impostazione predefinita. Ciò implica anche che la proprietà non viene sovrascritta per l'intestazione myheader, - La proprietà è impostata su vuoto, il che implica che il valore is viene sovrascritto su NON
per consentire intestazioni duplicate e più valori. ovvero non è consentito inviare
l'intestazione
- Se noti uno dei seguenti problemi, esegui i passaggi rimanenti di questa sezione:
- La proprietà corrispondente all'intestazione specifica viene sovrascritta per consentire duplicati e più valori come nell'output di esempio n. 1 sopra (intestazione con configurazione preesistente)
- Non sono presenti hit per la proprietà corrispondente all'intestazione specifica, come nell'output di esempio n. 2 riportato sopra (non un'intestazione con una configurazione preesistente).
In caso contrario, salta i passaggi rimanenti 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 preesistente
Scenario 1: intestazione con configurazione preesistente
conf_http_HTTPHeader.Expires=
Nessuna configurazione preesistente
Scenario 2: non è un'intestazione con una 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 riavviare senza influire sul traffico, consulta Riavvio graduale dei processori di messaggi senza influire sul traffico.
- Se hai più di un processore di messaggi, ripeti i passaggi precedenti su tutti i processori di messaggi.
Verifica che l'intestazione sia configurata in modo da 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 in modo da non consentire i duplicati nei Message Processor.
Utilizzeremo Expires (e myheader) come intestazione di esempio e verificheremo se
la proprietà corrispondente HTTPHeader.Expires (e
HTTPHeader.myheader) è stata aggiornata.
Sulla macchina processore di messaggi, cerca la proprietà
HTTPHeader.HEADER_NAMEnella directory/opt/apigee/edge-message- processor/confe 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.Expiressia impostata con il nuovo valore, puoi eseguire il seguente comando:Configurazione preesistente
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_NAMEI sul processore di messaggi, il comando precedente mostra il nuovo valore nel filehttp.properties. - Il risultato di esempio del comando precedente dopo aver disattivato
allowDuplicatesè il seguente:Configurazione preesistente
Scenario 1: intestazione Scade (intestazione con configurazione preesistente)
/opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
Nessuna configurazione preesistente
Scenario 2: intestazione myheader (non un'intestazione con 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 per consentire duplicati e più valori per l'intestazione HTTP specificaExpires(emyheader) è stato disattivato correttamente sul processore di messaggi. Se continui a visualizzare il vecchio valore per la proprietà
HTTPHeader.Expires (or HTTPHeader.myheader), verifica di aver seguito correttamente tutti i passaggi descritti in Configurazione di allowDuplicates e di più valori per le intestazioni. Se hai saltato qualche passaggio, ripeti correttamente tutti i passaggi.Assicurati che i proxy funzionino come previsto, soprattutto se esiste una logica funzionale per ottenere e impostare le intestazioni nel proxy.
- Se ancora non riesci a modificare la proprietà, contatta l'assistenza Apigee Edge.