Le intestazioni delle richieste e delle risposte personalizzate ti consentono di specificare intestazioni aggiuntive che il bilanciatore del carico può aggiungere alle richieste e alle risposte HTTP(S). A seconda delle informazioni rilevate dal bilanciatore del carico, queste intestazioni possono includere le seguenti informazioni:
- Latenza verso il client
- Posizione geografica dell'indirizzo IP del client
- Parametri della connessione TLS
Le intestazioni della richiesta personalizzate sono supportate per i servizi di backend, mentre le intestazioni della risposta personalizzate sono supportate per i servizi di backend e i bucket di backend.
Il bilanciatore del carico aggiunge per impostazione predefinita determinate intestazioni a tutte le richieste e risposte HTTP(S) che invia tramite proxy tra backend e client. Per ulteriori informazioni, consulta Proxy di destinazione.
Prima di iniziare
Se necessario, esegui l'aggiornamento all'ultima versione di Google Cloud CLI:
gcloud components update
Come funzionano le intestazioni personalizzate
Le intestazioni personalizzate funzionano nel seguente modo:
Quando il bilanciatore del carico inoltra una richiesta al backend, aggiunge le intestazioni della richiesta.
Il bilanciatore del carico aggiunge intestazioni delle richieste personalizzate solo alle richieste client, non ai probe del controllo di integrità. Se il backend richiede un'intestazione specifica per l'autorizzazione che non è presente nel pacchetto del controllo di integrità, il controllo di integrità potrebbe non riuscire.
Il bilanciatore del carico imposta le intestazioni di risposta prima di restituire le risposte al client.
Per abilitare le intestazioni personalizzate, specifica un elenco di intestazioni in una proprietà del servizio di backend o del bucket di backend.
Specifica ogni intestazione come stringa header-name:header-value. L'intestazione deve
contenere i due punti che separano il nome dell'intestazione e il valore dell'intestazione.
I nomi delle intestazioni devono soddisfare i seguenti requisiti:
- Il nome dell'intestazione deve essere una definizione valida del nome del campo di intestazione HTTP (secondo il documento RFC 7230).
- Il nome dell'intestazione non deve essere
X-User-IPoCDN-Loop. - Non devono essere utilizzate le seguenti intestazioni hop-by-hop:
Keep-Alive,Transfer-Encoding,TE,Connection,TrailereUpgrade. In conformità con RFC 2616, queste intestazioni non vengono memorizzate dalle cache o propagate dai proxy di destinazione. - Il nome dell'intestazione non deve iniziare con
X-Google,X-Goog-,X-GFEoX-Amz-. - Un nome di intestazione non deve apparire più di una volta nell'elenco delle intestazioni aggiunte.
I valori dell'intestazione devono soddisfare i seguenti requisiti:
- Il valore dell'intestazione deve essere una definizione valida del campo di intestazione HTTP secondo la RFC 7230, con i moduli obsoleti non consentiti.
- Il valore dell'intestazione può essere vuoto.
- Il valore dell'intestazione può includere una o più variabili, racchiuse tra parentesi graffe, che si espandono ai valori forniti dal bilanciatore del carico. Per saperne di più, consulta Variabili supportate nei valori delle intestazioni.
Lo strumento a riga di comando gcloud ha un flag per specificare
le intestazioni delle richieste, ovvero --custom-request-header. Assicurati di racchiudere il nome dell'intestazione e il valore dell'intestazione tra virgolette singole dritte (') con questo flag.
Il formato generale del flag è:
--custom-request-header='HEADER_NAME:[HEADER_VALUE]'
Di seguito è riportato un esempio di valore dell'intestazione con due variabili,
client_region e client_city, racchiuse tra parentesi graffe.
--custom-request-header='X-Client-Geo-Location:{client_region},{client_city}'
Per i client che si trovano a Mountain View, in California, il bilanciatore del carico aggiunge un'intestazione come segue:
X-Client-Geo-Location:US,Mountain View
Variabili supportate nei valori delle intestazioni
Per inserire metadati dinamici e specifici della richiesta nelle intestazioni personalizzate, puoi
utilizzare le seguenti variabili. Quando queste variabili sono racchiuse tra parentesi graffe
({}) all'interno di un valore di intestazione, il bilanciatore del carico le espande ai
loro valori in tempo reale, ad esempio la posizione geografica del client, i parametri
di connessione o lo stato della cache, prima di passare l'intestazione al backend o
al client.
| Variabile | Descrizione |
|---|---|
cdn_cache_id |
Codice e ID della località dell'istanza della cache utilizzata per gestire la richiesta.
Si tratta dello stesso valore inserito nel campo jsonPayload.cacheId dei log delle richieste Cloud CDN in Logging.
|
cdn_cache_status |
Stato attuale della cache. I valori possono essere hit,
miss, revalidated, stale,
uncacheable o disabled per qualsiasi oggetto
servito da un backend abilitato a Cloud CDN.
|
origin_request_header |
Riflette il valore dell'intestazione Origin nella richiesta
per i casi d'uso della condivisione delle risorse tra origini (CORS).
|
client_rtt_msec |
Tempo di trasmissione di round trip stimato tra il bilanciatore del carico e il client HTTP(S), in millisecondi. Questo è il parametro tempo di round trip (SRTT) uniforme misurato dallo stack TCP del bilanciatore del carico, in base all'RFC 2988. L'RTT uniformato è un algoritmo che gestisce le variazioni e le anomalie che potrebbero verificarsi nelle misurazioni dell'RTT. |
client_region |
Il paese (o la regione) associato all'indirizzo IP del client. Si tratta di un codice regione Unicode CLDR, ad esempio US o FR. Per la maggior parte dei paesi, questi codici corrispondono direttamente
ai codici ISO-3166-2.
|
client_region_subdivision |
Suddivisione, ad esempio una provincia o uno stato, del paese associato all'indirizzo IP del client. Si tratta di un ID suddivisione Unicode CLDR, ad esempio
USCA o CAON. Questi codici Unicode derivano dalle suddivisioni definite dallo standard ISO-3166-2.
|
client_city |
Nome della città da cui ha avuto origine la richiesta, ad esempio,
Mountain View per Mountain View, California. Non esiste
un elenco canonico di valori validi per questa variabile. I nomi delle città possono
contenere lettere, numeri, spazi e i seguenti caratteri US-ASCII:
!#$%&'*+-.^_`|~.
|
client_city_lat_long |
Latitudine e longitudine della città da cui ha avuto origine la richiesta,
ad esempio 37.386051,-122.083851 per una richiesta da
Mountain View.
|
client_ip_address |
L'indirizzo IP del client. Di solito corrisponde all'indirizzo IP client
che è il penultimo indirizzo nell'intestazione
X-Forwarded-For, a meno che il client non utilizzi un proxy o l'intestazione
X-Forwarded-For non sia stata manomessa. |
client_port |
La porta di origine del client. |
client_encrypted |
true se la connessione tra il client e il bilanciatore del carico è criptata (utilizzando HTTPS, HTTP/2 o HTTP/3); altrimenti, false.
|
client_protocol |
Il protocollo HTTP utilizzato per la comunicazione tra il client e il bilanciatore del carico. Uno dei valori tra HTTP/1.0, HTTP/1.1,
HTTP/2 o HTTP/3.
|
device_request_type |
Il dispositivo del client, derivato dai valori dell'intestazione
Di seguito sono riportati i valori possibili:
|
server_ip_address |
L'indirizzo IP del bilanciatore del carico a cui si connette il client. Questo
può essere utile quando più bilanciatori del carico condividono backend comuni. Questo
è uguale all'ultimo indirizzo IP nell'intestazione
X-Forwarded-For.
|
server_port |
Il numero di porta di destinazione a cui si connette il client. |
tls_sni_hostname |
Indicazione del nome del server (come definita nella RFC 6066), se fornita dal client durante l'handshake TLS o QUIC. Il nome host viene convertito in minuscolo e il punto finale viene rimosso. |
tls_version |
Versione TLS negoziata tra il client e il bilanciatore del carico durante l'handshake SSL. I valori possibili includono: TLSv1,
TLSv1.1, TLSv1.2 e TLSv1.3. Se
il client si connette utilizzando QUIC anziché TLS, il valore è
QUIC.
|
tls_cipher_suite |
Suite di crittografia negoziata durante l'handshake TLS. Il valore è costituito da quattro
cifre esadecimali definite dal
registro
delle suite di crittografia TLS IANA,
ad esempio 009C per TLS_RSA_WITH_AES_128_GCM_SHA256. Questo
valore è vuoto per QUIC e per le connessioni client non criptate.
|
tls_ja3_fingerprint |
Impronta TLS/SSL JA3 se il client si connette utilizzando HTTPS, HTTP/2 o HTTP/3. |
tls_ja4_fingerprint |
Impronta TLS/SSL JA4 se il client si connette utilizzando HTTPS, HTTP/2 o HTTP/3. |
user_agent_family |
Il tipo di browser del client, derivato dai valori dell'intestazione
I valori possibili sono:
|
asn |
Il numero di sistema autonomo (ASN) associato all'indirizzo IP del client. |