Crea encabezados de solicitudes definidos por el usuario

Los encabezados de solicitudes definidos por el usuario te permiten especificar encabezados adicionales que el balanceador de cargas agrega a las solicitudes. Estos encabezados pueden incluir información que el balanceador de cargas conoce sobre la conexión del cliente, incluida su latencia, la ubicación geográfica de la dirección IP del cliente y los parámetros de la conexión TLS.

Los encabezados de solicitudes definidos por el usuario son compatibles con los servicios de backend asociados a los balanceadores de cargas de HTTP(S).

Ten en cuenta que los balanceadores de cargas de HTTP(S) agregan ciertos encabezados de forma predeterminada a todas las solicitudes de HTTP(S) que envían mediante proxies a los backends. Para obtener más información al respecto, consulta esta sección sobre proxies de destino.

Cómo funcionan los encabezados de las solicitudes definidas por el usuario

Para habilitar los encabezados de solicitudes definidos por el usuario, especifica una lista de encabezados en una propiedad del recurso de servicio de backend. El balanceador de cargas agrega los encabezados a las solicitudes que reenvía a los backends.

Debes especificar cada encabezado como una string header-name:header-value. El encabezado debe contener dos puntos que separen el nombre del encabezado y su valor. Los nombres de un encabezado tienen las siguientes propiedades:

  • El nombre del encabezado debe ser una definición de nombre de campo de encabezado HTTP válida (según RFC 7230).
  • El nombre del encabezado no debe ser X-User-IP ni CDN-Loop.
  • El nombre del encabezado no debe comenzar con X-Google, X-Goog-, X-GFE ni X-Amz-.
  • El nombre de un encabezado no debe aparecer más de una vez en la lista de encabezados agregados.

Los valores de encabezado tienen las siguientes propiedades:

  • El valor del encabezado debe ser una definición de campo de encabezado HTTP válida (según RFC 7230, con formularios obsoletos no permitidos).
  • El valor del encabezado puede estar en blanco.
  • El valor del encabezado puede incluir una o más variables, entre llaves, que se expanden a los valores que proporciona el balanceador de cargas. En la sección siguiente, se muestra una lista de las variables permitidas en el valor del encabezado.

Por ejemplo, puedes especificar un encabezado con dos nombres de variable: uno para la región del cliente y otro para su ciudad. La herramienta de línea de comandos de gcloud tiene --custom-request-header, una marca para especificar encabezados de solicitudes. Por ejemplo:

    --custom-request-header 'X-Client-Geo-Location:{client_region},{client_city}'

Para los clientes ubicados en Mountain View, California, el balanceador de cargas agrega un encabezado de la manera siguiente:

X-Client-Geo-Location:US,Mountain View

Este es el formato general para la marca:

    --custom-request-header='HEADER_NAME:[HEADER_VALUE]'

Los valores del encabezado deben incluirse entre llaves. Por ejemplo:

    --custom-request-header='X-PLACE:{client_city},{client_city_lat_long}'

