Introduction
Introduction Statistics Contact Development Disclaimer Help
gopher-extension.md - gopher-protocol - Gopher Protocol Extension Project
git clone git://bitreich.org/gopher-protocol git://enlrupgkhuxnvlhsf6lc3fziv5h2…
Log
Files
Refs
Tags
README
LICENSE
---
gopher-extension.md (12346B)
---
1 Gopher Extension
2 ================
3
4 # Goals of this document
5
6 The intention is to not make radical changes to the RFC1336 standard.
7
8 This document also describes the common-used extensions to the
9 Gopher RFC and some clarifications to the wording of the RFC.
10
11 Since the publication of the RFC1436 standard around March 1993 there
12 have been developments, such as the adoption of the UTF-8
13 text-encoding and the use of SSL and later TLS encryption.
14
15 The recommendations can be therefore be seen as guidelines or
16 "SHOULD".
17
18
19 # Added Types
20
21 Types can be added, this doesn't violate the RFC specification:
22 section 3.8: "Characters '0' through 'Z' are reserved.".
23
24 These are types that are commonly used.
25
26 * The 'h' type: HTML file, with the "URL:" prefix in the selector it poi…
27 an URL, see historical mail conversation (embedded and referenced belo…
28 * The 'i' type, Informational message: display as text.
29 i Some message <TAB> empty selector server TAB port CR LF
30 The server and port should be included for compatibility.
31 * As mentioned in the original Gopher RFC, for other types:
32 Anything primary Text file? Use the 0 type.
33 Anything unknown or binary file? Use the 9 type and a file extension.
34 * Use the image (I) type for png, jpg etc. Make sure to set the file ext…
35
36
37 # Using the proper type for Text file or binary
38
39 * Sometimes a question comes up where PDF or XML is binary. If the
40 file is readable as text it is a text file, otherwise it is binary.
41
42 For example PDF would be using the binary 9 type and a .pdf file
43 extension. XML would be a text 0 type.
44
45 Type 0 is files which are pure text and can be displayed in a text
46 editor.
47
48
49 # Text Encoding
50
51 * The Notes section in the Gopher RFC mentions Latin1 encoding.
52
53 Recommendation: Use UTF-8 or ASCII-only for the Gopher
54 username/title field. A client may want to display the other fields,
55 so be polite and use UTF-8 or ASCII there as well if possible.
56
57 Reason: UTF-8 is a simple text-encoding and commonly used these days.
58
59 People who use Latin1 eat children.
60
61
62 # Accessibility
63
64 * Printable characters and line width, from the Gopher RFC standard:
65
66 It is *highly* recommended that the User_Name field contain only
67 printable characters, since many different clients will be using
68 it. However if eight bit characters are used, the characters
69 should conform with the ISO Latin1 Character Set. The length of
70 the user-displayable line should be less than 70 characters; lon…
71 lines may not fit across some screens."
72
73 New recommendations:
74 * Don't use longer than 79 columns of UTF-8 encoded displayed "username"…
75 * Try to reduce the amount of ASCII art which can contain non-printable
76 characters. Think of the blind or tools used to parse actual textual c…
77
78 Reason: A clarification of the term characters is needed.
79
80
81 * "The selector string should be no longer than 255 characters."
82
83 Recommendation: use no longer than 255 bytes.
84
85 Reasons for this are:
86 * A clarification of the term "characters" is needed. Characters could
87 nowadays be interpreted as unicode characters or column size of unicode
88 characters instead of bytes.
89 * Clients can simply use a static buffer to fit 255 bytes.
90 * Although Gopher does not have to map to a filesystem, filesystems typi…
91 have a limit of around 255 bytes also.
92
93
94 * From section 3.5:
95
96 If a client does not understand what a, say, type 'B' item (not …
97 item) is, then it may simply ignore the item in the directory
98 listing; the user never even has to see it. Alternatively, the …
99 could be displayed as an unknown type.
100
101 Recommendation: For clients, do not silently ignore an item, but display…
102 as an unknown type.
103 Reason: Define a recommendation for consistent behaviour in clients.
104
105
106 # Server and client handling of text file types
107
108 The RFC defines:
109
110 Textfile Entity
111
112 TextFile ::= {TextBlock} Lastline
113
114 and:
115
116 Note: Lines beginning with periods must be prepended with an ex…
117 period to ensure that the transmission is not terminated …
118 The client should strip extra periods at the beginning of…
119
120 and:
121
122 Note: The client should be prepared for the server closing the
123 connection without sending the Lastline. This allows the
124 client to use fingerd servers.
125
126 From section 4:
127
128 (b) The well-tempered server ought to send "text" (unless a file
129 must be transferred as raw binary). Should this text include
130 tabs, formfeeds, frufru? Probably not, but rude servers will
131 probably send them anyway. Publishers of documents should be
132 given simple tools (filters) that will alert them if there are a…
133 funny characters in the documents they wish to publish, and give
134 them the opportunity to strip the questionable characters out; t…
135 publisher may well refuse.
136
137 (c) The well-tempered client should do something reasonable with
138 funny characters received in text; filter them out, leave them i…
139 whatever.
140
141 The above description we think is too vague and it can be simpler.
142
143 Recommendation: handle retrieving text file types the same as binary typ…
144 For clients the Lastline pattern (".\r\n") is not handled specially in t…
145 it is part of the data.
146 For servers no preprocessing is done on the TextFile data.
147
148 Reason: Simplify the implementation of handling text types. Make the beh…
149 of text output consistent for clients.
150
151
152 # The 'h' type: extract from the file references/h_type.txt
153
154 Below is an archived conversation about the Gopher 'h' type:
155
156 Received: with LISTAR (v1.0.0; list gopher); Tue, 12 Feb 2002 14…
157 Return-Path: <[email protected]>
158 Delivered-To: [email protected]
159 To: [email protected]
160 Subject: [gopher] Links to URL
161 From: John Goerzen <[email protected]>
162 Date: 12 Feb 2002 14:19:46 -0500
163 Content-type: text/plain; charset=us-ascii
164 Content-Transfer-Encoding: 8bit
165
166 I think it is best to start small with modifications to the prot…
167 Therefore, I propose the following:
168
169 Method to link to URLs from Gopherspace
170 ---------------------------------------
171
172 1. Protocol issues
173
174 Links to URLs from a gopher directory shall be defined as follow…
175
176 Type -- the appropriate character corresponding to the type of …
177 document on the remote end; h if HTML.
178
179 Path -- the full URL, preceeded by "URL:". For instance:
180 URL:http://www.complete.org/
181
182 Host, Port -- pointing back to the gopher server that provided
183 the directory for compatibility reasons.
184
185 Name -- as usual for a Gopher directory entry.
186
187 2. Conforming client requirements
188
189 A client adhering to this specification will, when it sees a Gop…
190 selector with a path starting with URL:, interpret the path as a…
191 It will ignore the host and port components of the Gopher select…
192 using those components from the URL instead (if applicable).
193
194 3. Conforming server requirements
195
196 A server with Gopher URL support will not, in most cases, need t…
197 extra steps to provide this support beyond those outlined in
198 Compatibility below. Servers not implementing those steps outli…
199 Compatibility will be deemed to be not in compliance.
200
201 4. Authoring compliance
202
203 The use of URL: selectors should be avoided wherever possible. …
204 particular, it should be avoided when pre-existing gopher facili…
205 exist for the type of content linked. The following URL types a…
206 explicitly prohibited by this specification:
207
208 gopher
209 telnet
210 tn3270
211
212 Authors should avoid links to any document not of HTML type when…
213 possible. Linking to non-HTML documents will break compatibilit…
214 Gopher browsers that do not implement this specification. The r…
215 of these browsers include most Web browsers, so that is a signif…
216 audience.
217
218 5. Compatibility
219
220 Links to HTML pages may be accomodated even for non-comforming
221 browsers by providing additional capabilities in the server.
222
223 When a non-conforming browser is instructed to follow a link to …
224 it will contact the Gopher server that provided the menu (since …
225 are specified per section 1).
226
227 When a conforming Gopher server receives a request whose path be…
228 with URL:, it will write out a HTML document that will send the
229 non-compliant browser to the appropriate place. One such confor…
230 document is:
231
232 <HTML>
233 <HEAD>
234 <META HTTP-EQUIV="refresh" content="2;URL=http://www.acm.org/c…
235 </HEAD>
236 <BODY>
237 You are following a link from gopher to a web site. You will …
238 automatically taken to the web site shortly. If you do not ge…
239 there, please click
240 <A HREF="http://www.acm.org/classics/">here</A> to go to the w…
241 <P>
242 The URL linked is:
243 <P>
244 <A HREF="http://www.acm.org/classics/">http://www.acm.org/clas…
245 <P>
246 Thanks for using gopher!
247 </BODY>
248 </HTML>
249
250 This document may be any desired by the server authors, but must
251 adhere to these requirements:
252 * It must provide a refresh of a duration of 10 seconds or less
253 * It must not use IMG tags, frames, or have any reference whats…
254 to content outside that particular file -- other than the link
255 to the real destination.
256 * It must not use JavaScript.
257 * It must adhere to the W3C HTML 3.2 standard.
258
259 When a non-conforming Gopher client finds a reference to a HTML …
260 (type h), it will open up the file via Gopher (getting the redir…
261 document) but using a web browser. The web browser will then be
262 redirected to the actual link destination. Conforming clients w…
263 follow the link directly.
264
265 END
266
267
268 # TLS support
269
270 From: 2020-06-07 Gopher TLS prototype in geomyidae by 20h at
271 <gophers://bitreich.org/0/usr/20h/phlog/2020-06-07T18-28-23-863932.md>:
272
273 # 2020-06-07 18:28:23.863932 UTC (+0000)
274
275 Gopher TLS prototype in geomyidae
276
277 We are happy and proud to announce, that there is now a prot…
278 gopher tls in geomyidae
279
280 git://bitreich.org/geomyidae
281
282 How does it work?
283
284 When a client tries to connect via TLS, the first byte of th…
285 will be 0x16 or 22 decimal, which is forbidden as a selector in…
286 This gives the server a hint to start TLS. Old servers wil…
287 reject such a connection attempt.
288
289 For now clic supports TLS. We are working on hurl TLS support.…
290 sacc it is on its way.
291
292 git://bitreich.org/clic
293 git://bitreich.org/sacc
294 git://codemadness.org/hurl
295
296 Hopefully further support will come to other clients.
297
298 If you do not have anything at hand, here are some commandline c…
299
300 Plain old Gopher:
301
302 printf "/\r\n" | nc bitreich.org 70
303
304 And with TLS:
305
306 printf "/\r\n" | socat openssl-connect:bitreich.org:70,v…
307
308 Have fun using TLS on gopher!
309
310
311 All patches and recommendations are welcome.
312
313
314 Sincerely yours,
315
316 20h
317 Senior Security Manager (SSM)
318
319
320 # Gopher TLS URI
321
322 A gopher TLS URI is the same as the Gopher URI described in RFC4266,
323 except the protocol scheme is gophers://.
324
325 When the client using the Gopher protocol does not support TLS it can
326 simply use a plain gopher:// connection.
327
328
329 # Gopher TLS downgrades
330
331 A client COULD implement the following logic:
332
333 When a user uses gophers:// then it should use TLS and not downgrade
334 automatically to a plain connection. The client COULD also show a
335 _clear_ message if the TLS connection is not accepted and offer a
336 manual downgrade option to plain-text.
337
338 When further selectors of the same host and port are accessed it should …
339 TLS automatically as well.
340
341
342 # Gopher+ compatibility
343
344 Gopher+ allows adding more TAB-separated fields to the output. For
345 Gopher, to be compatible with Gopher+ clients, it can simply accept the
346 line, but ignore these additional fields.
347
348
349 # Other references:
350
351 * RFC1436 - The Internet Gopher Protocol
352 <https://www.rfc-editor.org/rfc/rfc1436.txt>
353 or see the file references/rfc1436.txt
354
355 * RFC4266 - The gopher URI Scheme
356 <https://www.rfc-editor.org/rfc/rfc4266.txt>
357 or see the file references/rfc4266.txt
358
359 * Gopher+:
360 <https://github.com/gopher-protocol/gopher-plus/blob/main/gopherplus.t…
361 or references/gopherplus.txt
362
363 * geomyidae Gopher server:
364 <git://bitreich.org/geomyidae>
365
366 * Helper tool to validate gopher and DirEntities:
367 <git://bitreich.org/gopher-validator>
368
369 References in this repository: <gopher://bitreich.org/1/scm/gopher-proto…
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.