Participar do teste de origem para redução de aceitação de idioma

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.

Atual
Accept-Language: en-GB,en;q=0.9,de;q=0.8,fr;q=0.7
Proposta
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:

  1. 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.
  2. Adicione Content-Language ao cabeçalho de resposta HTTP para indicar os idiomas destinados ao público-alvo.
  3. Adicione Variants ao cabeçalho de resposta HTTP para indicar os idiomas aceitos pelos sites.
  4. [Opcional] Adicione Vary: Accept-Language à resposta HTTP para criar uma chave de cache para negociação de conteúdo.
  5. 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:

Uma captura de tela do cabeçalho de solicitação com o Accept-Language reduzido.

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

Os cabeçalhos da resposta inicial que contêm o token de teste da origem.

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:

  1. Remova o cabeçalho Origin-Trial do teste de redução de Accept-Language da resposta HTTP.
  2. [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 usar Variants com um valor vazio para fazer isso.
  3. [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.