Define encabezados personalizados

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

Los encabezados personalizados te permiten hacer lo siguiente:

  • Muestra datos geográficos sobre el cliente, como país, región o ciudad, que puedes usar para mostrar contenido localizado.
  • Determinar si una respuesta se entregó desde la caché (en su totalidad o en parte) y desde qué ubicación de caché se entregó.
  • Quitar, reemplazar o agregar encabezados de solicitud y respuesta

También puedes usar encabezados para enrutar solicitudes a diferentes orígenes. Si necesitas configurar encabezados de uso compartido de recursos entre dominios (CORS), configura una política de CORS para cada ruta.

Cómo establecer encabezados personalizados

Los encabezados se configuran en cada ruta, lo que te permite agregar y quitar encabezados de distintos contenidos, como manifiestos o segmentos de video.

Configura encabezados de solicitud personalizados por ruta al principio de la ruta de procesamiento de la CDN, antes de las decisiones de almacenamiento en caché. Por ejemplo, si configuras un encabezado cache-control como un encabezado personalizado por ruta, se verá afectado el comportamiento del almacenamiento en caché en la CDN.

De forma predeterminada, los valores de encabezado agregados se separan por comas y se agregan a los encabezados de la solicitud o respuesta con los mismos nombres de campo.

Para reemplazar los valores existentes, establece replace en true.

En el siguiente ejemplo de .routing.pathMatchers[].routeRules[].headerAction, se muestran los encabezados que se agregaron y quitaron en un recurso EdgeCacheService:

gcloud edge-cache services describe prod-media-service
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"

En este ejemplo, se realizan las acciones siguientes:

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

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

Variables de encabezado dinámico

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

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

Variable Descripción Compatible con los encabezados de solicitud Se admite para los encabezados de solicitud en una clave de caché Compatible con los encabezados de respuesta
cdn_cache_status Es una 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 de la derecha representa la caché más cercana al usuario.
client_city Es el nombre de la ciudad desde la que se originó 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, espacios y los siguientes caracteres de US-ASCII: !#$%&'*+-.^_`|~.
client_city_lat_long La latitud y longitud de la ciudad en la que se originó la solicitud, por ejemplo, 37.386051,-122.083851 para una solicitud de Mountain View.
client_region El país (o región) asociado a la dirección IP del cliente. Este es un código regional CLDR de Unicode, como US o FR. Para la mayoría de los países, estos códigos corresponden directamente a los códigos ISO-3166-2.
client_region_subdivision Es la subdivisión (por ejemplo, la provincia o el estado) del país asociado a la dirección IP del cliente. Este 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 Es el tiempo estimado de transmisión de ida y vuelta entre la CDN y el cliente HTTP(S), en milisegundos. Este 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 Es 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 El identificador único asignado a la solicitud que generó esta respuesta en un principio. Se propaga solo si es diferente de request_id para las respuestas almacenadas en caché.
origin_name El recurso EdgeCacheOrigin desde el que se envió la respuesta mediante proxy.
origin_request_header Refleja el valor del encabezado de origen en la solicitud de casos de uso de uso compartido de recursos entre dominios (CORS).
proxy_status Es una lista de proxies HTTP intermedios en la ruta de respuesta. El valor se define en la RFC 9209. Un recurso EdgeCacheService se representa con Google-Edge-Cache. Si la respuesta se recuperó del origen, Google-Edge-Cache-Origin representa un recurso EdgeCacheOrigin.
tls_sni_hostname La indicación del nombre del servidor (como se define en RFC 6066), si el cliente la proporciona durante el protocolo de enlace de TLS o QUIC. El nombre de host se convierte a minúsculas y se quita cualquier punto final.
tls_version Es la versión de TLS negociada entre el cliente y el balanceador de cargas durante el protocolo de enlace SSL. Los valores posibles son TLSv1, TLSv1.1, TLSv1.2 y TLSv1.3. Si el cliente se conecta con QUIC en lugar de TLS, el valor es QUIC.
tls_cipher_suite El conjunto de algoritmos de cifrado negociado durante el protocolo de enlace TLS. El valor lo define el registro del conjunto de algoritmos de cifrado TLS de IANA, por ejemplo, TLS_RSA_WITH_AES_128_GCM_SHA256. Este valor está vacío para QUIC y las conexiones de cliente no encriptadas.
user_agent_family Es la familia de navegadores que usa 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:

  • Se conservan los encabezados de solicitud y respuesta existentes, excepto los siguientes, que se quitan:

    • X-User-IP
    • Cualquier encabezado con X-Google o X-GFE
  • Las claves y los valores de los encabezados deben cumplir con la RFC 7230, y no se permiten formularios obsoletos.

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

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

  • Algunos encabezados se agregan o se les agregan valores. Media CDN siempre agrega o modifica ciertos encabezados, como Via y X-Forwarded-For.

  • Media CDN expande cualquier encabezado de respuesta con una variable compatible, incluso si el cliente o el origen la configuran. Esto te permite establecer encabezados dinámicos desde tu cliente (como un reproductor de video) o la infraestructura de origen, además de configurar encabezados personalizados. Media CDN no expande 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 mostrar varios valores que corresponden al nivel de caché que entregó la respuesta. Considera los siguientes lineamientos para interpretar la variable de encabezado {cdn_cache_status}:

  • Si el encabezado contiene hit, el contenido solicitado se recuperó de la caché.
  • Si el encabezado contiene miss, el contenido solicitado no se encontró en un nodo de caché y se tuvo que recuperar de un nodo upstream.
  • Si el encabezado contiene fetch, el contenido solicitado se recuperó del origen.
  • Si el encabezado contiene uncacheable, algunos o todos los componentes de la infraestructura de almacenamiento en caché consideraron que el contenido solicitado no se podía almacenar en caché.

    • Si el encabezado también contiene hit o miss, algunos componentes de almacenamiento en caché consideraron que el contenido solicitado no se podía almacenar en caché, mientras que otros sí.
    • Si el encabezado tampoco contiene hit o miss, todos los componentes de almacenamiento en caché consideraron que el contenido solicitado no se podía almacenar en caché, y todas las solicitudes de este contenido se recuperaron desde el origen. Para asegurarte de que tu contenido se almacene en caché de forma adecuada, revisa los requisitos de origen de Media CDN.

