Perché ricostruire un piccolo client di protocollo.

Il repository era nato come prototipo visuale Flutter, ma il problema utile era più profondo: interpretare fedelmente un menu Gopher, mostrare il significato di ogni campo e permettere a chi usa il terminale di aprire una risorsa reale senza un comportamento di rete illimitato.

I browser non possono creare la connessione TCP grezza richiesta da Gopher. Invece di nascondere il limite, il progetto usa un parser in due contesti trasparenti: TCP reale nella CLI e una fixture deterministica nell’explorer pubblico.

I confini del protocollo.

Anche un piccolo client richiede regole esplicite per rete e rendering:

  1. Le richieste hanno scadenza assoluta, timeout di inattività, limite di 8 KiB e dimensione della risposta vincolata.
  2. I byte binari restano binari e non vengono mai stampati direttamente in un terminale interattivo.
  3. Le sequenze di controllo del terminale vengono neutralizzate prima che testo non attendibile arrivi sullo schermo.
  4. Le righe di menu malformate restano visibili, così l’explorer non trasforma errori di parsing in dati plausibili.

Un parser, due trasporti.

Il parser e le regole URL sono utili indipendentemente dalla connessione di rete. Mantenerli nel sito statico rende il protocollo comprensibile e testabile nel browser senza introdurre un proxy che cambierebbe il modello di sicurezza.

La CLI aggiunge il confine di trasporto mancante: TCP limitato, connessioni dirette non cifrate e gestione esplicita degli elementi menu, testo, ricerca e binari.

Il percorso della richiesta.

Un URL gopher:// diventa host, porta e selector. La CLI invia il selector tramite TCP limitato e passa i byte restituiti all’interpretazione condivisa di menu e testo. Il browser parte dallo stesso confine di parsing con una fixture inclusa nel repository.

Il percorso della richiesta. Il browser illustra il protocollo; soltanto la CLI oltrepassa il confine TCP.SYSTEM VIEW / DIGURL GOPHERCONTRATTO URLTCP LIMITATOPARSER MENUTERMINALE O WEBVERSIONED DELIVERY PATH
Il browser illustra il protocollo; soltanto la CLI oltrepassa il confine TCP.

Le scelte che mantengono leggibile il client.

Il progetto preferisce un comportamento del protocollo visibile a una comodità opaca.

D01

Conservare i selector

Gli URL di ricerca RFC 4266 vengono interpretati senza ridurre i segmenti punto del selector che appartengono al percorso del protocollo remoto.

I selector Gopher non si comportano come i consueti percorsi HTTP, quindi la distinzione deve restare esplicita.

D02

Fallire in sicurezza nel terminale

Il testo viene ripulito dalle sequenze di controllo del terminale, mentre le risorse binarie devono essere reindirizzate a un file.

Il client rifiuta alcuni percorsi di output comodi perché l’integrità del terminale viene prima.

D03

Mantenere deterministica la demo web

GitHub Pages usa una fixture inclusa e non sostiene mai di connettersi a un server Gopher reale.

L’explorer è uno strumento didattico, non un client di rete nel browser.

Integrità del rilascio.

I candidati al rilascio vengono compilati due volte; gli archivi npm e le evidenze SBOM normalizzate devono coincidere byte per byte. Uno smoke test con prefisso pulito esegue il comando pubblicato prima del rilascio.

La pubblicazione con tag verifica versione, discendenza dal main revisionato, checksum, attestazioni e inventario immutabile del rilascio. Nulla di questo amplia l’ambito del protocollo: Gopher+, TLS, Telnet, autenticazione e download automatici restano esclusi.

Cosa possono ispezionare gli utenti.

Dal terminale si possono aprire menu, testi e ricerche Gopher reali attraverso un trasporto limitato. Nel browser si può esplorare una fixture accessibile da tastiera e controllare tipo, selector, host e porta a ogni passaggio.

Il progetto è volutamente circoscritto. Proprio questa scelta rende facili da trovare il confine di rete, il comportamento del parser e le funzionalità non supportate.

Registro delle evidenze.

Le affermazioni su protocollo e trasporto sono sostenute da limiti di progetto espliciti:

Verifica
68 dichiarazioni di test Node.js e due dichiarazioni E2E nel browser nel rilascio sottoposto ad audit.
Limiti richiesta
Richiesta massima di 8 KiB, scadenza totale di 5 secondi, timeout di inattività di 2,5 secondi e limite predefinito di 10.000 voci di menu.
Limiti risposta
Soglia predefinita di 1 MiB per la risposta e soglia assoluta configurabile di 10 MiB.
Limite
Il TCP diretto non è cifrato; TLS, autenticazione, Gopher+, Telnet e download automatici non sono supportati.
Apri il progetto funzionante