Gopher (protocolo)

Ajustar Compartir Imprimir Citar
Protocolo de capa de aplicación TCP/IP

El protocolo Gopher () es un protocolo de comunicación diseñado para distribuir, buscar y recuperar documentos en redes de protocolo de Internet. El diseño del protocolo Gopher y la interfaz de usuario está basado en menús y presentó una alternativa a la World Wide Web en sus primeras etapas, pero finalmente cayó en desgracia y dio paso a HTTP. El ecosistema Gopher a menudo se considera el predecesor efectivo de la World Wide Web.

Uso

El protocolo Gopher fue inventado por un equipo dirigido por Mark P. McCahill en la Universidad de Minnesota. Ofrece algunas funciones que la Web no admite de forma nativa e impone una jerarquía mucho más fuerte en los documentos que almacena. Su interfaz de menú de texto se adapta bien a entornos informáticos que dependen en gran medida de terminales informáticos remotos orientados a texto, que todavía eran comunes en el momento de su creación en 1991, y la simplicidad de su protocolo facilitó una amplia variedad de implementaciones de clientes. Las revisiones más recientes de Gopher y los clientes gráficos agregaron soporte para multimedia.

La estructura jerárquica de Gopher proporcionó una plataforma para las primeras conexiones de bibliotecas electrónicas a gran escala. Los entusiastas todavía utilizan el protocolo Gopher y, aunque ha sido suplantado casi por completo por la Web, queda una pequeña población de servidores mantenidos activamente.

Orígenes

El sistema Gopher fue lanzado a mediados de 1991 por Mark P. McCahill, Farhad Anklesaria, Paul Lindner, Daniel Torrey y Bob Alberti de la Universidad de Minnesota en los Estados Unidos. Sus objetivos centrales eran, como se indica en RFC 1436:

Gopher combina jerarquías de documentos con colecciones de servicios, incluidos WAIS, los motores de búsqueda Archie y Veronica, y puertas de enlace a otros sistemas de información, como el Protocolo de transferencia de archivos (FTP) y Usenet.

El interés general en los sistemas de información del campus (CWIS) en la educación superior en ese momento y la facilidad de configuración de los servidores Gopher para crear un CWIS instantáneo con enlaces a otros sitios... directorios y recursos en línea, fueron los factores que contribuyeron a la rápida adopción de Gopher.

El nombre fue acuñado por Anklesaria como un juego de varios significados de la palabra "gopher". La mascota de la Universidad de Minnesota es el gopher, un gofer es un asistente que "va por" cosas, y una tuza excava en el suelo para llegar al lugar deseado.

Rechazar

La World Wide Web estaba en su infancia en 1991 y los servicios de Gopher se establecieron rápidamente. A fines de la década de 1990, Gopher había dejado de expandirse. Varios factores contribuyeron al estancamiento de Gopher:

Gopher sigue en uso activo por parte de sus entusiastas, y ha habido intentos de revivir Gopher en plataformas modernas y dispositivos móviles. Un intento es The Overbite Project, que alberga varias extensiones de navegador y clientes modernos.

Censo de servidores

Detalles técnicos

La conceptualización del conocimiento en el "espacio Gopher" o una "nube" como información específica en un archivo en particular, y la prominencia del FTP, influyeron en la tecnología y la funcionalidad resultante de Gopher.

Características de la tuza

Gopher está diseñado para funcionar y parecerse mucho a un sistema de archivos de red global de solo lectura montable (y hay software disponible, como gopherfs, que en realidad puede montar un servidor Gopher como un recurso FUSE). Como mínimo, cualquier cosa que se pueda hacer con archivos de datos en un CD-ROM, se puede hacer en Gopher.

Un sistema Gopher consiste en una serie de menús hipervinculables jerárquicos. La elección de los elementos del menú y los títulos está controlada por el administrador del servidor.

Al igual que un archivo en un servidor web, un archivo en un servidor Gopher se puede vincular como un elemento de menú desde cualquier otro servidor Gopher. Muchos servidores aprovechan esta vinculación entre servidores para proporcionar un directorio de otros servidores a los que puede acceder el usuario.

