Configurare gli elaboratori dei messaggi per consentire intestazioni duplicate

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 errore protocol.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 errore protocol.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:

multivalued, allowDuplicate,

  1. blank: non sono consentiti valori duplicati e più valori per le intestazioni HTTP.
  2. multiValued: suddividi l'intestazione a più valori in più intestazioni. Sono consentiti più valori per le intestazioni HTTP, ma non sono consentiti duplicati. Il valore multiValued è abilitato, il che implica che test-header=a,b verrà convertito in test-header=a e test-header=b.
  3. allowDuplicate: consente più intestazioni HTTP (duplicate) con lo stesso nome.
  4. multivalued, allowDuplicate: sia i valori multipli sia i duplicati sono consentito per le intestazioni HTTP.

HTTPHeader.HEADER_NAME

Questa proprietà viene utilizzata per sostituire il comportamento di un'intestazione specifica rispetto specificato da HTTPHeader.ANY

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.

di Gemini Advanced.

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
  1. 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>
    
  2. Come spiegato nella sezione Configurazione sovrascritta, prendi nota delle seguenti informazioni nell'output di esempio sopra riportato:
      .
    1. L'intestazione HTTP Connection viene sovrascritta, ma può avere duplicati e più valori
    2. Le intestazioni HTTP Host e Expires vengono sovrascritte e non possono avere duplicati e più valori
    3. L'intestazione HTTP Date viene sovrascritta e può avere duplicati ma non possono avere più valori
    4. Tutte le intestazioni visualizzate qui (Connection, Host, Expires e Date nell'esempio precedente) sono chiamate intestazioni con configurazione preesistente in questo documento.
    di Gemini Advanced.

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

protocol.http.
DuplicateHeader

Internamente abbiamo suddiviso test-header=a,b in:

  • test-header=a e
  • test-header=b,

e viene restituito l'errore DuplicateHeader.

test‑header=a,b

Internamente abbiamo suddiviso test-header=a,b in:

  • test-header=a e
  • test-header=b,

ma poi il modulo originale viene inviato alla destinazione.

test‑header=a
test‑header=b
protocol.http.
DuplicateHeader
test‑header=a
test‑header=b
protocol.http.
DuplicateHeader
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:

  1. 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 token HTTPHeader.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:

    1. 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.
    2. 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.
    3. 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'intestazione Expires.

  2. 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.
  3. 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
    
  4. Aggiungi una riga nel seguente formato:
    conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
    
  5. Salva le modifiche.
  6. 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
    
  7. 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.

  8. 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.

  1. 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
    
  2. Se il nuovo valore è stato impostato correttamente per HTTPHeader.HEADER_NAME on il processore di messaggi, il comando precedente mostra il nuovo valore nella http.properties file.
  3. Il risultato di esempio del comando precedente dopo la configurazione allowDuplicates e multiValued sono i seguenti:

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
    
  4. Nell'output di esempio riportato sopra, nota che la proprietà HTTPHeader.Expires è stata impostato con il nuovo valore allowDuplicates, multiValued in http.properties. Ciò indica che il comportamento di consentire duplicati e più i valori in HTTPHeader sono stati configurati correttamente nel processore di messaggi.
  5. 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.

  6. 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:

  1. 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 token HTTPHeader.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:

    1. 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.
    2. 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.
    3. 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 su allowDuplicates, multiValued. Ciò significa che la proprietà è sovrascritta per consentire valori duplicati o multipli per l'intestazione Expires.

    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 su allowDuplicates, multiValued per impostazione predefinita. Ciò implica anche che la proprietà non viene sovrascritta per l'intestazione myheader,

  2. Se noti una delle seguenti condizioni, esegui gli altri passaggi della sezione:
    1. 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)
    2. 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.

  3. 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
    
  4. 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=
    
  5. Salva le modifiche.
  6. 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
    
  7. 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.

  8. 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.

  1. 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
    
  2. Se il nuovo valore dell'intestazione HTTP è stato impostato correttamente HTTPHeader.HEADER_NAME I sul processore di messaggi, poi mostra il nuovo valore nel file http.properties.
  3. 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=
    
  4. Nell'output di esempio riportato sopra, nota che la proprietà HTTPHeader.Expires ( e HTTPHeader.myheader) è stato impostato con il nuovo valore {blank} in http.properties. Ciò indica che il comportamento di consentire duplicati più valori per l'intestazione HTTP specifica Expires (e myheader) è stato disabilitato correttamente sul processore di messaggi.
  5. 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.

  6. Se non riesci ancora a modificare la proprietà, contatta l'assistenza Apigee Edge.