Panoramica della risposta di errore personalizzata

I bilanciatori del carico delle applicazioni esterni globali ti consentono di personalizzare le tue risposte agli errori quando viene generato un codice di stato di errore HTTP (4xx e 5xx). Puoi personalizzare le risposte agli errori per gli errori generati sia dal bilanciatore del carico sia dalle istanze di backend. Puoi anche personalizzare le risposte agli errori per i codici di risposta di errore generati quando il traffico viene rifiutato da Google Cloud Armor.

Ecco un esempio di pagina di errore personalizzata in cui puoi configurare le risposte agli errori per la tua applicazione per consumatori rivolta all'esterno con il branding e il logo della tua azienda, link a pagine correlate e messaggi personalizzati.

Pagina di risposta agli errori HTTP personalizzata.
Pagina di risposta all'errore HTTP personalizzata

Utilizzando un criterio di risposta di errore personalizzato, puoi configurare diverse risposte di errore per diversi codici di stato di errore HTTP, domini URL, percorsi URL e campi di parametri e intestazioni delle richieste HTTP.

Il ritorno di risposte di errore personalizzate ti consente di migliorare l'esperienza degli utenti offrendo i seguenti vantaggi:

  • Fornisce un'esperienza di branding coerente
  • Fornisce informazioni contestuali e pertinenti per migliorare l'usabilità e l'esperienza utente
  • Mitiga l'impatto negativo del tempo di riposo e degli errori lato client
  • Migliora la sicurezza della rete

Se non configuri un criterio di risposta agli errori personalizzato, viene visualizzato un oggetto errore generico senza branding, come mostrato nella figura 2.

Pagina di risposta generica per errori HTTP.
Pagina di risposta generica per errori HTTP

Casi d'uso

La funzionalità di risposta di errore personalizzata risolve molti casi d'uso. Questa sezione fornisce alcuni esempi di alto livello.

Definire la tua pagina di manutenzione

Puoi restituire una pagina di errore con il branding e le informazioni dell'azienda quando i tuoi backend non sono operativi o sono in modalità di manutenzione. Puoi creare pagine di errore contestuali che contengono informazioni utili, come i numeri di telefono del centro contatti o quando gli utenti devono riprovare ad accedere al sito web. Hai la possibilità di personalizzare le pagine di errore in base alla corrispondenza di condizioni di errore come il nome host e il codice di errore HTTP.

Definire una pagina di errore predefinita

Puoi configurare risposte di errore personalizzate in base a codici di errore specifici. Ad esempio, puoi configurare una pagina di errore con il messaggio "Accedi o registrati" per un codice di risposta HTTP 401 (Unauthorized). Puoi anche configurare una pagina di errore predefinita contenente il branding dell'azienda e altre informazioni pertinenti per tutti gli altri codici di errore HTTP della serie 4xx e 5xx.

Definire le risposte di errore per le regole di sicurezza

Puoi restituire una pagina di errore personalizzata per i codici di risposta di errore generati quando il traffico viene negato dai criteri di sicurezza di Google Cloud Armor. Devi assicurarti di configurare la pagina di errore con lo stesso codice di errore HTTP della serie 4xx o 5xx inserito nella regola di sicurezza di Google Cloud Armor.

Ridurre l'impatto dei tempi di inattività

Se applicabile, puoi configurare una risposta di errore per restituire un codice di stato HTTP 200 (OK) e pubblicare una pagina web statica in modo che gli utenti vedano informazioni più contestuali e utili anziché una pagina di errore durante il tempo di riposo.

Personalizzare le risposte agli errori in base al tipo di richiesta del client