Protocolo

El protocolo Gopher se describió por primera vez en RFC 1436. IANA asignó el puerto TCP 70 al protocolo Gopher. El protocolo es simple de negociar, lo que permite navegar sin usar un cliente.

Solicitud del usuario

Primero, el cliente establece una conexión TCP con el servidor en el puerto 70, el puerto Gopher estándar. A continuación, el cliente envía una cadena seguida de un retorno de carro seguido de un avance de línea (una secuencia "CR + LF"). Este es el selector, que identifica el documento a recuperar. Si el selector de elementos fuera una línea vacía, se seleccionaría el directorio predeterminado.

Respuesta del servidor

El servidor luego responde con el elemento solicitado y cierra la conexión. De acuerdo con el protocolo, antes de que se cierre la conexión, el servidor debe enviar un punto (es decir, un carácter de punto) en una línea por sí mismo. Sin embargo, no todos los servidores se ajustan a esta parte del protocolo y el servidor puede cerrar la conexión sin devolver el punto final. El principal tipo de respuesta del servidor es un recurso de texto o binario. Alternativamente, el recurso puede ser un menú: una forma de recurso de texto estructurado que proporciona referencias a otros recursos.

Debido a la simplicidad del protocolo Gopher, herramientas como netcat permiten descargar contenido Gopher fácilmente desde la línea de comandos:

echo jacks/jack.exe tención nc gopher.example.org 70 > jack.exe

El protocolo también es compatible con cURL a partir de 7.21.2-DEV.

Solicitud de búsqueda

Opcionalmente, la cadena de selección en la solicitud puede ir seguida de un carácter de tabulación y una cadena de búsqueda. Esto es utilizado por el tipo de elemento 7.

Código fuente de un menú

Los elementos del menú de Gopher se definen mediante líneas de valores separados por tabuladores en un archivo de texto. Este archivo a veces se denomina gophermap. Como código fuente de un menú gopher, un gophermap es más o menos análogo a un archivo HTML para una página web. Cada línea separada por tabuladores (llamada línea de selección) le da al software del cliente una descripción del elemento del menú: qué es, cómo se llama y hacia dónde conduce. El cliente muestra los elementos del menú en el orden en que aparecen en el mapa de gopher.

El primer carácter en una línea de selección indica el tipo de elemento, que le dice al cliente a qué tipo de archivo o protocolo apunta el elemento del menú. Esto ayuda al cliente a decidir qué hacer con él. Los tipos de elementos de Gopher son un precursor más básico del sistema de tipos de medios utilizado por la Web y los archivos adjuntos de correo electrónico.

El tipo de elemento va seguido de la cadena de visualización del usuario (una descripción o etiqueta que representa el elemento en el menú); el selector (una ruta u otra cadena para el recurso en el servidor); el hostname (el nombre de dominio o la dirección IP del servidor) y el puerto de red.

Todas las líneas en un menú gopher terminan en "CR + LF".

Por ejemplo: la siguiente línea de selección genera un enlace a la página "/home" directorio en el subdominio gopher.floodgap.com, en el puerto 70. El tipo de elemento 1 indica que el recurso es un menú Gopher. La cadena "Inundación de casa" es lo que el usuario ve en el menú.

1Floodgap Inicio /home gopher.floodgap.com 70
Tipo de artículocadena de visualización de usuariosSelectorNombre de hostPuerto
1Floodgap Home/homegopher.floodgap.com70

Tipos de artículos

En el código fuente de un menú Gopher, un código de un carácter indica qué tipo de contenido debe esperar el cliente. Este código puede ser un dígito o una letra del alfabeto; las letras distinguen entre mayúsculas y minúsculas.

