Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
Secondo la specifica HTTP RFC 7230, sezione 3.2.2: Ordine dei campi, Apigee Edge si aspetta che la richiesta HTTP o la risposta HTTP del server di backend non contengono la stessa intestazione che viene passata. più di una volta con valori uguali o diversi, a meno che l'intestazione specifica non abbia un'eccezione e può avere duplicati.
Per impostazione predefinita, Apigee Edge consente il trasferimento di duplicati e più valori alla maggior parte dei intestazioni. Tuttavia, non sono consentite alcune intestazioni elencate in Intestazioni non autorizzate ad avere duplicati e valori multipli. Pertanto:
- Riceverai
400 Bad Request
con il codice di erroreprotocol.http.DuplicateHeader
se il client invia una richiesta HTTP con un più di una volta o con più valori per le intestazioni HTTP che non sono consentite hanno duplicati/più valori in Apigee Edge. - Analogamente, riceverai
502 Bad Gateway
con un 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 siano autorizzati ad avere duplicati o più valori in Apigee Edge
La soluzione consigliata per risolvere questi errori è correggere l'applicazione client e server di backend per non inviare intestazioni duplicate e rispettare le specifiche RFC 7230, sezione 3.2.2: Ordine sul campo, come spiegato nei seguenti playbook per la risoluzione dei problemi:
Tuttavia, in alcuni casi potresti voler aggiungere un'eccezione per includere duplicati e più
per alcune intestazioni HTTP. In questi casi, puoi consentire intestazioni duplicate e più
per un'intestazione HTTP specifica impostando una proprietà HTTPHeader.HEADER_NAME
su
il livello del processore di messaggi.
Questo documento fornisce informazioni su questa proprietà e spiega come abilitarla per evitare gli errori citati in precedenza e condividere le relative best practice.
Proprietà dell'intestazione HTTP per consentire duplicati e più valori
Apigee Edge fornisce le seguenti due proprietà per controllare il comportamento di autorizzazione duplicati e più valori per le intestazioni HTTP. Tieni presente che possono essere configurate solo nella Processori di messaggi che utilizzano la sintassi del token descritta in Come configurare Edge.
Nome proprietà | Descrizione | Valori consentiti |
---|---|---|
HTTPHeader.ANY |
Questa proprietà indica se sono consentiti duplicati o più valori per tutti i messaggi HTTP Intestazioni, incluse quelle personalizzate inviate come parte di una richiesta HTTP effettuata dal client o da HTTP risposta inviata dal server di backend ad Apigee Edge. Valore predefinito:
|
|
|
Questa proprietà viene utilizzata per sostituire il comportamento di un'intestazione specifica rispetto
specificato da |
Come l'attributo precedente. |
Intestazioni non autorizzate ad avere duplicati e valori multipli
Come spiegato in precedenza, Apigee Edge consente l'utilizzo di duplicati e valori multipli per la maggior parte dei
intestazioni per impostazione predefinita. Questo perché la proprietà HTTPHeader.ANY
è
configurato con il valore multivalued, allowDuplicate.
Configurazione sovrascritta
Per alcune intestazioni specifiche, la configurazione predefinita viene sovrascritta utilizzando uno dei seguenti metodi metodo:
HTTPHeader.HEADER_NAME=multivalued, allowDuplicate
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. Vale a dire che lo specifico L'intestazione non può avere duplicati e più valori.
Determinazione delle intestazioni che non possono avere duplicati e valori multipli
In questa sezione viene descritto come identificare quanto segue:
- Le intestazioni specifiche non possono avere duplicati e più valori su la configurazione del cloud privato Apigee Edge
- Le intestazioni specifiche con configurazione preesistente
Sul computer dell'elaboratore di messaggi, cerca la proprietà
HTTPHeader.
nel 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 sopra riportato:
- .
- L'intestazione HTTP
Connection
viene sovrascritta, ma può avere duplicati e più valori - Le intestazioni HTTP
Host
eExpires
vengono sovrascritte e non possono avere duplicati e più valori - L'intestazione HTTP
Date
viene sovrascritta e può avere duplicati ma non possono avere più valori - Tutte le intestazioni visualizzate qui (
Connection
,Host
,Expires
eDate
nell'esempio 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
duplicati e con più valori a seconda di come sono le proprietà HTTPHeader
configurate sui processori di messaggi con un HTTPHeader
di esempio
test-header
.
Richiesta | INTESTAZIONI in uscita basate sul valore di conf/http.properties+HTTPHeader.test-header= | |||
---|---|---|---|---|
<Vuoto> | allowDuplicate | multiValued | allowDuplica, a più valori (PREDEFINITO) | |
test‑header=a,b |
test‑header=a,b |
test‑header=a,b |
Internamente abbiamo suddiviso
e viene restituito l'errore |
Internamente abbiamo suddiviso
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 utilizzare i passaggi descritti in questo documento, assicurati di aver compreso il funzionamento della configurazione delle proprietà per Edge on Private Cloud, descritto in Come configurare Edge.
Configurazione di allowDuplicas e più valori per le intestazioni
Come spiegato nelle 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 in modo da non
consentire intestazioni duplicate o più valori per questo utilizzando la proprietà
HTTPHeader.HEADER_NAME
.
Questa sezione spiega come configurare la proprietà
HTTPHeader.HEADER_NAME
per consentire duplicati e valori multipli per qualsiasi
come intestazioni HTTP sui processori di messaggi, utilizzando il token corrispondente in base alla sintassi
descritto in Come configurare Edge.
In questa sezione useremo Expires
(e myheader
) come esempio
per cui vogliamo consentire duplicati e più valori, come spiegato di seguito:
-
Determina il valore corrente della proprietà
HTTPHeaderHEADER_NAME
per assicurarti che non sia già abilitato per consentire duplicati e valori multipli utilizzando 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 tokenHTTPHeader.Expires
della proprietà nella sezione Processore: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 è sovrascritto (e questo
è un'intestazione con una configurazione preesistente) per NON consentire intestazioni duplicate e più
e i relativi 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. - Non ci sono hit per la proprietà specifica, significa che il valore non è sovrascritta (e NON si tratta di un'intestazione con configurazione preesistente). Ciò significa che l'intestazione specifica possa essere inviata più di una volta (sono consentiti duplicati) nell'ambito la richiesta HTTP o la risposta HTTP ad Apigee Edge.
- La proprietà è impostata con il valore
allowDuplicates, multivalued
, quindi significa che il valore viene sovrascritto esplicitamente (e questa è un'intestazione con configurazione preesistente). Ciò significa che l'intestazione specifica può essere inviata una sola volta (sono consentiti duplicati) come parte 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 per non consentire duplicati o più valori per l'intestazioneExpires
. - Se la proprietà è vuota, significa che il valore è sovrascritto (e questo
è un'intestazione con una configurazione preesistente) per NON consentire intestazioni duplicate e più
e i relativi valori. Ciò significa che non puoi inviare l'intestazione
- Se noti che la proprietà corrispondente all'intestazione specifica è esplicitamente sovrascritto a non consentire valori duplicati o multipli, come nell'esempio precedente, solo allora segui questi passaggi. Se non è esplicitamente sovrascritta, quindi 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.
Verifica 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 impatto sul traffico, consulta Riavvio in sequenza dei processori di messaggi senza impatto sul traffico.
- Se utilizzi più di un processore di messaggi, ripeti i passaggi precedenti su tutte Processori di messaggi.
La verifica dell'intestazione è configurata in modo da avere duplicati e più valori
Questa sezione spiega come verificare che la proprietà
È stato aggiornato HTTPHeader.HEADER_NAME
per un'intestazione specifica
consentire duplicati nei processori di messaggi.
Utilizzeremo Expires
come intestazione di esempio e verificheremo se la proprietà corrispondente
HTTPHeader.Expires
è stato aggiornato.
Anche se utilizzi il token conf_http_HTTPHeader.Expires
per aggiornare il valore
al processore di messaggi, devi verificare se la proprietà effettiva HTTPHeader.Expires
sia stato impostato
con il nuovo valore.
- Cerca la proprietà sul computer
HTTPHeader.HEADER_NAME
in directory/opt/apigee/edge-message-processor/conf
e controlla se è sia stato impostato 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, quindi esegui questo comando:grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
- Se il nuovo valore è stato impostato correttamente per
HTTPHeader.HEADER_NAME
on il processore di messaggi, il comando precedente mostra il nuovo valore nellahttp.properties
file. Il risultato di esempio del comando precedente dopo la configurazione
allowDuplicates
emultiValued
sono i seguenti:/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 impostato con il nuovo valoreallowDuplicates, multiValued
inhttp.properties
. Ciò indica che il comportamento di consentire duplicati e più i valori inHTTPHeader
sono stati configurati correttamente nel processore di messaggi. - Se visualizzi ancora il valore precedente per la proprietà
HTTPHeader.HEADER_NAME
, quindi verifica di aver seguito tutti i passaggi descritti nella Configura correttamente allowDuplicas e più valori per le intestazioni. Se hai saltato qualche passaggio, ripeti tutti i passaggi correttamente.Assicurati che i proxy funzionino come previsto, soprattutto se è presente una logica funzionale per get e imposta le intestazioni nel proxy.
- Se non riesci ancora a modificare la proprietà, contatta l'assistenza Apigee Edge
Disattivazione di allowDuplicas per le intestazioni
Questa sezione spiega come configurare la proprietà HTTPHeader.{Headername}
in
non consentire duplicati e più valori per un'intestazione HTTP specifica nel messaggio
Processori, che utilizzano il token corrispondente in base alla sintassi descritta in
Come configurare Edge.
In questa sezione useremo Expires
(e myheader
) come esempio
per cui non vogliamo consentire duplicati, come spiegato di seguito:
-
Determina il valore corrente della proprietà
HTTPHeaderHEADER_NAME
per assicurarti che non sia già disattivato e 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 tokenHTTPHeader.Expires
della proprietà 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 è sovrascritto in NOT
per consentire intestazioni e valori multipli duplicati. Questo significa che non ti è consentito inviare
intestazione
Expires
più volte come parte della richiesta HTTP o della risposta HTTP ad Apigee. - Non ci sono hit per la proprietà specifica, significa che il valore non è sovrascritta e questa è un'intestazione NOT con configurazione preesistente. Ciò significa che l'intestazione specifica possa essere inviata più di una volta (sono consentiti duplicati) nell'ambito della Richiesta HTTP o risposta HTTP ad Apigee Edge.
- La proprietà è impostata con il valore
allowDuplicates, multivalued
, quindi significa che il valore viene sovrascritto esplicitamente e che questa è una configurazione esistente. Tuttavia, ciò significa che l'intestazione specifica può essere inviata più di una volta (i duplicati vengono consentiti) 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à è sovrascritta per consentire valori duplicati o multipli per l'intestazioneExpires
.Output di esempio 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
è impostato suallowDuplicates, multiValued
per impostazione predefinita. Ciò implica anche che la proprietà non viene sovrascritta per l'intestazione myheader, - Se la proprietà è vuota, significa che il valore è sovrascritto in NOT
per consentire intestazioni e valori multipli duplicati. Questo significa che non ti è consentito inviare
intestazione
- Se noti una delle seguenti condizioni, esegui gli altri passaggi della 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 Esempio di output 2 riportato sopra (non un'intestazione con configurazione preesistente)
In caso contrario, salta gli altri 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 preesistente
Scenario 1: intestazione con configurazione preesistente:
conf_http_HTTPHeader.Expires=
Nessuna configurazione preesistente
Scenario 2: nessuna intestazione con una configurazione preesistente
conf/http.properties+HTTPHeader.myheader=
- Salva le modifiche.
- Verifica 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 impatto sul traffico, consulta Riavvio in sequenza dei processori di messaggi senza impatto sul traffico.
- Se utilizzi più di un processore di messaggi, ripeti i passaggi precedenti su tutte le Processori.
La verifica dell'intestazione è configurata in modo da non consentire duplicati e più valori
Questa sezione spiega come verificare che la proprietà
È stato aggiornato HTTPHeader.HEADER_NAME
per un'intestazione specifica
per non consentire duplicati nei processori di messaggi.
Utilizzeremo Expires
(e myheader
) come intestazione di esempio e verificheremo se
la proprietà corrispondente HTTPHeader.Expires
(e
HTTPHeader.myheader
) è stato aggiornato.
Cerca la proprietà sul computer
HTTPHeader.HEADER_NAME
nella directory/opt/apigee/edge-message- processor/conf
e controllare se è stato impostato con il nuovo valore come mostrato di seguito:grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
Ad esempio, se vuoi controllare che la proprietà
HTTPHeader.Expires
sia impostata con il nuovo valore, puoi eseguire questo 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 è stato impostato correttamente
HTTPHeader.HEADER_NAME
I sul processore di messaggi, poi mostra il nuovo valore nel filehttp.properties
. - Il risultato di esempio del comando precedente dopo che è stato disabilitato
allowDuplicates
è il seguente:Configurazione preesistente
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, nota che la proprietà
HTTPHeader.Expires
( eHTTPHeader.myheader
) è stato impostato con il nuovo valore {blank}
inhttp.properties
. Ciò indica che il comportamento di consentire duplicati più valori per l'intestazione HTTP specificaExpires
(emyheader
) è stato disabilitato correttamente sul processore di messaggi. Se visualizzi ancora il valore precedente per la proprietà
HTTPHeader.Expires (or HTTPHeader.myheader)
, verifica di aver seguito tutti i passaggi descritti in Configurazione di allowDuplicas e più valori per le intestazioni in modo corretto. Se hai saltato qualche passaggio, ripeti tutti i passaggi correttamente.Assicurati che i proxy funzionino come previsto, soprattutto se è presente una logica funzionale per ottenere e impostare le intestazioni nel proxy.
- Se non riesci ancora a modificare la proprietà, contatta l'assistenza Apigee Edge.