Implementar roteamento de idioma por URL para habilitar cache CDN/Varnish#397
Closed
Implementar roteamento de idioma por URL para habilitar cache CDN/Varnish#397
Conversation
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
…ment Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Fix session cookie issue preventing page caching
Implementar roteamento de idioma por URL para habilitar cache CDN/Varnish
Feb 12, 2026
Member
|
@copilot não podemos alterar a URL adicionado o idioma. Faça outra abordagem |
- Remove language prefix from URLs (keep original URL structure) - Use Accept-Language header as primary language detection - Support ?lang= query parameter for explicit language selection - Remove Set-Cookie: language header to enable CDN caching - Store language in g.lang (per-request) instead of session - Update all templates to use g.lang instead of session.lang - CDN can now cache with Vary: Accept-Language instead of Vary: Cookie Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Contributor
Author
Implementação atualizada no commit f7a7307. Abordagem mudada: ✅ URLs mantidas sem alteração - não adiciona idioma no path A alternância de idiomas funciona via query parameter ( |
Member
|
NAO USAR ROTA COM IDIOMA POIS ISSO IMPACTARÁ DIRETAMENTE NA APP DE CONTAGEM DE ACESSOS QUE NÃO ESTÁ PREPAPRADA PARA RECONHECER ESTE PADRÃO DE ROTA |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fix session cookie cache issue - Alternative approach using Accept-Language header
Problem
The website uses session cookies for language selection, which prevents CDN/Varnish caching due to
Vary: CookieandSet-Cookieheaders.Solution (Updated Approach)
Based on feedback, URLs are NOT changed. Instead, language detection uses:
?lang=for explicit language selection (via language switcher)g.langper-request onlyURL Structure:
Key Changes
add_language_code()function removedget_locale()- Reads from query param or Accept-Language header, stores ing.langset_locale()- Redirects with?lang=query parameter instead of storing in sessionsession.lang→g.lang,session.langs→g.langsg.langinstead of sessionBenefits
✅ CDN/Varnish caching enabled - No
Set-Cookie: languageheader✅ No Vary: Cookie for language - CDN can use
Vary: Accept-Languageinstead✅ URLs unchanged - No breaking changes to URL structure
✅ Language switching works - Via
?lang=query parameter✅ Automatic detection - Via Accept-Language header
How It Works
?lang=<code>parameter?lang=parametersTesting
Addresses feedback: @robertatakenaka - URLs não são alteradas, mantém estrutura original
Original prompt
This section details on the original issue you should resolve
<issue_title>descobri que por conta do cookie de sessão e idioma as páginas não são cacheadas"</issue_title>
<issue_description>O site www.scielo.br na sua interface tem a alternância de idioma (português, inglês e espanhol). Na época do desenvolvimento, foi definido o uso de Cookie de sessão. Pode ser visto usando o comando: curl -I https://www.scielo.br
vary: Cookie
set-cookie: language=pt_BR; Path=/
set-cookie: opac_session=.eJwtjMEOgjAQBf9lzx4WoQZ6NPFuOJuQbdlWY9MStj0R_t2iHmde5m1gZXVTTm-OoGGgs-OudTwPaFrF1FlLqBQq42zPRmEz9zxf4ASBoq_Fkqfr-EcBvcH35xZ9eMmzepYDZaFHQXRNCtX9Gg33tObiy7EwCez7B0awLFg.aRZXJQ.aAolXnrkD8JgsGS7gaBKBuwtsjk; Domain=www.scielo.br; Secure; HttpOnly; Path=/
O cookie language=pt_BR está bloqueando o cache no BunnyCDN e no Varnish, porque o servidor passa a tratar a página como personalizada por idioma.
Por que o cookie de idioma impede o cache?
O backend envia:
set-cookie: language=pt_BR
E também:
Vary: Cookie
Isso significa para qualquer CDN e para o Varnish:
“Essa página muda dependendo dos cookies do cliente.”
Ou seja, o BunnyCDN e o Varnish entendem que:
• Usuário sem cookie → recebe idioma padrão
• Usuário com cookie → recebe versão em pt_BR
• Outro cookie → poderia receber outra versão
Por isso ele não pode cachear — senão poderia servir conteúdo do idioma errado para outro visitante.
Foi feito teste no varnish desativando o cookie e a alternância entre idiomas não funciona.
Opção para resolver isso: Não usar cookie para idioma em páginas públicas
/pt/
/en/
/es/
ou:
2. Usar header Accept-Language, mas sem cookie:
• O Varnish/Bunny podem cachear
• Conteúdo não depende de cookie</issue_description>
Comments on the Issue (you are @copilot in this section)
@pitangainnovare @gitnnolabs e @robertatakenaka, caso as mudanças sejam realizadas nas rotas, entendo que precisaremos fazer uma mapeamento em outras aplicações. A primeira que me vem à mente é a de contagem de acessos. Lá, há vários procedimentos que rastreiam que rota é acessada e que parâmetros de URL existem. Assim, caso coloquemos algo como pt-br, pt-pt, en-us, es-mx, es-es no início de todas as rotas do site, podemos aproveitar para remapear algo para facilitar processamento de logs, por exemplo. Seguem as rotas que entendo que seriam úteis:Também tem as rotas de rss e algumas outras a pensar. Vou continuar rastreando. Hoje, alguns campos são omitidos, conforme o valor acessado (idioma do documento, formato html). O problema disso é depois precisar descobrir o que está sendo acessado (o artigo a, no idioma i, no formato f). E por isso, para contar coisas no método COUNTER, precisamos recorrer a dicionários externos.
@robertatakenaka @pitangainnovare Falta o issue e talvez usar text no lugar de html (não sei...) @gitnnolabs @robertatakenaka pesquisando em como realizar essa atividade, não é necessário alterarmos todas as rotas. É necessário um função que injeta o valor do idioma no objeto **request**, veja:Essa função irá injetar o idioma no request e também é necessário uma função para incluir o idioma nas URLs:
Essa função injeta na URL.
Olhando o código a função que adiciona a alteração de idioma do babel deve ser alterada para:
E seria interessante revisar as função entre as lin...
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.