Os cabeçalhos personalizados de solicitação e resposta permitem especificar mais cabeçalhos que o balanceador de carga HTTP(S) externo adiciona a solicitações e respostas. Esses cabeçalhos podem incluir informações sobre a conexão do cliente que são detectadas 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.
Cabeçalhos de solicitação personalizados são compatíveis com serviços de back-end, enquanto cabeçalhos de resposta personalizados são compatíveis com serviços e buckets de back-end.
O balanceamento de carga HTTP(S) adiciona determinados cabeçalhos por padrão a todas as solicitações HTTP(S) e respostas que são transmitidas por proxy entre os back-ends e os clientes. Para mais informações, consulte Protocolos de destino.
Antes de começar
Se necessário, atualize para a versão mais recente do SDK do Cloud:
gcloud components update
Como os cabeçalhos personalizados funcionam
Os cabeçalhos personalizados funcionam da seguinte maneira:
Quando o balanceador de carga HTTP(S) externo faz uma solicitação ao back-end, o balanceador de carga adiciona cabeçalhos de solicitação.
O balanceador de carga HTTP(S) externo define os cabeçalhos de resposta antes de retornar as respostas ao cliente.
Os cabeçalhos de solicitação e resposta não influenciam o comportamento do armazenamento em cache ou do balanceador de carga.
Para ativar cabeçalhos personalizados, especifique uma lista de cabeçalhos em uma propriedade do serviço ou bucket de back-end.
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 nome de campo de cabeçalho HTTP (de acordo com a RFC 7230).
- O nome do cabeçalho não pode ser
X-User-IP
nemCDN-Loop
. - O nome do cabeçalho não pode começar com
X-Google
,X-Goog-
,X-GFE
ouX-Amz-
- 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
. Por 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. Por exemplo:
--custom-request-header='X-PLACE:{client_city},{client_city_lat_long}'
Use apenas aspas normais ('
) neste comando.
Variáveis que podem aparecer no valor do cabeçalho
As variáveis a seguir podem aparecer em valores de cabeçalho personalizados.
Variável | Descrição |
---|---|
cdn_cache_id | Código do local e ID da instância de cache usada para exibir a solicitação.
Esse é o mesmo valor preenchido no campo jsonPayload.cacheId dos
registros de solicitação do Cloud CDN no Logging.
|
cdn_cache_status | Status atual do cache. Os valores podem ser hit ,
miss , revalidated , stale ,
uncacheable ou disabled de qualquer objeto
exibido por um Cloud CDN com back-end ativado.
|
origin_request_header | Reflete o valor do cabeçalho Origin na solicitação
de casos de uso de compartilhamento de recursos entre origens (CORS).
|
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. Esté
é 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 ID 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 US-ASCII, números, espaços 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 de
Mountain View.
|
tls_sni_hostname | Indicação do nome do servidor (conforme definido na RFC 6066, 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 TLSv1.3 . Se
o cliente se conectar usando QUIC em vez de TLS, o valor será
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 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:
- Variáveis de localização geográfica quando a localização do endereço IP é desconhecida
- Parâmetros TLS quando o TLS não está em uso
- O
{origin_request_header}
quando a solicitação não inclui um cabeçalhoOrigin
- O cabeçalho
{cdn_cache_status}
quando incluído em um cabeçalho de solicitação
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 personalizados
Console
Para adicionar cabeçalhos de solicitação personalizados a um serviço de back-end existente:
- Acesse a página de resumo do balanceamento de carga.
Acessar a página "Balanceamento de carga" - Clique em Back-ends.
- Clique no nome de um serviço de back-end.
- Clique em Editar .
- Clique em Configurações avançadas (afinidade de sessão, tempo limite de diminuição da conexão, políticas de segurança).
- Em Cabeçalhos de solicitação personalizados, clique em Adicionar cabeçalho.
- Insira o nome do cabeçalho e o valor do cabeçalho para o cabeçalho da solicitação personalizada.
- Insira qualquer cabeçalho adicional da solicitação personalizada.
- Clique em Salvar.
Para remover um cabeçalho de solicitação personalizado de um serviço de back-end:
- Acesse a página de resumo do balanceamento de carga.
Acessar a página "Balanceamento de carga" - Clique em Back-ends.
- Clique no nome de um serviço de back-end.
- Clique em Editar .
- Clique em Configurações avançadas (afinidade de sessão, tempo limite de diminuição da conexão, políticas de segurança).
- Clique no X ao lado do nome do cabeçalho da solicitação personalizado que você quer remover.
- Clique em Salvar.
gcloud
Para criar um serviço de back-end com cabeçalhos de solicitação personalizados:
gcloud beta compute backend-services create BACKEND_SERVICE_NAME \ --global-health-checks \ --global \ --protocol HTTPS \ --health-checks 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 sinalização --custom-request-header
.
Para adicionar cabeçalhos personalizados a um serviço de back-end existente:
gcloud beta compute backend-services update BACKEND_SERVICE_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 beta compute backend-services update BACKEND_SERVICE_NAME \ --global \ --no-custom-request-headers
API
Faça uma solicitação PATCH
ao método backendServices.patch
.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME "customRequestHeaders": [ "client_city:Mountain View" ]
Como trabalhar com cabeçalhos de resposta personalizados
Console
Para adicionar cabeçalhos de solicitação personalizados a um serviço de back-end existente:
- Acesse a página de resumo do balanceamento de carga.
Acessar a página "Balanceamento de carga" - Clique em Back-ends.
- Clique no nome de um serviço de back-end.
- Clique em Editar .
- Clique em Configurações avançadas (afinidade de sessão, tempo limite de diminuição da conexão, políticas de segurança).
- Em Cabeçalhos de resposta personalizados, clique em Adicionar cabeçalho.
- Insira o nome do cabeçalho e o valor do cabeçalho para o cabeçalho da solicitação personalizada.
- Insira qualquer outro cabeçalho de resposta personalizado.
- Clique em Salvar.
Para remover um cabeçalho de resposta personalizado de um serviço de back-end:
- Acesse a página de resumo do balanceamento de carga.
Acessar a página "Balanceamento de carga" - Clique em Back-ends.
- Clique no nome de um serviço de back-end.
- Clique em Editar .
- Clique em Configurações avançadas (afinidade de sessão, tempo limite de diminuição da conexão, políticas de segurança).
- Clique no X ao lado do nome do cabeçalho de resposta personalizado que você quer remover.
- Clique em Salvar.
gcloud
Nos serviços de back-end, use o comando gcloud compute backend-services
create ou
gcloud compute backend-services
update com
a sinalização --custom-response-header
.
Nos buckets de back-end, use o comando gcloud compute backend-buckets
create ou
gcloud compute backend-buckets
update com
a sinalização --custom-response-header
.
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME --custom-response-header='HEADER_NAME:[HEADER_VALUE]'
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME --custom-response-header='HEADER_NAME:[HEADER_VALUE]'
Exemplo:
gcloud compute backend-buckets update gaming-lab \ --custom-response-header='X-Frame-Options: DENY'
API
Nos buckets de back-end, use a chamada de API Method: backendBuckets.insert ou Method: backendBuckets.update.
Nos serviços de back-end, use a chamada de API Method: backendServices.insert ou Method: backendServices.update.
Use uma das seguintes chamadas de API:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET_NAME POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME
Adicione o snippet a seguir ao corpo da solicitação JSON:
"cdnPolicy": { "customResponseHeaders":HEADER_NAME:[HEADER_VALUE] }
Como definir cabeçalhos de resposta para o Cloud Storage
Se você precisar definir cabeçalhos HTTP em respostas do
Cloud Storage, como política de recursos de origem cruzada,
X-Frame-Options
ou cabeçalhos X-XSS-Protection
, o Google Cloud oferece
a opção de usar cabeçalhos personalizados do Cloud CDN com o
Cloud Storage. Para isso, configure cabeçalhos personalizados no nível do
bucket de back-end do balanceador de carga, conforme descrito nesta página.
Limitações
As seguintes limitações se aplicam a cabeçalhos personalizados:
- Só é possível especificar, no máximo, 16 cabeçalhos de solicitação personalizados por serviço de back-end.
- Só é possível especificar, no máximo, 16 cabeçalhos de resposta personalizados para cada serviço de back-end.
- O tamanho total de todos os cabeçalhos de solicitação personalizados por serviço de back-end (nome e valor combinados, antes da expansão da variável) não pode exceder 8 KB.
- O tamanho total de todos os cabeçalhos de resposta personalizados por serviço de back-end (nome e valor combinados, antes da expansão da variável) não pode exceder 8 KB.
A seguir
- Para um exemplo de caso de uso, consulte Como configurar um balanceador de carga com origem personalizada.