- Susam Pal eliminó el parámetro de consulta
via= que había añadido a Wander Console después de leer I banned query strings de Chris Morgan
- Wander Console es una pequeña consola web distribuida y autoalojable que permite a los visitantes de sitios personales explorar al azar páginas recomendadas por la comunidad, y actualmente está alojada en más de 50 sitios web con más de 1500 páginas recomendadas
- La función
via= permitía que los administradores de los sitios recomendados vieran el origen de las visitas en sus logs de acceso, pero lo hacía modificando directamente la URL de destino, como en https://midnight.pub/?via=https://susam.net/wander/
- Añadir una cadena de consulta crea una URL nueva, que puede apuntar a otro recurso o devolver 404, y de hecho rompía sitios que usan la cadena de consulta como identificador propio, como la página de fuentes de
int10h.org
- Los navegadores ya cuentan con Referer y Referrer-Policy para controlar cómo se envía la información de origen, así que desde Wander Console 0.6.0 ya no se añaden cadenas de consulta de procedencia a las URL de otras personas
La crítica de Chris Morgan a las cadenas de consulta fue el detonante
- Susam Pal leyó I banned query strings de Chris Morgan y, a partir de eso, eliminó el parámetro de consulta
via= que había añadido a su proyecto Wander Console
- Chris Morgan no quiere que otras personas añadan información de seguimiento a sus URL, como en
https://chrismorgan.info/no-query-strings?ref=example.com
- Si se necesita información sobre el origen, se puede consultar el encabezado HTTP
Referer; y si ese encabezado no está presente, probablemente haya una buena razón para ello
- Susam Pal comenta que antes ya había aprendido lecciones de Chris Morgan a través de un comentario detallado que dejó en Hacker News sobre sus reglas de CSS boilerplate, como mantener el subrayado de los enlaces y conservar el color morado de los enlaces visitados
- Desde entonces ha seguido leyendo sus textos y comentarios sobre la web, y también menciona como ejemplo útil un comentario reciente en Lobsters sobre añadir contexto de autor al RSS
Estructura y propósito de Wander Console
- Wander Console es una consola web pequeña, distribuida y autoalojable que permite a los visitantes de sitios personales explorar sitios y páginas interesantes recomendados por una comunidad de operadores de sitios personales independientes
- La consola de Susam Pal está en susam.net/wander/, y al pulsar el botón
Wander carga una página personal aleatoria recomendada por la comunidad de Wander
- La herramienta está compuesta por un archivo HTML que implementa la consola y un archivo JavaScript donde el administrador del sitio define la lista de consolas vecinas y la lista de páginas recomendadas
- Basta con copiar esos dos archivos a un servidor web para que funcione en un servidor web común, sin lógica del lado del servidor ni software adicional del lado del servidor
- También puede alojarse en entornos restringidos como Codeberg Pages o GitHub Pages
- Al pulsar el botón
Wander, la consola se conecta a otras consolas remotas, obtiene recomendaciones de páginas web, elige una al azar y la carga en el navegador
- Se parece un poco al desaparecido StumbleUpon, pero con la diferencia de que es completamente distribuido
- También se parece un poco a un webring, pero la red comunitaria no está limitada a una estructura circular y puede tener cualquier forma de grafo
- Actualmente más de 50 sitios web alojan esta herramienta y, en conjunto, recomiendan más de 1500 páginas web
- Se puede ver una instantánea reciente de las consolas conocidas y las páginas recomendadas en susam.codeberg.page/wcn/
- Para conocer mejor la herramienta o configurarla en tu propio sitio, se puede consultar codeberg.org/susam/wander
El parámetro de consulta via= como función equivocada
- En Wander Console 0.4.0 se añadió una función que agregaba el parámetro de consulta
via= al cargar una página web
- Por ejemplo, al encontrar midnight.pub desde la consola de susam.net/wander/, la página se cargaba con la siguiente URL
https://midnight.pub/?via=https://susam.net/wander/
- Este método permitía que el administrador del sitio recomendado confirmara en sus logs de acceso que la visita venía de Wander Console
- La función se añadió a partir de una solicitud de funcionalidad en Codeberg, aunque al principio hubo dudas
- En ese momento se acercaba la fecha límite de una investigación en teoría algebraica de grafos, y gran parte de Wander Console también fue creada durante breves descansos en medio del trabajo de investigación
- La primera versión de la consola se hizo en una madrugada en alrededor de una hora y media, y la función
via= también se implementó en un descanso breve similar
- Susam Pal dice que prefiere mantener el alcance limitado de sus pequeños proyectos personales y dejar una función como terminada una vez que cumple los requisitos esenciales, en lugar de seguir añadiendo características
- Aun así, considera que por el cansancio y la intensidad del trabajo de investigación no pudo ignorar esa solicitud de funcionalidad
- La función
via= tenía una opción para desactivarse, pero después concluyó que eso también fue un error
- Incluso si se implementa una función dudosa, debería activarse solo de forma explícita, no venir habilitada por defecto con una opción para desactivarla
- La cita de Jurassic Park sobre estar tan ocupados pensando en si podían que no se preguntaron si debían le pareció apropiada para esta situación
Las cadenas de consulta rompen URL reales
- Después de implementar la función
via=, una página de un sitio web que le gustaba dejó de cargar en la consola
- Las URL del caso, muy parecidas entre sí, eran las siguientes
- La primera y la segunda URL cargan correctamente, pero la tercera devuelve una página de error HTTP 404
- Ese sitio web usa la cadena de consulta para decidir qué colección de fuentes mostrar entre varias disponibles
- Si se añade una cadena de consulta arbitraria, el sitio intenta interpretarla como un identificador de colección de fuentes y por eso falla la carga de la página
- Por la misma razón, cuando Wander Console añadía el parámetro
via= a la primera URL, la página también se rompía
- Al modificar una URL, incluso una adición pequeña como una cadena de consulta la convierte en una URL nueva
- Esa nueva URL puede apuntar a un recurso completamente distinto o no apuntar a ningún recurso
- Susam Pal concluye que al añadir la cadena de consulta
via= rompió la URL válida de un sitio web que le gusta
El problema de saltarse Referer y Referrer-Policy
- Los navegadores web ya cuentan con el encabezado HTTP Referer para la información de procedencia
- Ese encabezado está controlado por Referrer-Policy
- Referrer-Policy puede configurarse a nivel de servidor, de documento o de enlace individual
- Los estándares web ya ofrecen un mecanismo de control deliberado para decidir qué alcance de información de procedencia se envía
- El método de añadir una cadena de consulta con la procedencia de la recomendación a la URL se salta esos controles
- En la práctica, saca la cuestión de la privacidad y la atribución del mecanismo de referer y la incrusta directamente dentro de la URL de destino
- Considera que una herramienta HTML no debería modificar URL de esa manera
- También cree que no es correcto modificar la URL en nombre del usuario para insertar una cadena de consulta de procedencia
Eliminación de la función y principios posteriores
- La función de añadir una cadena de consulta de procedencia de recomendación fue eliminada de Wander Console
- Podría haberse dejado como una opción de activación explícita, pero una vez que concluyó que era una función equivocada, ya no quiso conservarla en el software de ninguna forma
- Como el proyecto aún es nuevo y está en la etapa de lanzamientos 0.x, consideró que era un buen momento para eliminarla
- El detonante fue ver aparecer I banned query strings de Chris Morgan en su lector de feeds, y apartó un momento de su tiempo de investigación para quitar esta función
- El cambio puede verse en el commit b26d77c
- La versión más reciente, 0.6.0, ya no incluye esta función
- A futuro, si en un nuevo proyecto personal va a cargar URL, seguirá el principio de cargarlas exactamente como las pretendía el autor del sitio web
- Llegó a la conclusión de que no añadirá cadenas de consulta a las URL de otras personas
1 comentarios
Opiniones en Lobste.rs
Gracias por contarme cómo te ayudó mi texto. Escribo reseñas detalladas por varias razones: por satisfacción personal, para ayudar al proyecto original, a veces porque el desarrollador muestra interés y a veces no, y también porque alguien en Internet está equivocado
Pero la razón principal es que me gusta enseñar y sé que otras personas leen estas reseñas. De hecho, mis reseñas suelen estar constantemente entre los comentarios con más votos positivos
De verdad valoro los comentarios de agradecimiento que a veces dejan desconocidos, y un agradecimiento tan detallado como este se siente todavía más cálido
Lo curioso es que descubrí tu sitio en enero y me gustó mucho en particular “more purple links, please”, pero al verlo hoy resulta que, sin saberlo, terminé influyendo en tu postura
Ayer lancé un nuevo sitio web, y de ahora en adelante pienso publicar muchas más reseñas en varios medios. El mes pasado escribí un poco sobre este plan: https://lobste.rs/s/vpdpkq/llm_reviews_cargo_crev#c_8uk441
También me sorprendió un poco que ya hubiera otro ejemplo de una página que tiene una reacción alérgica a las cadenas de consulta adicionales. En ese sitio usan cadenas de consulta para enrutar subpáginas solo en esa página, como
?1,?2,?3,?4, mientras que otras páginas sí aceptan cadenas de consulta. La paginación secuencial claramente es jerárquica, así que va contra el espíritu de la URL, aunque formas como?page=1también son comunesCuando decidía qué código de estado devolver, me preocupaba que un 404 pudiera causar efectos secundarios por una suposición equivocada, pero quizá esa preocupación fue excesiva. Olvidé que buena parte de la web no usa las rutas de forma significativa
"418 I'm not a teapot"para cadenas de consulta no autorizadas?Bien. Wander console está creciendo de forma excelente, y la atención al detalle que muestra Susam aquí parece ser una gran parte de por qué funciona
También he visto algunas variantes en las que se agregan cadenas de consulta no deseadas a mis URL. El boletín Programmer Weekly agrega consultas, pero también tiene encabezado de referencia, así que es redundante
Otro caso parece agregar un ID único para cada suscriptor, algo que no quiero en absoluto. Para colmo, no hay referente, así que ni siquiera sé qué sitio lo hace
/blog/modeling-on-demand-pricing/?ck_subscriber_id=<unique-id>Quisiera estar de acuerdo con “si quieres saberlo, mira el encabezado Referer, y si no está, probablemente haya una buena razón”, pero Referer lleva años estando hasta cierto punto roto o siendo inútil. Esa es la única razón por la que surgieron estas cosas
“¿Por qué lo agregué? Cedí ante la demanda popular”; ¿de verdad fue así? Fue solo un comentario casual con 5 votos positivos en un issue no relacionado. No parece que la lucha antes de ceder haya sido tan intensa ;-)
En un momento en que este proyecto tenía apenas unos diez usuarios, que una propuesta de nueva función recibiera 5 votos positivos me pareció demanda popular
Mis proyectos suelen ser herramientas pequeñas que hago como hobby. Salvo algunas excepciones, no tienen muchos usuarios. Así que cuando recibo solicitudes de funciones o reportes de errores, sean en issues relacionados o no, para mí son importantes. Aunque no siempre pueda ponerme a trabajar en ello de inmediato, sí voy anotando mentalmente qué solicitudes tienen más demanda