]> git.ipfire.org Git - thirdparty/man-pages.git/blob - man7/uri.7
ffix
[thirdparty/man-pages.git] / man7 / uri.7
1 '\"
2 .\" (C) Copyright 1999-2000 David A. Wheeler (dwheeler@dwheeler.com)
3 .\"
4 .\" Permission is granted to make and distribute verbatim copies of this
5 .\" manual provided the copyright notice and this permission notice are
6 .\" preserved on all copies.
7 .\"
8 .\" Permission is granted to copy and distribute modified versions of this
9 .\" manual under the conditions for verbatim copying, provided that the
10 .\" entire resulting derived work is distributed under the terms of a
11 .\" permission notice identical to this one.
12 .\"
13 .\" Since the Linux kernel and libraries are constantly changing, this
14 .\" manual page may be incorrect or out-of-date. The author(s) assume no
15 .\" responsibility for errors or omissions, or for damages resulting from
16 .\" the use of the information contained herein. The author(s) may not
17 .\" have taken the same level of care in the production of this manual,
18 .\" which is licensed free of charge, as they might when working
19 .\" professionally.
20 .\"
21 .\" Formatted or processed versions of this manual, if unaccompanied by
22 .\" the source, must acknowledge the copyright and authors of this work.
23 .\"
24 .\" Fragments of this document are directly derived from IETF standards.
25 .\" For those fragments which are directly derived from such standards,
26 .\" the following notice applies, which is the standard copyright and
27 .\" rights announcement of The Internet Society:
28 .\"
29 .\" Copyright (C) The Internet Society (1998). All Rights Reserved.
30 .\" This document and translations of it may be copied and furnished to
31 .\" others, and derivative works that comment on or otherwise explain it
32 .\" or assist in its implementation may be prepared, copied, published
33 .\" and distributed, in whole or in part, without restriction of any
34 .\" kind, provided that the above copyright notice and this paragraph are
35 .\" included on all such copies and derivative works. However, this
36 .\" document itself may not be modified in any way, such as by removing
37 .\" the copyright notice or references to the Internet Society or other
38 .\" Internet organizations, except as needed for the purpose of
39 .\" developing Internet standards in which case the procedures for
40 .\" copyrights defined in the Internet Standards process must be
41 .\" followed, or as required to translate it into languages other than English.
42 .\"
43 .\" Modified Fri Jul 25 23:00:00 1999 by David A. Wheeler (dwheeler@dwheeler.com)
44 .\" Modified Fri Aug 21 23:00:00 1999 by David A. Wheeler (dwheeler@dwheeler.com)
45 .\" Modified Tue Mar 14 2000 by David A. Wheeler (dwheeler@dwheeler.com)
46 .\"
47 .\" FIXME Section titles and orderings in this page are very inconsistent
48 .TH URI 7 2000-03-14 "Linux" "Linux Programmer's Manual"
49 .SH NAME
50 uri, url, urn \- uniform resource identifier (URI), including a URL or URN
51 .SH SYNOPSIS
52 .nf
53 .HP 0.2i
54 URI = [ absoluteURI | relativeURI ] [ "#" fragment ]
55 .HP
56 absoluteURI = scheme ":" ( hierarchical_part | opaque_part )
57 .HP
58 relativeURI = ( net_path | absolute_path | relative_path ) [ "?" query ]
59 .HP
60 scheme = "http" | "ftp" | "gopher" | "mailto" | "news" | "telnet" | "file" | "man" | "info" | "whatis" | "ldap" | "wais" | \&...
61 .HP
62 hierarchical_part = ( net_path | absolute_path ) [ "?" query ]
63 .HP
64 net_path = "//" authority [ absolute_path ]
65 .HP
66 absolute_path = "/" path_segments
67 .HP
68 relative_path = relative_segment [ absolute_path ]
69 .fi
70 .SH DESCRIPTION
71 .PP
72 A Uniform Resource Identifier (URI) is a short string of characters
73 identifying an abstract or physical resource (for example, a web page).
74 A Uniform Resource Locator (URL) is a URI
75 that identifies a resource through its primary access
76 mechanism (e.g., its network "location"), rather than
77 by name or some other attribute of that resource.
78 A Uniform Resource Name (URN) is a URI
79 that must remain globally unique and persistent even when
80 the resource ceases to exist or becomes unavailable.
81 .PP
82 URIs are the standard way to name hypertext link destinations
83 for tools such as web browsers.
84 The string "http://www.kernelnotes.org" is a URL (and thus it's a URI).
85 Many people use the term URL loosely as a synonym for URI
86 (though technically URLs are a subset of URIs).
87 .PP
88 URIs can be absolute or relative.
89 An absolute identifier refers to a resource independent of
90 context, while a relative
91 identifier refers to a resource by describing the difference
92 from the current context.
93 Within a relative path reference, the complete path segments "." and
94 ".." have special meanings: "the current hierarchy level" and "the
95 level above this hierarchy level", respectively, just like they do in
96 Unix-like systems.
97 A path segment which contains a colon
98 character can't be used as the first segment of a relative URI path
99 (e.g., "this:that"), because it would be mistaken for a scheme name;
100 precede such segments with ./ (e.g., "./this:that").
101 Note that descendants of MS-DOS (e.g., Microsoft Windows) replace
102 devicename colons with the vertical bar ("|") in URIs, so "C:" becomes "C|".
103 .PP
104 A fragment identifier, if included, refers to a particular named portion
105 (fragment) of a resource; text after a '#' identifies the fragment.
106 A URI beginning with '#' refers to that fragment in the current resource.
107 .SH USAGE
108 There are many different URI schemes, each with specific
109 additional rules and meanings, but they are intentionally made to be
110 as similar as possible.
111 For example, many URL schemes
112 permit the authority to be the following format, called here an
113 .I ip_server
114 (square brackets show what's optional):
115 .HP
116 .IR "ip_server = " [ user " [ : " password " ] @ ] " host " [ : " port ]
117 .PP
118 This format allows you to optionally insert a user name,
119 a user plus password, and/or a port number.
120 The
121 .I host
122 is the name of the host computer, either its name as determined by DNS
123 or an IP address (numbers separated by periods).
124 Thus the URI
125 <http://fred:fredpassword@xyz.com:8080/>
126 logs into a web server on host xyz.com
127 as fred (using fredpassword) using port 8080.
128 Avoid including a password in a URI if possible because of the many
129 security risks of having a password written down.
130 If the URL supplies a user name but no password, and the remote
131 server requests a password, the program interpreting the URL
132 should request one from the user.
133 .PP
134 Here are some of the most common schemes in use on Unix-like systems
135 that are understood by many tools.
136 Note that many tools using URIs also have internal schemes or specialized
137 schemes; see those tools' documentation for information on those schemes.
138 .SS "http \- Web (HTTP) server"
139 .RI http:// ip_server / path
140 .br
141 .RI http:// ip_server / path ? query
142 .PP
143 This is a URL accessing a web (HTTP) server.
144 The default port is 80.
145 If the path refers to a directory, the web server will choose what
146 to return; usually if there is a file named "index.html" or "index.htm"
147 its content is returned, otherwise, a list of the files in the current
148 directory (with appropriate links) is generated and returned.
149 An example is <http://lwn.net>.
150 .PP
151 A query can be given in the archaic "isindex" format, consisting of a
152 word or phrase and not including an equal sign (=).
153 A query can also be in the longer "GET" format, which has one or more
154 query entries of the form
155 .IR key = value
156 separated by the ampersand character (&).
157 Note that
158 .I key
159 can be repeated more than once, though it's up to the web server
160 and its application programs to determine if there's any meaning to that.
161 There is an unfortunate interaction with HTML/XML/SGML and
162 the GET query format; when such URIs with more than one key
163 are embedded in SGML/XML documents (including HTML), the ampersand
164 (&) has to be rewritten as &amp;.
165 Note that not all queries use this format; larger forms
166 may be too long to store as a URI, so they use a different
167 interaction mechanism (called POST) which does not include the data in the URI.
168 See the Common Gateway Interface specification at
169 <http://www.w3.org/CGI> for more information.
170 .SS "ftp \- File Transfer Protocol (FTP)"
171 .RI ftp:// ip_server / path
172 .PP
173 This is a URL accessing a file through the file transfer protocol (FTP).
174 The default port (for control) is 21.
175 If no username is included, the user name "anonymous" is supplied, and
176 in that case many clients provide as the password the requestor's
177 Internet email address.
178 An example is
179 <ftp://ftp.is.co.za/rfc/rfc1808.txt>.
180 .SS "gopher \- Gopher server"
181 .RI gopher:// ip_server / "gophertype selector"
182 .br
183 .RI gopher:// ip_server / "gophertype selector" %09 search
184 .br
185 .RI gopher:// ip_server / "gophertype selector" %09 search %09 gopher+_string
186 .br
187 .PP
188 The default gopher port is 70.
189 .I gophertype
190 is a single-character field to denote the
191 Gopher type of the resource to
192 which the URL refers.
193 The entire path may also be empty, in
194 which case the delimiting "/" is also optional and the gophertype
195 defaults to "1".
196 .PP
197 .I selector
198 is the Gopher selector string.
199 In the Gopher protocol,
200 Gopher selector strings are a sequence of octets which may contain
201 any octets except 09 hexadecimal (US-ASCII HT or tab), 0A hexadecimal
202 (US-ASCII character LF), and 0D (US-ASCII character CR).
203 .SS "mailto \- Email address"
204 .RI mailto: email-address
205 .PP
206 This is an email address, usually of the form
207 .IR name @ hostname .
208 See
209 .BR mailaddr (7)
210 for more information on the correct format of an email address.
211 Note that any % character must be rewritten as %25.
212 An example is <mailto:dwheeler@dwheeler.com>.
213 .SS "news \- Newsgroup or News message"
214 .RI news: newsgroup-name
215 .br
216 .RI news: message-id
217 .PP
218 A
219 .I newsgroup-name
220 is a period-delimited hierarchical name, such as
221 "comp.infosystems.www.misc".
222 If <newsgroup-name> is "*" (as in <news:*>), it is used to refer
223 to "all available news groups".
224 An example is <news:comp.lang.ada>.
225 .PP
226 A
227 .I message-id
228 corresponds to the Message-ID of
229 .URL http://www.ietf.org/rfc/rfc1036.txt
230 IETF RFC\ 1036,
231 .UE
232 without the enclosing "<"
233 and ">"; it takes the form
234 .IR unique @ full_domain_name .
235 A message identifier may be distinguished from a news group name by the
236 presence of the "@" character.
237 .SS "telnet \- Telnet login"
238 .RI telnet:// ip_server /
239 .PP
240 The Telnet URL scheme is used to designate interactive text services that
241 may be accessed by the Telnet protocol.
242 The final "/" character may be omitted.
243 The default port is 23.
244 An example is <telnet://melvyl.ucop.edu/>.
245 .SS "file \- Normal file"
246 .RI file:// ip_server / path_segments
247 .br
248 .RI file: path_segments
249 .PP
250 This represents a file or directory accessible locally.
251 As a special case,
252 .I host
253 can be the string "localhost" or the empty
254 string; this is interpreted as `the machine from which the URL is
255 being interpreted'.
256 If the path is to a directory, the viewer should display the
257 directory's contents with links to each containee;
258 not all viewers currently do this.
259 KDE supports generated files through the URL <file:/cgi-bin>.
260 If the given file isn't found, browser writers may want to try to expand
261 the filename via filename globbing
262 (see
263 .BR glob (7)
264 and
265 .BR glob (3)).
266 .PP
267 The second format (e.g., <file:/etc/passwd>)
268 is a correct format for referring to
269 a local file.
270 However, older standards did not permit this format,
271 and some programs don't recognize this as a URI.
272 A more portable syntax is to use an empty string as the server name, e.g.,
273 <file:///etc/passwd>; this form does the same thing
274 and is easily recognized by pattern matchers and older programs as a URI.
275 Note that if you really mean to say "start from the current location," don't
276 specify the scheme at all; use a relative address like <../test.txt>,
277 which has the side-effect of being scheme-independent.
278 An example of this scheme is <file:///etc/passwd>.
279 .SS "man \- Man page documentation"
280 .RI man: command-name
281 .br
282 .RI man: command-name ( section )
283 .PP
284 This refers to local online manual (man) reference pages.
285 The command name can optionally be followed by a parenthesis and section number;
286 see
287 .BR man (7)
288 for more information on the meaning of the section numbers.
289 This URI scheme is unique to Unix-like systems (such as Linux)
290 and is not currently registered by the IETF.
291 An example is <man:ls(1)>.
292 .SS "info \- Info page documentation"
293 .RI info: virtual-filename
294 .br
295 .RI info: virtual-filename # nodename
296 .br
297 .RI info:( virtual-filename )
298 .br
299 .RI info:( virtual-filename ) nodename
300 .PP
301 This scheme refers to online info reference pages (generated from
302 texinfo files), a documentation format used by programs such as the GNU tools.
303 This URI scheme is unique to Unix-like systems (such as Linux)
304 and is not currently registered by the IETF.
305 As of this writing, GNOME and KDE differ in their URI syntax
306 and do not accept the other's syntax.
307 The first two formats are the GNOME format; in nodenames all spaces
308 are written as underscores.
309 The second two formats are the KDE format;
310 spaces in nodenames must be written as spaces, even though this
311 is forbidden by the URI standards.
312 It's hoped that in the future most tools will understand all of these
313 formats and will always accept underscores for spaces in nodenames.
314 In both GNOME and KDE, if the form without the nodename is used the
315 nodename is assumed to be "Top".
316 Examples of the GNOME format are <info:gcc> and <info:gcc#G++_and_GCC>.
317 Examples of the KDE format are <info:(gcc)> and <info:(gcc)G++ and GCC>.
318 .SS "whatis \- Documentation search"
319 .RI whatis: string
320 .PP
321 This scheme searches the database of short (one-line) descriptions of commands
322 and returns a list of descriptions containing that string.
323 Only complete word matches are returned.
324 See
325 .BR whatis (1).
326 This URI scheme is unique to Unix-like systems (such as Linux)
327 and is not currently registered by the IETF.
328 .SS "ghelp \- GNOME help documentation"
329 .RI ghelp: name-of-application
330 .PP
331 This loads GNOME help for the given application.
332 Note that not much documentation currently exists in this format.
333 .SS "ldap \- Lightweight Directory Access Protocol"
334 .RI ldap:// hostport
335 .br
336 .RI ldap:// hostport /
337 .br
338 .RI ldap:// hostport / dn
339 .br
340 .RI ldap:// hostport / dn ? attributes
341 .br
342 .RI ldap:// hostport / dn ? attributes ? scope
343 .br
344 .RI ldap:// hostport / dn ? attributes ? scope ? filter
345 .br
346 .RI ldap:// hostport / dn ? attributes ? scope ? filter ? extensions
347 .PP
348 This scheme supports queries to the
349 Lightweight Directory Access Protocol (LDAP), a protocol for querying
350 a set of servers for hierarchically-organized information
351 (such as people and computing resources).
352 More information on the LDAP URL scheme is available in
353 .UR http://www.ietf.org/rfc/rfc2255.txt
354 RFC\ 2255.
355 .UE
356 The components of this URL are:
357 .IP hostport 12
358 the LDAP server to query, written as a hostname optionally followed by
359 a colon and the port number.
360 The default LDAP port is TCP port 389.
361 If empty, the client determines which the LDAP server to use.
362 .IP dn
363 the LDAP Distinguished Name, which identifies
364 the base object of the LDAP search (see
365 .UR http://www.ietf.org/rfc/rfc2253.txt
366 RFC\ 2253
367 .UE
368 section 3).
369 .IP attributes
370 a comma-separated list of attributes to be returned;
371 see RFC\ 2251 section 4.1.5.
372 If omitted, all attributes should be returned.
373 .IP scope
374 specifies the scope of the search, which can be one of
375 "base" (for a base object search), "one" (for a one-level search),
376 or "sub" (for a subtree search).
377 If scope is omitted, "base" is assumed.
378 .IP filter
379 specifies the search filter (subset of entries
380 to return).
381 If omitted, all entries should be returned.
382 See
383 .UR http://www.ietf.org/rfc/rfc2254.txt
384 RFC\ 2254
385 .UE
386 section 4.
387 .IP extensions
388 a comma-separated list of type=value
389 pairs, where the =value portion may be omitted for options not
390 requiring it.
391 An extension prefixed with a '!' is critical
392 (must be supported to be valid), otherwise it's non-critical (optional).
393 .PP
394 LDAP queries are easiest to explain by example.
395 Here's a query that asks ldap.itd.umich.edu for information about
396 the University of Michigan in the U.S.:
397 .RS
398 ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US
399 .RE
400 .PP
401 To just get its postal address attribute, request:
402 .RS
403 ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US?postalAddress
404 .RE
405 .PP
406 To ask a host.com at port 6666 for information about the person
407 with common name (cn) "Babs Jensen" at University of Michigan, request:
408 .RS
409 ldap://host.com:6666/o=University%20of%20Michigan,c=US??sub?(cn=Babs%20Jensen)
410 .RE
411 .SS "wais \- Wide Area Information Servers"
412 .RI wais:// hostport / database
413 .br
414 .RI wais:// hostport / database ? search
415 .br
416 .RI wais:// hostport / database / wtype / wpath
417 .PP
418 This scheme designates a WAIS database, search, or document
419 (see
420 .UR http://www.ietf.org/rfc/rfc1625.txt
421 IETF RFC\ 1625
422 .UE
423 for more information on WAIS).
424 Hostport is the hostname, optionally followed by a colon and port number
425 (the default port number is 210).
426 .PP
427 The first form designates a WAIS database for searching.
428 The second form designates a particular search of the WAIS database
429 .IR database .
430 The third form designates a particular document within a WAIS
431 database to be retrieved.
432 .I wtype
433 is the WAIS designation of the type of the object and
434 .I wpath
435 is the WAIS document-id.
436 .SS "other schemes"
437 There are many other URI schemes.
438 Most tools that accept URIs support a set of internal URIs
439 (e.g., Mozilla has the about: scheme for internal information,
440 and the GNOME help browser has the toc: scheme for various starting
441 locations).
442 There are many schemes that have been defined but are not as widely
443 used at the current time
444 (e.g., prospero).
445 The nntp: scheme is deprecated in favor of the news: scheme.
446 URNs are to be supported by the urn: scheme, with a hierarchical name space
447 (e.g., urn:ietf:... would identify IETF documents); at this time
448 URNs are not widely implemented.
449 Not all tools support all schemes.
450 .SH "CHARACTER ENCODING"
451 .PP
452 URIs use a limited number of characters so that they can be
453 typed in and used in a variety of situations.
454 .PP
455 The following characters are reserved, that is, they may appear in a
456 URI but their use is limited to their reserved purpose
457 (conflicting data must be escaped before forming the URI):
458 .IP
459 ; / ? : @ & = + $ ,
460 .PP
461 Unreserved characters may be included in a URI.
462 Unreserved characters
463 include upper and lower case English letters,
464 decimal digits, and the following
465 limited set of punctuation marks and symbols:
466 .IP
467 \- _ . ! ~ * ' ( )
468 .PP
469 All other characters must be escaped.
470 An escaped octet is encoded as a character triplet, consisting of the
471 percent character "%" followed by the two hexadecimal digits
472 representing the octet code (you can use upper or lower case letters
473 for the hexadecimal digits).
474 For example, a blank space must be escaped
475 as "%20", a tab character as "%09", and the "&" as "%26".
476 Because the percent "%" character always has the reserved purpose of
477 being the escape indicator, it must be escaped as "%25".
478 It is common practice to escape space characters as the plus symbol (+)
479 in query text; this practice isn't uniformly defined
480 in the relevant RFCs (which recommend %20 instead) but any tool accepting
481 URIs with query text should be prepared for them.
482 A URI is always shown in its "escaped" form.
483 .PP
484 Unreserved characters can be escaped without changing the semantics
485 of the URI, but this should not be done unless the URI is being used
486 in a context that does not allow the unescaped character to appear.
487 For example, "%7e" is sometimes used instead of "~" in an http URL
488 path, but the two are equivalent for an http URL.
489 .PP
490 For URIs which must handle characters outside the US ASCII character set,
491 the HTML 4.01 specification (section B.2) and
492 IETF RFC\ 2718 (section 2.2.5) recommend the following approach:
493 .IP 1. 4
494 translate the character sequences into UTF-8 (IETF RFC\ 2279) \(em see
495 .BR utf-8 (7)
496 \(em and then
497 .IP 2.
498 use the URI escaping mechanism, that is,
499 use the %HH encoding for unsafe octets.
500 .SH "WRITING A URI"
501 When written, URIs should be placed inside doublequotes
502 (e.g., "http://www.kernelnotes.org"),
503 enclosed in angle brackets (e.g., <http://lwn.net>),
504 or placed on a line by themselves.
505 A warning for those who use double-quotes:
506 .B never
507 move extraneous punctuation (such as the period ending a sentence or the
508 comma in a list)
509 inside a URI, since this will change the value of the URI.
510 Instead, use angle brackets instead, or
511 switch to a quoting system that never includes extraneous characters
512 inside quotation marks.
513 This latter system, called the 'new' or 'logical' quoting system by
514 "Hart's Rules" and the "Oxford Dictionary for Writers and Editors",
515 is preferred practice in Great Britain and hackers worldwide
516 (see the
517 Jargon File's section on Hacker Writing Style,
518 .IR http://www.fwi.uva.nl/~mes/jargon/h/HackerWritingStyle.html ,
519 for more information).
520 Older documents suggested inserting the prefix "URL:"
521 just before the URI, but this form has never caught on.
522 .PP
523 The URI syntax was designed to be unambiguous.
524 However, as URIs have become commonplace, traditional media
525 (television, radio, newspapers, billboards, etc.) have increasingly
526 used abbreviated URI references consisting of
527 only the authority and path portions of the identified resource
528 (e.g., <www.w3.org/Addressing>).
529 Such references are primarily
530 intended for human interpretation rather than machine, with the
531 assumption that context-based heuristics are sufficient to complete
532 the URI (e.g., hostnames beginning with "www" are likely to have
533 a URI prefix of "http://" and hostnames beginning with "ftp" likely
534 to have a prefix of "ftp://").
535 Many client implementations heuristically resolve these references.
536 Such heuristics may
537 change over time, particularly when new schemes are introduced.
538 Since an abbreviated URI has the same syntax as a relative URL path,
539 abbreviated URI references cannot be used where relative URIs are
540 permitted, and can only be used when there is no defined base
541 (such as in dialog boxes).
542 Don't use abbreviated URIs as hypertext links inside a document;
543 use the standard format as described here.
544 .SH "CONFORMING TO"
545 .PP
546 .IR http://www.ietf.org/rfc/rfc2396.txt
547 (IETF RFC\ 2396),
548 .I http://www.w3.org/TR/REC-html40
549 (HTML 4.0).
550 .UE
551 .SH NOTES
552 Any tool accepting URIs (e.g., a web browser) on a Linux system should
553 be able to handle (directly or indirectly) all of the schemes described here,
554 including the man: and info: schemes.
555 Handling them by invoking some other program is fine and in fact encouraged.
556 .PP
557 Technically the fragment isn't part of the URI.
558 .PP
559 For information on how to embed URIs (including URLs) in a data format,
560 see documentation on that format.
561 HTML uses the format <A HREF="\fIuri\fP">
562 .I text
563 </A>.
564 Texinfo files use the format @uref{\fIuri\fP}.
565 Man and mdoc have the recently-added UR macro, or just include the
566 URI in the text (viewers should be able to detect :// as part of a URI).
567 .PP
568 The GNOME and KDE desktop environments currently vary in the URIs they accept,
569 in particular in their respective help browsers.
570 To list man pages, GNOME uses <toc:man> while KDE uses <man:(index)>, and
571 to list info pages, GNOME uses <toc:info> while KDE uses <info:(dir)>
572 (the author of this man page prefers the KDE approach here, though a more
573 regular format would be even better).
574 In general, KDE uses <file:/cgi-bin/> as a prefix to a set of generated
575 files.
576 KDE prefers documentation in HTML, accessed via the
577 <file:/cgi-bin/helpindex>.
578 GNOME prefers the ghelp scheme to store and find documentation.
579 Neither browser handles file: references to directories at the time
580 of this writing, making it difficult to refer to an entire directory with
581 a browsable URI.
582 As noted above, these environments differ in how they handle the info: scheme,
583 probably the most important variation.
584 It is expected that GNOME and KDE
585 will converge to common URI formats, and a future
586 version of this man page will describe the converged result.
587 Efforts to aid this convergence are encouraged.
588 .SS Security
589 .PP
590 A URI does not in itself pose a security threat.
591 There is no general guarantee that a URL, which at one time
592 located a given resource, will continue to do so.
593 Nor is there any
594 guarantee that a URL will not locate a different resource at some
595 later point in time; such a guarantee can only be
596 obtained from the person(s) controlling that namespace and the
597 resource in question.
598 .PP
599 It is sometimes possible to construct a URL such that an attempt to
600 perform a seemingly harmless operation, such as the
601 retrieval of an entity associated with the resource, will in fact
602 cause a possibly damaging remote operation to occur.
603 The unsafe URL
604 is typically constructed by specifying a port number other than that
605 reserved for the network protocol in question.
606 The client unwittingly contacts a site that is in fact
607 running a different protocol.
608 The content of the URL contains instructions that, when
609 interpreted according to this other protocol, cause an unexpected
610 operation.
611 An example has been the use of a gopher URL to cause an
612 unintended or impersonating message to be sent via a SMTP server.
613 .PP
614 Caution should be used when using any URL that specifies a port
615 number other than the default for the protocol, especially when it is
616 a number within the reserved space.
617 .PP
618 Care should be taken when a URI contains escaped delimiters for a
619 given protocol (for example, CR and LF characters for telnet
620 protocols) that these are not unescaped before transmission.
621 This might violate the protocol, but avoids the potential for such
622 characters to be used to simulate an extra operation or parameter in
623 that protocol, which might lead to an unexpected and possibly harmful
624 remote operation to be performed.
625 .PP
626 It is clearly unwise to use a URI that contains a password which is
627 intended to be secret.
628 In particular, the use of a password within
629 the 'userinfo' component of a URI is strongly recommended against except
630 in those rare cases where the 'password' parameter is intended to be public.
631 .SH BUGS
632 .PP
633 Documentation may be placed in a variety of locations, so there
634 currently isn't a good URI scheme for general online documentation
635 in arbitrary formats.
636 References of the form
637 <file:///usr/doc/ZZZ> don't work because different distributions and
638 local installation requirements may place the files in different
639 directories
640 (it may be in /usr/doc, or /usr/local/doc, or /usr/share, or somewhere else).
641 Also, the directory ZZZ usually changes when a version changes
642 (though filename globbing could partially overcome this).
643 Finally, using the file: scheme doesn't easily support people who dynamically
644 load documentation from the Internet (instead of loading the files
645 onto a local filesystem).
646 A future URI scheme may be added (e.g., "userdoc:") to permit
647 programs to include cross-references to more detailed documentation without
648 having to know the exact location of that documentation.
649 Alternatively, a future version of the filesystem specification may
650 specify file locations sufficiently so that the file: scheme will
651 be able to locate documentation.
652 .PP
653 Many programs and file formats don't include a way to incorporate
654 or implement links using URIs.
655 .PP
656 Many programs can't handle all of these different URI formats; there
657 should be a standard mechanism to load an arbitrary URI that automatically
658 detects the users' environment (e.g., text or graphics, desktop environment,
659 local user preferences, and currently-executing tools) and invokes the
660 right tool for any URI.
661 .\" .SH AUTHOR
662 .\" David A. Wheeler (dwheeler@dwheeler.com) wrote this man page.
663 .SH "SEE ALSO"
664 .BR lynx (1),
665 .BR man2html (1),
666 .BR mailaddr (7),
667 .BR utf-8 (7),
668 .UR http://www.ietf.org/rfc/rfc2255.txt
669 IETF RFC\ 2255.
670 .UE