A redução de Accept-Language é um esforço para reduzir as superfícies de impressão digital passiva
reduzindo as preferências de idioma do usuário no cabeçalho
Accept-Language
e enviando apenas o idioma preferido do usuário (apenas um).
A partir do Chrome 109
Beta, vamos abrir o
teste de origem
para a redução de Accept-Language, permitindo que os sites ativem o recebimento do cabeçalho
Accept-Language
reduzido. Isso permitirá que os sites descubram e corrijam problemas
antes que a redução de Accept-Language
se torne o comportamento padrão no Chrome em uma
versão futura. Para testar o recurso antes do lançamento para a população estável,
ative e teste antes da data de lançamento do Chrome 109 (atualmente
programada para 10 de janeiro de 2023).
Confira os exemplos de cabeçalho Accept-Language
antes e depois da redução abaixo.
Accept-Language: en-GB,en;q=0.9,de;q=0.8,fr;q=0.7
Accept-Language: en-GB
Confira abaixo uma visão geral do teste de origem e o que esperar. Compartilhe seu feedback sobre essa mudança ou qualquer problema encontrado durante o teste de origem no repositório do GitHub Accept-Language Reduction.
O que é Accept-Language?
A string Accept-Language é compartilhada em cada solicitação HTTP e exposta em JavaScript para todos os recursos carregados pelo navegador. Atualmente, ele contém todos os idiomas de preferência do usuário.
Por que o Accept-Language está sendo reduzido?
A redução de Accept-Language é um esforço para reduzir as superfícies de impressão digital passiva no Chrome.
No momento, o cabeçalho Accept-Language
é compartilhado por padrão em todas as solicitações
HTTP e exposto em JavaScript para todos os recursos carregados pelo navegador. Ele
contém todas as preferências de idioma do usuário. Em vez de o navegador enviar
a lista completa de idiomas que o usuário configurou caso os sites queiram
oferecer conteúdo multilíngue, estamos lançando uma nova maneira de indicar
conteúdo multilíngue, e o navegador será responsável por fazer a negociação
de idioma e mostrar o idioma preferido.
Outro motivo é que muitos sites podem não estar usando os cabeçalhos Accept-Language
para negociação de idioma. Por exemplo, um
estudo indica que apenas 7,2% dos
10.000 sites mais acessados usam Accept-Language
. O modo de navegação anônima do Chrome já reduziu o
Accept-Language
para um.
O que isso significa para os desenvolvedores da Web?
Os sites que dependem de Accept-Language
para fazer a negociação de idioma precisam
estar preparados para receber Accept-Language
reduzido e considerar a participação no
teste de origem. Os valores reduzidos de Accept-Language
vão aparecer em:
- O cabeçalho da solicitação HTTP
Accept-Language
. - O getter JavaScript
navigator.languages
.
O navegador vai ser responsável pela negociação de idioma para selecionar o
idioma preferido do usuário a ser enviado aos sites. Para isso, os sites precisam
adicionar dois cabeçalhos
Variants
(um novo cabeçalho indica que os sites oferecem suporte a idiomas) Accept-Language
e
Content-Language
no
cabeçalho de resposta (confira o exemplo detalhado abaixo).
Os planos Accept-Language
reduzidos atualmente não incluem iOS e WebView, e
essas plataformas vão continuar recebendo a lista completa de Accept-Language
dos usuários.
O suporte a essas plataformas está previsto para uma data posterior.
Teste de origem para redução de Accept-Language
Um teste de origem exige que o site participante forneça um token na
resposta, que informa ao navegador para ativar o teste especificado. No entanto, isso
significa que na solicitação inicial do navegador ao site, não há como saber
se o site está participando de um teste de origem. Isso significa que a solicitação inicial
em uma sessão não vai enviar o Accept-Language header
reduzido.
As solicitações de subrecursos nessa página, de mesma origem e entre origens, vão
receber o cabeçalho Accept-Language
reduzido. As navegações subsequentes de mesma origem
também vão receber o cabeçalho Accept-Language
reduzido. As navegações entre origens
voltarão a enviar o cabeçalho completo, enquanto as solicitações entre origens na
página (como solicitações de iframe de terceiros) ainda vão enviar o cabeçalho Accept-Language
reduzido se a solicitação de frame de nível superior tiver um token de teste de origem válido.
Isso é semelhante ao teste de origem de redução do user agent. Se você quiser saber mais sobre a implementação interna do Chromium, leia mais em Como implementar o cabeçalho HTTP "Reduce Accept-Language".
Participar do teste de origem de redução de Accept-Language
Leia mais orientações em Como começar com os testes de origem do Chrome, mas as etapas essenciais estão mostradas abaixo.
Etapa 1
Para se inscrever no teste de origem e receber um token para seus domínios, acesse a página Teste para redução de Accept-Language.
Etapa 2
Atualize os cabeçalhos de resposta HTTP:
- Adicione
Origin-Trial: <ORIGIN TRIAL TOKEN>
ao cabeçalho de resposta HTTP, em que <ORIGIN TRIAL TOKEN
> contém o token recebido ao se registrar para o teste de origem. - Adicione
Content-Language
ao cabeçalho de resposta HTTP para indicar os idiomas destinados ao público-alvo. - Adicione
Variants
ao cabeçalho de resposta HTTP para indicar os idiomas aceitos pelos sites. - [Opcional] Adicione
Vary: Accept-Language
à resposta HTTP para criar uma chave de cache para negociação de conteúdo. - A definição desses cabeçalhos só aciona a negociação de idioma do navegador para a origem especificada (uma possível reinicialização da solicitação inicial). Para que os sites mostrem a representação de idioma correta para os usuários, você também precisa atualizar os sites que enviam o conteúdo com base no cabeçalho Accept-Language do usuário (confira o exemplo abaixo).
Etapa 3
Carregue seu site no Chrome M109 Beta (ou mais recente) e comece a receber a string Accept-Language reduzida.
Envie problemas ou feedback para o repositório do GitHub do Accept-Language Reduction.
Demonstração
Para conferir uma demonstração de um site multilíngue que ativou o teste de origem (junto com o código-fonte), acesse https://reduce-accept-language.glitch.me/.
Para uma demonstração de como ativar e desativar o teste de origem (junto com o código-fonte), consulte https://reduce-accept-language-ot.glitch.me/.
Por exemplo, example.com
oferece suporte a ja
(japonês) e en
(inglês). Uma
solicitação pode ser:
GET / HTTP/1.1
Host: example.com
Accept-Language: en
O site sabe que o usuário prefere conteúdo em inglês com base no accept-language do usuário. Os cabeçalhos de resposta podem incluir:
HTTP/1.1 200 OK
Content-Language: en
Variants: Accept-Language=(en ja)
Origin-Token: a-valid-token
Se o usuário tiver preferência por conteúdo em japonês, a solicitação será:
GET / HTTP/1.1
Host: example.com
Accept-Language: ja
Nesse caso, o site responde com cabeçalhos para conteúdo em japonês:
HTTP/1.1 200 OK
Content-Language: ja
Variants: Accept-Language=(en ja)
Origin-Token: a-valid-token
No lado do servidor, o site pode estar procurando suporte a idiomas específicos, mas retornando a um padrão se nenhum suporte for detectado:
if(accept_language == 'ja') {
res.response('ja_page')
}
else {
res.response('en_page')
}
No exemplo acima, example.com
responde en
ou ja
com base no
valor Accept-Language
, retornando en
por padrão se nenhum deles corresponder. Nesse caso, o
site também pode fornecer redirecionamentos para as páginas de idioma correspondentes, /en
ou
/ja
, com base no valor Accept-Language
. Confira exemplos detalhados relacionados a redirecionamentos na documentação de implementação.
Suporte a testes de origem de terceiros
No momento, não oferecemos suporte para o registro de domínios como
terceiros para o teste.
Se você opera um serviço implementado como um subrecurso em várias origens,
como a veiculação de anúncios ou a análise, só vai receber o cabeçalho Accept-Language
reduzido se o site de nível superior estiver participando do teste de origem.
Validar se o teste de origem está funcionando
O guia de solução de problemas com testes de origem do Chrome oferece uma lista de verificação completa para garantir que seu token esteja configurado corretamente.
Você pode configurar vários idiomas e a prioridade deles em
chrome://settings/languages
ou Configurações → Idiomas. Selecione um idioma que seu site não ofereça suporte e mova-o para o topo da lista
para garantir que a renegociação adicional seja acionada.
Os cabeçalhos da resposta inicial que contêm o token de teste de origem devem ser semelhantes a este:

