Введение

Протокол прикладного уровня TCP/IP

Протокол Gopher (/ɡoʊ/f/ər/) — это коммуникационный протокол, разработанный для распространения, поиска и получения документов в сетях протокола Интернет. Конструкция протокола Gopher и пользовательского интерфейса основана на меню и представляла собой альтернативу Всемирной паутине на ранних этапах её развития, но в конечном итоге уступила место протоколу HTTP. Экосистема Gopher часто рассматривается как фактический предшественник Всемирной паутины, разработанный в Университете Миннесоты. Он предлагает некоторые функции, которых нет в Веб изначально, и накладывает более строгую иерархию на хранящиеся документы. Его текстовый меню-интерфейс хорошо подходит для вычислительных сред, активно использующих удалённые текстовые терминалы, которые были широко распространены во время его создания в 1991 году, а простота протокола способствовала созданию множества клиентских реализаций. В более поздних версиях Gopher и графических клиентах была добавлена поддержка мультимедиа. Иерархическая структура Gopher послужила платформой для первых масштабных подключений электронных библиотек. Протокол Gopher до сих пор используется энтузиастами, и хотя он почти полностью вытеснен Веб, небольшое количество активно поддерживаемых серверов всё ещё существует.

Происхождение

Система Gopher была выпущена в середине 1991 года Марком П. Маккахилом, Фархадом Анклесарией, Полом Линднером, Дэниелом Торри и Бобом Альберти из Университета Миннесоты в Соединенных Штатах. Ее основными целями, как заявлялось, были:

Иерархическая файловая структура, знакомая пользователям. Простой синтаксис. Система, которую можно быстро и недорого создать. Расширяемость файловой системы, например, возможность добавления поиска. Gopher объединяет иерархии документов с наборами сервисов, включая WAIS, поисковые системы Archie и Veronica, а также шлюзы к другим информационным системам, таким как протокол передачи файлов (FTP) и Usenet. Широкий интерес к системам информации для кампуса (CWIS) в высшем образовании в то время и простота настройки серверов Gopher для создания мгновенной CWIS со ссылками на онлайн-каталоги и ресурсы других сайтов стали факторами, способствовавшими быстрому распространению Gopher. Название было придумано Анклесарией как игра слов, основанная на различных значениях слова "gopher". Гофер является талисманом Университета Миннесоты, "gofer" – это помощник, который приносит вещи по запросу, а гофер роет норы в земле, чтобы добраться до нужного места.

Запрос на поиск

В запросе за строкой селектора необязательно может следовать символ табуляции и строка поиска. Это используется типом элемента 7.

Исходный код меню

Элементы меню Gopher определяются строками, разделёнными табуляцией, в текстовом файле. Этот файл иногда называют gophermap. Как исходный код меню Gopher, gophermap приблизительно аналогичен HTML-файлу для веб-страницы. Каждая строка, разделённая табуляцией (называемая строкой выбора), предоставляет клиентскому программному обеспечению описание элемента меню: что это такое, как он называется и куда он ведёт. Клиент отображает элементы меню в том порядке, в котором они появляются в gophermap. Первый символ в строке выбора указывает тип элемента, который сообщает клиенту, на какой файл или протокол указывает элемент меню. Это помогает клиенту определить, что с ним делать. Типы элементов Gopher являются более простым предшественником системы типов медиа, используемой в Интернете и вложениях электронной почты. За типом элемента следует строка отображения для пользователя (описание или метка, представляющая элемент в меню); селектор (путь или другая строка для ресурса на сервере); имя хоста (доменное имя или IP-адрес сервера) и сетевой порт. Все строки в меню Gopher завершаются символами "CR + LF". Пример строки выбора в исходном коде меню: Следующая строка выбора генерирует ссылку на каталог "/home" на поддомене gopher.floodgap.com, на порту 70. Тип элемента "1" указывает, что связанный ресурс является меню Gopher. Строка "Floodgap Home" – это то, что клиент покажет пользователю при посещении данного меню. 1Floodgap Home /home gopher.floodgap.com 70

Тип элемента Строка отображения для пользователя Селектор Имя хоста Порт 1 Floodgap Home /home gopher.floodgap.com 70

Клиенты Гофера

