Como criar cabeçalhos de solicitação definidos pelo usuário

Os cabeçalhos de solicitação definidos pelo usuário permitem especificar outros cabeçalhos para serem adicionados a solicitações pelo balanceador de carga. Esses cabeçalhos podem incluir informações sobre a conexão do cliente que são conhecidas do balanceador de carga, como a latência para o cliente, a localização geográfica do endereço IP do cliente e os parâmetros da conexão TLS.

Os cabeçalhos de solicitação definidos pelo usuário são compatíveis com serviços de back-end associados a balanceadores de carga HTTP(S).

Observe que os balanceadores de carga HTTP(S) adicionam determinados cabeçalhos por padrão a todas as solicitações HTTP(S) que são enviados por proxy para os back-ends. Para mais informações a esse respeito, consulte Proxies de destino.

Como funcionam os cabeçalhos de solicitação definidos pelo usuário

Para ativar cabeçalhos de solicitação definidos pelo usuário, especifique uma lista de cabeçalhos em uma propriedade do recurso Serviço de back-end. O balanceador de carga adiciona os cabeçalhos às solicitações encaminhadas para os back-ends.

Especifique cada cabeçalho como uma string header-name:header-value. O cabeçalho precisa conter dois pontos separando o nome e o valor dele. Os nomes de cabeçalho têm as seguintes propriedades:

  • O nome do cabeçalho precisa ser uma definição válida de campo de cabeçalho HTTP (segundo a RFC 7230, com formulários obsoletos não permitidos).
  • O nome de cabeçalho não pode ser X-User-IP ou começar com X-Google ou X-GFE.
  • Um nome de cabeçalho não pode aparecer mais de uma vez na lista de cabeçalhos adicionados.

Os valores do cabeçalho têm as seguintes propriedades:

  • O valor do cabeçalho precisa ser uma definição válida de campo de cabeçalho HTTP (segundo a RFC 7230, com formulários obsoletos não permitidos).
  • O valor do cabeçalho pode estar em branco.
  • O valor do cabeçalho pode incluir uma ou mais variáveis, delimitadas por chaves, que se expandem para valores fornecidos pelo balanceador de carga. Na próxima seção, há uma lista de variáveis ​​permitidas no valor do cabeçalho.

Por exemplo, é possível especificar um cabeçalho com dois nomes de variáveis, um para a região e outro para a cidade do cliente. A ferramenta de linha de comando gcloud tem uma sinalização para especificar cabeçalhos de solicitação, --custom-request-header. Exemplo:

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

Para clientes localizados em Mountain View, Califórnia, este seria o cabeçalho adicionado pelo balanceador de carga:

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

O formato geral da sinalização é:

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

Os valores do cabeçalho precisam ser colocados entre chaves. Exemplo:

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

