Summary

  • O RFC 2068, de janeiro de 1997, documentou Accept-Language, campo em que o navegador podia listar idiomas aceitáveis com valores de preferência.
  • Ao escolher uma versão a partir desse campo, o servidor podia indicar Vary: Accept-Language; o cache teria então de comparar a preferência antes de reaproveitar a resposta armazenada.

O exemplo do RFC 2068 de janeiro de 1997 parece uma comanda: dinamarquês em primeiro lugar, inglês britânico depois, outras formas de inglês em seguida. Os valores q expressam a preferência relativa. O navegador entrega a lista junto com a URL, e o servidor pode escolher uma edição já na primeira resposta. A pessoa não precisa começar a visita preenchendo um formulário de idioma.

O problema chega com o segundo leitor. Os dois pedem /news, mas um navegador prefere dinamarquês e o outro, francês. O servidor pode enviar páginas diferentes para a mesma URL. Um cache comum que guarda apenas o endereço tem uma cópia pronta e uma memória incompleta. Sem o motivo da escolha, corre o risco de oferecer a edição anterior ao visitante seguinte.

O campo Vary acrescenta essa memória. O RFC 9110, que define a semântica HTTP atual, explica que Vary: accept-language aponta para a informação da requisição que pode ter influenciado a versão servida. O RFC 9111 sobre cache estabelece o passo seguinte: se o campo indicado não corresponde ao da requisição original, a resposta armazenada não pode ser usada sem revalidação. O cache pode guardar a edição dinamarquesa; precisa guardar também o pedido a que ela respondeu.

O próprio RFC 9111 descreve uma falha sem glamour: esquecer Vary na resposta padrão. Nesse caso, essa versão pode continuar sendo escolhida para pedidos posteriores, embora exista outra mais adequada. O atendente é rápido, a etiqueta está ausente, e o jornal chega à mesa errada. Nenhuma tradução precisa estar incorreta para que a experiência dê errado.

Há ainda o Content-Language, que caracteriza o público linguístico da representação entregue. RFC 9110 separa as funções: Accept-Language informa a preferência do navegador, Content-Language descreve a edição recebida e Vary orienta quem vai reutilizá-la. Três campos ajudam a localizar um erro em três etapas distintas.

O navegador, afinal, pode não ser do leitor. O guia do W3C para negociação de idiomas usa o caso de um navegador emprestado, configurado para outra pessoa, e recomenda controles visíveis para mudar de idioma. Já em 1997, o RFC notava que uma lista completa de preferências enviada em toda requisição poderia revelar mais do que o usuário desejava; o padrão atual exige controle sobre essa lista.

O serviço só funciona bem quando cada papel fica claro: o navegador sugere, o servidor escolhe, o cache guarda a comanda e o leitor pode pedir outro prato. Uma URL sozinha nunca contou a história inteira da escolha.