Gopher (protokol)

Protokol **Gopher** ialah sejenis protokol lapisan penggunaan TCP/IP yang direka bagi mengedar, mencari, dan mendapatkan dokumen-dokumen melalui Internet. Protokol ini menggunakan reka bentuk menu-dokumen menjadi pilihan pada Jaringan Sejagat pada zaman awal pembinaan jaringan tersebut. Namun, akhirnya protokol HTTP menjadi protokol yang dominan ataupun aliran utama. Ekosistem Gopher sering kali dianggap sebagai pendahulu efektif Jaringan Sejagat, atau dalam bahasa Inggeris, *World Wide Web (WWW)*.

Protokol Gopher dicipta sebuah pasukan yang diketuai Mark P. McCahill di Universiti Minnesota. Protokol ini menyediakan beberapa ciri yang tidak didokong secara azali oleh Web dan mengenakan sistem hierarki yang lebih ketat terhadap maklumat yang terkandung dengannya. Antara muka teks utamanya mudah diguna, dan amat sesuai dengan persekitaran pengkomputan yang bergantung banyak pada terminal teks jarak jauh, yang masih banyak dijumpai semasa protokol ini dicipta pada tahun 1991. protokolnya yang ringkas juga memudahakan penciptaan implementasi pelanggan. Semakan Gopher dan pelanggan yang lebih kini menambah dokongan bagi multimedia. Gopher menjadi pilihan ramai pentadbir sistem kerana protokol ini memerlukan hanya sedikit sumber jaringan berbanding perkhidmatan Web.

Gopher menyediakan platform yang sesuai buat penyediaan perhubungan perpustakaan elektronik besar yang pertama dengan struktur hierarkinya. Para pengguna Gopher masih ingat yang sistem Gopher "lebih pantas, lebih efisien dan lebih teratur" daripada perkhidmatan-perkhidmatan Web sekarang. Mahupun protokol ini kebanyakannya diganti oleh Web dalam tahun-tahun selepasnya, protokol Gopher masih diguna oleh para penggemarnya, dan pelayan-pelayan Gopher masih dikekalkan sehingga kini.

## Asal-usul
Sistem Gopher asal dikeluarkan pada tahun 1991 oleh Mark McCahill, Farhad Anklesaria, Paul Lindner, Daniel Torrey, dan Bob Alberti daripada Universiti Minnesota. Tujuan-tujuan utamanya, seperti dinyatakan dalam RFC 1436 adalah:
* Susunan hierarki seumpama fail yang tidak asing bagi pengguna.
* Sintaks yang mudah.
* Sebuah sistem yang dapat dibina dengan pantas dan murah.
* Memanjangkan metafora sistem fail, seperti membuat gelintaran.

Gopher menggabungkan hierarki dokumen dengan himpunan perkhidmatan, termasuk WAIS, enjin-enjin gelintar Archie dan Veronica, dan juga get laluan kepada sistem maklumat lain seperti FTP dan Usenet.

Nama protokol ini diberikan oleh Anklesaria.

## Pengalaman baharu buat pengguna

Laporan sezaman  memberikan gambaran bagaimana para pengguna mengalami atur cara semasa ia mula-mula dikeluarkan menyatukan beberapa sumber dan menjana apa yang disebut  *Gopher space* ("ruang gopher").

Dengan skrin yang memuatkan 25 baris 80 aksara hijau (pada masa itu tiada grafik) pengguna mendapat menu berhierarki. Menu tahap teratas mungkin mengandungi jabatan-jabatan dan penerbitan-penerbitan (misalnya, akhbar kampus) universiti yang mengendalikan Gopher sebagai satu cara mengedar dokumen secara elektronik, sekurang-kurangnya kepada masyarakat kampus.

Jaringan Sejagat menambah grafik pada teks, akan tetapi kehilangan menu. Ia mengambil masa yang agak panjang bagi kuasa pengkomputeran -- lebar jalur seribu kali lebih berkuasa daripada (MODEM 9600 baud ke optik gentian), tatasusun cakera yang seribu kali lebih besar (1 GB sehingga lebih daripada 1 TB) dan pelayan murah (CPU yang seribu kali lebih berkuasa) -- bagi membolehkan pengguna Internet sekarang untuk melayar sesawang dan bagi enjin gelintar untuk mengkatalogkan kandungan Web.

### Sokongan Natif Gopher

Pelayar-pelayar yang tidak menyokong Gopher secara natif masih dapat mencapai pelayan dengan menggunakan get laluan Gopher ke HTTP.