La especificación técnica de Gopher, RFC 1436, define 14 tipos de elementos. La última especificación gopher+ definió 3 tipos adicionales. Un código de un carácter indica qué tipo de contenido debe esperar el cliente. El tipo de elemento 3 es un código de error para el manejo de excepciones. Los autores del cliente Gopher improvisaron tipos de elementos h (HTML), i (mensaje informativo) y s (archivo de sonido) después de la publicación de RFC 1436. Navegadores como Netscape Navigator y las primeras versiones de Microsoft Internet Explorer anteponían el código de tipo de elemento al selector, tal como se describe en RFC 4266, de modo que el tipo de elemento gopher pudiera determinarse mediante la propia URL. La mayoría de los navegadores gopher todavía están disponibles, use estos prefijos en sus URL.

Tipos canónicos
0Archivo de texto
1Gopher submenu
2CCSO Nameserver
3Código de error devuelto por un servidor Gopher para indicar fallo
4Archivo codificado por BinHex (principalmente para ordenadores Macintosh)
5DOS file
6Uuencoded file
7Búsqueda de texto completo de Gopher
8Telnet
9Archivo binario
+Espejo o servidor alternativo (para balanceo de carga o en caso de tiempo de inactividad del servidor primario)
gArchivo GIF
IArchivo de imagen
TTelnet 3270
tipo gopher+
:Imagen del mapa de bits
;Archivo de películas
.Archivo de sonido
Tipos no canónicos
dDoc. Visto usado junto a PDF y. DOC's
hArchivo HTML
iMensaje informativo, ampliamente utilizado.
parchivo de imagen "(especialmente el formato png)"
rdocumento rtf archivo "rich text Format")
sArchivo de sonido (especialmente el formato WAV)
Pdocumento pdf archivo "Portable Document Format")
Xdocumento xml archivo "EXtensive Markup Language")

Aquí hay un ejemplo de una sesión gopher donde el usuario requiere un menú gopher (/Referencia en la primera línea):

/Reference
1CIA World Factbook /Archives/mirrors/textfiles.com/política/CIA gopher.quux.org 70
0Jargon 4.2.0 /Reference/Jargon 4.2.0 gopher.quux.org 70 +
Bibliotecas en línea /Reference/Online Libraries gopher.quux.org 70 +
1RFCs: Internet Standards /Computers/Standards and Specs/RFC gopher.quux.org 70
1U.S. Gazetteer /Reference/U.S. Gazetteer gopher.quux.org 70 +
i Este archivo contiene información sobre United States fake (NULL) 0
ciudades, condados y zonas geográficas. Tiene falso (NULL) 0
ilatitud/longitud, población, tierra y agua, falso (NULL) 0
iand ZIP codes. fake (NULL) 0
i fake (NULL) 0
i Para buscar una ciudad, introduzca el nombre de la ciudad. Para buscar falso (NULL) 0
ifor a county, use the name plus County -- for instance, fake (NULL) 0
iDallas County. fake (NULL) 0

El menú Gopher enviado desde el servidor es una secuencia de líneas, cada una de las cuales describe un elemento que se puede recuperar. La mayoría de los clientes los mostrarán como enlaces de hipertexto y, por lo tanto, permitirán que el usuario navegue a través de gopherspace siguiendo los enlaces. Este menú incluye un recurso de texto (itemtype 0 en el tercera línea), múltiples enlaces a submenús (itemtype 1, en la segunda línea, así como en las líneas 4 a 6) y un mensaje de información no estándar (a partir de la línea 7), desglosado en varias líneas proporcionando valores ficticios para el selector, el host y el puerto.

Enlaces externos

Históricamente, para crear un enlace a un servidor web, "GET /" se usó como un pseudo-selector para emular una solicitud HTTP GET. John Goerzen creó una adición al protocolo Gopher, comúnmente conocida como "enlaces de URL", que permite enlaces a cualquier protocolo que admita URL. Por ejemplo, para crear un enlace a http://gopher.quux.org/, el tipo de elemento es h, la cadena de visualización es el título del enlace, el selector de elementos es "URL:http://gopher.quux.org/", y el dominio y el puerto son los del servidor Gopher de origen (de modo que los clientes que no admiten enlaces URL consultarán el servidor y recibirán una página de redirección HTML).