Use apenas aspas normais (') neste comando.

Para mais informações sobre a configuração de cabeçalhos de solicitação personalizados, consulte Como trabalhar com cabeçalhos de solicitação definidos pelo usuário.

Variáveis ​​que podem aparecer no valor do cabeçalho

As variáveis ​​a seguir podem aparecer nos valores do cabeçalho da solicitação.

Variável Descrição
client_rtt_msec Tempo estimado de retorno para transmissão entre o balanceador de carga e o cliente HTTP(S), em milissegundos. É o parâmetro de tempo de retorno suavizado (SRTT, na sigla em inglês) medido pela pilha TCP do balanceador de carga, de acordo com a RFC 2988.
client_region O país (ou região) associado ao endereço IP do cliente. "Esse é um código de região Unicode CLDR, como" "US" "ou" "FR" "." Na maioria dos países, esses códigos correspondem diretamente a códigos ISO-3166-2.
client_region_subdivision Subdivisão (por exemplo, uma província ou um estado) do país associado ao endereço IP do cliente. "Este é um código de subdivisão Unicode CLDR, como" "USCA" "ou" "CAON" "." Esses códigos Unicode são derivados das subdivisões definidas pelo padrão ISO-3166-2.
client_city Nome da cidade de origem da solicitação, por exemplo, "Mountain View" para Mountain View, Califórnia. Não há uma lista canônica de valores válidos para essa variável. Os nomes das cidades podem conter letras, números, espaços, caracteres US-ASCII e os seguintes caracteres: ``!#$%&'*+-.^_`|~``.
client_city_lat_long Latitude e Longitude da cidade de origem da solicitação (por exemplo, "37.386051, -122.083851" para uma solicitação em Mountain View).
tls_sni_hostname Indicação do nome do servidor (conforme definido na RFC 6066 (link em inglês)), caso ele seja fornecido pelo cliente durante o handshake do TLS ou do QUIC. O nome do host é convertido para letras minúsculas e qualquer ponto à direita é removido.
tls_version Versão de TLS negociada entre o cliente e o balanceador de carga durante o handshake de SSL. Os valores possíveis incluem: "TLSv1", "TLSv1.1", "TLSv1.2" e, se o cliente estiver conectado usando QUIC em vez de TLS, "QUIC".
tls_cipher_suite Pacote de criptografia negociado durante o handshake de TLS. O valor corresponde a quatro dígitos hexadecimais definidos pelo Registro do pacote de criptografia TLS da IANA (por exemplo, “009C” para TLS_RSA_WITH_AES_128_GCM_SHA256). Este valor fica em branco para QUIC e para conexões do cliente não criptografadas.

O balanceador de carga expande variáveis ​​para strings vazias quando não consegue determinar os valores delas. Por exemplo, para variáveis ​​de localização geográfica quando a localização do endereço IP é desconhecida ou para parâmetros de TLS quando o TLS não está em uso.

Valores geográficos (regiões, subdivisões e cidades) são estimativas baseadas no endereço IP do cliente. De tempos em tempos, o Google atualiza os dados que fornecem esses valores para melhorar a precisão e refletir as mudanças geográficas e políticas.

Os cabeçalhos adicionados pelo balanceador de carga substituem cabeçalhos já existentes com o mesmo nome. Os nomes de cabeçalho não diferenciam maiúsculas de minúsculas. Quando os nomes de cabeçalho são passados ​​para um back-end HTTP/2, o protocolo HTTP/2 os codifica como minúsculas.

Nos valores de cabeçalho, os espaços em branco iniciais e finais são insignificantes e não são passados ​​para o back-end. Para permitir chaves nos valores de cabeçalho, o balanceador de carga interpreta duas chaves de abertura ({{) como uma única chave de abertura ({) e duas chaves de fechamento (}}) como uma única chave de fechamento (}).

Como trabalhar com cabeçalhos de solicitação definidos pelo usuário

As limitações a seguir são aplicáveis a cabeçalhos de solicitação definidos pelo usuário:

  • Você pode especificar um máximo de 16 cabeçalhos de solicitação personalizados por serviço de back-end.
  • O tamanho total de todos os cabeçalhos de solicitação definidos pelo usuário por serviço de back-end (nome e valor combinados, antes da expansão da variável) não pode exceder 8 KB.

Console

Para adicionar cabeçalhos de solicitação personalizados a um serviço de back-end existente:

  1. Acesse a página de resumo do balanceamento de carga.
    Acessar a página "Balanceamento de carga"
  2. Clique em Back-ends.
  3. Clique no nome de um serviço de back-end.
  4. Clique no lápis Editar.
  5. Clique em Configurações avançadas (afinidade de sessão, tempo limite de diminuição da conexão, políticas de segurança).
  6. Em Cabeçalhos de solicitação personalizados, clique em Adicionar cabeçalho.
  7. Insira o nome do cabeçalho e o valor do cabeçalho para o cabeçalho da solicitação personalizada.
  8. Insira qualquer cabeçalho adicional da solicitação personalizada.
  9. Clique em Salvar.

Para remover um cabeçalho de solicitação personalizado de um serviço de back-end:

  1. Acesse a página de resumo do balanceamento de carga. Acessar a página "Balanceamento de carga"
  2. Clique em Back-ends.
  3. Clique no nome de um serviço de back-end.
  4. Clique no lápis Editar.
  5. Clique em Configurações avançadas (afinidade de sessão, tempo limite de diminuição da conexão, políticas de segurança).
  6. Clique no X ao lado do nome do cabeçalho da solicitação personalizada que quer remover.
  7. Clique em Salvar.

gcloud

Para criar um serviço de back-end com cabeçalhos de solicitação definidos pelo usuário:

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

Para adicionar mais cabeçalhos de solicitação, especifique um nome e um valor de cabeçalho exclusivos repetindo a solicitação --custom-request-header.

Para adicionar cabeçalhos de solicitação definidos pelo usuário a um serviço de back-end existente:

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

Observe que o cabeçalho acima substitui todos os cabeçalhos já presentes no serviço de back-end pelos cabeçalhos de solicitação especificados no comando.

Para remover todos os cabeçalhos de um serviço de back-end:

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

API

Faça uma solicitação PATCH ao método backendServices.patch.

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

A seguir

Para mais informações sobre serviços de back-end, leia Noções básicas sobre serviços de back-end (link em inglês)