400 Richiesta errata - Duplicaintestazione

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Sintomo

L'applicazione client riceve un codice di stato HTTP di 400 Bad Request con codice di errore protocol.http.DuplicateHeader in risposta alle chiamate API.

Messaggio di errore

L'applicazione client riceve il seguente codice di risposta:

HTTP/1.1 400 Bad Request

Inoltre, potresti visualizzare un messaggio di errore simile a quello mostrato di seguito:

{
   "fault":{
      "faultstring":"Duplicate Header \"Expires\"",
      "detail":{
         "errorcode":"protocol.http.DuplicateHeader"
      }
   }
}

Possibili cause

Questo errore si verifica se un'intestazione HTTP specifica non può avere duplicati in Apigee Edge, compare più di una volta con valori uguali o diversi nell'ambito della richiesta HTTP inviata il client ad Apigee Edge.

Secondo RFC 7230, sezione 3.2.2: Ordine dei campi, un mittente NON DEVE generare intestazioni multiple campi con lo stesso nome campo in un messaggio, a meno che il valore del campo il campo di intestazione è definito come un elenco separato da virgole, [ad es. #(values)] oppure il campo di intestazione è un nota eccezione. Se Apigee Edge trova un'intestazione specifica, non può duplicati, più di una volta nella richiesta HTTP inviata dal client, risponde con 400 Bad Request e codice di errore protocol.http.DuplicateHeader,

Ecco le possibili cause di questo errore:

Causa Descrizione Le istruzioni di risoluzione dei problemi applicabili a
Intestazione duplicata nella richiesta La richiesta HTTP dall'applicazione client ad Apigee contiene intestazioni duplicate. Utenti perimetrali di cloud pubblici e privati

Passaggi diagnostici comuni

Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:

Monitoraggio delle API

Per diagnosticare l'errore utilizzando API Monitoring:

  1. Accedi alla UI di Apigee Edge come utente con un ruolo appropriato.
  2. Passa all'organizzazione in cui vuoi esaminare il problema.

  3. Vai al menu Analizza > Monitoraggio delle API > Esamina.
  4. Seleziona il periodo di tempo specifico in cui hai osservato gli errori.
  5. Assicurati che il filtro Proxy sia impostato su Tutti.
  6. Traccia il codice di errore in base all'ora.
  7. Seleziona una cella con il codice di errore protocol.http.DuplicateHeader come mostrato di seguito:

  8. Le informazioni sul codice di errore protocol.http.DuplicateHeader sono visualizzato come mostrato di seguito:

  9. Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita.
  10. Nella finestra Log, tieni presente i seguenti dettagli:
      .
    1. Codice di stato: 400
    2. Origine errore:apigee
    3. Codice di errore: protocol.http.DuplicateHeader.
  11. Se Origine errore ha il valore apigee o MP e Codice errore ha il valore protocol.http.DuplicateHeader, indica che la richiesta HTTP il client conteneva intestazioni duplicate.

Strumento Trace

NGINX

Per diagnosticare l'errore utilizzando i log di accesso NGINX:

  1. Se sei un utente Private Cloud, puoi utilizzare i log di accesso NGINX per determinare le informazioni principali sugli errori HTTP 400.
  2. Controlla i log di accesso NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Dove: ORG, ENV e PORT# vengono sostituiti con valori effettivi.

  3. Controlla se si sono verificati 400 errori durante un periodo di tempo specifico (se problema si è verificato in passato) o se sono presenti richieste che non hanno ancora avuto esito positivo 400.
  4. Se riscontri errori 400 con il X-Apigee-fault-code corrispondente al valore di protocol.http.DuplicateHeader, poi determinare il valore della X-Apigee-fault-source.

    Esempio di errore 400 nel log di accesso NGINX:

    La voce di esempio riportata sopra dal log di accesso NGINX ha i seguenti valori per X-Apigee- codice di errore e fonte-fault-X-Apigee:

    Intestazioni della risposta Valore
    X-Apigee-fault-code protocol.http.DuplicateHeader
    X-Apigee-fault-source MP

Causa: intestazione duplicata nella richiesta

Diagnosi

  1. Determinare il codice di errore e l'origine errore per l'errore osservato utilizzando l'API Log di accesso di Monitoring o NGINX come spiegato nella sezione Passaggi di diagnostica comuni.
  2. Se il campo Origine errore ha il valore apigee o MP, allora indica che la richiesta inviata dall'applicazione client ad Apigee contiene duplicati intestazioni.
  3. Puoi determinare l'intestazione effettiva che viene inviata più di una volta come parte della richiesta utilizzando uno dei seguenti metodi:

    Messaggio di errore

    Utilizzo del messaggio di errore

    1. Se hai accesso al messaggio di errore completo ricevuto da Apigee Edge, consulta il faultstring. Il parametro faultstring contiene il parametro un nome di intestazione inviato più di una volta.

      Esempio di messaggio di errore:

      "faultstring":"Duplicate Header \"Expires\""
      
    2. Nel messaggio di errore riportato sopra, puoi vedere che l'intestazione Expires è inviato più di una volta, come indicato in faultstring.

    Richiesta effettiva

    Utilizzare la richiesta effettiva

    1. Se hai accesso alla richiesta effettiva effettuata dall'applicazione client, segui questi passaggi:

      1. Verifica l'elenco delle intestazioni passate nella richiesta.
      2. Se noti che una determinata intestazione compare più volte nella con lo stesso valore o valori diversi , questa è la causa per questo errore.

      Esempio di richiesta:

      curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT" -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
      

      Nella richiesta di esempio precedente, l'intestazione Expires viene inviata più di una volta sola. Pertanto, questa richiesta non riesce e restituisce l'errore 400 Bad Request e il codice di errore: protocol.http.DuplicateHeader.

    2. In alternativa, se hai accesso ai log del client, puoi verificare se hai informazioni sulla richiesta effettiva effettuata ad Apigee Edge e determinare l'intestazione viene inviato più di una volta.

Risoluzione

Correggi i duplicati

Opzione 1 [Opzione consigliata] Correggi l'applicazione client per non includere intestazioni duplicate

  1. Analizza il motivo per cui il client specifico invia un'intestazione duplicata. Ad esempio: Expires nel caso precedente. Verifica che i proxy API accettino i termini l'intestazione duplicata. Generalmente, non è consigliabile, come da specifica HTTP RFC7230.
  2. Se non è opportuno, modifica l'applicazione client in modo che non invii intestazioni duplicate.

    Nell'esempio discusso sopra, si nota che viene inviata l'intestazione Expires due volte con lo stesso valore, cosa non auspicabile. Puoi risolvere il problema trasmettendo il Expires intestazione una sola volta, come mostrato di seguito:

    curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
    
  3. Se preferisci consentire le intestazioni duplicate, vai a Opzione 2: utilizzo della proprietà CwC.

CwC

Opzione 2: utilizzo della proprietà CwC

Apigee offre una CwC HTTPHeader.<HeaderName> ,che consente al client applicazioni e server di destinazione per inviare intestazioni duplicate ai proxy API in Apigee Edge.

Proprietà CwC Valori
HTTPHeader.<HeaderName> allowDuplicates,multivalued

Ad esempio, la seguente proprietà può essere impostata sui processori di messaggi per consentire duplicati e più valori per l'intestazione Expires.

HTTPHeader.Expires=allowDuplicates, multiValued
  1. Se sei un utente di Private Cloud, puoi configurare la proprietà in modo da impedire Apigee Edge non genererà un errore 400 Bad Request, anche se la richiesta contiene intestazioni duplicate utilizzando i campi Guida illustrativa alla configurazione dei processori di messaggi per l'utilizzo di intestazioni duplicate.
  2. Se sei un utente del cloud pubblico, contatta l'assistenza Apigee Edge per configurare questa proprietà per la tua organizzazione.

Specifica

Apigee si aspetta che l'applicazione client non invii intestazioni duplicate come parte della richiesta in base alle seguenti specifiche RFC:

Specifica
RFC 7230, sezione 3.2.2: Ordine sul campo
Campi intestazione RFC 7230, sezione 3.2

Se hai ancora bisogno di aiuto dall'assistenza Apigee, vai a Devi raccogliere dati diagnostici.

Raccogliere dati diagnostici

Raccogli le seguenti informazioni diagnostiche e contatta l'assistenza Apigee Edge.

Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:

  • Nome organizzazione
  • Nome ambiente
  • Nome proxy API
  • Completa il comando curl utilizzato per riprodurre l'errore 400
  • File di traccia per le richieste API

Se sei un utente di Private Cloud, fornisci le seguenti informazioni:

  • Messaggio di errore completo osservato per le richieste non riuscite
  • Nome ambiente
  • Bundle proxy API
  • Completa il comando curl che hai utilizzato per riprodurre l'errore 400
  • File di traccia per le richieste API
  • Log di accesso NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Dove: ORG, ENV e PORT# vengono sostituiti con valori effettivi.

  • Log di sistema del processore di messaggi /opt/apigee/var/log/edge-message-processor/logs/system.log