Gopher+

Gopher+ es una mejora compatible con el protocolo Gopher. Gopher+ funciona enviando metadatos entre el cliente y el servidor. La mejora nunca fue ampliamente adoptada por los servidores Gopher.

El cliente envía una tabulación seguida de un +. Un servidor Gopher+ responderá con una línea de estado seguida del contenido que solicitó el cliente. Un elemento se marca como compatible con Gopher+ en la lista del directorio de Gopher mediante una pestaña + después del puerto (este es el caso de algunos de los elementos del ejemplo anterior).

Otras características de Gopher+ incluyen:

Software de cliente

Clientes Gopher

Estos son clientes, bibliotecas y utilidades diseñados principalmente para acceder a los recursos de Gopher.

Cliente Actualizado Licencia Idioma Tipo Notas
ACID 2021 ? C GUI (Windows) Admite caché de página, TFTP y tiene extensión G6.
Bombadillo 2022 GPLv3 Vamos. TUI (Linux, BSD, OSX) Apoya a Gopher, Gemini, Finger
cURL 2022 C CLI
elpher 2022 GPLv3 Emacs Lisp TUI/GUI Elpher: un cliente gopher y gemini para GNU Emacs
Eva 2022 GPLv3 Rust GUI Eva (como en actividad extra vehicular, o escalón) es un navegador de protocolo Gemini y Gopher en Gtk4.
Gopher Browser 2019 Fuente cerrada VB.NET GUI (Windows)
Gopher Client 2018 App (iOS) Admite reflujo de texto, marcadores, historia, etc
gophercle 2022 MIT Java App (Android) Solo soporta funcionalidades básicas como marcadores, historia de sesión, descargas, etc.
Gopherus 2020 BSD 2-clause C TUI (Linux, BSD, Windows, DOS) Características marcadores y caché de página.
Gophie 2020 GPLv3 Java GUI (Windows, MacOS, Linux)
Kristall 2020 GPLv3 C++ GUI (Linux) Cliente Gemini GUI con soporte para Gopher, Finger y www.
Lagrange 2022 BSD 2-clause C GUI Gemini GUI cliente con Gopher y soporte de dedos. Interruptores a las solicitudes de gophermap/type 1 en la navegación padre/raíz.
Pequeño cliente Gopher 2019 Pascal Linux, Mac, Windows Barra lateral con vista jerárquica
ncgopher 2022 BSD 2-clause Rust TUI ncgopher es un cliente gopher y gemini usando ncurses.
Pocket Gopher 2019 Unlicense Java App (Android) Admite marcadores, historia, descargas, etc
sacc 2022 C TUI sacc(omys) es un cliente terminal gopher.
Snarf 2020 GPL C CLI Simple no interactivo All-purpose Resource Fetcher
w3m 2021 MIT C TUI w3m es un navegador web basado en texto

Otros clientes

Clientes como navegadores web, bibliotecas y utilidades diseñadas principalmente para acceder a recursos de la red mundial, pero que mantienen (ed) compatibilidad con Gopher.

Los navegadores que no son compatibles con Gopher de forma nativa aún pueden acceder a los servidores utilizando uno de los Gopher disponibles para las puertas de enlace HTTP o un servidor proxy que convierte los menús de Gopher en HTML; los proxies conocidos son el proxy Gopher público de Floodgap y el proxy Gopher. De manera similar, ciertos paquetes de servidor como GN y PyGopherd tienen interfaces integradas de Gopher a HTTP. El software Squid Proxy conecta cualquier URL de gopher:// a contenido HTTP, lo que permite que cualquier navegador o agente web acceda fácilmente al contenido de gopher.

Para Mozilla Firefox y SeaMonkey, las extensiones de Overbite amplían la navegación Gopher y son compatibles con las versiones actuales de los navegadores (Firefox Quantum v ≥57 y versiones equivalentes de SeaMonkey):

