Torna al blog Business apps

La tua app aziendale self-hosted funziona offline? Una checklist pratica per valutarla

Scopri come verificare se un’app aziendale self-hosted supporta davvero il lavoro offline, e non si limita a mostrare pagine memorizzate nella cache. Valuta sincronizzazione, conflitti, autenticazione, allegati e rischi per i dispositivi.

Team operativo che testa un’app aziendale offline su un laptop e uno smartphone

Per prima cosa, definisci cosa significa “offline” per il tuo team

I requisiti per il lavoro offline variano. Una breve interruzione del Wi-Fi durante un sopralluogo è diversa da un intero turno senza una connessione affidabile; entrambe sono diverse dal lavorare per giorni in un luogo dove non è prevista connettività.

Annota la durata massima delle disconnessioni, quante persone potrebbero lavorare offline contemporaneamente, quali dati devono avere a disposizione e con quale rapidità le modifiche devono raggiungere i colleghi. Includi i dispositivi e i browser effettivamente usati: il comportamento può variare e le funzionalità di sincronizzazione in background non sono disponibili in tutti i browser ([MDN: Background Synchronization API](https://developer.mozilla.org/en-US/docs/Web/API/Background_Synchronization_API)).

Definisci quali tempi di ripristino sono accettabili: il personale deve poter completare subito un’attività offline oppure può salvare una bozza e terminarla dopo la riconnessione? Sono requisiti diversi e possono orientare verso strumenti diversi.

  • Interruzione occasionale: l’app dovrebbe conservare il lavoro in corso e ripristinarlo quando torna la connessione.
  • Disconnessione prolungata: gli utenti potrebbero dover consultare e modificare record e inviare le azioni in un secondo momento.
  • Assenza di Internet affidabile: valuta un’app compatibile con il lavoro offline o un’installazione locale, senza dare per scontato che un servizio ospitato nel cloud soddisfi l’esigenza.
Per prima cosa, definisci cosa significa “offline” per il tuo team

Distingui l’accesso ai contenuti in cache dal completamento di un flusso di lavoro

Il fatto che una pagina si apra offline non dimostra che sia possibile completare il lavoro. I service worker possono intercettare le richieste e servire risposte memorizzate, ma è l’applicazione a determinare come viene gestita ciascuna richiesta. I contenuti in cache potrebbero essere obsoleti, incompleti o di sola lettura ([MDN: Offline and background operation](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/Offline_and_background_operation)).

Prova l’intera attività, non solo la schermata. L’utente riesce a trovare il record corretto, modificarlo, aggiungere una nota e ricevere una conferma mentre è disconnesso? L’app salva una bozza in locale, mette una richiesta in coda o mostra un errore? Chiedi al fornitore di descrivere il comportamento previsto per ogni azione critica.

Considera separatamente la visualizzazione di contenuti salvati in precedenza, la modifica offline, l’invio differito e il completamento del flusso senza connessione al server. La sincronizzazione successiva è una capacità distinta dalla visualizzazione di contenuti in cache: per esempio, Background Sync consente di differire il lavoro verso il server fino al ritorno della connessione ([MDN: Background Synchronization API](https://developer.mozilla.org/en-US/docs/Web/API/Background_Synchronization_API)).

  • Accesso offline: quali record e pagine di riferimento sono disponibili e quanto tempo è passato dall’ultimo aggiornamento?
  • Modifica offline: quali campi o azioni si possono modificare senza connessione?
  • Invio in coda: dove viene salvata la modifica e come si capisce che non è ancora arrivata al server?
  • Completamento del flusso: quali passaggi richiedono comunque il server, per esempio approvazione, convalida o generazione di un risultato condiviso?
Distingui l’accesso ai contenuti in cache dal completamento di un flusso di lavoro

Elenca i record, gli allegati e i materiali di riferimento necessari

Crea un inventario basato sul lavoro reale, invece di limitarti a chiedere genericamente una “modalità offline”. Indica i tipi di record, i campi che le persone modificano e le informazioni di riferimento che consultano. Includi allegati come foto o documenti e provali separatamente dal testo.

Chiedi come gli utenti rendono disponibili i dati prima di lavorare offline. Vengono scaricati automaticamente oppure l’utente deve aprirli o selezionarli? Verifica che restino accessibili per tutta la durata offline prevista e che l’app mostri da quanto tempo i dati locali non sono aggiornati.

Lo spazio di archiviazione del browser è limitato e varia tra browser e dispositivi; in condizioni di spazio insufficiente, i dati salvati possono essere rimossi. Verifica come l’app segnala i contenuti locali mancanti e se l’attività può tollerare di dover scaricare di nuovo record o allegati prima di iniziare ([MDN: Storage quotas and eviction criteria](https://developer.mozilla.org/en-US/docs/Web/API/Storage_API/Storage_quotas_and_eviction_criteria)).

  • Individua i record essenziali e i campi minimi necessari per intervenire.
  • Elenca foto, file, moduli, mappe, procedure e altri materiali di riferimento necessari.
  • Stima il volume dei dati necessari offline e lo spazio disponibile sui dispositivi.
  • Controlla se l’app indica quali contenuti sono stati scaricati e quando sono stati aggiornati l’ultima volta.
  • Decidi cosa dovrebbe fare l’utente se mancano contenuti necessari.

Verifica sincronizzazione, nuovi tentativi e conflitti

Scopri cosa attiva la sincronizzazione: un processo automatico del browser, l’apertura dell’app, un pulsante premuto dall’utente o un altro passaggio. Poiché Background Sync non è supportato da tutti i browser più diffusi, prova le combinazioni effettivamente usate dal team ([MDN: Background Synchronization API](https://developer.mozilla.org/en-US/docs/Web/API/Background_Synchronization_API)).

Chiedi cosa succede se la connessione cade durante un invio o se l’app non sa se la richiesta è arrivata al server. Ripetere un’azione che modifica lo stato può produrre effetti duplicati: RFC 9110 spiega che i client non dovrebbero ritentare automaticamente richieste non idempotenti senza un modo per stabilire che sia sicuro farlo ([RFC 9110: HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110.html)).

Possono sorgere conflitti se più persone modificano lo stesso record prima di riconnettersi. L’applicazione deve adottare una strategia definita, per esempio mostrare le versioni in competizione, unire le modifiche o chiedere all’utente di esaminarle e modificarle di nuovo ([Apache CouchDB: Replication and conflict model](https://docs.couchdb.org/en/stable/replication/conflicts.html)).

  • Gli utenti possono vedere le azioni in sospeso, completate e non riuscite?
  • I caricamenti non riusciti vengono ritentati? Si può riprovare manualmente senza rischi?
  • Come vengono prevenuti gli invii ripetuti o la creazione di record duplicati?
  • L’utente può esaminare e risolvere i conflitti oppure l’app applica automaticamente una regola?
  • Cosa succede se il browser o il dispositivo si chiude prima dell’invio del lavoro in coda?

Prova autenticazione, autorizzazioni e dispositivi condivisi

Scopri se un utente può aprire dati già scaricati quando la sessione di autenticazione è scaduta e quali operazioni può svolgere fino alla riconnessione. Un dispositivo offline non può verificare con il server se le autorizzazioni sono cambiate di recente: accertati di come l’app gestisce questa situazione e di quando le modifiche di accesso diventano effettive dopo la riconnessione.

Presta particolare attenzione ai dispositivi condivisi o usati su turni. Verifica se una persona può vedere i record o le modifiche in sospeso di un’altra, cosa succede ai dati locali quando si esce dall’account e come gli utenti distinguono il proprio lavoro non ancora inviato. Non dare per scontato che una schermata di accesso protegga le informazioni già salvate nel browser.

L’accesso offline crea una copia locale delle informazioni aziendali. OWASP avverte che chi ha accesso al dispositivo potrebbe riuscire ad accedere ai dati memorizzati nel browser e raccomanda di non conservare informazioni sensibili o identificativi di sessione in local storage ([OWASP: HTML5 Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTML5_Security_Cheat_Sheet.html)).

  • Prova le sessioni scadute sia online sia offline.
  • Modifica un’autorizzazione, disattiva un account ed esci dall’account utente, quindi riconnettiti.
  • Verifica se un utente del dispositivo può accedere ai dati in cache o alle azioni in coda di un altro utente.
  • Documenta la sensibilità dei record archiviati localmente e chi può accedere al dispositivo.

Includi allegati e smarrimento dei dispositivi nella valutazione dei rischi

Il supporto offline è anche una decisione di governance dei dati. Un dispositivo può contenere record e allegati che non sono ancora sul server. Decidi quali informazioni possono essere conservate localmente, per quanto tempo e quali utenti e dispositivi sono autorizzati a conservarle.

Chiedi se i dati locali sono crittografati e quali controlli sui dispositivi richiede la tua organizzazione. Le indicazioni NIST per i dispositivi mobili raccomandano la crittografia dei dati archiviati e descrivono la cancellazione remota come misura per un dispositivo che potrebbe essere smarrito, rubato o finire in mani non affidabili ([NIST SP 800-124 Rev. 2](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-124r2.pdf)). Verifica che la gestione dei dispositivi soddisfi i requisiti per quelli effettivamente usati dal personale.

Documenta la procedura da seguire in caso di smarrimento: come segnalare l’accaduto, gestire l’accesso e i dati locali e stabilire se il lavoro non sincronizzato potrebbe andare perso. La funzionalità offline dell’app non sostituisce le procedure aziendali di accesso, conservazione e gestione degli incidenti.

  • Classifica i dati e gli allegati che potrebbero essere conservati su ciascun dispositivo.
  • Definisci requisiti di crittografia, blocco dello schermo e gestione dei dispositivi adeguati alla tua organizzazione.
  • Verifica quali azioni da remoto sono disponibili e cosa possono o non possono cancellare.
  • Definisci come segnalare un dispositivo smarrito e come recuperare o ricreare il lavoro in sospeso.

Esegui un test offline controllato con attività rappresentative

Usa un account di prova, record rappresentativi e gli stessi modelli di browser e dispositivi che il team intende utilizzare. Inizia online, prepara i dati che dovrebbero essere disponibili offline e controlla cosa indica l’app sul loro stato. Poi disconnetti deliberatamente la rete ed esegui le attività critiche concordate.

Riconnettiti e attendi il passaggio di sincronizzazione documentato. Controlla l’interfaccia e il risultato sul server: verifica che le modifiche siano arrivate, che gli errori siano visibili, che gli allegati siano completi e che non vi siano azioni duplicate. Una prova controllata che interrompe la rete e verifica poi l’invio delle richieste in coda è coerente con la procedura descritta da Chrome per Workbox ([Chrome for Developers: Retrying requests when back online](https://developer.chrome.com/docs/workbox/retrying-requests-when-back-online)).

Non limitarti a una breve interruzione in condizioni ideali. Includi la durata offline massima prevista e, se fanno parte delle attività normali, chiudi e riapri il browser, riavvia il dispositivo o cambia utente. Annota passaggi e risultati per poter ripetere la prova dopo modifiche alla configurazione o all’applicazione.

  • Prepara una checklist per ogni flusso critico e definisci il risultato atteso.
  • Disconnetti la rete e prova a completare il flusso di lavoro dall’inizio alla fine.
  • Interrompi almeno un invio o caricamento, quindi ripristina la connessione.
  • Verifica modifiche mancanti, duplicati, conflitti irrisolti e chiarezza delle indicazioni mostrate all’utente.
  • Ripeti la prova con le combinazioni di browser e dispositivi su cui il team farà affidamento.
  • Registra i limiti e decidi se sono accettabili, richiedono una soluzione alternativa o escludono l’app.

Scegli il modello di distribuzione adatto al lavoro

Il self-hosting descrive chi gestisce l’ambiente applicativo; di per sé non fornisce accesso ai dati offline, modifiche offline o sincronizzazione. Un’app ospitata su un server ha comunque bisogno di una connessione se il suo flusso di lavoro dipende da quel server. Un’app web che si affida ai service worker per le funzionalità offline deve inoltre essere servita in un contesto sicuro ([MDN: Service Worker API](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API)).

Airbip gestisce l’infrastruttura cloud per le applicazioni self-hosted: le istanze applicative vengono eseguite come workload Docker sui server cloud Airbip; Traefik e Let’s Encrypt automatizzano il routing e i certificati TLS. Sono inoltre inclusi controlli DNS, gestione del ciclo di vita dei servizi e backup giornalieri, settimanali e mensili configurabili. Questo modello di hosting non aggiunge funzionalità offline all’applicazione. Valuta separatamente il comportamento documentato dell’app e considera se gli utenti possono raggiungere il servizio ospitato dalle loro sedi quando lavorano online.

Se gli utenti devono completare attività essenziali in luoghi senza connessione affidabile, scegli un’applicazione e un modello di distribuzione che dimostrino di supportare quei flussi di lavoro, oppure definisci una procedura offline esplicita. Se sono rilevanti solo le interruzioni occasionali, potrebbe bastare un flusso di lavoro con accodamento e sincronizzazione, purché sia stato testato. Se il lavoro richiede azioni immediate convalidate dal server, un processo solo online con un’alternativa chiara potrebbe essere più sicuro che dichiarare che il flusso funziona offline.

  • Scegli software compatibile con il lavoro offline quando le attività critiche devono poter essere completate senza connessione al server.
  • Scegli la sincronizzazione differita solo se il suo comportamento in caso di conflitti e azioni ripetute è accettabile.
  • Scegli un flusso esplicitamente solo online quando le azioni richiedono convalida in tempo reale o dati condivisi aggiornati, e prevedi un’alternativa pratica in caso di interruzione.
  • Considera hosting, funzionalità dell’applicazione, controlli sui dispositivi e procedure del personale come aspetti distinti.

Domande frequenti

Il self-hosting rende disponibile offline un’applicazione aziendale?

No. Il self-hosting riguarda dove e come viene gestita l’applicazione; accesso offline e sincronizzazione dipendono dalla progettazione dell’app e dai dati disponibili sul dispositivo. Se un’attività richiede il server, per svolgerla serve una connessione.

È sufficiente una pagina in cache per definire un’app compatibile con il lavoro offline?

No. La cache può rendere consultabili alcuni contenuti, ma non dimostra che si possano modificare record, inviare azioni, caricare file o completare un flusso di lavoro. Prova le attività critiche mentre il dispositivo è disconnesso.

Le azioni offline messe in coda possono generare duplicati?

Sì, se un’azione viene ripetuta dopo un esito incerto e l’app non può stabilire se l’operazione sia già riuscita. Verifica come gestisce i nuovi tentativi e previene i duplicati.

Cosa dovremmo testare quando una modifica offline entra in conflitto con una modifica online?

Modifica lo stesso record da due dispositivi, effettuando una delle modifiche offline. Dopo la riconnessione, verifica se l’app mostra entrambe le versioni, le unisce o chiede di esaminarle e risolvere il conflitto.

L’archiviazione del browser è sufficientemente affidabile per i dati offline critici?

Non darlo per scontato. Limiti e rimozione dei dati variano tra browser e i dati possono essere eliminati quando lo spazio è insufficiente. Prova che i contenuti necessari restino disponibili per la durata e sui dispositivi previsti.

Cosa dovrebbe accadere se si perde un dispositivo contenente dati offline?

Predisponi una procedura documentata che copra segnalazione, controllo degli accessi, gestione del dispositivo e dati locali. Valuta crittografia e opzioni di cancellazione remota e decidi come gestire il lavoro non sincronizzato.

Fonti e approfondimenti

  1. Offline and background operation — Progressive web apps — MDN Web Docs
  2. Background Synchronization API — MDN Web Docs
  3. Retrying requests when back online — Chrome for Developers
  4. Storage quotas and eviction criteria — MDN Web Docs
  5. HTML5 Security Cheat Sheet — OWASP
  6. RFC 9110: HTTP Semantics — Internet Engineering Task Force
  7. Replication and conflict model — Apache CouchDB
  8. Guidelines for Managing the Security of Mobile Devices in the Enterprise — National Institute of Standards and Technology
  9. Service Worker API — MDN Web Docs