Tópico com japonês na URL não redireciona se a URL não corresponder perfeitamente

Em community.wanikani.com, abrir links para tópicos com caracteres japoneses na URL totalmente qualificada parou de funcionar ao abri-los em uma nova guia ou ao copiar e colar o link diretamente. Clicar no link para navegar na mesma guia ainda funciona.

Por exemplo, abrir este link em uma nova guia deveria levar a:

キノの旅 Home Thread (Intermediate Book Club) - Book Clubs - WaniKani Community

Mas, em vez disso, tenta levar a:

キノの旅 Home Thread (Intermediate Book Club) - Book Clubs - WaniKani Community

o que falha ao carregar.

Se o link coincidir exatamente, funciona corretamente. Mas, é claro, com renomeações de tópicos, isso frequentemente não ocorre.

Também tentei reproduzir o problema em try.discourse.org, mas nessa instalação os caracteres japoneses nunca são adicionados à URL, mesmo quando incluídos no título do tópico. Não tenho certeza do motivo disso, mas sem que isso aconteça, não consigo demonstrar o erro lá.

2 curtidas

Ambos são links para o tópico 34890. Ambos carregam normalmente para mim no Firefox. Qual é o problema?

3 curtidas

suspiro Parece que pode ser mais um bug do Chrome. Funciona perfeitamente para mim tanto no Firefox quanto no Edge. Estranhamente, funciona na primeira vez em uma janela anônima, mas falha na segunda. O mesmo acontece após limpar o cache/cookies do site e reiniciar meu computador.

O Chrome diz que o erro são muitos redirecionamentos.


Você se importaria de verificar no Chrome para confirmar se é um problema geral lá e não apenas comigo? Só lembre-se de tentar abrir a página várias vezes, já que a primeira parece funcionar bem. Agradeço a ajuda!

3 curtidas

Consigo reproduzir no Chrome mobile. :bug:

5 curtidas

Obrigado. Acho que vou reportar isso ao Google.

1 curtida

No meu celular Android, no Chrome, o segundo link redireciona indefinidamente.

1 curtida

Ainda está no Chrome? Só quero ter certeza antes de reportar o problema a eles. Imagino que nada relacionado a isso tenha mudado recentemente no Discourse? (De qualquer forma, isso provavelmente ainda seria um problema do Chrome, já que ocorre apenas nele, mesmo que algo tenha mudado no Discourse.)

3 curtidas

Espere um pouco, isso pode ser o Discourse. Até mesmo um bug do service worker.

5 curtidas

Ok, obrigado pela atualização.

1 curtida

Alguma atualização sobre isso?

Isso vai levar um tempo para ser resolvido, pois já foi atribuído e não ficará sem acompanhamento.

7 curtidas

Não espero encontrar qualquer tipo de solução ou alternativa. Só temos que aguardar até que seja corrigido.

Ainda está vendo esse problema? Parece que talvez já tenha sido corrigido, a menos que eu esteja fazendo algo diferente desta vez.

1 curtida

Bom, esqueça isso. Voltou a acontecer hoje. Não faço ideia de como foi corrigido por um tempo.


Como isso pode levar um tempo, estou aberto a soluções alternativas por enquanto. Mencionei no tópico original que, no try (e verifiquei aqui no meta também), os caracteres japoneses nunca são adicionados à URL, contornando efetivamente esse problema. Isso é uma configuração do site ou da categoria sobre a qual posso conversar com meu administrador do site? Há alguma outra sugestão de solução alternativa além dessa?

Quando insiro uma URL com um título em árabe no navegador, como:

https://forums.coretabs.net/t/2456

caio em um redirecionamento infinito (e o link gerado não está correto; acho que isso está relacionado à codificação).

Ele deveria redirecionar para:

https://forums.coretabs.net/t/ماذا-يجب-ان-نتعلم-في-javascript-؟/2456

Por que não compartilho links com seus títulos?

Devido ao mau suporte ao árabe no Twitter e no Facebook:

  • Esse bug não existia antes das últimas atualizações (a última vez que tentei compartilhar um link foi há cerca de duas semanas, e estava tudo perfeito).
3 curtidas

Investiguei nosso código e parece que o erro é relativamente simples, mas gostaria de verificar minhas suposições.

Temos uma configuração de site chamada slug_generation_method que precisa ser alterada do valor padrão ascii para encoded para ativar esse bug. Quando você altera essa configuração de site, limpamos todos os slugs e os geramos novamente.

O que não entendo é por que, quando a configuração de site está definida como “encoded”, geramos um slug assim:

[3] pry(main)> SiteSetting.slug_generation_method
=> "encoded"
[4] pry(main)> Slug.for(t.slug)
=> "キノの旅-home-thread-intermediate-book-club"

enquanto eu esperava que “encoded” significasse algo como

[5] pry(main)> CGI.escape(Slug.for(t.slug))
=> "%E3%82%AD%E3%83%8E%E3%81%AE%E6%97%85-home-thread-intermediate-book-club"

Isso parece vir de

O slug bruto da tabela é retornado no cabeçalho Location da resposta 301 quando o slug de um tópico não corresponde, e, na minha opinião, deveríamos retornar uma URL válida ali.

9 curtidas

Sim, devemos limpar o método de geração de slug para encoded para que ele dependa menos de mágica do navegador.

8 curtidas

Então, você está dizendo que a própria URL mostraria a versão codificada? Ou apenas que o redirecionamento lidaria internamente com isso usando a versão codificada? De qualquer forma, seria ótimo fazer isso funcionar “automaticamente” e não depender de peculiaridades do navegador.

1 curtida

Olá,

Este caso foi resolvido?
Porque ainda estou enfrentando esse problema, conforme postado no tópico que iniciei sobre esse assunto.

1 curtida

Não, conforme indicado pelo tópico aberto na categoria bug aqui :sweat_smile:

@sam, analisei isso novamente hoje e há duas abordagens possíveis:

  1. Armazenar um slug codificado real na coluna slug quando a configuração de geração de slug estiver definida como codificado. Criar uma migração para limpar todos os slugs atuais que usam slugs codificados, para que eles sejam regenerados corretamente ao longo do tempo.

  2. Manter o slug UTF-8 atual e corrigi-lo sob demanda ao enviá-lo em um cabeçalho para redirecionamento 301.

Na minha opinião, a opção 1 é “mais correta” e tornará mais difícil passar o slug bruto para um cliente. No entanto, apenas corrigir o gerador de slug não foi suficiente, pois os navegadores recebem uma URL codificada no redirecionamento 301, mas a decodificam na próxima solicitação, fazendo com que nossa comparação de slug falhe e redirecione novamente. Isso significa que também precisarei corrigir o método de comparação de slug no controlador de tópicos e, talvez, em outros lugares.

Devo continuar por esse caminho?

6 curtidas