OverbiteWX incluye soporte para acceder a servidores Gopher que no están en el puerto 70 usando una lista blanca y para consultas CSO/ph. OverbiteFF siempre usa el puerto 70. Para Chromium y Google Chrome, Burrow está disponible. Redirige las URL de gopher:// a un proxy. En el pasado, estaba disponible una extensión Overbite basada en proxy para estos navegadores, pero ya no se mantiene y no funciona con las versiones actuales (>23). Para Konqueror, Kio gopher está disponible.

La sencilla interfaz de ahorro de ancho de banda de Gopher puede ser una buena combinación para teléfonos móviles y asistentes digitales personales (PDA). A principios de la década de 2010, se vio un renovado interés en los clientes nativos de Gopher para los teléfonos inteligentes populares.

La popularidad de Gopher estaba en su apogeo en un momento en que todavía había muchas arquitecturas informáticas y sistemas operativos que competían por igual. Como resultado, hay varios clientes Gopher disponibles para Acorn RISC OS, AmigaOS, Atari MiNT, CMS, DOS, Mac OS clásico, MVS, NeXT, OS/2 Warp, la mayoría de los sistemas operativos tipo UNIX, VMS, Windows 3.x y Windows 9x. GopherVR fue un cliente diseñado para la visualización en 3D, e incluso hay un cliente Gopher en MOO. La mayoría de estos clientes están codificados para funcionar en el puerto TCP 70.

Software de servidor

Debido a que el protocolo es trivial de implementar de manera básica, todavía hay muchos paquetes de servidor disponibles y algunos aún se mantienen.

Servidor Desarrollado por Última versión Fecha de lanzamiento Licencia Escrito en Notas
Aftershock Rob Linwood 1.0.1 22 de abril de 2004MIT Java
Apache:GopherHandler Timm Murray 0.1 26 de marzo de 2004GPLv2 o cualquier versión posterior Perl plugin Apache 2 para ejecutar Gopher-Server.
Atua Charles Childers 2017.4 9 de octubre de 2017ISC Forth
Bucktooth (enlace geográfico) (enlace proxiado) Cameron Kaiser 0,2.9 1o de mayo de 2011Floodgap Licencia de Software Libre Perl
Flask-Gopher Michael Lazar 2.2.1 11 de abril de 2020GPLv3 Python
geomyid Quinn Evans 0,0.1 10 de agosto de 20152-clause BSD Lisp común
geomyidae (enlace geográfico) (enlace indirecto) Christoph Lohmann 0,50.1 8 de abril de 2022MIT C scripting dinámico REST, soporte de gopher TLS, capa de compatibilidad para otros gophermaps
GoFish Sean MacLennan 1.2 8 de octubre de 2010GPLv2 C
Gopher-Server Timm Murray 0.1.1 26 de marzo de 2004GPLv2 Perl
Gophernicus Kim Holviala y otros 3.1.1 3 de enero de 20212-clause BSD C
Gophrier Guillaume Duhamel 0,2.3 29 de marzo de 2012GPLv2 C
Goscher Aaron W. Hsu 8.0 20 de junio de 2011ISC Plan
mg Mate Nagy 1.1 29 de enero de 2018GPLv3 C
Motsognir Mateusz Viste 1.0.13 8 de enero de 2021MIT C extensible a través de gophermaps personalizados, scripts CGI y PHP
Pituophis dotcomboom 1.1 16 de mayo de 20202-clause BSD Python Python-based Biblioteca Gopher con soporte para servidor y cliente
PyGopherd John Goerzen 2.0.18.5 14 de febrero de 2017GPLv2 Python También admite HTTP, WAP y Gopher+
Redis Salvatore Sanfilippo 6.2.5 21 de julio de 2021BSD de 3 colores C Apoyo eliminado en la versión 7
save_gopher_servidor SSS8555 0,777 7 de julio de 2020? Perl con extensión G6 y TFTP
Spacecookie Lukas Epple 1.0.0.0 17 de marzo de 2021GPLv3 Haskell
Xylophar Nathaniel Leveck 0,0.1 15 de enero de 2020GPLv3 FreeBASIC

Enlaces externos