Gopher ( [ˈɡoʊfər] — го́уфер, го́фер) — сетевой протокол распределённого поиска и передачи документов, который был широко распространён в Интернете до 1993 года. Протокол предназначается для предоставления доступа к документам в Интернет, но имеет меньше возможностей, чем HTTP, и впоследствии был почти полностью вытеснен им.

Протокол gopher имеет более жёсткую структуру размещения информации, очень похожую на структуру каталогов в файловой системе, которая состоит из вложенных друг в друга каталогов и ов. Иерархическая структура ссылок позволила пользователям текстовых терминалов, в основном в университетах, очень быстро находить нужную информацию.

Протокол был разработан в Университете Миннесоты весной 1991 года и документирован в RFC 1436. Летом 1993 года опубликован набор дополнений к протоколу, получивший название Gopher+.

В феврале 1993 года Университет Миннесоты объявил о намерении взимать лицензионные отчисления за использование созданной им реализации сервера Gopher.University of Minnesota Gopher software licensing policy The Minnesota Gopher Team В результате пользователи и разработчики стали отдавать предпочтение развивавшейся тогда технологии World Wide Web, имевшей и ряд других преимуществ. В сентябре 2000 года Университет Миннесоты выпустил программное обеспечение Gopher (клиент и сервер) под лицензией GNU GPL.

Протокол основан на клиент-серверной технологии, за ним закреплён 70-й порт TCP. После того, как клиент установит TCP-подключение с сервером, он посылает строку (заканчивающуюся CR LF), которая содержит запрос на нужный документ либо пустую строку для получения первой страницы сайта. Сервер отвечает и закрывает соединение.

Каталог состоит из последовательности строк, описывающих данные, которые можно из него получить — файлы, другие каталоги и ссылки на ресурсы, доступные по другим протоколам. Строки содержат пять полей и заканчиваются CR LF. Первое поле содержит один символ и не отделено от второго, остальные разделяются табуляцией.

Тип содержимого 0 = текстовый файл 1 = каталог 2 = сервер имён CSO 3 = ошибка 4 = файл Macintosh в формате BinHex 5 = архив ZIP 6 = файл UNIX, закодированный uuencode 7 = поисковый сервер 8 = ссылка на telnet-сессию 9 = бинарный файл + = запасной сервер h = файл в формате HTML g = графический файл в формате GIF i = информационный текст I = графический файл (отображение определяется клиентом) T = ссылка на сессию TN3270 Строка описания Путь (обычно в файловой системе) Доменное имя сервера Номер порта сервера

На начало 2013 года в Интернете существует около 310 gopher-серверов. Большинство из них более не обновляется, но некоторые поддерживаются энтузиастами протокола Gopher. Несколько десятков новых серверов было запущено с 1999 года. Сегодня Gopher напоминает почти заброшенный уголок Интернета — можно, например, публиковать адреса электронной почты, не беспокоясь о спаме, и публиковать любую информацию, не заботясь об объёмах трафика. При этом многие серверы Gopher до сих пор регулярно посещаются. Протокол Gopher в той или иной мере поддерживается многими современными веб-браузерами. Протокол Gopher получил дальнейшее развитие в протоколе Gemini (протокол).

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

Клиенты

В Internet Explorer версий 5.* и 6 для Windows поддержка Gopher отключена с июня 2002 года с выходом патча, предназначавшегося для исправления уязвимости в обработчике протокола Gopher; однако её можно вернуть через редактирование реестра. В Internet Explorer 7 Gopher более не поддерживается. Internet Explorer для Mac (только на платформе PowerPC) всё ещё поддерживает Gopher.

Другие браузеры, включая Mozilla и AOL, поддерживают протокол лишь частично — наиболее существенным недостатком является то, что они не отображают информационный текст, используемый во многих gopher-меню. Для полной поддержки Gopher в Konqueror необходим плагин, такой как kio_gopher. Mozilla Firefox полностью поддерживал Gopher, начиная с версии 1.5 и до 4 (в 4-й версии браузера, вышедшей в марте 2011 года, Gopher перестал поддерживаться, но можно установить специальное расширение), и частично — в предшествующих версиях. SeaMonkey и Camino также полностью поддерживают Gopher. Однако, наиболее полная поддержка Gopher доступна в текстовом браузере Lynx.

Safari не поддерживает Gopher, для поддержки в Opera требуется прокси-сервер, например Squid.

Серверы

Благодаря простоте протокола создано множество реализаций серверов на различных языках программирования:

На C: UMN Gopherd — классический сервер, разработанный в Университете Миннесоты, не поддерживается Geomyidae GN GoFish Gophernicus gophrier mgod Motsognir На Python: PyGopherd PyGS На Java: Aftershock На Perl: Bucktooth На FreeBASIC: GOPHSERV Grumpy (поддержка Gopher прекращена) На Scheme: Goscher На платформе .NET 3.5: Gopher Cannon На Node.js (JavaScript): node-gopher

Gopher+ Gopher+ — обратно совместимое расширение протокола Gopher. Предложено разработчиками оригинального протокола Gopher (также называемого Gopher0) в июле 1993 года.

В дополнение к стандартным полям, отправляемым клиенту сервером Gopher0, сервер Gopher+ может отправлять различные метаданные о документе (тип MIME, дату изменения документа, краткое описание, информацию о доступных форматах документа и др.). Клиент Gopher+ может отправлять серверу данные пользовательского ввода аналогично веб-формам.

Предложены также новые типы содержимого: : = битовое изображение; ; = файл видео; < = звуковой файл.

Расширения Gopher+ не были широко реализованы на практике. Лишь немногие из клиентов (UMN Gopher, HGopher) и серверов (UMN Gopherd, Pygopherd) полностью или частично поддерживают Gopher+.

Примечания

Ссылки RFC 1436 — описание протокола Gopher шлюз из WWW в Gopher Gopher+ Uptime и состояние известных серверов Gopher (через http недоступен) Спецификация Gopher+

Категория:Протоколы прикладного уровня Категория:Появились в 1991 году Категория:Интернет-протоколы