Os cabeçalhos de solicitação subsequentes que contêm o Accept-Language reduzido têm a seguinte aparência:

Parar de participar do teste de origem
A qualquer momento durante o teste, você pode parar de participar e receber a lista completa de Accept-Language do usuário. Para parar de participar:
- Remova o cabeçalho
Origin-Trial
do teste de redução de Accept-Language da resposta HTTP. - [Opcional] Remova o cabeçalho
Variants
, que é adicionado para ativar o teste de origem na sua resposta HTTP se você não quiser enviar esse cabeçalho. Também é possível usarVariants
com um valor vazio para fazer isso. - [Opcional] Remova o cabeçalho
Content-Language
, que é adicionado para ativar o teste de origem na sua resposta HTTP se você não quiser enviar esse cabeçalho.
Duração do teste do Origin
O teste de origem da redução de Accept-Language vai durar pelo menos seis meses, o que corresponde a cerca de seis marcos do Chrome. O teste de origem vai aparecer na M109 e terminar com a M114, que é a última versão do Chrome com o teste disponível. Nesse ponto, o Chrome vai avaliar o feedback do teste de origem antes de prosseguir com o envio da string Accept-Language reduzida de forma escalonada: primeiro reduza o cabeçalho HTTP Accept-Language e depois reduza a interface JS. Se um site precisar de mais tempo para testar, ele poderá participar de um teste de origem de descontinuação posterior, que permitiria o acesso à string Accept-Language completa por pelo menos mais seis meses. Publicaremos mais detalhes sobre o teste de descontinuação quando ele estiver pronto.
Compartilhar feedback
Envie problemas ou feedback para o repositório do GitHub do Accept-Language Reduction.