Usa solo comillas rectas (') en este comando.

Para obtener más información sobre la configuración de encabezados de solicitudes personalizados, consulta Trabaja con encabezados de solicitudes definidos por el usuario.

Variables que pueden aparecer en el valor del encabezado

Las variables siguientes pueden aparecer en los valores de encabezado de solicitudes.

Variable Descripción
client_rtt_msec Tiempo estimado de transmisión de ida y vuelta entre el balanceador de cargas 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 del balanceador de cargas, según RFC 2988.
client_region El país (o la región) asociado a la dirección IP del cliente. Este es un código de región 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 Subdivisión (p. ej., una provincia o un 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_city 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 Latitud y longitud de la ciudad donde se originó la solicitud, por ejemplo, “37.386051,-122.083851” para una solicitud de Mountain View.
tls_sni_hostname 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 redacta en minúsculas y se quita cualquier punto final.
tls_version Versión de TLS negociada entre el cliente y el balanceador de cargas durante el protocolo de enlace de SSL. Los valores posibles son: “TLSv1”, “TLSv1.1”, “TLSv1.2” y “TLSv1.3”. Si el cliente se conectó mediante QUIC en lugar de TLS, el valor será “QUIC”.
tls_cipher_suite Conjunto de algoritmo de cifrado negociado durante el protocolo de enlace de TLS. El valor son cuatro dígitos hexadecimales definidos por Cipher Suite Registry de TLS de IANA, por ejemplo, “009C” para TLS_RSA_WITH_AES_128_GCM_SHA256. Este valor está vacío para QUIC y las conexiones de cliente no encriptadas.

El balanceador de cargas expande variables a strings vacías cuando no puede determinar sus valores; por ejemplo, para variables de ubicación geográfica cuando la ubicación de la dirección IP es desconocida o en casos de parámetros TLS cuando TLS no está en uso.

Los valores geográficos (regiones, subdivisiones y ciudades) son estimaciones basadas en la dirección IP del cliente. De vez en cuando, Google actualiza los datos que proporcionan estos valores para mejorar la precisión y reflejar los cambios geográficos y políticos.

Los encabezados que agrega el balanceador de cargas reemplazan los encabezados existentes con el mismo nombre. Los nombres de encabezado no distinguen entre mayúsculas y minúsculas. Cuando los nombres de encabezado se pasan a un backend HTTP/2, el protocolo HTTP/2 codifica los nombres de encabezado como minúsculas.

En los valores de encabezado, los espacios en blanco iniciales y finales son insignificantes y no se pasan al backend. Para permitir que se usen llaves en valores de encabezado, el balanceador de cargas interpreta dos llaves de apertura ({{) como una sola llave de apertura ({) y dos llaves de cierre (}}) como una sola llave de cierre (}).

Trabaja con encabezados de solicitudes definidos por el usuario

Las limitaciones siguientes se aplican a los encabezados de solicitud definidos por el usuario:

  • Puedes especificar un máximo de 16 encabezados de solicitud personalizados por servicio de backend.
  • El tamaño total de todos los encabezados de solicitud definidos por el usuario por servicio de backend (nombre y valor combinados, antes de la expansión variable) no puede exceder los 8 KB.

Console

Haz lo siguiente para agregar encabezados de solicitud personalizados a un servicio de backend existente:

  1. Dirígete a la página de resumen del balanceo de cargas.
    Ir a la página Balanceo de cargas
  2. Haz clic en Backends.
  3. Haz clic en el nombre de un servicio de backend.
  4. Haz clic en Editar .
  5. Haz clic en Advanced configurations (Session affinity, connection draining timeout, security policies).
  6. En Encabezados de solicitud personalizados, haz clic en Agregar encabezado.
  7. Ingresa el nombre del encabezado y el valor del encabezado para el encabezado de la solicitud personalizado.
  8. Ingresa cualquier encabezado de solicitud personalizado adicional.
  9. Haz clic en Guardar.

Haz lo siguiente para quitar un encabezado de solicitud personalizado de un servicio de backend:

  1. Dirígete a la página de resumen del balanceo de cargas.
    Ir a la página Balanceo de cargas
  2. Haz clic en Backends.
  3. Haz clic en el nombre de un servicio de backend.
  4. Haz clic en Editar .
  5. Haz clic en Advanced configurations (Session affinity, connection draining timeout, security policies).
  6. Haz clic en la X junto al nombre del encabezado de solicitud personalizado que deseas quitar.
  7. Haz clic en Guardar.

gcloud

Usa este comando para crear un servicio de backend con encabezados de solicitudes definidos por el usuario:

gcloud compute backend-services create NAME \
  --global-health-checks \
  --global \
  --protocol HTTPS \
  --https-health-check https-basic-check \
  --custom-request-header 'HEADER_NAME:[HEADER_VALUE]'

Para agregar más encabezados de solicitudes, especifica un nombre y un valor de encabezado únicos con la marca --custom-request-header.

Usa este comando para agregar encabezados de solicitudes definidos por el usuario a un servicio de backend existente:

gcloud compute backend-services update NAME \
  --global \
  --custom-request-header 'HEADER_NAME:[HEADER_VALUE]' \
  --custom-request-header 'HEADER_NAME:[HEADER_VALUE]'

Ten en cuenta que lo anterior reemplaza todo encabezado que ya esté en el servicio de backend con los encabezados de solicitud que especifiques en el comando.

Usa este comando para quitar todos los encabezados de un servicio de backend:

gcloud compute backend-services update NAME \
  --global \
  --no-custom-request-headers

API

Realiza una solicitud PATCH al método backendServices.patch.

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/[BACKEND_SERVICE_NAME]
"customRequestHeaders": [
  "client_city:Mountain View"
]

Próximos pasos