Bestanden, downloads en overdracht
Bijna alles wat willekeurig aanvoelt aan bestanden op een iPhone volgt uit één regel over isolatie, en bijna alles wat downloads betrouwbaar maakt volgt uit één eigenschap van HTTP. Dit zijn ze allebei, plus de manieren waarop bestanden van het ene apparaat naar het andere komen.
-
Sandbox
-
De regel dat elke app alleen zijn eigen opslag ziet. Daarom kan de ene app de downloads van de andere niet openen, en daarom bestaat “het bestand staat naast de video” niet op iOS.
Elke app krijgt een eigen map en geen enkel zicht op die van een ander. Bestanden gaan alleen van app naar app via bewuste handelingen — een deelmenu, een documentkiezer, een sleepbeweging — en elk daarvan is een besluit dat de gebruiker nam, niet iets waar een app zichzelf mee bediende.
De rekening komt op kleine plekken binnen. Desktopspelers vinden
film.srtvanzelf naastfilm.mkv; op iOS bestaat er geen “naast”, dus moet een ondertitelbestand expres worden aangereikt en moet de app degene zijn die de koppeling onthoudt.Zie ook: App-groepSecurity-scoped bookmark
-
App-groep
-
Een gedeelde ruimte die twee apps van dezelfde ontwikkelaar allebei mogen openen — de enige goedgekeurde barst in de sandbox. Zo geeft een deelextensie een bestand door aan de app waar het bij hoort.
Een deelextensie is een apart programma van de app waar hij deel van lijkt uit te maken, met een eigen sandbox en een zeer kort leven. Hij kan niet in de opslag van de hoofd-app schrijven.
Dus schrijft hij in een ruimte die allebei mogen zien, en leegt de app die ruimte de volgende keer dat hij opent. Er gaat niets over een ontwikkelaarsgrens heen, en er gaat niets over zonder een expliciete tik.
Zie ook: Sandbox
-
Security-scoped bookmark
-
Een token dat toestemming voor een map buiten de sandbox onthoudt — een externe schijf, een map in iCloud — zodat de app die later opnieuw kan openen zonder het nog eens te vragen.
Kies je een locatie via de systeembestandskiezer, dan geldt de verleende toestemming voor dat moment. Zo’n bookmark bewaart hem over herstarts heen, en de app moet het gebruik van die toegang expliciet starten en weer stoppen.
Het is wat het mogelijk maakt om door een externe ssd te bladeren zonder iets te kopiëren, en het reikt exact zo ver als wat je koos — een bookmark op één map geeft geen enkel recht op de map ernaast.
Zie ook: Sandbox
-
Range request
-
Een server om een bepaald stuk van een bestand vragen — byte 5.000.000 tot 5.999.999 — in plaats van om het geheel. Het is wat een download hervatbaar maakt en wat meerdere verbindingen tegelijk aan één bestand laat werken.
Een server die ranges ondersteunt, antwoordt met 206 Partial Content en precies het gevraagde stuk. Een server die dat niet doet, antwoordt met 200 en stuurt alles vanaf het begin — en dat is het verschil tussen een download hervatten en hem opnieuw beginnen.
Alles wat interessant is aan een downloadmotor rust op deze ene eigenschap van HTTP. Zonder haar is er geen hervatten na een weggevallen verbinding, geen hervatten na een herstart, en geen manier om meer dan één verbinding te gebruiken.
-
Hervatbare download
-
Een overdracht die verdergaat op precies het punt waar hij stopte in plaats van opnieuw te beginnen, door bij te houden hoeveel bytes vastliggen en om de rest te vragen.
De eis is dat dat getal nooit optimistisch is. Een byte die als geschreven is geteld maar nog in een buffer staat, wordt een gat in het bestand zodra de app wordt afgeschoten — en een gat midden in een video is een beschadiging die zich pas een uur later in de film laat zien.
Daarom moet de telling het wegschrijven naar schijf volgen en niet het lezen van het netwerk, en daarom moet elke overdracht tussen voorgrond en achtergrond het over één getal eens zijn.
Zie ook: Range requestAchtergrondoverdracht
-
Parallelle verbindingen
multi-connection, chunked download -
Eén bestand in stukken opdelen en er meerdere tegelijk ophalen. Het helpt wanneer één verbinding wordt afgeknepen, en het doet helemaal niets wanneer je eigen lijn de flessenhals is.
Een server die de snelheid per verbinding begrenst, is er vaak toe te bewegen om over meerdere verbindingen samen meer te leveren. Daar verdient downloaden met meerdere verbindingen zijn reputatie.
Het is geen toverkunst en het wordt geregeld verkeerd begrepen. Zit je lijn al vol, dan verdelen meer verbindingen dezelfde capaciteit in kleinere stukjes en komt er alleen overhead bij. Sommige servers weigeren of knijpen ook gewoon meerdere verzoeken vanaf hetzelfde adres af.
Zie ook: Range requestHervatbare download
-
Achtergrondoverdracht
-
Een download die aan het besturingssysteem is overgedragen, zodat hij doorloopt nadat de app is gesloten. Het systeem bepaalt de timing, en dat is de prijs voor het feit dat hij überhaupt doorloopt.
Een iOS-app stopt met draaien kort nadat je hem verlaat. Een overdracht die aan de achtergronddienst van het systeem is gegeven, overleeft dat, overleeft het afschieten van de app, en hervat na een herstart.
Wat je inlevert is controle. Het systeem bundelt deze overdrachten volgens zijn eigen inschatting van accu en netwerk, dus een achtergronddownload kan pauzeren en hervatten op manieren die een download binnen de app niet zou vertonen — en hij komt af.
Zie ook: Hervatbare downloadSandbox
-
WebDAV
-
Een uitbreiding op HTTP die een webserver in een bestandsserver verandert: opsommen, lezen, schrijven, verplaatsen, verwijderen. Het is wat Nextcloud en ownCloud spreken, en wat de meeste NAS-apparaten aanbieden.
Omdat er HTTP onder zit, werkt WebDAV via dezelfde infrastructuur als al het andere op het web — geen aparte poorten, geen apart clientprotocol — en daarom heeft het het overleefd terwijl uitgebreidere bestandsprotocollen dat niet deden.
Voor wie zijn bestanden liever niet in de cloud van een bedrijf legt, is het het praktische alternatief: je eigen server, je eigen inloggegevens, gewone standaarden.
Zie ook: Cloudopslag
-
Cloudopslag
-
Bestanden die op de server van iemand anders staan en via de API van dat bedrijf bereikbaar zijn — Dropbox, OneDrive, Box, pCloud. Elk heeft zijn eigen interface, en daarom ondersteunen apps ze stuk voor stuk.
Er bestaat geen universeel cloudprotocol. Elke aanbieder ontwierp zijn eigen API en zijn eigen inlogproces, dus een aanbieder aan een app toevoegen is echt werk en geen regeltje in een configuratie.
Inloggen gaat normaal gesproken via OAuth, wat betekent dat de app het wachtwoord nooit ziet: de aanbieder verifieert de persoon en geeft een token terug dat je op elk moment vanuit de instellingen van die aanbieder kunt intrekken.
Zie ook: WebDAV
-
WebRTC
-
Een standaard om twee apparaten rechtstreeks te verbinden, zonder server ertussen zodra de verbinding staat. Het is wat overdracht van apparaat naar apparaat gebruikt om een bestand de kamer door te sturen.
Een kleine signaleringsserver stelt de twee apparaten aan elkaar voor — daar is die zescijferige code voor — en trekt zich daarna terug. Het bestand reist rechtstreeks tussen de apparaten en wordt er onderweg nergens opgeslagen.
Op hetzelfde netwerk is het zo snel als dat netwerk toelaat. Over internet hangt het ervan af of beide kanten rechtstreeks bereikbaar zijn, en daar mislukken verbindingen af en toe om redenen die geen van beide apparaten kan zien.
Zie ook: Lokale HTTP-server
-
Lokale HTTP-server
-
Een app die webverzoeken beantwoordt op je eigen netwerk, zodat een webbrowser op je computer een pagina kan openen die je telefoon uitserveert. Zo werkt Wi-Fi-overdracht: geen kabel, geen account.
De telefoon toont een adres, de computer opent het, en de pagina die hij krijgt wordt door de telefoon zelf geserveerd. Bestanden gaan rechtstreeks over het lokale netwerk en verlaten het nooit.
Omdat iedereen op datzelfde netwerk dat adres kan bereiken, hoort er een slot op: een code die je invoert, rechten die per handeling worden verleend, en de destructieve handelingen uit tenzij je ze bewust aanzet.
Zie ook: WebRTC