Глосарій

Файли, завантаження та передача

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

Пісочниця

Правило, що кожна програма може бачити лише власне сховище. Ось чому одна програма не може відкрити завантаження іншої, і чому «файл поруч із відео» не існує в iOS.

Кожна програма отримує приватний каталог і не бачить чужого. Файли переходять між програмами лише через свідомі дії — меню «Поділитися», вибір документа, перетягування, — і кожна з них є рішенням людини, а не тим, що програма взяла сама.

Ціна цього проявляється в дрібницях. Настільні плеєри автоматично знаходять film.srt поруч із film.mkv; на iOS ніякого «поруч» не існує, тому файл субтитрів доводиться передавати навмисно, і саме програма має запам’ятовувати цю пару.

Дивись також: Група додатківЗакладка із зоною безпеки

Група додатків

Спільний контейнер, який можуть відкривати два додатки одного розробника, — єдина санкціонована шпарина в пісочниці. Саме так розширення «Поділитися» передає файл додатку, якому воно належить.

Розширення «Поділитися» — це окрема програма від того додатка, частиною якого вона здається, зі своєю власною пісочницею і дуже коротким життям. Воно не може писати в сховище основного додатка.

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

Дивись також: Пісочниця

Закладка із зоною безпеки

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

Коли ти обираєш розташування через системний вибір файлів, видане дозволення діє лише на цей момент. Закладка зберігає його між запусками, а додаток має явно починати й завершувати використання доступу, який вона представляє.

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

Дивись також: Пісочниця

Запит діапазону

Запит у сервера певного фрагмента файлу — байтів від 5 000 000 до 5 999 999 — замість усього. Це те, що робить завантаження можливим для відновлення та дозволяє кільком підключенням отримати один файл одночасно.

Сервер, який підтримує діапазони, відповідає кодом 206 Partial Content і надсилає запитаний фрагмент. Той, що не підтримує, відповідає кодом 200 і надсилає все від початку — у цьому і є різниця між продовженням завантаження та його перезапуском.

Усе цікаве в рушії завантажень тримається саме на цій одній можливості HTTP. Без неї немає відновлення після обриву з’єднання, немає відновлення після перезавантаження і немає способу використати більше одного з’єднання.

Дивись також: Відновлюване завантаженняПаралельні з'єднання

Відновлюване завантаження

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

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

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

Дивись також: Запит діапазонуФонова передача

Паралельні з'єднання

завантаження з кількома підключеннями

Розбиття одного файлу на діапазони та отримання кількох одночасно. Це допомагає, коли обмежено одне з’єднання, і не робить нічого, коли вузьким місцем є твоя власна лінія.

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

Це не магія, і її часто розуміють неправильно. Якщо твоє з’єднання вже завантажене повністю, додаткові з’єднання просто ділять ту саму пропускну здатність на дрібніші шматки й додають накладні витрати. Деякі сервери до того ж відхиляють або обмежують кілька запитів з однієї адреси.

Дивись також: Запит діапазонуВідновлюване завантаження

Фонова передача

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

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

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

Дивись також: Відновлюване завантаженняПісочниця

WebDAV

Розширення HTTP, яке перетворює веб-сервер на файловий: список, читання, запис, переміщення, видалення. Це те, що говорять Nextcloud і ownCloud, і те, що пропонують більшість блоків NAS.

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

Для того, хто не хоче тримати файли в хмарі якоїсь компанії, це практична альтернатива: власний сервер, власні облікові дані, звичайні стандарти.

Дивись також: Хмарне сховище

Хмарне сховище

Файли, які зберігаються на чужому сервері, доступні через API цієї компанії — Dropbox, OneDrive, Box, pCloud. Кожен має власний інтерфейс, тому програми підтримують їх по черзі.

Єдиного хмарного протоколу не існує. Кожен провайдер спроєктував власний API і власний процес входу, тому додавання провайдера до програми — це реальна робота, а не просто пункт налаштування.

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

Дивись також: WebDAV

WebRTC

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

Невеликий сигнальний сервер знайомить два пристрої один з одним — саме для цього потрібен шестизначний код — а потім відходить убік. Файл іде напряму між пристроями і ніде між ними не зберігається.

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

Дивись також: Локальний HTTP сервер

Локальний HTTP сервер

Програма, яка відповідає на веб-запити у твоїй власній мережі, тому браузер на комп’ютері може відкрити сторінку, яку віддає твій телефон. Ось як працює Wi-Fi Transfer — без кабелю й без облікового запису.

Телефон показує адресу; комп’ютер відкриває її; отриману сторінку віддає сам телефон. Файли йдуть напряму по локальній мережі й ніколи її не залишають.

Оскільки ту адресу може дістати будь-хто в тій самій мережі, їй потрібен замок — код для введення, дозволи, що видаються на кожну операцію окремо, і деструктивні дії, вимкнені, поки їх свідомо не увімкнуть.

Дивись також: WebRTC

Інші теми