Веббраузер

Що має статись, перш ніж вебсторінка віддасть тобі свій файл

Ти бачиш відео. Воно грає прямо тут, у веббраузері. То чому ж немає способу його зберегти? Відповідь у тому, що вебсторінка рідко віддає файл — вона віддає інструкції, а файл, який браузер збирає з них, може взагалі не існувати як єдине ціле.

5 хв читання Оновлено 29 липня 2026 р.

FoxDL

Чотири способи доставки відео сторінкою, і лише один із них — файл

Найстаріший і найпростіший — це прямий файл: сторінка вказує на адресу, що закінчується на .mp4, і браузер його забирає. Якщо ти можеш знайти цю адресу, файл твій. Так досі працює більшість невеликих сайтів, форумів, новинних видань і файлообмінників.

Другий спосіб — це адаптивний стримінг, HLS або DASH. Сторінка завантажує плейлист зі сотнями коротких сегментів на кількох рівнях якості, а плеєр зшиває їх на ходу, перемикаючи якість при зміні твого з’єднання. Тут немає єдиного файлу, який можна знайти. Зберегти його означає забрати кожен сегмент і знову зібрати з них файл.

Третій спосіб — це blob-адреса. Сторінка вже забрала дані через JavaScript і передала плеєру посилання на щось, що живе прямо в пам’яті браузера. Видима тобі адреса (blob:https://…) нічого не означає за межами цієї сторінки й цієї сесії — її не можна відкрити, поділитись нею чи завантажити, і саме на цьому спотикається більшість наївних «шукачів відео».

Четвертий спосіб — це захищений контент: зашифровані сегменти, що відтворюються через систему DRM, де ключ розшифрування видається браузеру за умов, що прямо забороняють збереження копії. Це не перешкода, яку треба обходити, — це механізм, на якому будується ліцензійна угода, і жоден легальний інструмент його не обходить.

Як веббраузер помічає, що є що зберегти

Вбудований веббраузер, що пропонує зберегти знайдене, виконує одразу кілька задач. Кожна перекриває випадок, який пропускають інші.

Читання медіаелементів сторінки
Обхід документа в пошуках тегів <video>, <audio> і <source> та читання їхніх адрес. Миттєво ловить випадок прямого файлу, пропускає все, що побудовано через JavaScript уже після завантаження сторінки.
Зазирання всередину shadow DOM
Сучасні плеєри — це кастомні елементи, чия внутрішня структура навмисно ізольована від сторінки. Пошук, що зупиняється на звичайному документі, бачить порожню коробку там, де насправді є відео.
Відстеження того, що сторінка насправді запитала
Браузер знає кожен ресурс, який забрала сторінка. Завантажений медіафайл — незалежно від того, який скрипт його запитав і коли, — з’явиться тут, навіть якщо ніщо на видимій сторінці на нього не вказує.
Визначення типу за відповіддю
Адреса, що закінчується на .php, може повернути відео, а адреса, що закінчується на .mp4, може повернути сторінку з помилкою. Про те, що є що, каже Content-Type, реально надісланий сервером, — розширення файлу лише здогадка.

Як виглядає збереження зі сторінки, коли все працює

Порядок має значення. Більшість збоїв трапляється через пропуск другого кроку і запуск передавання на чотири гігабайти, яке насправді виявляється сторінкою входу.

  1. Спочатку відтвори кілька секунд медіа

    Багато сторінок нічого не завантажують, доки не почнеться відтворення. Дві секунди програвання часто виявляються різницею між порожнім списком кандидатів і повним.

  2. Перевір, що кандидат являє собою насправді

    Перш ніж діяти, подивись на заявлений розмір і тип. «Фільм» на 14 КБ — це HTML-сторінка. Тип text/html там, де ти очікував video/mp4, означає, що в тебе не те посилання.

  3. Обери потрібну якість

    Потік зазвичай пропонує кілька варіантів. Найвища якість не завжди правильна відповідь на телефоні, де різниця непомітна, а місце на диску — цілком.

  4. Дай сесії перенестись разом із запитом

    Захищені посилання перевіряють, хто саме запитує: куки твоєї авторизованої сесії, сторінку, з якої ти перейшов, іноді ідентифікацію браузера. Завантаження, розпочате без усього цього, отримає помилку 403, навіть якщо сама сторінка відтворювала відео без проблем.

  5. Перевір, що вийшло в підсумку

    Відкрий файл. Файл, що грає дві секунди і зупиняється, був обрізаний — зазвичай через протерміноване посилання — і його варто перекачати знову, а не лишати як є.

Що вбудований веббраузер зобов’язаний робити правильно

Окрім пошуку медіа, ось що вирішує, чи справді завантаження завершиться успішно.

  • Перенести сесію в завантаження

    Куки, referer і user agent мають передаватись разом із запитом. Без них захищене посилання відкривається на сторінці, але падає в завантажувачі.

  • Не зберігати ці облікові дані в сховищі

    Куки сесії не гірші за пароль протягом усієї сесії. Їм місце в пам’яті на час передавання і більше ніде — ні в базі даних, ні в логу.

  • Відмовлятись передавати посилання іншому застосунку

    iOS охоче відкриє натиснуте посилання в іншому застосунку, якщо він заявляє права на цей домен. Веббраузер, призначений для збереження медіа, має сам скасовувати і перезапускати перехід, інакше потрібна тобі сторінка зникне в чужому застосунку.

  • Підрізати сторінку перед відтворенням

    Блокувальник контенту тут не лише про рекламу — менше трекерів і накладень означає менше хибних кандидатів у списку медіа.

  • Обробляти документи нарівні з відео

    PDF, ZIP і файли Office — друга половина того, що люди зберігають з інтернету, і вони мають потрапляти в ту саму бібліотеку, що й усе інше.

Питання, які ставлять

Чому Safari не може робити це сам?

Safari справді завантажує файли — з iOS 13. Чого він не робить, так це не вивчає сторінку на предмет медіа, яке транслюється, а не дане прямим посиланням, і не збирає сегментований потік назад у файл. Це веббраузер, і така робота належить менеджеру завантажень.

Що таке blob-адреса і чому я не можу її завантажити?

Це вказівник на дані, які сторінка вже тримає в пам’яті. Він не існує за межами цієї вкладки, тож вставка його кудись нічого не дає. Справжнє медіа було забране звідкись реального, і саме цю адресу — а не blob — варто шукати.

Сторінка грає нормально, але завантаження отримує помилку 403. Чому?

Запит на завантаження пішов без того, що було в сторінки: куки твоєї сесії, сторінки-джерела переходу, іноді збіжної ідентифікації браузера. Сервери відрізняють глядача від скрейпера саме за цією комбінацією.

Чи можна зберегти абсолютно все?

Ні, і так задумано. Контент, захищений DRM, зашифрований ключами, виданими за ліцензією, що забороняє збереження. Деякі сайти також підписують кожен сегмент індивідуально короткоживучими токенами. Обидва механізми працюють саме так, як задумано.

FoxDL

Веббраузер усередині FoxDL

Це звичайний браузер із вкладками, чия задача — доставляти речі в твою бібліотеку, а не бути твоїм повсякденним браузером.

  • Шість каналів виявлення, включно з shadow DOM і обліком того, що сторінка реально запитала, тож навіть плеєр, повністю побудований на JavaScript, лишається видимим.
  • Справжній тип визначається за відповіддю, а не вгадується за розширенням, а blob:-кандидати, які неможливо забрати, відфільтровуються замість того, щоб пропонуватись і провалюватися.
  • Куки, referer і user agent переносяться в завантаження, завдяки чому захищене посилання відкривається, — і жоден з них ніколи не записується на диск.
  • Блокувальник контенту підрізає сторінку перед відтворенням.
  • PDF, ZIP і документи зберігаються в ту саму бібліотеку, що й медіа, одним натисканням.
  • Вкладки, закладки й стартова сторінка з твоїми власними ярликами.

FoxDL не надає власного контенту. Те, що ти зберігаєш, — це те, що приніс ти сам, і відповідальність за право це зберігати лежить на тобі.

Часті запитання

Усі запитання

Читати далі

Твоя бібліотека нарешті в одному місці.

Безкоштовне завантаження. Без облікового запису — повний набір у безкоштовній версії.

Завантажити з App Store