- Susam Pal removeu o parâmetro de consulta
via= que havia adicionado ao Wander Console depois de ler I have banned query strings, de Chris Morgan
- O Wander Console é um pequeno console web distribuído e auto-hospedado que permite a visitantes de sites pessoais explorar aleatoriamente páginas recomendadas por uma comunidade, e hoje já é hospedado por mais de 50 sites com mais de 1500 páginas recomendadas
- O recurso
via= permitia que operadores dos sites recomendados vissem a origem da visita nos logs de acesso, mas fazia isso alterando diretamente a URL de destino, como em https://midnight.pub/?via=https://susam.net/wander/
- Ao anexar uma query string, cria-se uma nova URL, que pode apontar para outro recurso ou retornar 404; isso de fato quebrou sites como a página de fontes de
int10h.org, que usa query strings como identificadores próprios
- Como os navegadores já têm Referer e Referrer-Policy para controlar o envio de informações de origem, o Wander Console 0.6.0 não adiciona mais query strings de referência às URLs de outras pessoas
A crítica de Chris Morgan às query strings foi o gatilho
- Susam Pal leu o texto de Chris Morgan, I have banned query strings, e removeu o parâmetro de consulta
via= que havia adicionado ao seu projeto Wander Console
- Chris Morgan não quer que outras pessoas acrescentem informações de rastreamento às suas URLs, como em
https://chrismorgan.info/no-query-strings?ref=example.com
- Se for preciso saber a origem, basta olhar o cabeçalho HTTP
Referer; se esse cabeçalho não estiver presente, provavelmente há um bom motivo para isso
- Susam Pal conta que, no passado, aprendeu lições como manter sublinhados em links e preservar o roxo dos links visitados graças a um feedback detalhado de Chris Morgan no Hacker News sobre suas regras de CSS boilerplate
- Desde então, continua lendo textos e comentários de Chris Morgan sobre a web, e cita também como exemplo útil um comentário recente em Lobsters sobre adicionar contexto de autor ao RSS
Estrutura e objetivo do Wander Console
- O Wander Console é um pequeno console web distribuído e auto-hospedável que permite a visitantes de sites pessoais explorar sites e páginas interessantes recomendados por uma comunidade de operadores independentes de sites pessoais
- O console de Susam Pal está em susam.net/wander/, e ao clicar no botão
Wander ele carrega uma página pessoal aleatória recomendada pela comunidade Wander
- A ferramenta é composta por um arquivo HTML que implementa o console e um arquivo JavaScript em que o operador do site define a lista de consoles vizinhos e a lista de páginas recomendadas
- Basta copiar esses dois arquivos para um servidor web para executá-la com um servidor web comum, sem necessidade de lógica no servidor nem de software server-side adicional
- Isso permite hospedagem mesmo em ambientes restritos como Codeberg Pages ou GitHub Pages
- Ao clicar no botão
Wander, o console se conecta a outros consoles remotos, busca recomendações de páginas e escolhe uma aleatoriamente para carregar no navegador
- É um pouco parecido com o extinto StumbleUpon, mas com a diferença de ser totalmente distribuído
- Também lembra um pouco um webring, mas a rede da comunidade não fica limitada a uma estrutura circular e pode formar qualquer tipo de grafo
- Atualmente, mais de 50 sites hospedam a ferramenta e, juntos, recomendam mais de 1500 páginas web
- Um snapshot recente dos consoles conhecidos e das páginas recomendadas pode ser visto em susam.codeberg.page/wcn/
- Para saber mais sobre a ferramenta ou configurá-la no seu próprio site, consulte codeberg.org/susam/wander
O recurso errado chamado parâmetro de consulta via=
- O Wander Console 0.4.0 passou a incluir um recurso que adicionava o parâmetro de consulta
via= ao carregar páginas web
- Por exemplo, ao encontrar midnight.pub a partir do console em susam.net/wander/, a página era carregada com a seguinte URL
https://midnight.pub/?via=https://susam.net/wander/
- Isso permitia que o operador do site recomendado confirmasse, pelos logs de acesso, que a visita tinha vindo do Wander Console
- O recurso foi adicionado após um pedido de funcionalidade no Codeberg, embora houvesse hesitação no início
- Na época, o prazo final de uma pesquisa em teoria algébrica dos grafos estava se aproximando, e boa parte do Wander Console também foi criada em curtas pausas durante esse período de pesquisa
- A primeira versão do console foi feita em cerca de 1 hora e 30 minutos, numa madrugada, e o recurso
via= também foi implementado em uma pausa curta semelhante
- Susam Pal diz preferir uma manutenção com escopo limitado em pequenos projetos de hobby, deixando os recursos como concluídos assim que atendem aos requisitos essenciais, em vez de continuar acrescentando funcionalidades
- Mesmo assim, acredita que, por cansaço e pela intensidade do trabalho de pesquisa, não conseguiu simplesmente ignorar aquele pedido
- O recurso
via= tinha uma configuração para desativação, mas depois ele concluiu que isso também foi um erro
- Recursos duvidosos, mesmo quando implementados, deveriam exigir ativação explícita, e não vir ativados por padrão com opção de desligar
- A citação de Jurassic Park sobre “estavam tão preocupados em descobrir se podiam que não pararam para pensar se deviam” pareceu adequada à situação
Query strings realmente quebram URLs
- Depois de implementar o recurso
via=, uma página de um site de que ele gostava deixou de carregar no console
- As URLs semelhantes, mas ligeiramente diferentes, da página em questão eram as seguintes
- A primeira e a segunda URL carregam normalmente, mas a terceira retorna uma página de erro HTTP 404
- Esse site usa a query string para decidir qual coleção de fontes mostrar entre várias disponíveis
- Se uma query string arbitrária for anexada, o site tenta interpretá-la como identificador de coleção de fontes, e por isso o carregamento da página falha
- Quando o Wander Console acrescentava o parâmetro de consulta
via= à primeira URL, a página também quebrava pelo mesmo motivo
- Quando se altera uma URL, até mesmo uma mudança pequena como adicionar uma query string cria uma nova URL
- Essa nova URL pode apontar para um recurso completamente diferente ou até para nenhum recurso
- Susam Pal concluiu que, ao acrescentar a query string
via=, acabou quebrando a URL correta de um site de que gosta
O problema de contornar Referer e Referrer-Policy
- Os navegadores web já têm o cabeçalho HTTP Referer para informações de origem
- Esse cabeçalho é controlado por Referrer-Policy
- A Referrer-Policy pode ser definida no nível do servidor, do documento ou de links individuais
- Os padrões da web já oferecem, de forma intencional, mecanismos de controle para decidir qual alcance de informação de origem será enviado
- Acrescentar uma query string de referência à URL contorna esses controles
- Isso tira a questão de privacidade e atribuição do mecanismo de referrer e a embute diretamente na própria URL de destino
- Ele concluiu que uma ferramenta HTML não deveria modificar URLs dessa forma
- Também considera errado o ato de alterar URLs em nome do usuário para inserir uma query string de origem da recomendação
Remoção do recurso e princípio daqui para frente
- O recurso de query string de origem da recomendação foi removido do Wander Console
- Ele poderia ter permanecido como uma opção de ativação explícita, mas, depois de considerá-lo um recurso errado, Susam Pal não quis mantê-lo no software de forma alguma
- Como o projeto ainda é novo e está em fase de lançamentos 0.x, pareceu um bom momento para remover a funcionalidade
- Quando o texto I have banned query strings de Chris Morgan apareceu em seu leitor de feeds, ele separou um tempo da pesquisa para remover o recurso
- A remoção pode ser vista no commit b26d77c
- A versão mais recente, 0.6.0, já não inclui mais esse recurso
- Daqui para frente, se um novo projeto de hobby carregar URLs, o princípio será carregá-las exatamente como o autor do site pretendia
- Ele chegou à conclusão de que não vai acrescentar query strings às URLs de outras pessoas
1 comentários
Comentários no Lobste.rs
Obrigado por me contar como meu texto ajudou você. Há vários motivos pelos quais escrevo reviews detalhadas: pela minha própria satisfação, para ajudar o projeto original, às vezes porque o desenvolvedor demonstra interesse e às vezes não, e também porque alguém na internet está errado
Mas o principal motivo é que gosto de ensinar, e sei que outras pessoas leem essas reviews. Na prática, minhas reviews costumam estar de forma consistente entre os comentários mais votados
Às vezes valorizo muito comentários de agradecimento deixados por desconhecidos, e um agradecimento detalhado assim passa uma sensação ainda mais acolhedora
Curiosamente, descobri seu site em janeiro e gostei especialmente de “more purple links, please”, mas hoje percebi que, sem eu saber, acabei influenciando sua posição
Ontem lancei um novo site e pretendo publicar muito mais reviews em vários meios daqui para frente. No mês passado escrevi um pouco sobre esse plano: https://lobste.rs/s/vpdpkq/llm_reviews_cargo_crev#c_8uk441
Também fiquei um pouco surpreso que já existia mais um exemplo de página que tinha reação alérgica a query strings adicionais. Naquele site, apenas aquela página usa query strings para roteamento de subpáginas, como
?1,?2,?3,?4, enquanto as outras páginas aceitam query strings normalmente. Paginação sequencial é claramente hierárquica e foge ao espírito da URL, mas algo como?page=1também é comumAo decidir qual código de status retornar, fiquei preocupado que um 404 pudesse causar efeitos colaterais por causa de pressupostos errados, mas talvez essa preocupação tenha sido exagerada. Esqueci que uma parte considerável da web não usa caminhos de forma significativa
"418 I'm not a teapot"para query strings não autorizadas?Bom. O Wander console está crescendo muito bem, e a atenção aos detalhes que o Susam mostra aqui parece ser uma grande parte do motivo de isso funcionar
Também já vi algumas variações em que query strings indesejadas são anexadas às minhas URLs. A newsletter Programmer Weekly adiciona queries, mas também há um cabeçalho de referenciador, então é redundante
Em outro caso, parece que um ID único é anexado para cada assinante, o que eu não quero de jeito nenhum. De forma incômoda, não há referenciador, então nem sei qual site faz isso
/blog/modeling-on-demand-pricing/?ck_subscriber_id=<unique-id>Eu gostaria de concordar com a frase “se você quer saber, basta olhar o cabeçalho Referer, e se ele não estiver lá, provavelmente há um bom motivo”, mas o Referer já está, há alguns anos, meio quebrado ou inútil. Essa é a única razão de essas coisas existirem
“Por que adicionei isso? Cedi à demanda popular”: foi mesmo? Era só um comentário casual com 5 votos positivos em uma issue sem relação. A luta não parece ter sido tão intensa antes da rendição ;-)
Quando uma proposta de nova funcionalidade recebe 5 votos positivos num momento em que meu software tinha talvez uns dez usuários, para mim isso parecia demanda popular
Meus projetos geralmente são pequenas ferramentas feitas por hobby. Tirando algumas exceções, eles não têm muitos usuários. Então, quando recebo pedidos de funcionalidade ou relatos de bug, sejam em issues relacionadas ou não, isso é importante para mim. Mesmo que eu nem sempre consiga trabalhar nisso de imediato, eu registro mentalmente quais pedidos tiveram mais demanda