- Setelah membaca No Query Strings karya Chris Morgan, Susam Pal menghapus parameter kueri
via= yang sebelumnya ditambahkan ke Wander Console
- Wander Console adalah konsol web terdesentralisasi yang di-host sendiri untuk memungkinkan pengunjung situs pribadi menjelajahi halaman yang direkomendasikan komunitas secara acak; saat ini di-host oleh lebih dari 50 situs web dan merekomendasikan lebih dari 1500 halaman web
- Fitur
via= memungkinkan operator situs web yang direkomendasikan melihat asal kunjungan di log akses, tetapi caranya adalah dengan langsung mengubah URL tujuan seperti https://midnight.pub/?via=https://susam.net/wander/
- Menambahkan query string membuatnya menjadi URL baru yang bisa menunjuk ke resource lain atau menghasilkan 404, dan dalam praktiknya merusak situs yang memakai query string sebagai pengenal sendiri, seperti halaman font di
int10h.org
- Browser sudah memiliki Referer dan Referrer-Policy untuk mengendalikan pengiriman informasi asal, sehingga mulai Wander Console 0.6.0 tidak lagi menambahkan query string asal rekomendasi ke URL orang lain
Kritik Chris Morgan terhadap query string menjadi pemicunya
- Setelah membaca tulisan Chris Morgan No Query Strings, Susam Pal menghapus parameter kueri
via= yang sebelumnya ia tambahkan ke proyeknya, Wander Console
- Chris Morgan tidak ingin orang lain menempelkan informasi pelacakan ke URL miliknya seperti
https://chrismorgan.info/no-query-strings?ref=example.com
- Jika informasi asal memang diperlukan, cukup lihat header HTTP
Referer, dan jika header itu tidak ada, kemungkinan besar ada alasan yang masuk akal
- Susam Pal sebelumnya mendapat pelajaran seperti mempertahankan garis bawah tautan dan warna ungu untuk tautan yang sudah dikunjungi dari umpan balik rinci yang pernah ditinggalkan Chris Morgan di Hacker News terhadap aturan boilerplate CSS miliknya
- Sejak itu ia terus membaca tulisan dan masukan Chris Morgan terkait web, dan juga menyebut komentar terbaru di Lobsters pada Adding author context to RSS sebagai contoh yang berguna
Struktur dan tujuan Wander Console
- Wander Console adalah konsol web kecil, terdesentralisasi, dan bisa di-host sendiri yang memungkinkan pengunjung situs pribadi menjelajahi situs web dan halaman menarik yang direkomendasikan oleh komunitas operator situs pribadi independen
- Konsol milik Susam Pal ada di susam.net/wander/, dan saat tombol
Wander ditekan, ia memuat halaman web pribadi acak yang direkomendasikan komunitas Wander
- Alat ini terdiri dari satu file HTML yang mengimplementasikan konsol, dan satu file JavaScript tempat operator situs mendefinisikan daftar konsol tetangga serta daftar halaman web yang direkomendasikan
- Kedua file itu cukup disalin ke web server dan dapat dijalankan hanya dengan web server biasa, tanpa logika sisi server atau perangkat lunak sisi server tambahan
- Ia juga bisa di-host di lingkungan terbatas seperti Codeberg Pages atau GitHub Pages
- Saat tombol
Wander ditekan, konsol terhubung ke konsol jarak jauh lain, mengambil rekomendasi halaman web, lalu memilih salah satunya secara acak untuk dimuat di browser
- Ini agak mirip dengan StumbleUpon yang sudah hilang, tetapi bedanya sepenuhnya terdesentralisasi
- Sedikit mirip juga dengan webring, tetapi jaringan komunitasnya tidak dibatasi pada struktur melingkar dan bisa berbentuk graf apa pun
- Saat ini lebih dari 50 situs web meng-host alat ini, dan secara gabungan merekomendasikan lebih dari 1500 halaman web
- Snapshot terbaru dari konsol yang diketahui dan halaman yang direkomendasikan bisa dilihat di susam.codeberg.page/wcn/
- Untuk mempelajari alat ini lebih lanjut atau menyiapkannya di situs web Anda sendiri, lihat codeberg.org/susam/wander
Fitur keliru bernama parameter kueri via=
- Pada Wander Console 0.4.0, ditambahkan fitur yang menempelkan parameter kueri
via= saat memuat halaman web
- Sebagai contoh, jika menemukan midnight.pub dari konsol susam.net/wander/, halaman dimuat dengan URL berikut
https://midnight.pub/?via=https://susam.net/wander/
- Cara ini memungkinkan operator situs web yang direkomendasikan mengetahui lewat log akses bahwa kunjungan tersebut datang dari Wander Console
- Fitur ini ditambahkan setelah melihat permintaan fitur di Codeberg, tetapi pada awalnya ada keraguan
- Saat itu tenggat riset teori graf aljabar sudah dekat, dan sebagian besar Wander Console juga dibuat saat jeda singkat di tengah riset
- Versi pertama konsol dibuat dalam sekitar 1 jam 30 menit pada suatu pagi buta, dan fitur
via= juga diimplementasikan dalam jeda singkat serupa
- Susam Pal lebih menyukai pendekatan pemeliharaan yang membatasi cakupan proyek hobi kecil, dan membiarkan fitur tetap selesai jika sudah memenuhi kebutuhan esensial alih-alih terus menambah fitur
- Meski begitu, ia merasa tidak bisa mengabaikan permintaan fitur tersebut karena kelelahan dan pekerjaan riset yang intens
- Fitur
via= memang memiliki pengaturan untuk menonaktifkannya, tetapi belakangan ia menilai ini juga merupakan kesalahan
- Bahkan untuk fitur yang meragukan, jika pun diimplementasikan, seharusnya memakai pendekatan aktifkan secara eksplisit, bukan aktif secara default lalu dinonaktifkan
- Kutipan Jurassic Park, “terlalu sibuk memikirkan apakah bisa, sampai tidak memikirkan apakah seharusnya,” terasa cocok untuk situasi ini
Query string benar-benar merusak URL yang sesungguhnya
- Setelah mengimplementasikan fitur
via=, salah satu halaman dari situs web yang ia sukai tidak bisa dimuat dari konsol
- URL yang bermasalah, yang mirip tetapi sedikit berbeda, adalah sebagai berikut
- URL pertama dan kedua dimuat dengan normal, tetapi URL ketiga mengembalikan halaman error HTTP 404
- Situs web tersebut menggunakan query string untuk menentukan koleksi font mana yang harus ditampilkan di antara beberapa koleksi yang tersedia
- Jika query string sembarang ditambahkan, situs akan mencoba menafsirkannya sebagai pengenal koleksi font sehingga pemuatan halaman gagal
- Saat Wander Console menambahkan parameter kueri
via= ke URL pertama, halaman itu juga rusak karena alasan yang sama
- Begitu URL diubah, bahkan penambahan query string yang tampak kecil pun menjadikannya URL baru
- URL baru itu bisa menunjuk ke resource yang sama sekali berbeda, atau bahkan tidak menunjuk ke resource apa pun
- Susam Pal menilai bahwa dengan menambahkan query string
via=, ia telah merusak URL normal dari situs web yang ia sukai
Masalah mem-bypass Referer dan Referrer-Policy
- Browser web sudah memiliki header HTTP Referer untuk informasi asal
- Header ini dikendalikan oleh Referrer-Policy
- Referrer-Policy dapat diatur di level server, level dokumen, maupun level tautan individual
- Standar web sudah menyediakan sarana kontrol yang disengaja untuk menentukan seberapa banyak informasi asal yang akan dikirim
- Menambahkan query string asal rekomendasi ke URL adalah cara yang mem-bypass kontrol tersebut
- Ini pada dasarnya memindahkan persoalan privasi dan atribusi asal keluar dari mekanisme referrer lalu menanamkannya langsung ke dalam URL tujuan
- Ia menyimpulkan bahwa alat HTML tidak seharusnya mengubah URL dengan cara seperti ini
- Ia juga menganggap tindakan memodifikasi URL atas nama pengguna untuk menyisipkan query string asal rekomendasi memang tidak tepat
Penghapusan fitur dan prinsip setelahnya
- Fitur query string asal rekomendasi di Wander Console telah dihapus
- Fitur itu sebenarnya bisa saja dipertahankan sebagai opsi aktivasi eksplisit, tetapi setelah dinilai sebagai fitur yang salah, ia tidak ingin mempertahankannya dalam bentuk apa pun di perangkat lunak tersebut
- Karena proyek ini masih baru dan masih berada pada tahap rilis 0.x, ia menganggap ini saat yang tepat untuk menghapus fitur tersebut
- Ketika tulisan Chris Morgan No Query Strings muncul di feed reader miliknya, ia menyempatkan waktu dari riset untuk menghapus fitur ini
- Detail penghapusannya dapat dilihat di commit b26d77c
- Pada rilis terbaru, 0.6.0, fitur ini sudah tidak ada lagi
- Ke depan, jika ia membuat proyek hobi baru yang memuat URL, ia menetapkan prinsip untuk memuatnya persis seperti yang dimaksudkan pembuat situs web
- Ia sampai pada kesimpulan bahwa ia tidak akan menambahkan query string ke URL milik orang lain
1 komentar
Komentar Lobste.rs
Terima kasih sudah memberi tahu bagaimana tulisanku membantu. Ada beberapa alasan aku menulis ulasan yang mendetail: untuk kepuasan pribadi, untuk membantu proyek aslinya, kadang karena pengembangnya menunjukkan minat dan kadang tidak, dan juga karena ada seseorang di internet yang salah
Tapi alasan terbesarnya adalah karena aku suka mengajar, dan aku tahu orang lain membaca ulasan-ulasan ini. Bahkan, ulasanku secara konsisten termasuk di antara komentar yang paling banyak mendapat upvote
Aku sangat menghargai komentar terima kasih dari orang-orang yang tidak kukenal, dan ucapan terima kasih sedetail ini terasa lebih menghangatkan
Yang lucu, aku menemukan situsmu pada bulan Januari dan sangat menyukai “more purple links, please”; lalu hari ini aku baru sadar bahwa tanpa kusadari aku ternyata memengaruhi pendirianmu
Kemarin aku meluncurkan situs web baru, dan ke depannya aku berencana memuat jauh lebih banyak ulasan di berbagai media. Bulan lalu aku sempat menulis sedikit tentang rencana ini: https://lobste.rs/s/vpdpkq/llm_reviews_cargo_crev#c_8uk441
Aku juga agak terkejut karena ternyata sudah ada satu contoh halaman lain yang menunjukkan reaksi alergi terhadap query string tambahan. Di situs itu, hanya halaman tersebut yang memakai query string untuk routing subhalaman seperti
?1,?2,?3,?4, sementara halaman lain menerima query string dengan baik. Pagination berurutan jelas bersifat hierarkis sehingga bertentangan dengan semangat URL, tetapi pendekatan seperti?page=1memang juga umumSaat menentukan kode status apa yang harus dikembalikan, aku khawatir 404 bisa menimbulkan efek samping karena asumsi yang keliru, tetapi mungkin kekhawatiran itu berlebihan. Aku lupa bahwa sebagian besar web tidak menggunakan path secara bermakna
"418 I'm not a teapot"untuk query string yang tidak diizinkan?Bagus. Wander console berkembang dengan sangat baik, dan perhatian terhadap detail yang ditunjukkan Susam di sini tampaknya jadi alasan besar mengapa itu berhasil
Aku juga melihat beberapa variasi URL-ku yang ditempeli query string yang tidak diinginkan. Newsletter Programmer Weekly menambahkan query, tetapi juga ada header perujuk, jadi itu duplikasi
Ada juga kasus lain yang tampaknya menambahkan ID unik untuk tiap pelanggan, dan itu sama sekali tidak kuinginkan. Yang merepotkan, tidak ada perujuk, jadi aku juga tidak tahu situs mana yang melakukannya
/blog/modeling-on-demand-pricing/?ck_subscriber_id=<unique-id>Aku ingin setuju dengan pernyataan “kalau ingin tahu, lihat saja header Referer, dan kalau tidak ada, mungkin memang ada alasannya”, tetapi Referer sudah selama bertahun-tahun berada dalam kondisi agak rusak atau tidak berguna. Itu satu-satunya alasan hal-hal seperti ini muncul
“Kenapa menambahkannya? Aku menyerah pada tuntutan publik”, benarkah begitu? Itu hanya satu komentar sambil lalu dengan 5 upvote pada isu yang tidak relevan. Pertarungannya tampaknya tidak terlalu sengit sebelum menyerah ;-)
Ketika proyek ini baru punya sekitar sepuluh pengguna, usulan fitur baru yang mendapat 5 upvote terasa seperti tuntutan publik bagiku
Proyek-proyekku biasanya adalah alat kecil yang kubuat sebagai hobi. Selain beberapa pengecualian, jumlah penggunanya tidak banyak. Jadi ketika aku menerima permintaan fitur atau laporan bug, baik itu di isu yang relevan maupun tidak relevan, semuanya penting bagiku. Mungkin aku tidak selalu bisa langsung menanganinya, tetapi aku tetap mencatat dalam benak permintaan mana yang tampaknya punya permintaan lebih besar