Le trasformazioni dell'intestazione non funzionano come previsto

Scopri come risolvere i problemi relativi alle trasformazioni dell'intestazione che non aggiungono, sostituiscono o rinominano le intestazioni come previsto durante la creazione delle distribuzioni API con il servizio Gateway API.

Se API Gateway non aggiunge, sostituisce o rinomina un'intestazione come previsto, verificare innanzitutto se la configurazione dell'instradamento e dei criteri rende disponibile il valore di contesto richiesto per la trasformazione. La trasformazione può anche indirizzare un'intestazione protetta, produrre un valore di intestazione non valido o utilizzare un'impostazione ifExists che mantiene il valore di intestazione esistente.

Sintomi problema

Potresti vedere uno o più dei seguenti sintomi:

  • Il servizio backend non riceve l'intestazione che si prevede venga aggiunta dal gateway API.
  • L'intestazione è presente, ma il valore è vuoto o invariato.
  • La trasformazione dell'intestazione sembra essere configurata correttamente, ma la richiesta inviata al servizio backend non include la modifica prevista dell'intestazione.

Cause possibili

Questo problema può avere una o più delle seguenti cause:

  • L'instradamento utilizza un criterio di autorizzazione ANONYMOUS, pertanto il gateway API non inserisce i valori request.auth[...] per l'instradamento.
  • La trasformazione dell'intestazione tenta di modificare un'intestazione di richiesta protetta o un'intestazione di risposta protetta che il gateway API non trasforma.
  • L'espressione di trasformazione visualizza un valore non valido o non produce un valore utilizzabile.
  • L'impostazione ifExists mantiene invariata l'intestazione originale.

Esamina configurazione instradamento

Rivedere l'instradamento che ha gestito la richiesta e verificare i seguenti dettagli:

  • La richiesta corrisponde al percorso previsto.
  • L'instradamento utilizza l'impostazione requestPolicies.authentication prevista.
  • Il percorso include la trasformazione prevista nella sezione requestPolicies.headerTransformations o nella sezione responsePolicies.headerTransformations.
  • La trasformazione dipende da request.auth[...] solo quando l'instradamento esegue l'autenticazione.
  • L'intestazione di destinazione non è un'intestazione di richiesta protetta o un'intestazione di risposta protetta che il gateway API rifiuta di trasformare.

Se la trasformazione utilizza un'espressione come ${request.auth[access_token_claims][claim1]}, l'instradamento deve utilizzare un criterio di autorizzazione che esegue l'autenticazione. Quando un instradamento utilizza il criterio di autorizzazione ANONYMOUS, il gateway API non esegue l'autenticazione della richiesta e non inserisce i valori request.auth[...].

Esaminare il percorso e i log

  1. Nella console aprire la distribuzione API che ha gestito la richiesta.
  2. Rivedere il criterio di instradamento, autenticazione e trasformazione dell'intestazione corrispondenti.
  3. Inviare di nuovo la stessa richiesta per creare un nuovo esempio non riuscito.
  4. In OCI Logging aprire il log di accesso e il log di esecuzione del gateway API per la distribuzione.
  5. Utilizzare l'ID richiesta della risposta per trovare la stessa richiesta in entrambi i log.
  6. Nel log di esecuzione, rivedere la richiesta di errori di trasformazione dell'intestazione.

Rivedi messaggi di log

Esaminare il log di esecuzione per la richiesta non riuscita. Le voci di log seguenti possono identificare il motivo per cui il gateway API ha saltato o rifiutato la trasformazione:

  • headerTransformation.protectedHeaderTransformed: il criterio ha tentato di trasformare un'intestazione protetta.
  • headerTransformation.badHeaderValue: il valore dell'intestazione visualizzata conteneva caratteri non supportati oppure non era valido.
  • headerTransformation.missingSetValues: l'espressione di trasformazione non ha prodotto un valore valido, pertanto il gateway API ha saltato l'aggiornamento dell'intestazione.

Correggi trasformazioni intestazione

Utilizzare la correzione corrispondente alla causa trovata:

  • Se la trasformazione dipende dalle richieste di token, modificare l'instradamento per utilizzare un criterio di autorizzazione autenticato, ad esempio AUTHENTICATION_ONLY, anziché ANONYMOUS.
  • Se la richiesta dipende dalle richieste di token, inviare di nuovo la richiesta con un token valido e verificare che la convalida del token riesca.
  • Se la trasformazione è destinata a un'intestazione protetta, aggiornare il criterio in modo che utilizzi un'intestazione diversa.
  • Se l'espressione visualizza un risultato non valido o vuoto, aggiornare l'espressione in modo che produca un valore di intestazione valido.
  • Se il risultato appare invariato, rivedere l'impostazione ifExists. SKIP mantiene invariata un'intestazione esistente e APPEND aggiunge valori senza sostituire l'intestazione originale.

Verifica trasformazioni intestazione

Dopo aver aggiornato l'instradamento o il criterio, verificare che la trasformazione dell'intestazione funzioni come previsto:

  • Inviare di nuovo la stessa richiesta.
  • Verificare che il servizio backend riceva l'intestazione e il valore previsti.
  • Verificare che il log di esecuzione non mostri gli errori di trasformazione dell'intestazione descritti in questo argomento.