Gopher
en menuprotokol ældre end nettet
Hvad det er
Gopher er en protokol til at hente dokumenter og menuer over internettet, hvor en klient åbner en
TCP-forbindelse, sender én linje om, hvad den vil have, læser svaret og er færdig. Det formelle
navn er Internet Gopher-protokollen, adresserne begynder med gopher://, og et site, der udgives
over den, kaldes som regel et Gopher-hul (gopher hole). Protokollen stammer fra 1991, og RFC 1436
beskrev den i marts 1993.
Udvekslingen er så kort, at den kan tastes i hånden. Klienten forbinder til port 70, sender en selector (en streng, serveren har udleveret tidligere, eventuelt tom) efterfulgt af vognretur og linjeskift, og serveren svarer og lukker forbindelsen. Intet huskes mellem to forespørgsler: ingen session, ingen cookie, ingen headere. En tom selector beder om serverens øverste menu.
Menuen er kernen. Hver linje i en menu er ét punkt, bygget af et enkelt typetegn, en visningstekst
og derefter en selector, en vært og en port, adskilt af tabulatorer. En linje med kun et punktum
afslutter menuen. Her er en lille menu, hvor hver tabulator er skrevet som <TAB>:
0Om denne server<TAB>/om.txt<TAB>example.org<TAB>70
1Rapporter<TAB>/rapporter<TAB>example.org<TAB>70
7Søg i rapporterne<TAB>/soeg<TAB>example.org<TAB>70
.
Typetegnet fortæller klienten, hvad den får, før den spørger. RFC 1436 definerer 0 for en
tekstfil, 1 for en anden menu, 7 for en søgning, der tager imod en forespørgsel, 9 for en
binær fil, g for et GIF-billede og en håndfuld flere. To typer, der er meget udbredte i dag,
kommer fra praksis og ikke fra RFC’en: i for en linje almindelig tekst inde i en menu og h for
et HTML-dokument, som klienter også bruger til at give en webadresse videre til en browser.
Designet er bevidst lille. RFC 1436 har et afsnit med overskriften »Simplicity is intentional«,
og det er en informativ RFC, ikke en internetstandard. Adresseformatet gopher:// kom senere, i
RFC 4266, hvor det første tegn i stien er punktets type, og resten er selectoren.
Hvorfor det betyder noget
Gopher betyder i dag mindre som en vej til et stort publikum og mere som et klart billede af, hvad et dokument har brug for, og hvad det kan undvære. En menu er navigation skåret ind til benet: hver vej ud af en side står på listen, med type og på sin egen linje, uden noget gemt bag en hover-effekt eller et script. At udgive dertil tvinger spørgsmål frem, som HTML lader en forfatter udskyde. Hvad hedder siden? Hvilke links har den reelt? Giver teksten stadig mening, når linkene er taget ud af den?
For en organisation er et Gopher-hul en ekstra hoveddør, aldrig en erstatning for webbet. Læserne skal have en særlig klient, og de er få. Hvad døren koster, afhænger helt af, hvordan den er bygget. Vedligeholdt i hånden som en ekstra kopi af sitet glider den væk, første gang den ene kopi bliver rettet og den anden glemt. Genereret af den samme kilde i det samme build koster den en skabelon og lidt diskplads, og den tjener mest af alt som en belastningsprøve på teksten.
Det andet, man skal forstå, er sikkerheden. Gopher har intet krypteringslag. Hver selector, og dermed hver side, en læser beder om, krydser netværket i klartekst, og det samme gør hvert svar. RFC 1436 har intet til at logge ind med, og den forespørgsel, en læser skriver i et søgepunkt, rejser også i klartekst. Det er i orden for offentlige dokumenter og forkert for alt andet, og det betyder, at operatørens egne logfiler fortjener lige så megen omtanke som indholdet.
Til gengæld er protokollen billig at fejlsøge. Uden TLS, headere og tilstand viser en enkelt kommandolinje de præcise bytes, en klient modtager, og det gør en Gopher-kopi til et af de nemmeste output fra et site at kontrollere.
Sådan ser det ud i praksis
Dette site er et Gopher-hul såvel som et website. Siden
Engineer i en terminal giver adressen, gopher://engineer.company/, beskriver Gopher
som en menuprotokol fra 1991 med ren TCP, ingen kryptering og ingen scripting og fortæller, at
sitet dér er et sæt menuer, én pr. mappe. Den nævner Lynx, Bombadillo og gopher-cli som klienter
og viser en forespørgsel lavet i hånden med printf og nc på port 70, hele protokollen på én
linje.
Buildet bag er beskrevet i beskrivelsen af, hvordan sitet blev spejlet til Gemini og Gopher. Det samme build, der skriver HTML’en, skriver også 777 Gopher-menuer, udrullet til det samme træ og leveret af en lille dæmon på den samme vært. Beskrivelsen nævner den hårdeste begrænsning: en menulinje er et sæt felter adskilt af tabulatorer, så et link kan ikke stå inde i en sætning, og brødteksten bliver hårdt ombrudt ved otteogtres kolonner, mens sitet bygges. At arbejde inden for den ramme skærpede teksten.
Skabelonerne viser, hvordan hver side bliver til en menu. Links i teksten beholder deres ord og
mister deres mål, overskrifter mister deres havelåger, punkter bliver til indrykkede stjerner, og
brødteksten ombrydes ved 68 kolonner. Kode er undtagelsen og går igennem uden ombrydning, fordi en
kodelinje, der knækkes ved kolonne 68, er et andet program. Kategorier og ydelser bliver til
punkter af type 1, der peger på deres egne menuer, og nederst på hver side står et h-punkt,
hvis URL:-selector fører til webversionen af den samme side.
Gopher-hullet lærte også sitet noget om logfiler. Siden Privatliv forklarer, at sitet siden september 2026 kun tæller, hvor mange forespørgsler Gemini- og Gopher-kopierne besvarede hver dag, uden adresse, side eller besøgende. Den dag optællingen begyndte, viste det sig, at styresystemet starter Gopher-kopien forfra for hver besøgende og navngiver det øjeblik efter den adresse, den besøgende kom fra, i en log for sig. Den log udløber nu efter tredive dage, som alt andet, sitet gemmer.
Hvor det går galt
En side stopper halvvejs og viser mappens indhold
En læser åbner en side og får den første halvdel, efterfulgt af en liste over filerne i mappen.
Servere som Gophernicus læser en gophermap, før de sender den, og en linje uden tabulatorer, hvis
første tegn er et af deres direktiver, bliver behandlet som en instruktion: # skjuler den som en
kommentar, = indsætter en anden fil, og * eller . stopper menuen. Dette site mødte det, da
en linje CSS i den ukrainske note om understregninger i Safari begyndte med den stjerne, der lukker
en CSS-kommentar, og den kørende server klippede siden over dér og viste index.html, index.md og
index.gmi i stedet. Skriv hver sådan linje som et eksplicit i-punkt, og lad buildet fejle på
enhver bar linje, der stadig begynder med et direktivtegn.
Markup og entiteter når frem som tekst
Et afsnit dukker op som én meget lang linje fuld af vinkelparenteser, eller med et og-tegn, der stadig står skrevet som sin HTML-entitet. Konverteren kopierede HTML ind i et format, der ikke aner, hvad HTML er. Fjern tags og behold linkteksten, afkod entiteter, og lad kode i teksten være, så dens tegn overlever.
Linjer løber ud over højre kant
Brødteksten flyder ud over skærmen, eller visningstekster bliver klippet midt i et ord. Gopher-klienter har ingen pligt til at ombryde noget, og RFC 1436 beder om visningstekster på under 70 tegn. Ombryd brødteksten under buildet, afkort menuteksterne med vilje, og hold koden uden for ombrydningen.
Et link henter det forkerte
En gopher://-adresse åbner en fejl eller et punkt, der intet har med sagen at gøre. RFC 4266
læser det første tegn i stien som punktets type, så gopher://example.org/rapporter beder om type
r og selectoren apporter. Sæt typen foran selectoren, som i
gopher://example.org/1/rapporter, og kopiér adresser fra en menu, der virker, frem for at taste
dem.
Læselisten rejser i klartekst
Hver side, en læser åbner, kan ses af alle på netværksvejen og havner måske i logfiler, ingen havde tænkt sig at gemme. Udgiv kun det, der kunne stå på et postkort, læs logfilerne for hele maskinen og ikke kun for dæmonen, og giv hver af dem en udløbsdato.
Læs mere
- RFC 1436: The Internet Gopher Protocol — den oprindelige beskrivelse: forespørgsel og svar, menulinjer, punkttyper og grundene til at holde det enkelt.
- RFC 4266: The gopher URI Scheme
— hvordan en
gopher://-adresse rummer vært, port, punkttype og selector. - IANA Service Name and Transport Protocol Port Number Registry — det officielle register, hvor port 70 står som Gophers port.
- Gophernicus — kildekode og dokumentation for en nutidig Gopher-server, herunder det gophermap-format, den læser.