rfc1436.txt - gopher-protocol - Gopher Protocol Extension Project
 (HTM) git clone git://bitreich.org/gopher-protocol git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/gopher-protocol
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
       rfc1436.txt (36501B)
       ---
            1 
            2 
            3 
            4 
            5 
            6 
            7 Network Working Group                                     F. Anklesaria
            8 Request for Comments: 1436                                  M. McCahill
            9                                                              P. Lindner
           10                                                              D. Johnson
           11                                                               D. Torrey
           12                                                              B. Alberti
           13                                                 University of Minnesota
           14                                                              March 1993
           15 
           16 
           17                       The Internet Gopher Protocol
           18          (a distributed document search and retrieval protocol)
           19 
           20 Status of this Memo
           21 
           22    This memo provides information for the Internet community.  It does
           23    not specify an Internet standard.  Distribution of this memo is
           24    unlimited.
           25 
           26 Abstract
           27 
           28    The Internet Gopher protocol is designed for distributed document
           29    search and retrieval.  This document describes the protocol, lists
           30    some of the implementations currently available, and has an overview
           31    of how to implement new client and server applications.  This
           32    document is adapted from the basic Internet Gopher protocol document
           33    first issued by the Microcomputer Center at the University of
           34    Minnesota in 1991.
           35 
           36 Introduction
           37 
           38    gopher  n.  1. Any of various short tailed, burrowing mammals of the
           39    family Geomyidae, of North America.  2. (Amer. colloq.) Native or
           40    inhabitant of Minnesota: the Gopher State.  3. (Amer. colloq.) One
           41    who runs errands, does odd-jobs, fetches or delivers documents for
           42    office staff.  4. (computer tech.) software following a simple
           43    protocol for burrowing through a TCP/IP internet.
           44 
           45    The Internet Gopher protocol and software follow a client-server
           46    model.  This protocol assumes a reliable data stream; TCP is assumed.
           47    Gopher servers should listen on port 70 (port 70 is assigned to
           48    Internet Gopher by IANA).  Documents reside on many autonomous
           49    servers on the Internet.  Users run client software on their desktop
           50    systems, connecting to a server and sending the server a selector (a
           51    line of text, which may be empty) via a TCP connection at a well-
           52    known port.  The server responds with a block of text terminated by a
           53    period on a line by itself and closes the connection.  No state is
           54    retained by the server.
           55 
           56 
           57 
           58 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti         [Page 1]
           59 
           60 RFC 1436                         Gopher                       March 1993
           61 
           62 
           63    While documents (and services) reside on many servers, Gopher client
           64    software presents users with a hierarchy of items and directories
           65    much like a file system.  The Gopher interface is designed to
           66    resemble a file system since a file system is a good model for
           67    organizing documents and services; the user sees what amounts to one
           68    big networked information system containing primarily document items,
           69    directory items, and search items (the latter allowing searches for
           70    documents across subsets of the information base).
           71 
           72    Servers return either directory lists or documents.  Each item in a
           73    directory is identified by a type (the kind of object the item is),
           74    user-visible name (used to browse and select from listings), an
           75    opaque selector string (typically containing a pathname used by the
           76    destination host to locate the desired object), a host name (which
           77    host to contact to obtain this item), and an IP port number (the port
           78    at which the server process listens for connections). The user only
           79    sees the user-visible name.  The client software can locate and
           80    retrieve any item by the trio of selector, hostname, and port.
           81 
           82    To use a search item, the client submits a query to a special kind of
           83    Gopher server: a search server.  In this case, the client sends the
           84    selector string (if any) and the list of words to be matched. The
           85    response yields "virtual directory listings" that contain items
           86    matching the search criteria.
           87 
           88    Gopher servers and clients exist for all popular platforms.  Because
           89    the protocol is so sparse and simple, writing servers or clients is
           90    quick and straightforward.
           91 
           92 1.  Introduction
           93 
           94    The Internet Gopher protocol is designed primarily to act as a
           95    distributed document delivery system.  While documents (and services)
           96    reside on many servers, Gopher client software presents users with a
           97    hierarchy of items and directories much like a file system.  In fact,
           98    the Gopher interface is designed to resemble a file system since a
           99    file system is a good model for locating documents and services.  Why
          100    model a campus-wide information system after a file system?  Several
          101    reasons:
          102 
          103       (a) A hierarchical arrangement of information is familiar to many
          104       users.  Hierarchical directories containing items (such as
          105       documents, servers, and subdirectories) are widely used in
          106       electronic bulletin boards and other campus-wide information
          107       systems. People who access a campus-wide information server will
          108       expect some sort of hierarchical organization to the information
          109       presented.
          110 
          111 
          112 
          113 
          114 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti         [Page 2]
          115 
          116 RFC 1436                         Gopher                       March 1993
          117 
          118 
          119       (b) A file-system style hierarchy can be expressed in a simple
          120       syntax.  The syntax used for the internet Gopher protocol is
          121       easily understandable, and was designed to make debugging servers
          122       and clients easy.  You can use Telnet to simulate an internet
          123       Gopher client's requests and observe the responses from a server.
          124       Special purpose software tools are not required.  By keeping the
          125       syntax of the pseudo-file system client/server protocol simple, we
          126       can also achieve better performance for a very common user
          127       activity: browsing through the directory hierarchy.
          128 
          129       (c) Since Gopher originated in a University setting, one of the
          130       goals was for departments to have the option of publishing
          131       information from their inexpensive desktop machines, and since
          132       much of the information can be presented as simple text files
          133       arranged in directories, a protocol modeled after a file system
          134       has immediate utility.  Because there can be a direct mapping from
          135       the file system on the user's desktop machine to the directory
          136       structure published via the Gopher protocol, the problem of
          137       writing server software for slow desktop systems is minimized.
          138 
          139       (d) A file system metaphor is extensible.  By giving a "type"
          140       attribute to items in the pseudo-file system, it is possible to
          141       accommodate documents other than simple text documents.  Complex
          142       database services can be handled as a separate type of item.  A
          143       file-system metaphor does not rule out search or database-style
          144       queries for access to documents.  A search-server type is also
          145       defined in this pseudo-file system.  Such servers return "virtual
          146       directories" or list of documents matching user specified
          147       criteria.
          148 
          149 2.  The internet Gopher Model
          150 
          151    A detailed BNF rendering of the internet Gopher syntax is available
          152    in the appendix...but a close reading of the appendix may not be
          153    necessary to understand the internet Gopher protocol.
          154 
          155    In essence, the Gopher protocol consists of a client connecting to a
          156    server and sending the server a selector (a line of text, which may
          157    be empty) via a TCP connection.  The server responds with a block of
          158    text terminated with a period on a line by itself, and closes the
          159    connection.  No state is retained by the server between transactions
          160    with a client. The simple nature of the protocol stems from the need
          161    to implement servers and clients for the slow, smaller desktop
          162    computers (1 MB Macs and DOS machines), quickly, and efficiently.
          163 
          164    Below is a simple example of a client/server interaction; more
          165    complex interactions are dealt with later.  Assume that a "well-
          166    known" Gopher server (this may be duplicated, details are discussed
          167 
          168 
          169 
          170 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti         [Page 3]
          171 
          172 RFC 1436                         Gopher                       March 1993
          173 
          174 
          175    later) listens at a well known port for the campus (much like a
          176    domain-name server).  The only configuration information the client
          177    software retains is this server's name and port number (in this
          178    example that machine is rawBits.micro.umn.edu and the port 70). In
          179    the example below the F character denotes the TAB character.
          180 
          181  Client:          {Opens connection to rawBits.micro.umn.edu at port 70}
          182 
          183  Server:          {Accepts connection but says nothing}
          184 
          185  Client: <CR><LF> {Sends an empty line: Meaning "list what you have"}
          186 
          187  Server:          {Sends a series of lines, each ending with CR LF}
          188  0About internet GopherFStuff:About usFrawBits.micro.umn.eduF70
          189  1Around University of MinnesotaFZ,5692,AUMFunderdog.micro.umn.eduF70
          190  1Microcomputer News & PricesFPrices/Fpserver.bookstore.umn.eduF70
          191  1Courses, Schedules, CalendarsFFevents.ais.umn.eduF9120
          192  1Student-Staff DirectoriesFFuinfo.ais.umn.eduF70
          193  1Departmental PublicationsFStuff:DP:FrawBits.micro.umn.eduF70
          194                     {.....etc.....}
          195  .                  {Period on a line by itself}
          196                     {Server closes connection}
          197 
          198 
          199    The first character on each line tells whether the line describes a
          200    document, directory, or search service (characters '0', '1', '7';
          201    there are a handful more of these characters described later).  The
          202    succeeding characters up to the tab form a user display string to be
          203    shown to the user for use in selecting this document (or directory)
          204    for retrieval.  The first character of the line is really defining
          205    the type of item described on this line. In nearly every case, the
          206    Gopher client software will give the users some sort of idea about
          207    what type of item this is (by displaying an icon, a short text tag,
          208    or the like).
          209 
          210    The characters following the tab, up to the next tab form a selector
          211    string that the client software must send to the server to retrieve
          212    the document (or directory listing).  The selector string should mean
          213    nothing to the client software; it should never be modified by the
          214    client.  In practice, the selector string is often a pathname or
          215    other file selector used by the server to locate the item desired.
          216    The next two tab delimited fields denote the domain-name of the host
          217    that has this document (or directory), and the port at which to
          218    connect.  If there are yet other tab delimited fields, the basic
          219    Gopher client should ignore them.  A CR LF denotes the end of the
          220    item.
          221 
          222 
          223 
          224 
          225 
          226 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti         [Page 4]
          227 
          228 RFC 1436                         Gopher                       March 1993
          229 
          230 
          231    In the example, line 1 describes a document the user will see as
          232    "About internet Gopher".  To retrieve this document, the client
          233    software must send the retrieval string: "Stuff:About us" to
          234    rawBits.micro.umn.edu at port 70.  If the client does this, the
          235    server will respond with the contents of the document, terminated by
          236    a period on a line by itself.  A client might present the user with a
          237    view of the world something like the following list of items:
          238 
          239 
          240       About Internet Gopher
          241       Around the University of Minnesota...
          242       Microcomputer News & Prices...
          243       Courses, Schedules, Calendars...
          244       Student-Staff Directories...
          245       Departmental Publications...
          246 
          247 
          248 
          249    In this case, directories are displayed with an ellipsis and files
          250    are displayed without any.  However, depending on the platform the
          251    client is written for and the author's taste, item types could be
          252    denoted by other text tags or by icons.  For example, the UNIX
          253    curses-based client displays directories with a slash (/) following
          254    the name; Macintosh clients display directories alongside an icon of
          255    a folder.
          256 
          257    The user does not know or care that the items up for selection may
          258    reside on many different machines anywhere on the Internet.
          259 
          260    Suppose the user selects the line "Microcomputer News & Prices...".
          261    This appears to be a directory, and so the user expects to see
          262    contents of the directory upon request that it be fetched.  The
          263    following lines illustrate the ensuing client-server interaction:
          264 
          265 
          266     Client:           (Connects to pserver.bookstore.umn.edu at port 70)
          267     Server:           (Accepts connection but says nothing)
          268     Client: Prices/   (Sends the magic string terminated by CRLF)
          269     Server:           (Sends a series of lines, each ending with CR LF)
          270     0About PricesFPrices/AboutusFpserver.bookstore.umn.eduF70
          271     0Macintosh PricesFPrices/MacFpserver.bookstore.umn.eduF70
          272     0IBM PricesFPrices/IckFpserver.bookstore.umn.eduF70
          273     0Printer & Peripheral PricesFPrices/PPPFpserver.bookstore.umn.eduF70
          274                       (.....etc.....)
          275     .                 (Period on a line by itself)
          276                       (Server closes connection)
          277 
          278 
          279 
          280 
          281 
          282 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti         [Page 5]
          283 
          284 RFC 1436                         Gopher                       March 1993
          285 
          286 
          287 3. More details
          288 
          289 3.1  Locating services
          290 
          291    Documents (or other services that may be viewed ultimately as
          292    documents, such as a student-staff phonebook) are linked to the
          293    machine they are on by the trio of selector string, machine domain-
          294    name, and IP port.  It is assumed that there will be one well-known
          295    top-level or root server for an institution or campus.  The
          296    information on this server may be duplicated by one or more other
          297    servers to avoid a single point of failure and to spread the load
          298    over several servers.  Departments that wish to put up their own
          299    departmental servers need to register the machine name and port with
          300    the administrators of the top-level Gopher server, much the same way
          301    as they register a machine name with the campus domain-name server.
          302    An entry which points to the departmental server will then be made at
          303    the top level server.  This ensures that users will be able to
          304    navigate their way down what amounts to a virtual hierarchical file
          305    system with a well known root to any campus server if they desire.
          306 
          307    Note that there is no requirement that a department register
          308    secondary servers with the central top-level server; they may just
          309    place a link to the secondary servers in their own primary servers.
          310    They may indeed place links to any servers they desire in their own
          311    server, thus creating a customized view of thethe Gopher information
          312    universe; links can of course point back at the top-level server.
          313    The virtual (networked) file system is therefore an arbitrary graph
          314    structure and not necessarily a rooted tree.  The top-level node is
          315    merely one convenient, well-known point of entry.  A set of Gopher
          316    servers linked in this manner may function as a campus-wide
          317    information system.
          318 
          319    Servers may of course point links at other than secondary servers.
          320    Indeed servers may point at other servers offering useful services
          321    anywhere on the internet.  Viewed in this manner, Gopher can be seen
          322    as an Internet-wide information system.
          323 
          324 3.2 Server portability and naming
          325 
          326    It is recommended that all registered servers have alias names
          327    (domain name system CNAME) that are used by Gopher clients to locate
          328    them.  Links to these servers should use these alias names rather
          329    than the primary names.  If information needs to be moved from one
          330    machine to another, a simple change of domain name system alias
          331    (CNAME) allows this to occur without any reconfiguration of clients
          332    in the field.  In short, the domain name system may be used to re-map
          333    a server to a new address.  There is nothing to prevent secondary
          334    servers or services from running on otherwise named servers or ports
          335 
          336 
          337 
          338 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti         [Page 6]
          339 
          340 RFC 1436                         Gopher                       March 1993
          341 
          342 
          343    other than 70, however these should be reachable via a primary
          344    server.
          345 
          346 3.3 Contacting server administrators
          347 
          348    It is recommended that every server administrator have a document
          349    called something like: "About Bogus University's Gopher server" as
          350    the first item in their server's top level directory.  In this
          351    document should be a short description of what the server holds, as
          352    well as name, address, phone, and an e-mail address of the person who
          353    administers the server.  This provides a way for users to get word to
          354    the administrator of a server that has inaccurate information or is
          355    not running correctly.  It is also recommended that administrators
          356    place the date of last update in files for which such information
          357    matters to the users.
          358 
          359 3.4  Modular addition of services
          360 
          361    The first character of each line in a server-supplied directory
          362    listing indicates whether the item is a file (character '0'), a
          363    directory (character '1'), or a search (character '7').  This is the
          364    base set of item types in the Gopher protocol.  It is desirable for
          365    clients to be able to use different services and speak different
          366    protocols (simple ones such as finger; others such as CSO phonebook
          367    service, or Telnet, or X.500 directory service) as needs dictate.
          368    CSO phonebook service is a client/server phonebook system typically
          369    used at Universities to publish names, e-mail addresses, and so on.
          370    The CSO phonebook software was developed at the University of
          371    Illinois and is also sometimes refered to as ph or qi.  For example,
          372    if a server-supplied directory listing marks a certain item with type
          373    character '2', then it means that to use this item, the client must
          374    speak the CSO protocol.  This removes the need to be able to
          375    anticipate all future needs and hard-wire them in the basic Internet
          376    Gopher protocol; it keeps the basic protocol extremely simple.  In
          377    spite of this simplicity, the scheme has the capability to expand and
          378    change with the times by adding an agreed upon type-character for a
          379    new service.  This also allows the client implementations to evolve
          380    in a modular fashion, simply by dropping in a module (or launching a
          381    new process) for some new service.  The servers for the new service
          382    of course have to know nothing about Internet Gopher; they can just
          383    be off-the shelf CSO, X.500, or other servers.  We do not however,
          384    encourage arbitrary or machine-specific proliferation of service
          385    types in the basic Gopher protocol.
          386 
          387    On the other hand, subsets of other document retrieval schemes may be
          388    mapped onto the Gopher protocol by means of "gateway-servers".
          389    Examples of such servers include Gopher-to-FTP gateways, Gopher-to-
          390    archie gateways, Gopher-to-WAIS gateways, etc.  There are a number of
          391 
          392 
          393 
          394 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti         [Page 7]
          395 
          396 RFC 1436                         Gopher                       March 1993
          397 
          398 
          399    advantages of such mechanisms. First, a relatively powerful server
          400    machine inherits both the intelligence and work, rather than the more
          401    modest, inexpensive desktop system that typically runs client
          402    software or basic server software.  Equally important, clients do not
          403    have to be modified to take advantage of a new resource.
          404 
          405 3.5  Building clients
          406 
          407    A client simply sends the retrieval string to a server if it wants to
          408    retrieve a document or view the contents of a directory.  Of course,
          409    each host may have pointers to other hosts, resulting in a "graph"
          410    (not necessarily a rooted tree) of hosts.  The client software may
          411    save (or rather "stack") the locations that it has visited in search
          412    of a document.  The user could therefore back out of the current
          413    location by unwinding the stack.  Alternatively, a client with
          414    multiple-window capability might just be able to display more than
          415    one directory or document at the same time.
          416 
          417    A smart client could cache the contents of visited directories
          418    (rather than just the directory's item descriptor), thus avoiding
          419    network transactions if the information has been previously
          420    retrieved.
          421 
          422    If a client does not understand what a say, type 'B' item (not a core
          423    item) is, then it may simply ignore the item in the directory
          424    listing; the user never even has to see it.  Alternatively, the item
          425    could be displayed as an unknown type.
          426 
          427    Top-level or primary servers for a campus are likely to get more
          428    traffic than secondary servers, and it would be less tolerable for
          429    such primary servers to be down for any long time.  So it makes sense
          430    to "clone" such important servers and construct clients that can
          431    randomly choose between two such equivalent primary servers when they
          432    first connect (to balance server load), moving to one if the other
          433    seems to be down.  In fact, smart client implementations do this
          434    clone server and load balancing.  Alternatively, it may make sense to
          435    have the domain name system return one of a set of redundant of
          436    server's IP address to load balance betwen redundant sets of
          437    important servers.
          438 
          439 3.6  Building ordinary internet Gopher servers
          440 
          441    The retrieval string sent to the server might be a path to a file or
          442    directory.  It might be the name of a script, an application or even
          443    a query that generates the document or directory returned.  The basic
          444    server uses the string it gets up to but not including a CR-LF or a
          445    TAB, whichever comes first.
          446 
          447 
          448 
          449 
          450 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti         [Page 8]
          451 
          452 RFC 1436                         Gopher                       March 1993
          453 
          454 
          455    All intelligence is carried by the server implementation rather than
          456    the protocol.  What you build into more exotic servers is up to you.
          457    Server implementations may grow as needs dictate and time allows.
          458 
          459 3.7  Special purpose servers
          460 
          461    There are two special server types (beyond the normal Gopher server)
          462    also discussed below:
          463 
          464       1.  A server directory listing can point at a CSO nameserver (the
          465       server returns a type character of '2') to allow a campus
          466       student-staff phonebook lookup service.  This may show up on the
          467       user's list of choices, perhaps preceded by the icon of a phone-
          468       book.  If this item is selected, the client software must resort
          469       to a pure CSO nameserver protocol when it connects to the
          470       appropriate host.
          471 
          472       2.  A server can also point at a "search server" (returns a first
          473       character of '7').  Such servers may implement campus network (or
          474       subnet) wide searching capability.  The most common search servers
          475       maintain full-text indexes on the contents of text documents held
          476       by some subset of Gopher servers.  Such a "full-text search
          477       server" responds to client requests with a list of all documents
          478       that contain one or more words (the search criteria).  The client
          479       sends the server the selector string, a tab, and the search string
          480       (words to search for). If the selector string is empty, the client
          481       merely sends the search string.  The server returns the equivalent
          482       of a directory listing for documents matching the search criteria.
          483       Spaces between words are usually implied Boolean ANDs (although in
          484       different implementations or search types, this may not
          485       necessarily be true).
          486 
          487    The CSO addition exists for historical reasons: at time of design,
          488    the campus phone-book servers at the University of Minnesota used the
          489    CSO protocol and it seemed simplest to just engulf them.  The index-
          490    server is however very much a Gopher in spirit, albeit with a slight
          491    twist in the meaning of the selector-string.  Index servers are a
          492    natural place to incorperate gateways to WAIS and WHOIS services.
          493 
          494 3.7.1  Building CSO-servers
          495 
          496    A CSO Nameserver implementation for UNIX and associated documentation
          497    is available by anonymous ftp from uxa.cso.uiuc.edu.  We do not
          498    anticipate implementing it on other machines.
          499 
          500 
          501 
          502 
          503 
          504 
          505 
          506 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti         [Page 9]
          507 
          508 RFC 1436                         Gopher                       March 1993
          509 
          510 
          511 3.7.2  Building full-text search servers
          512 
          513    A full-text search server is a special-purpose server that knows
          514    about the Gopher scheme for retrieving documents.  These servers
          515    maintain a full-text index of the contents of plain text documents on
          516    Gopher servers in some specified domain.  A Gopher full-text search
          517    server was implemented using several NeXTstations because it was easy
          518    to take advantage of the full-text index/search engine built into the
          519    NeXT system software.  A search server for generic UNIX systems based
          520    on the public domain WAIS search engine, is also available and
          521    currently an optional part of the UNIX gopher server.  In addition,
          522    at least one implementation of the gopher server incorperates a
          523    gateway to WAIS servers by presenting the WAIS servers to gopherspace
          524    as full-text search servers.  The gopher<->WAIS gateway servers does
          525    the work of translating from gopher protocol to WAIS so unmodified
          526    gopher clients can access WAIS servers via the gateway server.
          527 
          528    By using several index servers (rather than a monolithic index
          529    server) indexes may be searched in parallel (although the client
          530    software is not aware of this).  While maintaining full-text indexes
          531    of documents distributed over many machines may seem a daunting task,
          532    the task can be broken into smaller pieces (update only a portion of
          533    the indexes, search several partial indexes in parallel) so that it
          534    is manageable.  By spreading this task over several small, cheap (and
          535    fast) workstations it is possible to take advantage of fine-grain
          536    parallelism.  Again, the client software is not aware of this. Client
          537    software only needs to know that it can send a search string to an
          538    index server and will receive a list of documents that contain the
          539    words in the search string.
          540 
          541 3.8  Item type characters
          542 
          543    The client software decides what items are available by looking at
          544    the first character of each line in a directory listing.  Augmenting
          545    this list can extend the protocol.  A list of defined item-type
          546    characters follows:
          547 
          548    0   Item is a file
          549    1   Item is a directory
          550    2   Item is a CSO phone-book server
          551    3   Error
          552    4   Item is a BinHexed Macintosh file.
          553    5   Item is DOS binary archive of some sort.
          554        Client must read until the TCP connection closes.  Beware.
          555    6   Item is a UNIX uuencoded file.
          556    7   Item is an Index-Search server.
          557    8   Item points to a text-based telnet session.
          558    9   Item is a binary file!
          559 
          560 
          561 
          562 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti        [Page 10]
          563 
          564 RFC 1436                         Gopher                       March 1993
          565 
          566 
          567        Client must read until the TCP connection closes.  Beware.
          568    +   Item is a redundant server
          569    T   Item points to a text-based tn3270 session.
          570    g   Item is a GIF format graphics file.
          571    I   Item is some kind of image file.  Client decides how to display.
          572 
          573    Characters '0' through 'Z' are reserved.  Local experiments should
          574    use other characters.  Machine-specific extensions are not
          575    encouraged.  Note that for type 5 or type 9 the client must be
          576    prepared to read until the connection closes.  There will be no
          577    period at the end of the file; the contents of these files are binary
          578    and the client must decide what to do with them based perhaps on the
          579    .xxx extension.
          580 
          581 3.9  User display strings and server selector strings
          582 
          583    User display strings are intended to be displayed on a line on a
          584    typical screen for a user's viewing pleasure.  While many screens can
          585    accommodate 80 character lines, some space is needed to display a tag
          586    of some sort to tell the user what sort of item this is.  Because of
          587    this, the user display string should be kept under 70 characters in
          588    length.  Clients may truncate to a length convenient to them.
          589 
          590 4.   Simplicity is intentional
          591 
          592    As far as possible we desire any new features to be carried as new
          593    protocols that will be hidden behind new document-types.  The
          594    internet Gopher philosophy is:
          595 
          596       (a) Intelligence is held by the server.  Clients have the option
          597       of being able to access new document types (different, other types
          598       of servers) by simply recognizing the document-type character.
          599       Further intelligence to be borne by the protocol should be
          600       minimized.
          601 
          602       (b) The well-tempered server ought to send "text" (unless a file
          603       must be transferred as raw binary).  Should this text include
          604       tabs, formfeeds, frufru?  Probably not, but rude servers will
          605       probably send them anyway.  Publishers of documents should be
          606       given simple tools (filters) that will alert them if there are any
          607       funny characters in the documents they wish to publish, and give
          608       them the opportunity to strip the questionable characters out; the
          609       publisher may well refuse.
          610 
          611       (c) The well-tempered client should do something reasonable with
          612       funny characters received in text; filter them out, leave them in,
          613       whatever.
          614 
          615 
          616 
          617 
          618 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti        [Page 11]
          619 
          620 RFC 1436                         Gopher                       March 1993
          621 
          622 
          623 Appendix
          624 
          625    Paul's NQBNF (Not Quite BNF) for the Gopher Protocol.
          626 
          627    Note:  This is modified BNF (as used by the Pascal people) with a few
          628           English modifiers thrown in.  Stuff enclosed in '{}' can be
          629           repeated zero or more times.  Stuff in '[]' denotes a set of
          630           items.  The '-' operator denotes set subtraction.
          631 
          632 
          633 Directory Entity
          634 
          635 CR-LF     ::= ASCII Carriage Return Character followed by Line Feed
          636               character.
          637 
          638 Tab       ::= ASCII Tab character.
          639 
          640 NUL       ::= ASCII NUL character.
          641 
          642 UNASCII   ::= ASCII - [Tab CR-LF NUL].
          643 
          644 Lastline  ::= '.'CR-LF.
          645 
          646 TextBlock ::= Block of ASCII text not containing Lastline pattern.
          647 
          648 Type      ::= UNASCII.
          649 
          650 RedType   ::= '+'.
          651 
          652 User_Name ::= {UNASCII}.
          653 
          654 Selector  ::= {UNASCII}.
          655 
          656 Host      ::= {{UNASCII - ['.']} '.'} {UNASCII - ['.']}.
          657 
          658 Note: This is a Fully Qualified Domain Name as defined in RFC 1034.
          659       (e.g., gopher.micro.umn.edu)  Hosts that have a CR-LF
          660       TAB or NUL in their name get what they deserve.
          661 
          662 Digit     ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' .
          663 
          664 DigitSeq  ::= digit {digit}.
          665 
          666 Port      ::= DigitSeq.
          667 
          668 Note: Port corresponds the the TCP Port Number, its value should
          669       be in the range [0..65535]; port 70 is officially assigned
          670       to gopher.
          671 
          672 
          673 
          674 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti        [Page 12]
          675 
          676 RFC 1436                         Gopher                       March 1993
          677 
          678 
          679 DirEntity ::= Type User_Name Tab Selector Tab Host Tab Port CR-LF
          680           {RedType User_Name Tab Selector Tab Host Tab Port CR-LF}
          681 
          682 
          683 
          684 Notes:
          685 
          686    It is *highly* recommended that the User_Name field contain only
          687    printable characters, since many different clients will be using
          688    it.  However if eight bit characters are used, the characters
          689    should conform with the ISO Latin1 Character Set.  The length of
          690    the User displayable line should be less than 70 Characters; longer
          691    lines may not fit across some screens.
          692 
          693    The Selector string should be no longer than 255 characters.
          694 
          695 
          696 Menu Entity
          697 
          698 Menu      ::= {DirEntity} Lastline.
          699 
          700 
          701 Menu Transaction  (Type 1 item)
          702 
          703 C: Opens Connection
          704 S: Accepts Connection
          705 C: Sends Selector String
          706 S: Sends Menu Entity
          707 
          708    Connection is closed by either client or server (typically server).
          709 
          710 
          711 Textfile Entity
          712 
          713 TextFile  ::= {TextBlock} Lastline
          714 
          715 Note:  Lines beginning with periods must be prepended with an extra
          716      period to ensure that the transmission is not terminated early.
          717      The client should strip extra periods at the beginning of the line.
          718 
          719 
          720 TextFile Transaction (Type 0 item)
          721 
          722 C: Opens Connection.
          723 S: Accepts connection
          724 C: Sends Selector String.
          725 S: Sends TextFile Entity.
          726 
          727 
          728 
          729 
          730 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti        [Page 13]
          731 
          732 RFC 1436                         Gopher                       March 1993
          733 
          734 
          735    Connection is closed by either client or server (typically server).
          736 
          737 Note:  The client should be prepared for the server closing the
          738        connection without sending the Lastline.  This allows the
          739        client to use fingerd servers.
          740 
          741 
          742 Full-Text Search Transaction (Type 7 item)
          743 
          744 Word      ::= {UNASCII - ' '}
          745 BoolOp ::= 'and' | 'or' | 'not' | SPACE
          746 SearchStr ::= Word {{SPACE BoolOp} SPACE Word}
          747 
          748 C: Opens Connection.
          749 C: Sends Selector String, Tab, Search String.
          750 S: Sends Menu Entity.
          751 
          752 Note:  In absence of 'and', 'or', or 'not' operators, a SPACE is
          753        regarded as an implied 'and' operator.  Expression is evaluated
          754        left to right.  Further, not all search engines or search
          755        gateways currently implemented have the boolean operators
          756        implemented.
          757 
          758 Binary file Transaction (Type 9 or 5 item)
          759 
          760 C: Opens Connection.
          761 S: Accepts connection
          762 C: Sends Selector String.
          763 S: Sends a binary file and closes connection when done.
          764 
          765 
          766 Syntactic Meaning for Directory Entities
          767 
          768 
          769 The client should interpret the type field as follows:
          770 
          771 0   The item is a TextFile Entity.
          772     Client should use a TextFile Transaction.
          773 
          774 1   The item is a Menu Entity.
          775     Client should use a Menu Transaction.
          776 
          777 2   The information applies to a CSO phone book entity.
          778     Client should talk CSO protocol.
          779 
          780 3   Signals an error condition.
          781 
          782 4   Item is a Macintosh file encoded in BINHEX format
          783 
          784 
          785 
          786 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti        [Page 14]
          787 
          788 RFC 1436                         Gopher                       March 1993
          789 
          790 
          791 5   Item is PC-DOS binary file of some sort.  Client gets to decide.
          792 
          793 6   Item is a uuencoded file.
          794 
          795 7   The information applies to a Index Server.
          796     Client should use a FullText Search transaction.
          797 
          798 8   The information applies to a Telnet session.
          799     Connect to given host at given port. The name to login as at this
          800     host is in the selector string.
          801 
          802 9   Item is a binary file.  Client must decide what to do with it.
          803 
          804 +   The information applies to a duplicated server.  The information
          805     contained within is a duplicate of the primary server.  The primary
          806     server is defined as the last DirEntity that is has a non-plus
          807     "Type" field.  The client should use the transaction as defined by
          808     the primary server Type field.
          809 
          810 g   Item is a GIF graphic file.
          811 
          812 I   Item is some kind of image file.  Client gets to decide.
          813 
          814 T   The information applies to a tn3270 based telnet session.
          815     Connect to given host at given port. The name to login as at this
          816     host is in the selector string.
          817 
          818 Security Considerations
          819 
          820    Security issues are not discussed in this memo.
          821 
          822 Authors' Addresses
          823 
          824    Farhad Anklesaria
          825    Computer and Information Services, University of Minnesota
          826    Room 152 Shepherd Labs
          827    100 Union Street SE
          828    Minneapolis, MN 55455
          829 
          830    Phone: (612) 625 1300
          831    EMail: fxa@boombox.micro.umn.edu
          832 
          833 
          834 
          835 
          836 
          837 
          838 
          839 
          840 
          841 
          842 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti        [Page 15]
          843 
          844 RFC 1436                         Gopher                       March 1993
          845 
          846 
          847    Mark McCahill
          848    Computer and Information Services, University of Minnesota
          849    Room 152 Shepherd Labs
          850    100 Union Street SE
          851    Minneapolis, MN 55455
          852 
          853    Phone: (612) 625 1300
          854    EMail: mpm@boombox.micro.umn.edu
          855 
          856 
          857    Paul Lindner
          858    Computer and Information Services, University of Minnesota
          859    Room 152 Shepherd Labs
          860    100 Union Street SE
          861    Minneapolis, MN 55455
          862 
          863    Phone: (612) 625 1300
          864    EMail: lindner@boombox.micro.umn.edu
          865 
          866 
          867    David Johnson
          868    Computer and Information Services, University of Minnesota
          869    Room 152 Shepherd Labs
          870    100 Union Street SE
          871    Minneapolis, MN 55455
          872 
          873    Phone: (612) 625 1300
          874    EMail: dmj@boombox.micro.umn.edu
          875 
          876 
          877    Daniel Torrey
          878    Computer and Information Services, University of Minnesota
          879    Room 152 Shepherd Labs
          880    100 Union Street SE
          881    Minneapolis, MN 55455
          882 
          883    Phone: (612) 625 1300
          884    EMail: daniel@boombox.micro.umn.edu
          885 
          886 
          887    Bob Alberti
          888    Computer and Information Services, University of Minnesota
          889    Room 152 Shepherd Labs
          890    100 Union Street SE
          891    Minneapolis, MN 55455
          892 
          893    Phone: (612) 625 1300
          894    EMail: alberti@boombox.micro.umn.edu
          895 
          896 
          897 
          898 Anklesari, McCahill, Lindner, Johnson, Torrey & Alberti        [Page 16]
          899 
          900 
          901 
          902 
          903 
          904 
          905 
          906