Это клиенты, библиотеки и утилиты, предназначенные главным образом для доступа к ресурсам Gopher. Клиент Год лицензия Язык Тип Примечания ACID 2021 ? C GUI (Windows) Поддерживает кэш страниц, TFTP и имеет расширение G6. Bombadillo 2022 GPLv3 Go TUI (Linux, BSD, OSX) Поддерживает Gopher, Gemini, Finger. cURL 2022 C CLI elpher 2022 GPLv3 Emacs Lisp TUI/GUI Elpher: клиент для Gopher, Finger и Gemini для GNU Emacs. eva 2022 GPLv3 Rust GUI Eva (как внекорабельная деятельность, или выход в открытый космос) — браузер протоколов Gemini и Gopher в GTK 4. Gopher Browser 2019 Закрытый исходный код VB. NET GUI (Windows) Gopher Client 2018 App (iOS) Поддерживает перенос текста, закладки, историю и т. д. gophercle 2022 MIT Java App (Android) Поддерживает только основные функции, такие как закладки, историю сеансов, загрузки и т. д. Gopherus 2020 BSD 2 пункта C TUI (Linux, BSD, Windows, DOS) Имеет закладки и кэширование страниц. Gophie 2020 GPLv3 Java GUI (Windows, MacOS, Linux) Kristall 2020 GPLv3 C++ GUI (Linux) Gemini GUI клиент с поддержкой Gopher, Finger и www. Lagrange 2022 BSD 2 пункта C GUI Gemini GUI клиент с поддержкой Gopher и Finger. Переключается на запросы gophermap/type 1 при навигации по родительским/корневым каталогам. Little Gopher Client 2019 Pascal Linux, Mac, Windows Боковая панель с иерархическим представлением. ncgopher 2022 BSD 2 пункта Rust TUI ncgopher — клиент для Gopher и Gemini, использующий ncurses. Pocket Gopher 2019 Unlicense Java App (Android) Поддерживает закладки, историю, загрузки и т. д. sacc 2022 C TUI sacc(omys) — терминальный Gopher клиент. snarf 2020 GPL C CLI Простой Неинтерактивный Универсальный загрузчик ресурсов. w3m 2021 MIT C TUI w3m — текстовый веб-браузер.

Серверное программное обеспечение

Поскольку протокол тривиален в реализации в базовой форме, существует множество доступных серверных пакетов, и некоторые из них все еще поддерживаются. Сервер Разработчик Последняя версия Дата выпуска Лицензия Написан на Примечания Aftershock Роб Линвуд 1.0.1 MIT Java Apache::GopherHandler Тим Мюррей 0.1 GPLv2 или любая более поздняя версия Perl Плагин Apache 2 для запуска Gopher Server. Atua Чарльз Чайлдерс 2017.4 ISC Forth Bucktooth (ссылка Gopher) (прокси-ссылка) Cameron Kaiser 0.2.10 Floodgap Free Software License Perl Flask Gopher Майкл Лазар 2.2.1 GPLv3 Python geomyid Куинн Эванс 0.0.1 2-пунктная BSD Common Lisp geomyidae (ссылка Gopher) (прокси-ссылка) Christoph Lohmann 0.96 MIT CREST динамическое скриптирование, поддержка Gopher TLS, уровень совместимости для других gophermaps GoFish Шон МакЛеннан 1.2 GPLv2 C go gopher James Mills MIT Go Gopher Server Тим Мюррей 0.1.1 GPLv2 Perl Gophernicus Ким Хольвиала и другие 3.1.1 2-пунктная BSD C gophrier Гийом Дюамель 0.2.3 GPLv2 C Goscher Аарон В. Хсу 8.0 ISC Scheme mgod Мате Надь 1.1 GPLv3 C Motsognir Матеуш Висте 1.0.13 MIT C расширяемый с помощью пользовательских gophermaps, CGI и PHP скриптов Pituophis dotcomboom 1.1 2-пунктная BSD Python Python-основанная Gopher библиотека с поддержкой сервера и клиента PyGopherd Майкл Лазар 3.0.1 GPLv2 Python Также поддерживает HTTP, WAP и Gopher+ Redis Сальваторе Санфилиппо 6.2.5 3-пунктная BSD C Поддержка удалена в версии 7, сохраните gopher server SSS8555 0.777 Perl с расширением G6 и TFTP Spacecookie Лукас Эппле 1.0.0.0 GPLv3 Haskell Xylophar Nathaniel Leveck 0.0.1 GPLv3 FreeBASIC