А може, серверним автобусом?
Серверного автобуса немає. У цьому й річ.
Усі сіли? Наступна зупинка — ваш телефон!
Зазвичай вебінструменти роблять так: ви завантажуєте фото, файл чи запис, десь сервер його обробляє, зберігає копію «для покращення якості обслуговування» й повертає результат. Це працює. А ще це означає, що ваше фото тепер живе у двох місцях, і лишається тільки сподіватися, що друге з них обережне.
Ми пішли іншим шляхом. Сторінка приходить — і далі все відбувається на вашому пристрої: вимірювання, обчислення, перетворення. Робота нашого сервера закінчується, щойно він віддав сторінку. Саме тому тут немає акаунтів, завантажень і того, що могло б витекти, і саме тому більшість інструментів після встановлення працює без інтернету.
1Що вміє сучасний браузер
Набагато більше, ніж показувати сторінки. Ось лише кілька речей, які наші інструменти в нього позичають:
- Датчики. Акселерометр, гіроскоп і магнітометр перетворюють телефон на рівень із бульбашкою й компас у ToolBench; GPS дає координати у WhereBench; SmartBench навіть читає NFC-мітки в Chrome на Android.
- Камера й мікрофон. MeetBench перевіряє їх перед дзвінком, ScanBench знаходить краї документа на зображенні з камери, а TuneBench чує висоту струни через мікрофон.
- WebRTC — пряма лінія між двома браузерами. Нею DropBench передає файли, а DrawBench — спільну дошку, зашифровано й без сервера посередині, який тримав би дані.
- WebAssembly, що дає справжнім скомпільованим програмам працювати на сторінці майже з рідною швидкістю. Так PhotoBench кодує AVIF і WebP просто на вашому телефоні.
- І все інше: графіка для тесту відеокарти, фонові обчислення для тесту процесора, криптографічна випадковість для PassBench, геймпади в KeyBench, натиск стилуса в DrawBench, екран, що не гасне, поки ви вимірюєте. Колись на кожне з цього був окремий застосунок.
2Навіщо для цього HTTPS
Потужні можливості — камеру, мікрофон, геолокацію, датчики руху, роботу без інтернету — браузери дають лише сторінкам, що прийшли зашифрованим з’єднанням. Причина проста: у відкритому Wi-Fi кав’ярні будь-хто посередині міг би підкинути у незашифровану сторінку власний код, і той код попросив би вашу камеру від імені сайту. З HTTPS сторінка приходить запечатаною — саме такою, якою ми її надіслали.
fof.lol працює лише через HTTPS і каже браузерам навіть не пробувати звичайну версію. Якщо інструмент не може дістатися камери чи датчиків, перевірте, що адреса починається з https://: збережена копія сторінки їх не отримає.
Що там усередині? Зараз я щось допишу…
Запечатано. Навіть кому не вставиш.
3Чому iPhone просить натиснути кнопку
Android дає датчики руху будь-якій захищеній сторінці. Apple вирішила, що це надто щедро: з крихітних рухів телефона в руці можна дізнатися напрочуд багато — аж до того, що саме набирають на клавіатурі, а деякі сайти використовували ці дані, щоб розпізнавати пристрої. Тож Safari на iPhone та iPad дає сторінці акселерометр і гіроскоп лише після того, як ви натиснете кнопку на цій сторінці й погодитеся.
Тому ToolBench і SmartBench показують кнопку, що просить доступ, а не стартують одразу. Якщо ви випадково відмовили, наш посібник «Що робити, якщо щось не працює» пояснює, як попросити ще раз.
Я лише хочу бути рівнем!
Тоді натисни кнопку. Пальцем. У нас правила.
4Чесний перелік: зупинки, які не об’їдеш
Деякі справи фізично потребують зовнішнього світу. Тест швидкості мусить щось звідкись завантажити, а карту не намалюєш із нічого. Ось усі зовнішні сервіси, з якими говорить сайт, і навіщо. Ваш браузер звертається до них напряму, тож вони бачать звичайні дані запиту, як-от вашу IP-адресу:
- Cloudflare (speed.cloudflare.com): тестовий трафік для SpeedBench і MeetBench та серверний час для TimeBench.
- Сервіси визначення IP (geojs, ipwho.is, ipify): ваш провайдер і місто в SpeedBench і PrivacyBench та приблизне місце у WhereBench, коли ви про нього просите.
- OpenStreetMap і Esri: плитки карти й супутникових знімків у WhereBench і PhotoBench; OpenStreetMap Nominatim шукає адреси.
- PeerJS і Google STUN: допомагають двом браузерам у DropBench і DrawBench знайти одне одного. Файли й малюнки далі йдуть напряму й зашифровано, а якщо прямий шлях заблоковано — через посередника, який не може їх прочитати.
- Have I Been Pwned: перевірка на витоки в PassBench отримує лише перші 5 символів хешу пароля, а не сам пароль.
- cdnjs і jsDelivr: готові бібліотеки — читалка PDF, малювальник QR-кодів чи кодувальники зображень. Код приходить до вас, а ваші дані нікуди не йдуть.
- Національний банк України і Frankfurter: публічні курси валют для MoneyBench. Назад приходять лише курси, а ваші суми лишаються на сторінці.
- Cloudflare Web Analytics: анонімний лічильник відвідувань, без cookies і без усього, що в адресі після # чи ?.
А тепер добра новина: KeyBench, TypeBench, ToolBench, TuneBench, RandomBench, TextBench, PowerBench, ColorBench, DevBench і ScoreBench узагалі ні з ким не говорять, окрім fof.lol. Повний перелік з усіма адресами — в Умовах використання.
Тримай, завантаж це якнайшвидше. А потім віддай назад.
Нарешті! Робота для сервера!
Коротко
Ваш браузер — дуже здібна машина, і вона вже у вашій кишені. Ми лише просимо її виконати роботу — через запечатане з’єднання, з вашого дозволу — і звертаємося до зовнішнього світу тільки тоді, коли без нього ніяк. Менше серверів, менше копій, менше несподіванок.