### "Plugin" Gopher bagi pelayar
OverbiteFF  memanjangkan pelayaran Gopher buat Mozilla Firefox dan SeaMonkey. *Plugin* ini menyediakan sokongan bagi pencapaian pelayan Gopher yang tidak berfungsi melalui port 70, dengan menggunakan senarai putih, dan juga memuatkan sdokongan buat |pertanyaan CSO/ph; ia juga membolehkan versi-versi Firefox dan SeaMonkey yang tidak menyokong Gopher secara natif untuk mencapai pelayan-pelayan Gopher. *Plugin* juga terdapat untuk Konqueror dan sambungan berlandaskan proksi bagi Google Chrome.

### Pelanggan Gopher buat peranti bimbit

Awal tahun 2010-an menyaksikan minat baharu terhadap pelanggan Gopher buat telefon pintar. Overbite, pelanggan sumber terbuka buat Android 1.5+ dikeluarkan dalam tahap alpha pada tahun 2010.  

PocketGopher  juga dikeluarkan pada tahun 2010 bersam-sama kod sumbernya bagi beberapa peranti serasi JavaME. iGopher dikeluarkan pada tahun 2011 sebagai perisian propietari buat peranti iPhone dan iPad.

### Protokol

Protokol Gopher mula-mula diperikan dalam RFC 1436. IANA memberikan port 70 TCP kepada protokol Gopher.

Protokol ini mudah untuk dilepasi, dan membolehkan pelayaran tanpa menggunakan pelanggan. Sesi Gopher standard kelihatan begini:


```
/Reference
1CIA World Factbook     /Archives/mirrors/textfiles.com/politics/CIA    gopher.quux.org 70
0Jargon 4.2.0   /Reference/Jargon 4.2.0 gopher.quux.org 70      +
1Online Libraries       /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      +
iThis file contains information on United States        fake    (NULL)  0
icities, counties, and geographical areas.  It has      fake    (NULL)  0
ilatitude/longitude, population, land and water area,   fake    (NULL)  0
iand ZIP codes. fake    (NULL)  0
i       fake    (NULL)  0
iTo search for a city, enter the city's name.  To search        fake    (NULL) 0
ifor a county, use the name plus County -- for instance,        fake    (NULL) 0
iDallas County. fake    (NULL)  0
```


Di sini, pelanggan sudah membuat sambungan TCP dengan pelayan melalui port 70, port piawai bagi Gopher. Pelanggan kemudiannya menghantar "string" diikuti *carriage return* (kepulangan penyorong) "CR" dan *line feed* (baris baharu)  (yakni, jujukan "CR + LF"). Ini merupakan pemilih yang mengenal pasti dokumen yang perlu diambil. Pelayan kemudiannya menjawab permintaan dengan menyediakan item yang diminta dan menutup sambungan. Mengikut protokol, sebelum sambungan itu ditutup, pelayan harus menghantar tanda titik noktah (yakni, aksara titik) pada barisanya tersendiri. Namun, seperti dalam kes ini, bukan semua pelayan yang mematuhi bahagian protokol ini dan pelayan boleh menutup sambungan tanpa memulangkan tanda titik terakhir.

Dalam contoh ini, item yang dihantar pulang ialah menu gopher, sebuah direktori yang terdiri daripada jujukan baris yang setiap satunya memerikan item yang dapat diambil. Kebanyakan pelanggan akan memaparkan item-item ini sebagai pautan hiperteks, dan dengan itu membolehkan pengguna untuk melayari ruang gopher dengan mengikut pautan.

## Pilihan selain Gopher
Dari segi sejarah, hanya terdapat satu pesaing kepada protokol Gopher.

* HTTP

## Rujukan

## Pautan luar
* Senarai semua pelayan Gopher awam (pautan proksi)
* [gopher://gopher.docfile.org/1/world/monitoring/uptime Senarai masa hidup pelayan Gopher awam]  (pautan gopher)
* (pautan HTTP) 
*An announcement of Gopher on the Usenet  8 October 1991
*Why is Gopher Still Relevant? A position statement on Gopher's survival.
*An article published by the technology discussion site "Ars Technica", about the Gopher community of enthusiasts nowadays
* Sites inspired by gopher: Spencer Hunter's Homepage – Example of a Gopher emulation in HTML, online since 1995. Under the "About this gopher and myself" directory is the author's own Gopher manifesto, "Why gopher is superior to the Web."; A community server for the Collier County, FL (Naples, FL) area whose fast web interface is inspired by Gopher. It is also an example of a Gopher emulation in HTML

### Piawai
* Pembahagian Nombor Port IANA 
*RFC 1436 – The Internet Gopher Protocol (a distributed document search and retrieval protocol)
*RFC 1580 – Guide to Network Resource Tools
*RFC 1689 – Networked Information Retrieval: Tools and Groups
*RFC 1727 – A Vision of an Integrated Internet Information Service
*RFC 1738 – Uniform Resource Locators (URL)
*RFC 1808 – Relative Uniform Resource Locators
*RFC 2396 – Uniform Resource Identifiers (URI): Generic Syntax
*RFC 4266 – The gopher URI Scheme