Definir encabezados personalizados

Media CDN le permite especificar encabezados de solicitud y respuesta personalizados.

Los encabezados personalizados te permiten hacer lo siguiente:

  • Devuelve datos geográficos sobre el cliente, como el país, la región o la ciudad, que puede usar para mostrar contenido localizado.
  • Determina si una respuesta se ha servido desde la caché (total o parcialmente) y desde qué ubicación de la caché se ha servido.
  • Eliminar, sustituir o añadir encabezados de solicitud y de respuesta.

Definir encabezados personalizados

Los encabezados se definen en cada ruta, lo que te permite añadir y quitar encabezados de diferentes contenidos, como manifiestos o segmentos de vídeo.

Define encabezados de solicitud personalizados por ruta al principio de la ruta de procesamiento de la CDN, antes de tomar decisiones sobre el almacenamiento en caché. Por ejemplo, si define un encabezado cache-control como encabezado personalizado por ruta, afectará al comportamiento de la caché en la CDN.

De forma predeterminada, los valores de encabezado añadidos se separan por comas y se añaden a los encabezados de respuesta o de solicitud con los mismos nombres de campo.

Para sobrescribir los valores actuales, asigna el valor true a replace.

gcloud y YAML

Para enumerar la configuración YAML del recurso EdgeCacheService, usa el siguiente comando:

gcloud edge-cache services describe prod-media-service

En la sección .routing.pathMatchers[].routeRules[].headerAction se muestran los encabezados que se van a añadir y quitar:

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

El siguiente fragmento de Terraform muestra una regla de ruta con encabezados personalizados.

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"
    }
  }
}

Este ejemplo hace lo siguiente:

  • Añade un encabezado client-geo personalizado a la respuesta mediante la variable {client_region}, que devuelve el país (o la región) asociado a la dirección IP del cliente.
  • Añade un encabezado x-downstream-cdn personalizado a la solicitud mediante una cadena estática.
  • Elimina dos encabezados internos.

Para configurar encabezados personalizados específicos de un origen, consulta Configurar reescrituras de host o modificaciones de encabezados específicos de un origen.

Variables de encabezado dinámicas

Los encabezados personalizados pueden contener una o varias variables dinámicas.

Los encabezados de solicitud que forman parte de la política de claves de caché (cacheKeyPolicy.includedHeaderNames) pueden contener una o varias variables personalizadas. Los encabezados de solicitud que contienen otras variables dinámicas no pueden formar parte de la clave de caché.

Variable Descripción Se admite en encabezados de solicitud Se admite en los encabezados de solicitud de una clave de caché. Se admite en encabezados de respuesta
cdn_cache_status Lista separada por comas de las ubicaciones (código IATA del aeropuerto más cercano) y los estados de cada nodo de caché en la ruta de solicitud o respuesta, donde el valor situado más a la derecha representa la caché más cercana al usuario.
client_city Nombre de la ciudad desde la que se ha originado la solicitud. Por ejemplo, Mountain View para Mountain View (California). No hay una lista canónica de valores válidos para esta variable. Los nombres de las ciudades pueden contener letras, números y espacios US-ASCII, así como los siguientes caracteres: !#$%&'*+-.^_`|~.
client_city_lat_long La latitud y la longitud de la ciudad desde la que se ha enviado la solicitud. Por ejemplo, 37.386051,-122.083851 para una solicitud de Mountain View.
client_region El país (o la región) asociado a la dirección IP del cliente. Se trata de un código de región Unicode CLDR, como US o FR. En la mayoría de los países, estos códigos se corresponden directamente con los códigos ISO-3166-2.
client_region_subdivision La subdivisión (por ejemplo, la provincia o el estado) del país asociado a la dirección IP del cliente. Es un ID de subdivisión CLDR de Unicode, como USCA o CAON. Estos códigos Unicode se derivan de las subdivisiones definidas por el estándar ISO 3166-2.
client_rtt_msec Tiempo de transmisión de ida y vuelta estimado entre la CDN y el cliente HTTP(S), en milisegundos. Es el parámetro de tiempo de ida y vuelta suavizado (SRTT) medido por la pila TCP de la CDN, según RFC 2988.
device_request_type El tipo de dispositivo que usa el cliente. Estos son los valores válidos: DESKTOP, MOBILE, TABLET, SMART_TV, GAME_CONSOLE, WEARABLE y UNDETERMINED.
original_request_id Identificador único asignado a la solicitud que generó originalmente esta respuesta. Solo se rellena si es diferente de request_id en el caso de las respuestas almacenadas en caché.
origin_name El recurso EdgeCacheOrigin desde el que se ha proxyizado la respuesta.
origin_request_header Refleja el valor del encabezado Origin en la solicitud de los casos prácticos de uso compartido de recursos entre dominios (CORS).
proxy_status Lista de proxies HTTP intermediarios en la ruta de respuesta. El valor se define en RFC 9209. Un recurso EdgeCacheService se representa mediante Google-Edge-Cache. Si la respuesta se ha obtenido del origen, un recurso EdgeCacheOrigin se representa mediante Google-Edge-Cache-Origin.
tls_sni_hostname La indicación del nombre del servidor (tal como se define en el RFC 6066), si el cliente la proporciona durante el handshake TLS o QUIC. El nombre de host se convierte a minúsculas y se elimina cualquier punto final.
tls_version Versión de TLS negociada entre el cliente y el balanceador de carga durante el handshake de SSL. Entre los posibles valores se incluyen TLSv1, TLSv1.1, TLSv1.2 y TLSv1.3. Si el cliente se conecta mediante QUIC en lugar de TLS, el valor es QUIC.
tls_cipher_suite El conjunto de cifrado negociado durante el handshake TLS. El valor se define en el registro de conjuntos de algoritmos de cifrado TLS de IANA. Por ejemplo, TLS_RSA_WITH_AES_128_GCM_SHA256. Este valor está vacío en el caso de las conexiones de cliente QUIC y sin cifrar.
user_agent_family La familia del navegador que está usando el cliente. Estos son los valores válidos: APPLE, APPLEWEBKIT, BLACKBERRY, DOCOMO, GECKO, GOOGLE, KHTML, KOREAN, MICROSOFT, MSIE, NOKIA, NETFRONT, OBIGO, OPENWAVE, OPERA, OTHER, POLARIS, TELECA, SEMC, SMIT y USER_DEFINED.

