Definire intestazioni personalizzate

Media CDN ti consente di specificare intestazioni di richieste e risposte personalizzate.

Le intestazioni personalizzate ti consentono di:

  • Restituisce dati geografici sul client, ad esempio paese, regione o città, che puoi utilizzare per mostrare contenuti localizzati.
  • Determina se una risposta è stata pubblicata dalla cache (in tutto o in parte) e da quale posizione della cache è stata pubblicata.
  • Rimuovi, sostituisci o aggiungi alle intestazioni di richiesta e risposta.

Impostare intestazioni personalizzate

Le intestazioni vengono impostate su ogni percorso, il che ti consente di aggiungere e rimuovere intestazioni per contenuti diversi, come manifest o segmenti video.

Imposta le intestazioni delle richieste personalizzate per route all'inizio del percorso di elaborazione della CDN, prima delle decisioni di memorizzazione nella cache. Ad esempio, se imposti un'intestazione cache-control come intestazione personalizzata per route, influisce sul comportamento di memorizzazione nella cache nella CDN.

Per impostazione predefinita, i valori delle intestazioni aggiunti sono separati da virgole e vengono aggiunti alle intestazioni di risposta o di richiesta con gli stessi nomi di campo.

Per sovrascrivere i valori esistenti, imposta replace su true.

gcloud e YAML

Per elencare la configurazione YAML per la risorsa EdgeCacheService, utilizza il seguente comando:

gcloud edge-cache services describe prod-media-service

La sezione .routing.pathMatchers[].routeRules[].headerAction mostra le intestazioni da aggiungere e rimuovere:

routeRules:
- priority: 1
   description: "video routes"
   matchRules:
      - prefixMatch: "/video/"
   headerAction:
      responseHeadersToAdd:
      # Return the country (or region) associated with the client's IP address.
      - headerName: "client-geo"
         headerValue: "{client_region}"
         replace: true
      requestHeadersToAdd:
      # Inform the upstream origin server the request is from Media CDN
      - headerName: "x-downstream-cdn"
         headerValue: "Media CDN"
      responseHeadersToRemove:
      - headerName: "X-User-ID"
      - headerName: "X-Other-Internal-Header"

Terraform

Il seguente snippet Terraform mostra una regola di routing con intestazioni personalizzate.

route_rule {
  description = "video routes"
  priority    = 1
  match_rule {
    prefix_match = "/video/"
  }
  origin = google_network_services_edge_cache_origin.default.name
  header_action {
    response_header_to_add {
      # Return the country (or region) associated with the client's IP address.
      header_name  = "client-geo"
      header_value = "{client_region}"
      replace      = true
    }
    request_header_to_add {
      # Inform the upstream origin server that the request is from Media CDN.
      header_name  = "x-downstream-cdn"
      header_value = "Media CDN"
    }
    response_header_to_remove {
      header_name = "X-User-ID"
    }
    response_header_to_remove {
      header_name = "X-Other-Internal-Header"
    }
  }
}

Questo esempio esegue le seguenti operazioni:

  • Aggiunge un'intestazione client-geo personalizzata alla risposta utilizzando la variabile {client_region}, che restituisce il paese (o la regione) associato all'indirizzo IP del client.
  • Aggiunge un'intestazione x-downstream-cdn personalizzata alla richiesta utilizzando una stringa statica.
  • Rimuove due intestazioni interne.

Per configurare intestazioni personalizzate specifiche per l'origine, vedi Configurare le riscritture dell'host o le modifiche delle intestazioni specifiche per l'origine.

Variabili di intestazione dinamiche

Le intestazioni personalizzate possono contenere una o più variabili dinamiche.

Le intestazioni delle richieste che fanno parte dei criteri della chiave della cache (cacheKeyPolicy.includedHeaderNames) possono contenere una o più variabili personalizzate. Le intestazioni delle richieste che contengono altre variabili dinamiche non possono far parte della chiave cache.