Puoi personalizzare una risposta di errore in base ai parametri e alle intestazioni delle richieste HTTP, ad esempio l'intestazione Content-Type. Quando inoltri la richiesta originale al servizio di errore, il routing può prendere in considerazione l'intestazione Content-Type per mostrare una pagina web (per le richieste provenienti dai browser) o JSON (per le richieste provenienti da un'API web).

Come funzionano le norme di risposta di errore personalizzate

È possibile definire una norma di risposta di errore personalizzata a tre livelli della risorsa mappa URL: a livello di bilanciatore del carico, a livello di dominio dell'URL e a livello di percorso dell'URL.

  • Livello bilanciatore del carico. Il criterio viene applicato a tutto il traffico ricevuto dal bilanciatore del carico.

  • A livello di dominio dell'URL. Il criterio viene applicato al traffico indirizzato a un nome di dominio o a un nome host specifico, ad esempio www.example.com.

  • A livello di percorso dell'URL. Il criterio viene applicato al traffico indirizzato a un percorso specifico, ad esempio www.example.com/images/*. A questo livello, puoi anche utilizzare condizioni di corrispondenza avanzate con parametri e intestazioni delle richieste HTTP, ad esempio Content-Type:application/json.

La tabella seguente mostra un criterio di risposta agli errori personalizzato applicato a livello di bilanciatore del carico, di dominio dell'URL e di percorso dell'URL della mappa dell'URL.

Livello del criterio Campo API
Bilanciatore del carico urlMaps.defaultCustomErrorResponsePolicy
Dominio dell'URL pathMatchers[].defaultCustomErrorResponsePolicy
Percorso dell'URL

pathMatchers[].pathRules[].customErrorResponsePolicy

pathMatchers[].routeRules[].customErrorResponsePolicy

Se configuri una policy di risposta di errore personalizzata a più livelli della risorsa mappa URL, viene restituito l'oggetto errore specificato dalla policy di errore personalizzata al livello più basso della mappa URL. I criteri di risposta agli errori definiti a un livello inferiore della mappa URL sono più specifici e hanno la precedenza sui criteri di risposta agli errori definiti a un livello superiore della mappa URL.

Ad esempio, un criterio di risposta di errore personalizzato a livello di bilanciatore del carico viene applicato solo se corrisponde alle condizioni di errore e non è stato definito alcun criterio corrispondente per il codice di errore ai livelli inferiori, ovvero il dominio dell'URL o il percorso dell'URL. Analogamente, un criterio di risposta agli errori personalizzato a livello di dominio dell'URL viene applicato solo se corrisponde alle condizioni di errore e non è stato definito alcun criterio corrispondente per il codice di errore a livello inferiore, ovvero il percorso dell'URL. Per scoprire di più su questa configurazione, consulta Configurare criteri di risposta di errore personalizzati granulari per domini, percorsi e codici di risposta di errore diversi.

Specifica più regole per risposte di errore in modo che corrispondano ai codici di risposta di errore HTTP

A qualsiasi livello all'interno di un criterio di risposta di errore personalizzato, puoi specificare più regole per le risposte di errore. Queste regole possono associare una risposta di errore HTTP a codici di errore specifici o a un intervallo di codici di errore. Se specifichi una regola per un intervallo di codici di errore e regole per codici di errore specifici, le regole con codici di errore specifici hanno la precedenza.

Ad esempio, supponiamo di configurare una regola per un codice di errore 401 (Unauthorized) e un'altra regola per tutti i codici di errore della serie 4xx. Se il servizio di backend restituisce un codice di errore 401, viene applicata la regola corrispondente all'errore 401. Tuttavia, se il servizio di backend restituisce un codice di errore 403, viene applicata la regola per gli errori 4xx.

Sostituisci il codice di risposta HTTP

Le regole per le risposte di errore ti consentono di modificare il codice di risposta HTTP restituito dal bilanciatore del carico. Ciò significa essenzialmente che puoi ignorare il codice di risposta generato dal server e definire quale deve essere il codice di risposta finale per la richiesta. Puoi specificare di restituire qualsiasi codice di risposta HTTP, tra cui 200 (OK), la serie 4xx o la serie 5xx di codici di risposta o qualsiasi altro codice di risposta di tre cifre. Per scoprire di più sull'override del codice di risposta, consulta Configurare una pagina di errore per un codice di errore specifico per un host specifico.

Se definisci un codice di risposta di override, questo viene acquisito come nuovo campooverrideResponseCodeServed nei log di bilanciamento del carico. Questo campo viene compilato solo per le richieste in cui viene applicato un codice di risposta di override dalla norma di risposta di errore personalizzata.

Il codice status registrato nel httpRequest campo non è interessato. Acquisisce il codice di risposta HTTP generato dal server o la risposta HTTP che viene restituita dal bilanciatore del carico. Questo codice di stato può essere diverso dal codice effettivo inviato al client se il codice di risposta viene modificato da un criterio di risposta agli errori personalizzato.

Memorizzare nella cache le risposte di errore personalizzate

Una risposta di errore personalizzata può essere memorizzata nella cache specificando un criterio di memorizzazione nella cache negativa per il backend che ha generato l'errore. Il motivo è applicare un controllo granulare sulla memorizzazione nella cache per reindirizzamenti o errori comuni. Ciò può ridurre il carico sulle origini e migliorare l'esperienza dell'utente finale riducendo la latenza di risposta.

Un criterio di memorizzazione nella cache negativa definito per il backend che ha generato l'errore ha sempre la precedenza sui metadati Cache-Control definiti per l'oggetto errore nel servizio di errore. Inoltre, se il bilanciatore del carico restituisce un codice di risposta per l'override, viene applicato un criterio di memorizzazione nella cache negativa in base al valore del codice di risposta per l'override e non in base al codice di risposta originale restituito dal backend al bilanciatore del carico. Se viene restituito un codice diverso da un codice di errore (HTTP 200) come codice di risposta per l'override, non viene applicato un criterio di memorizzazione nella cache negativo.

Se la durata (TTL) della risposta di errore non è scaduta, il bilanciatore del carico continua a pubblicare i contenuti memorizzati nella cache senza inoltrare la richiesta a un servizio di backend o a un bucket di backend. Tuttavia, questo comportamento dipende dal fatto che Cloud CDN sia attivato per il bilanciatore del carico.

Cloud CDN è attivato per il bilanciatore del carico

Questa sezione descrive il comportamento del bilanciatore del carico quando Cloud CDN è abilitato e vengono utilizzate risposte di errore personalizzate.

  1. Quando il bilanciatore del carico riceve una richiesta, controlla la cache di Cloud CDN. Se il bilanciatore del carico trova una risposta memorizzata nella cache alla richiesta dell'utente, la restituisce all'utente. Questa risposta memorizzata nella cache può essere costituita dai contenuti richiesti dall'utente o da un oggetto di errore personalizzato.

  2. Se non viene trovata una voce nella cache, la richiesta viene elaborata dal bilanciatore del carico e inviata al backend.

  3. Se il backend restituisce una risposta non di errore, questa viene restituita all'utente finale. Tuttavia, se una richiesta del client rileva un errore (un codice di risposta HTTP 4xx o 5xx), il bilanciatore del carico tenta di recuperare l'oggetto errore personalizzato dal servizio di errore specificato nel seguente modo:

    1. Il bilanciatore del carico controlla tutti i criteri di risposta di errore personalizzati e ottiene il percorso appropriato dell'oggetto errore personalizzato che corrisponde al codice di stato dell'errore e ad altre condizioni di corrispondenza.

    2. Il bilanciatore del carico inoltra la richiesta dell'oggetto di errore personalizzato al servizio di errori specificato nella regola di risposta di errore personalizzata. Il termine servizio di errore fa riferimento al bucket di backend o al servizio di backend che pubblica i contenuti di errore personalizzati.

    3. Il bilanciatore del carico restituisce l'oggetto errore personalizzato al client che ha effettuato la richiesta. Inoltre, invia l'oggetto a Cloud CDN per memorizzare nella cache l'oggetto errore per il periodo di tempo specificato da cdnPolicy.negativeCachingPolicy[].ttl.

Cloud CDN è disabilitato per il bilanciatore del carico

Se Cloud CDN è disattivato, ti consigliamo di utilizzare un bucket di backend come servizio di errore e non un servizio di backend. Questo perché un servizio di backend non può memorizzare nella cache i contenuti se Cloud CDN è disattivato. Tuttavia, i bucket di backend dispongono di una funzionalità di memorizzazione nella cache integrata e possono memorizzare nella cache le risposte di errore anche se Cloud CDN è disattivato.

Limitazioni

  • Le risposte di errore personalizzate sono supportate solo con il bilanciatore del carico delle applicazioni esterno globale. Le modalità regionale e classica non sono supportate.

  • Se non è possibile recuperare l'oggetto errore personalizzato dal servizio di errore, ad esempio se il percorso dei contenuti non è configurato correttamente, viene pubblicato un oggetto errore generico senza branding.

  • Il criterio di risposta agli errori personalizzati non monitora né filtra l'oggetto riportato dal servizio di errore per rilevare rischi per la sicurezza. Pertanto, devi essere diligente nell'eliminare le vulnerabilità e limitare l'impatto di una potenziale esposizione.

  • Le risposte di errore personalizzate sono supportate solo per i bucket Cloud Storage pubblicamente leggibili.

    Per evitare configurazioni errate durante l'utilizzo di un bucket Cloud Storage, consulta le best practice comuni per Cloud Storage.

  • Le risposte di errore personalizzate non funzionano se il bilanciatore del carico delle applicazioni esterno globale ha solo bucket di backend. Oltre al bucket di backend, devi avere almeno un servizio di backend collegato anche al bilanciatore del carico.

  • Eventuali intestazioni delle risposte personalizzate definite in base all'origine della risposta personalizzata all'errore non vengono applicate alle risposte in uscita.

Prezzi

L'utilizzo di risposte di errore personalizzate non comporta costi aggiuntivi. Si applicano i prezzi standard per il bilanciamento del carico di Google Cloud. Per ulteriori informazioni, consulta la sezione Prezzi.

Passaggi successivi