Encabezados predeterminados

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

Encabezado Descripción Solicitud Respuesta
x-request-id Es un identificador único para la solicitud determinada. Este valor también se agrega al registro de solicitudes como jsonPayload.requestId, lo que te permite correlacionar una solicitud o respuesta del cliente con una entrada de registro.
age

Muestra la antigüedad del objeto almacenado en caché (cantidad de segundos que ha estado en la caché). Por lo general, la antigüedad se calcula en función del momento en que el objeto se almacenó en caché en una ubicación de caché de cola larga (escudo).

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

via

Identifica a Google como el proxy intermedio.

Se establece como 1.1 google y no se puede cambiar.

server Se establece como Google-Edge-Cache.
cdn-loop

Identifica bucles, por ejemplo, en los que el host de origen es el mismo que el host (borde) para el usuario.

Se agrega un token de google al encabezado según la RFC 8586. No se puede cambiar el token.

forwarded

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

Estos encabezados te 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 la CDN de Media a través de HTTPS, el encabezado forwarded se propaga de la siguiente manera:

forwarded: [for=192.0.2.60;proto=https]

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

x-forwarded-for

La versión estándar no estructurada y de hecho del encabezado forwarded. Por lo general, los valores están separados por comas.

Ambos encabezados se envían en una solicitud para admitir orígenes heredados que podrían no estar al tanto del encabezado forwarded.

Las claves de encabezado están en minúsculas para los encabezados de solicitud y respuesta, ya que las claves de encabezado no distinguen mayúsculas de minúsculas.

Se pueden agregar otros encabezados, como la ubicación del punto de presencia (PoP) perimetral y el estado de la caché (como hit y miss), con las variables de encabezado dinámico.