Variabile Descrizione Supportato per le intestazioni delle richieste Supportato per le intestazioni delle richieste in una chiave cache Supportato per le intestazioni delle risposte
cdn_cache_status Un elenco separato da virgole delle località (codice IATA dell'aeroporto più vicino) e degli stati di ogni nodo della cache nel percorso richiesta/risposta, in cui il valore più a destra rappresenta la cache più vicina all'utente.
client_city Il 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 La latitudine e la longitudine della città da cui ha avuto origine la richiesta, ad esempio 37.386051,-122.083851 per una richiesta da Mountain View.
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 La suddivisione, ad esempio la provincia o lo stato, del paese associato all'indirizzo IP del client. Si tratta di un ID suddivisione CLDR Unicode, ad esempio USCA o CAON. Questi codici Unicode derivano dalle suddivisioni definite dallo standard ISO-3166-2.
client_rtt_msec Il tempo di trasmissione di round trip stimato tra la CDN e il client HTTP(S), in millisecondi. Questo è il parametro del tempo di round trip (SRTT) uniforme misurato dallo stack TCP della CDN, in base all'RFC 2988.
device_request_type Il tipo di dispositivo utilizzato dal cliente. Questi sono i valori validi: DESKTOP, MOBILE, TABLET, SMART_TV, GAME_CONSOLE, WEARABLE, e UNDETERMINED.
original_request_id L'identificatore univoco assegnato alla richiesta che ha generato originariamente questa risposta. Compilato solo se è diverso da request_id per le risposte memorizzate nella cache.
origin_name La risorsa EdgeCacheOrigin da cui è stato eseguito il proxy della risposta.
origin_request_header Riflette il valore dell'intestazione Origin nella richiesta per i casi d'uso di condivisione delle risorse tra origini (CORS).
proxy_status Un elenco di proxy HTTP intermedi nel percorso di risposta. Il valore è definito dallo standard RFC 9209. Una risorsa EdgeCacheService è rappresentata da Google-Edge-Cache. Se la risposta è stata recuperata dall'origine, una risorsa EdgeCacheOrigin è rappresentata da Google-Edge-Cache-Origin.
tls_sni_hostname L'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 lettere minuscole e il punto finale viene rimosso.
tls_version La 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 La suite di crittografia negoziata durante il TLS handshake. Il valore è definito dal registro delle suite di crittografia TLS IANA, ad esempio TLS_RSA_WITH_AES_128_GCM_SHA256. Questo valore è vuoto per le connessioni client QUIC e non criptate.
user_agent_family La famiglia di browser che il client sta utilizzando. Questi sono i valori validi: APPLE, APPLEWEBKIT, BLACKBERRY, DOCOMO, GECKO, GOOGLE, KHTML, KOREAN, MICROSOFT, MSIE, NOKIA, NETFRONT, OBIGO, OPENWAVE, OPERA, OTHER, POLARIS, TELECA, SEMC, SMIT e USER_DEFINED.

Per le variabili personalizzate valgono le seguenti considerazioni:

  • Le intestazioni di richiesta e risposta esistenti vengono conservate, ad eccezione delle seguenti, che vengono rimosse:

    • X-User-IP
    • Tutte le intestazioni con X-Google o X-GFE
  • Le chiavi e i valori delle intestazioni devono essere conformi al documento RFC 7230, con forme obsolete non consentite.

  • Tutte le chiavi di intestazione sono in minuscolo (per HTTP/2).

  • Alcune intestazioni sono state unite. Quando sono presenti più istanze della stessa chiave di intestazione (ad esempio Via), il bilanciatore del carico combina i relativi valori in un unico elenco separato da virgole per una singola chiave di intestazione. Vengono uniti solo gli header i cui valori possono essere rappresentati come un elenco separato da virgole. Altre intestazioni, come Set-Cookie, non vengono mai unite.

  • Alcune intestazioni vengono aggiunte o i valori vengono aggiunti. Media CDN aggiunge o modifica sempre determinate intestazioni, ad esempio X-Forwarded-For.

  • Media CDN espande qualsiasi intestazione della risposta con una variabile supportata, anche se impostata dal client o dall'origine. In questo modo puoi impostare intestazioni dinamiche dal client (ad esempio un video player) o dall'infrastruttura di origine, oltre a configurare intestazioni personalizzate. Media CDN non espande le variabili nel percorso della richiesta.

  • Ad esempio, in base alle regole descritte in precedenza, le intestazioni X-Goog- e X-Amz- vengono mantenute e convertite in minuscolo.

Valori dello stato della cache

La variabile di intestazione {cdn_cache_status} può restituire più valori corrispondenti al livello di cache che ha fornito la risposta. Tieni presente le seguenti linee guida per interpretare la variabile di intestazione {cdn_cache_status}:

  • Se l'intestazione contiene hit, i contenuti richiesti sono stati recuperati dalla cache.
  • Se l'intestazione contiene miss, i contenuti richiesti non sono stati trovati in un nodo della cache e sono stati recuperati da un nodo upstream.
  • Se l'intestazione contiene fetch, i contenuti richiesti sono stati recuperati dall'origine.
  • Se l'intestazione contiene uncacheable, i contenuti richiesti sono stati considerati non memorizzabili nella cache da alcuni o tutti i componenti dell'infrastruttura di memorizzazione nella cache.

    • Se l'intestazione contiene anche hit o miss, i contenuti richiesti sono stati considerati non memorizzabili nella cache da alcuni componenti di memorizzazione nella cache e memorizzabili nella cache da altri.
    • Se l'intestazione non contiene anche hit o miss, i contenuti richiesti sono stati considerati non memorizzabili nella cache da tutti i componenti di memorizzazione nella cache e tutte le richieste di questi contenuti vengono recuperate dall'origine. Per assicurarti che i tuoi contenuti vengano memorizzati nella cache in modo appropriato, consulta i requisiti dell'origine di Media CDN.

Intestazioni predefinite

Media CDN aggiunge le seguenti intestazioni di richieste e risposte rispettivamente alle richieste di origine e alle risposte dei client.

Intestazione Descrizione Richiesta Risposta
x-request-id Un identificatore univoco per la richiesta specificata. Questo valore viene aggiunto anche al log delle richieste come jsonPayload.requestId, il che ti consente di correlare una richiesta/risposta del client a una voce di log.
age

Restituisce l'età dell'oggetto memorizzato nella cache (il numero di secondi in cui è stato nella cache). L'età viene in genere calcolata in base alla data in cui l'oggetto è stato inizialmente memorizzato nella cache in una posizione di cache long tail (shield).

Le risposte senza un'intestazione age non vengono pubblicate dalla cache.

server È impostato su Google-Edge-Cache.
cdn-loop

Identifica i loop, ad esempio quando l'host di origine è lo stesso dell'host rivolto all'utente (edge).

Un token di google viene aggiunto all'intestazione come da RFC 8586. Il token non può essere modificato.

forwarded

La versione strutturata dell'intestazione x-forwarded-for. L'intestazione forwarded è definita nel documento RFC 7239.

Queste intestazioni consentono di identificare l'indirizzo IP del client di connessione quando nel percorso è presente un proxy o più proxy. Ad esempio, se un client con indirizzo IP 192.0.2.60 si connette a Media CDN tramite HTTPS, l'intestazione forwarded viene compilata nel seguente modo:

forwarded: [for=192.0.2.60;proto=https]

Nel caso di più proxy lato client, il client che si è connesso a Media CDN è l'ultimo indirizzo aggiunto nel valore dell'intestazione.

x-forwarded-for

La versione non strutturata e standard de facto dell'intestazione forwarded. I valori sono in genere separati da virgole.

Entrambe le intestazioni vengono inviate in una richiesta per supportare le origini legacy che potrebbero non conoscere l'intestazione forwarded.

Le chiavi delle intestazioni sono in minuscolo sia per le intestazioni delle richieste sia per quelle delle risposte perché non fanno distinzione tra maiuscole e minuscole.

È possibile aggiungere altre intestazioni, tra cui la posizione del punto di presenza (PoP) edge e lo stato della cache (ad esempio hit e miss), utilizzando le variabili di intestazione dinamiche.