Las siguientes consideraciones se aplican a las variables personalizadas:

  • Los encabezados de solicitud y respuesta se conservan, excepto los siguientes, que se eliminan:

    • X-User-IP
    • Cualquier encabezado con X-Google o X-GFE
  • Las claves y los valores de los encabezados deben cumplir el RFC 7230 y no pueden tener formatos obsoletos.

  • Todas las claves de encabezado están en minúsculas (según HTTP/2).

  • Algunas cabeceras se han combinado. Cuando hay varias instancias de la misma clave de encabezado (por ejemplo, Via), el balanceador de carga combina sus valores en una sola lista separada por comas para una sola clave de encabezado. Solo se combinan los encabezados cuyos valores se pueden representar como una lista separada por comas. Otros encabezados, como Set-Cookie, nunca se combinan.

  • Se añaden algunos encabezados o se les añaden valores. Media CDN siempre añade o modifica determinados encabezados, como X-Forwarded-For.

  • Media CDN amplía cualquier encabezado de respuesta con una variable admitida, aunque la haya definido el cliente o el origen. De esta forma, puedes definir encabezados dinámicos desde tu cliente (como un reproductor de vídeo) o infraestructura de origen, además de configurar encabezados personalizados. Media CDN no sustituye las variables en la ruta de la solicitud.

  • Por ejemplo, según las reglas descritas anteriormente, los encabezados X-Goog- y X-Amz- se conservan y se convierten a minúsculas.

Valores de estado de la caché

La variable de encabezado {cdn_cache_status} puede devolver varios valores correspondientes al nivel de caché que ha proporcionado la respuesta. Ten en cuenta las siguientes directrices para interpretar la variable de encabezado {cdn_cache_status}:

  • Si el encabezado contiene hit, el contenido solicitado se ha obtenido de la caché.
  • Si el encabezado contiene miss, significa que el contenido solicitado no se ha encontrado en un nodo de caché y se ha tenido que obtener de un nodo superior.
  • Si el encabezado contiene fetch, el contenido solicitado se ha obtenido del origen.
  • Si el encabezado contiene uncacheable, significa que algunos o todos los componentes de la infraestructura de almacenamiento en caché consideran que el contenido solicitado no se puede almacenar en caché.

    • Si el encabezado también contiene hit o miss, algunos componentes de la caché han considerado que el contenido solicitado no se puede almacenar en caché, mientras que otros sí.
    • Si el encabezado tampoco contiene hit ni miss, el contenido solicitado se ha considerado no almacenable en caché por todos los componentes de almacenamiento en caché y todas las solicitudes de este contenido se obtienen del origen. Para asegurarse de que su contenido se almacena en caché correctamente, consulte los requisitos de origen de Media CDN.

Encabezados predeterminados

Media CDN añade los siguientes encabezados de solicitud y respuesta a las solicitudes de origen y a las respuestas de cliente, respectivamente.

Header Descripción Solicitud Respuesta
x-request-id Identificador único de la solicitud. Este valor también se añade al registro de solicitudes como jsonPayload.requestId, lo que te permite asociar una solicitud o respuesta de cliente con una entrada de registro.
age

Devuelve la antigüedad del objeto almacenado en caché (el número de segundos que lleva en la caché). La antigüedad se calcula normalmente en función de cuándo se almacenó en caché el objeto por primera vez en una ubicación de caché de larga duración (protección).

Las respuestas sin un encabezado age no se sirven desde la caché.

server Se ha definido como Google-Edge-Cache.
cdn-loop

Identifica bucles, por ejemplo, cuando el host de origen es el mismo que el host visible para el usuario (perimetral).

Se añade un token de google al encabezado según RFC 8586. El token no se puede cambiar.

forwarded

Versión estructurada del encabezado x-forwarded-for. El encabezado forwarded se define en RFC 7239.

Estos encabezados le permiten identificar la dirección IP del cliente que se conecta cuando hay un proxy (o proxies) en la ruta. Por ejemplo, si un cliente con la dirección IP 192.0.2.60 se conecta a Media CDN a través de HTTPS, la cabecera forwarded se rellena de la siguiente manera:

forwarded: [for=192.0.2.60;proto=https]

En el caso de varios proxies del lado del cliente, el cliente que se conectó a Media CDN es la última dirección añadida en el valor del encabezado.

x-forwarded-for

Versión no estructurada y estándar de facto del encabezado forwarded. Los valores suelen estar separados por comas.

Ambos encabezados se envían en una solicitud para admitir orígenes antiguos que quizás no conozcan el encabezado forwarded.

Las claves de encabezado se escriben en minúsculas tanto en los encabezados de solicitud como en los de respuesta, ya que no distinguen entre mayúsculas y minúsculas.

Se pueden añadir otros encabezados, como la ubicación del punto de presencia (PoP) de la periferia y el estado de la caché (por ejemplo, hit y miss), mediante variables de encabezado dinámicas.