1
2[//000000001]: # (uri \- Tcl Uniform Resource Identifier Management)
3[//000000002]: # (Generated from file 'uri\.man' by tcllib/doctools with format 'markdown')
4[//000000003]: # (uri\(n\) 1\.2\.7 tcllib "Tcl Uniform Resource Identifier Management")
5
6<hr> [ <a href="../../../../toc.md">Main Table Of Contents</a> &#124; <a
7href="../../../toc.md">Table Of Contents</a> &#124; <a
8href="../../../../index.md">Keyword Index</a> &#124; <a
9href="../../../../toc0.md">Categories</a> &#124; <a
10href="../../../../toc1.md">Modules</a> &#124; <a
11href="../../../../toc2.md">Applications</a> ] <hr>
12
13# NAME
14
15uri \- URI utilities
16
17# <a name='toc'></a>Table Of Contents
18
19  - [Table Of Contents](#toc)
20
21  - [Synopsis](#synopsis)
22
23  - [Description](#section1)
24
25  - [COMMANDS](#section2)
26
27  - [SCHEMES](#section3)
28
29  - [EXTENDING](#section4)
30
31  - [QUIRK OPTIONS](#section5)
32
33      - [BACKWARD COMPATIBILITY](#subsection1)
34
35      - [NEW DESIGNS](#subsection2)
36
37      - [DEFAULT VALUES](#subsection3)
38
39  - [EXAMPLES](#section6)
40
41  - [CREDITS](#section7)
42
43  - [Bugs, Ideas, Feedback](#section8)
44
45  - [Keywords](#keywords)
46
47  - [Category](#category)
48
49# <a name='synopsis'></a>SYNOPSIS
50
51package require Tcl 8\.2
52package require uri ?1\.2\.7?
53
54[__uri::setQuirkOption__ *option* ?*value*?](#1)
55[__uri::split__ *url* ?*defaultscheme*?](#2)
56[__uri::join__ ?*key* *value*?\.\.\.](#3)
57[__uri::resolve__ *base* *url*](#4)
58[__uri::isrelative__ *url*](#5)
59[__uri::geturl__ *url* ?*options*\.\.\.?](#6)
60[__uri::canonicalize__ *uri*](#7)
61[__uri::register__ *schemeList* *script*](#8)
62
63# <a name='description'></a>DESCRIPTION
64
65This package does two things\.
66
67First, it provides a number of commands for manipulating URLs/URIs and fetching
68data specified by them\. For fetching data this package analyses the requested
69URL/URI and then dispatches it to the appropriate package
70\(__[http](\.\./\.\./\.\./\.\./index\.md\#http)__,
71__[ftp](\.\./ftp/ftp\.md)__, \.\.\.\) for actual retrieval\. Currently these
72commands are defined for the schemes *[http](\.\./\.\./\.\./\.\./index\.md\#http)*,
73*[https](\.\./\.\./\.\./\.\./index\.md\#https)*,
74*[ftp](\.\./\.\./\.\./\.\./index\.md\#ftp)*,
75*[mailto](\.\./\.\./\.\./\.\./index\.md\#mailto)*,
76*[news](\.\./\.\./\.\./\.\./index\.md\#news)*,
77*[ldap](\.\./\.\./\.\./\.\./index\.md\#ldap)*, *ldaps* and
78*[file](\.\./\.\./\.\./\.\./index\.md\#file)*\. The package __uri::urn__ adds
79scheme *[urn](\.\./\.\./\.\./\.\./index\.md\#urn)*\.
80
81Second, it provides regular expressions for a number of __registered__
82URL/URI schemes\. Registered schemes are currently
83*[ftp](\.\./\.\./\.\./\.\./index\.md\#ftp)*,
84*[ldap](\.\./\.\./\.\./\.\./index\.md\#ldap)*, *ldaps*,
85*[file](\.\./\.\./\.\./\.\./index\.md\#file)*,
86*[http](\.\./\.\./\.\./\.\./index\.md\#http)*,
87*[https](\.\./\.\./\.\./\.\./index\.md\#https)*,
88*[gopher](\.\./\.\./\.\./\.\./index\.md\#gopher)*,
89*[mailto](\.\./\.\./\.\./\.\./index\.md\#mailto)*,
90*[news](\.\./\.\./\.\./\.\./index\.md\#news)*,
91*[wais](\.\./\.\./\.\./\.\./index\.md\#wais)* and
92*[prospero](\.\./\.\./\.\./\.\./index\.md\#prospero)*\. The package __uri::urn__
93adds scheme *[urn](\.\./\.\./\.\./\.\./index\.md\#urn)*\.
94
95The commands of the package conform to RFC 3986
96\([https://www\.rfc\-editor\.org/rfc/rfc3986\.txt](https://www\.rfc\-editor\.org/rfc/rfc3986\.txt)\),
97with the exception of a loophole arising from RFC 1630 and described in RFC 3986
98Sections 5\.2\.2 and 5\.4\.2\. The loophole allows a relative URI to include a scheme
99if it is the same as the scheme of the base URI against which it is resolved\.
100RFC 3986 recommends avoiding this usage\.
101
102# <a name='section2'></a>COMMANDS
103
104  - <a name='1'></a>__uri::setQuirkOption__ *option* ?*value*?
105
106    __uri::setQuirkOption__ is an accessor command for a number of "quirk
107    options"\. The command has the same semantics as the command
108    __[set](\.\./\.\./\.\./\.\./index\.md\#set)__: when called with one argument
109    it reads an existing value; with two arguments it writes a new value\. The
110    value of a "quirk option" is boolean: the value __false__ requests
111    conformance with RFC 3986, while __true__ requests use of the quirk\. See
112    section [QUIRK OPTIONS](#section5) for discussion of the different
113    options and their purpose\.
114
115  - <a name='2'></a>__uri::split__ *url* ?*defaultscheme*?
116
117    __uri::split__ takes a *url*, decodes it and then returns a list of
118    key/value pairs suitable for __array set__ containing the constituents
119    of the *url*\. If the scheme is missing from the *url* it defaults to the
120    value of *defaultscheme* if it was specified, or
121    *[http](\.\./\.\./\.\./\.\./index\.md\#http)* else\. Currently the schemes
122    *[http](\.\./\.\./\.\./\.\./index\.md\#http)*,
123    *[https](\.\./\.\./\.\./\.\./index\.md\#https)*,
124    *[ftp](\.\./\.\./\.\./\.\./index\.md\#ftp)*,
125    *[mailto](\.\./\.\./\.\./\.\./index\.md\#mailto)*,
126    *[news](\.\./\.\./\.\./\.\./index\.md\#news)*,
127    *[ldap](\.\./\.\./\.\./\.\./index\.md\#ldap)*, *ldaps* and
128    *[file](\.\./\.\./\.\./\.\./index\.md\#file)* are supported by the package
129    itself\. See section [EXTENDING](#section4) on how to expand that range\.
130
131    The set of constituents of a URL \(= the set of keys in the returned
132    dictionary\) is dependent on the scheme of the URL\. The only key which is
133    therefore always present is __scheme__\. For the following schemes the
134    constituents and their keys are known:
135
136      * ftp
137
138        __user__, __pwd__, __host__, __port__, __path__,
139        __type__, __pbare__\. The pbare is optional\.
140
141      * http\(s\)
142
143        __user__, __pwd__, __host__, __port__, __path__,
144        __query__, __fragment__, __pbare__\. The pbare is optional\.
145
146      * file
147
148        __path__, __host__\. The host is optional\.
149
150      * mailto
151
152        __user__, __host__\. The host is optional\.
153
154      * ldap\(s\)
155
156        __host__, __port__, __dn__, __attrs__, __scope__,
157        __filter__, __extensions__
158
159      * news
160
161        Either __message\-id__ or __newsgroup\-name__\.
162
163    For discussion of the boolean __pbare__ see options *NoInitialSlash*
164    and *NoExtraKeys* in [QUIRK OPTIONS](#section5)\.
165
166    The constituents are returned as slices of the argument *url*, without
167    removal of percent\-encoding \("url\-encoding"\) or other adaptations\. Notably,
168    on Windows® the __path__ in scheme
169    *[file](\.\./\.\./\.\./\.\./index\.md\#file)* is not a valid local filename\. See
170    [EXAMPLES](#section6) for more information\.
171
172  - <a name='3'></a>__uri::join__ ?*key* *value*?\.\.\.
173
174    __uri::join__ takes a list of key/value pairs \(generated by
175    __uri::split__, for example\) and returns the canonical URL they
176    represent\. Currently the schemes *[http](\.\./\.\./\.\./\.\./index\.md\#http)*,
177    *[https](\.\./\.\./\.\./\.\./index\.md\#https)*,
178    *[ftp](\.\./\.\./\.\./\.\./index\.md\#ftp)*,
179    *[mailto](\.\./\.\./\.\./\.\./index\.md\#mailto)*,
180    *[news](\.\./\.\./\.\./\.\./index\.md\#news)*,
181    *[ldap](\.\./\.\./\.\./\.\./index\.md\#ldap)*, *ldaps* and
182    *[file](\.\./\.\./\.\./\.\./index\.md\#file)* are supported by the package
183    itself\. See section [EXTENDING](#section4) on how to expand that range\.
184
185    The arguments are expected to be slices of a valid URL, with
186    percent\-encoding \("url\-encoding"\) and any other necessary adaptations\.
187    Notably, on Windows the __path__ in scheme
188    *[file](\.\./\.\./\.\./\.\./index\.md\#file)* is not a valid local filename\. See
189    [EXAMPLES](#section6) for more information\.
190
191  - <a name='4'></a>__uri::resolve__ *base* *url*
192
193    __uri::resolve__ resolves the specified *url* relative to *base*, in
194    conformance with RFC 3986\. In other words: a non\-relative *url* is
195    returned unchanged, whereas for a relative *url* the missing parts are
196    taken from *base* and prepended to it\. The result of this operation is
197    returned\. For an empty *url* the result is *base*, without its URI
198    fragment \(if any\)\. The command is available for schemes
199    *[http](\.\./\.\./\.\./\.\./index\.md\#http)*,
200    *[https](\.\./\.\./\.\./\.\./index\.md\#https)*,
201    *[ftp](\.\./\.\./\.\./\.\./index\.md\#ftp)*, and
202    *[file](\.\./\.\./\.\./\.\./index\.md\#file)*\.
203
204  - <a name='5'></a>__uri::isrelative__ *url*
205
206    __uri::isrelative__ determines whether the specified *url* is absolute
207    or relative\. The command is available for a *url* of any scheme\.
208
209  - <a name='6'></a>__uri::geturl__ *url* ?*options*\.\.\.?
210
211    __uri::geturl__ decodes the specified *url* and then dispatches the
212    request to the package appropriate for the scheme found in the URL\. The
213    command assumes that the package to handle the given scheme either has the
214    same name as the scheme itself \(including possible capitalization\) followed
215    by __::geturl__, or, in case of this failing, has the same name as the
216    scheme itself \(including possible capitalization\)\. It further assumes that
217    whatever package was loaded provides a __geturl__\-command in the
218    namespace of the same name as the package itself\. This command is called
219    with the given *url* and all given *options*\. Currently __geturl__
220    does not handle any options itself\.
221
222    *Note:* *[file](\.\./\.\./\.\./\.\./index\.md\#file)*\-URLs are an exception to
223    the rule described above\. They are handled internally\.
224
225    It is not possible to specify results of the command\. They depend on the
226    __geturl__\-command for the scheme the request was dispatched to\.
227
228  - <a name='7'></a>__uri::canonicalize__ *uri*
229
230    __uri::canonicalize__ returns the canonical form of a URI\. The canonical
231    form of a URI is one where relative path specifications, i\.e\. "\." and "\.\.",
232    have been resolved\. The command is available for all URI schemes that have
233    __uri::split__ and __uri::join__ commands\. The command returns a
234    canonicalized URI if the URI scheme has a __path__ component \(i\.e\.
235    *[http](\.\./\.\./\.\./\.\./index\.md\#http)*,
236    *[https](\.\./\.\./\.\./\.\./index\.md\#https)*,
237    *[ftp](\.\./\.\./\.\./\.\./index\.md\#ftp)*, and
238    *[file](\.\./\.\./\.\./\.\./index\.md\#file)*\)\. For schemes that have
239    __uri::split__ and __uri::join__ commands but no __path__
240    component \(i\.e\. *[mailto](\.\./\.\./\.\./\.\./index\.md\#mailto)*,
241    *[news](\.\./\.\./\.\./\.\./index\.md\#news)*,
242    *[ldap](\.\./\.\./\.\./\.\./index\.md\#ldap)*, and *ldaps*\), the command
243    returns the *uri* unchanged\.
244
245  - <a name='8'></a>__uri::register__ *schemeList* *script*
246
247    __uri::register__ registers the first element of *schemeList* as a new
248    scheme and the remaining elements as aliases for this scheme\. It creates the
249    namespace for the scheme and executes the *script* in the new namespace\.
250    The script has to declare variables containing regular expressions relevant
251    to the scheme\. At least the variable __schemepart__ has to be declared
252    as that one is used to extend the variables keeping track of the registered
253    schemes\.
254
255# <a name='section3'></a>SCHEMES
256
257In addition to the commands mentioned above this package provides regular
258expression to recognize URLs for a number of URL schemes\.
259
260For each supported scheme a namespace of the same name as the scheme itself is
261provided inside of the namespace *uri* containing the variable __url__
262whose contents are a regular expression to recognize URLs of that scheme\.
263Additional variables may contain regular expressions for parts of URLs for that
264scheme\.
265
266The variable __uri::schemes__ contains a list of all registered schemes\.
267Currently these are *[ftp](\.\./\.\./\.\./\.\./index\.md\#ftp)*,
268*[ldap](\.\./\.\./\.\./\.\./index\.md\#ldap)*, *ldaps*,
269*[file](\.\./\.\./\.\./\.\./index\.md\#file)*,
270*[http](\.\./\.\./\.\./\.\./index\.md\#http)*,
271*[https](\.\./\.\./\.\./\.\./index\.md\#https)*,
272*[gopher](\.\./\.\./\.\./\.\./index\.md\#gopher)*,
273*[mailto](\.\./\.\./\.\./\.\./index\.md\#mailto)*,
274*[news](\.\./\.\./\.\./\.\./index\.md\#news)*,
275*[wais](\.\./\.\./\.\./\.\./index\.md\#wais)* and
276*[prospero](\.\./\.\./\.\./\.\./index\.md\#prospero)*\.
277
278# <a name='section4'></a>EXTENDING
279
280Extending the range of schemes supported by __uri::split__ and
281__uri::join__ is easy because both commands do not handle the request by
282themselves but dispatch it to another command in the *uri* namespace using the
283scheme of the URL as criterion\.
284
285__uri::split__ and __uri::join__ call __Split\[string totitle
286<scheme>\]__ and __Join\[string totitle <scheme>\]__ respectively\.
287
288The provision of split and join commands is sufficient to extend the commands
289__uri::canonicalize__ and __uri::geturl__ \(the latter subject to the
290availability of a suitable package with a __geturl__ command\)\. In contrast,
291to extend the command __uri::resolve__ to a new scheme, the command itself
292must be modified\.
293
294To extend the range of schemes for which pattern information is available, use
295the command __uri::register__\.
296
297An example of a package that provides both commands and pattern information for
298a new scheme is __uri::urn__, which adds scheme
299*[urn](\.\./\.\./\.\./\.\./index\.md\#urn)*\.
300
301# <a name='section5'></a>QUIRK OPTIONS
302
303The value of a "quirk option" is boolean: the value __false__ requests
304conformance with RFC 3986, while __true__ requests use of the quirk\. Use
305command __uri::setQuirkOption__ to access the values of quirk options\.
306
307Quirk options are useful both for allowing backwards compatibility when a
308command specification changes, and for adding useful features that are not
309included in RFC specifications\. The following quirk options are currently
310defined:
311
312  - *NoInitialSlash*
313
314    This quirk option concerns the leading character of __path__ \(if
315    non\-empty\) in the schemes *[http](\.\./\.\./\.\./\.\./index\.md\#http)*,
316    *[https](\.\./\.\./\.\./\.\./index\.md\#https)*, and
317    *[ftp](\.\./\.\./\.\./\.\./index\.md\#ftp)*\.
318
319    RFC 3986 defines __path__ in an absolute URI to have an initial "/",
320    unless the value of __path__ is the empty string\. For the scheme
321    *[file](\.\./\.\./\.\./\.\./index\.md\#file)*, all versions of package
322    __uri__ follow this rule\. The quirk option *NoInitialSlash* does not
323    apply to scheme *[file](\.\./\.\./\.\./\.\./index\.md\#file)*\.
324
325    For the schemes *[http](\.\./\.\./\.\./\.\./index\.md\#http)*,
326    *[https](\.\./\.\./\.\./\.\./index\.md\#https)*, and
327    *[ftp](\.\./\.\./\.\./\.\./index\.md\#ftp)*, versions of __uri__ before
328    1\.2\.7 define the __path__ *NOT* to include an initial "/"\. When the
329    quirk option *NoInitialSlash* is __true__ \(the default\), this behavior
330    is also used in version 1\.2\.7\. To use instead values of __path__ as
331    defined by RFC 3986, set this quirk option to __false__\.
332
333    This setting does not affect RFC 3986 conformance\. If *NoInitialSlash* is
334    __true__, then the value of __path__ in the schemes
335    *[http](\.\./\.\./\.\./\.\./index\.md\#http)*,
336    *[https](\.\./\.\./\.\./\.\./index\.md\#https)*, or
337    *[ftp](\.\./\.\./\.\./\.\./index\.md\#ftp)*, cannot distinguish between URIs in
338    which the full "RFC 3986 path" is the empty string "" or a single slash "/"
339    respectively\. The missing information is recorded in an additional
340    __uri::split__ key __pbare__\.
341
342    The boolean __pbare__ is defined when quirk options *NoInitialSlash*
343    and *NoExtraKeys* have values __true__ and __false__ respectively\.
344    In this case, if the value of __path__ is the empty string "",
345    __pbare__ is __true__ if the full "RFC 3986 path" is "", and
346    __pbare__ is __false__ if the full "RFC 3986 path" is "/"\.
347
348    Using this quirk option *NoInitialSlash* is a matter of preference\.
349
350  - *NoExtraKeys*
351
352    This quirk option permits full backward compatibility with versions of
353    __uri__ before 1\.2\.7, by omitting the __uri::split__ key
354    __pbare__ described above \(see quirk option *NoInitialSlash*\)\. The
355    outcome is greater backward compatibility of the __uri::split__ command,
356    but an inability to distinguish between URIs in which the full "RFC 3986
357    path" is the empty string "" or a single slash "/" respectively \- i\.e\. a
358    minor non\-conformance with RFC 3986\.
359
360    If the quirk option *NoExtraKeys* is __false__ \(the default\), command
361    __uri::split__ returns an additional key __pbare__, and the commands
362    comply with RFC 3986\. If the quirk option *NoExtraKeys* is __true__,
363    the key __pbare__ is not defined and there is not full conformance with
364    RFC 3986\.
365
366    Using the quirk option *NoExtraKeys* is *NOT* recommended, because if
367    set to __true__ it will reduce conformance with RFC 3986\. The option is
368    included only for compatibility with code, written for earlier versions of
369    __uri__, that needs values of __path__ without a leading "/", *AND
370    ALSO* cannot tolerate unexpected keys in the results of __uri::split__\.
371
372  - *HostAsDriveLetter*
373
374    When handling the scheme *[file](\.\./\.\./\.\./\.\./index\.md\#file)* on the
375    Windows platform, versions of __uri__ before 1\.2\.7 use the __host__
376    field to represent a Windows drive letter and the colon that follows it, and
377    the __path__ field to represent the filename path after the colon\. Such
378    URIs are invalid, and are not recognized by any RFC\. When the quirk option
379    *HostAsDriveLetter* is __true__, this behavior is also used in version
380    1\.2\.7\. To use *[file](\.\./\.\./\.\./\.\./index\.md\#file)* URIs on Windows that
381    conform to RFC 3986, set this quirk option to __false__ \(the default\)\.
382
383    Using this quirk is *NOT* recommended, because if set to __true__ it
384    will cause the __uri__ commands to expect and produce invalid URIs\. The
385    option is included only for compatibility with legacy code\.
386
387  - *RemoveDoubleSlashes*
388
389    When a URI is canonicalized by __uri::canonicalize__, its __path__
390    is normalized by removal of segments "\." and "\.\."\. RFC 3986 does not mandate
391    the removal of empty segments "" \(i\.e\. the merger of double slashes, which
392    is a feature of filename normalization but not of URI __path__
393    normalization\): it treats URIs with excess slashes as referring to different
394    resources\. When the quirk option *RemoveDoubleSlashes* is __true__
395    \(the default\), empty segments will be removed from __path__\. To prevent
396    removal, and thereby conform to RFC 3986, set this quirk option to
397    __false__\.
398
399    Using this quirk is a matter of preference\. A URI with double slashes in its
400    path was most likely generated by error, certainly so if it has a
401    straightforward mapping to a file on a server\. In some cases it may be
402    better to sanitize the URI; in others, to keep the URI and let the server
403    handle the possible error\.
404
405## <a name='subsection1'></a>BACKWARD COMPATIBILITY
406
407To behave as similarly as possible to versions of __uri__ earlier than
4081\.2\.7, set the following quirk options:
409
410  - __uri::setQuirkOption__ *NoInitialSlash* 1
411
412  - __uri::setQuirkOption__ *NoExtraKeys* 1
413
414  - __uri::setQuirkOption__ *HostAsDriveLetter* 1
415
416  - __uri::setQuirkOption__ *RemoveDoubleSlashes* 0
417
418In code that can tolerate the return by __uri::split__ of an additional key
419__pbare__, set
420
421  - __uri::setQuirkOption__ *NoExtraKeys* 0
422
423in order to achieve greater compliance with RFC 3986\.
424
425## <a name='subsection2'></a>NEW DESIGNS
426
427For new projects, the following settings are recommended:
428
429  - __uri::setQuirkOption__ *NoInitialSlash* 0
430
431  - __uri::setQuirkOption__ *NoExtraKeys* 0
432
433  - __uri::setQuirkOption__ *HostAsDriveLetter* 0
434
435  - __uri::setQuirkOption__ *RemoveDoubleSlashes* 0&#124;1
436
437## <a name='subsection3'></a>DEFAULT VALUES
438
439The default values for package __uri__ version 1\.2\.7 are intended to be a
440compromise between backwards compatibility and improved features\. Different
441default values may be chosen in future versions of package __uri__\.
442
443  - __uri::setQuirkOption__ *NoInitialSlash* 1
444
445  - __uri::setQuirkOption__ *NoExtraKeys* 0
446
447  - __uri::setQuirkOption__ *HostAsDriveLetter* 0
448
449  - __uri::setQuirkOption__ *RemoveDoubleSlashes* 1
450
451# <a name='section6'></a>EXAMPLES
452
453A Windows® local filename such as "__C:\\Other Files\\startup\.txt__" is not
454suitable for use as the __path__ element of a URI in the scheme
455*[file](\.\./\.\./\.\./\.\./index\.md\#file)*\.
456
457The Tcl command __file normalize__ will convert the backslashes to forward
458slashes\. To generate a valid __path__ for the scheme
459*[file](\.\./\.\./\.\./\.\./index\.md\#file)*, the normalized filename must be
460prepended with "__/__", and then any characters that do not match the
461__regexp__ bracket expression
462
463    [a-zA-Z0-9$_.+!*'(,)?:@&=-]
464
465must be percent\-encoded\.
466
467The result in this example is "__/C:/Other%20Files/startup\.txt__" which is a
468valid value for __path__\.
469
470    % uri::join path /C:/Other%20Files/startup.txt scheme file
471
472    file:///C:/Other%20Files/startup.txt
473
474    % uri::split file:///C:/Other%20Files/startup.txt
475
476    path /C:/Other%20Files/startup.txt scheme file
477
478On UNIX® systems filenames begin with "__/__" which is also used as the
479directory separator\. The only action needed to convert a filename to a valid
480__path__ is percent\-encoding\.
481
482# <a name='section7'></a>CREDITS
483
484Original code \(regular expressions\) by Andreas Kupries\. Modularisation by Steve
485Ball, also the split/join/resolve functionality\. RFC 3986 conformance by Keith
486Nash\.
487
488# <a name='section8'></a>Bugs, Ideas, Feedback
489
490This document, and the package it describes, will undoubtedly contain bugs and
491other problems\. Please report such in the category *uri* of the [Tcllib
492Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report any ideas
493for enhancements you may have for either package and/or documentation\.
494
495When proposing code changes, please provide *unified diffs*, i\.e the output of
496__diff \-u__\.
497
498Note further that *attachments* are strongly preferred over inlined patches\.
499Attachments can be made by going to the __Edit__ form of the ticket
500immediately after its creation, and then using the left\-most button in the
501secondary navigation bar\.
502
503# <a name='keywords'></a>KEYWORDS
504
505[fetching information](\.\./\.\./\.\./\.\./index\.md\#fetching\_information),
506[file](\.\./\.\./\.\./\.\./index\.md\#file), [ftp](\.\./\.\./\.\./\.\./index\.md\#ftp),
507[gopher](\.\./\.\./\.\./\.\./index\.md\#gopher),
508[http](\.\./\.\./\.\./\.\./index\.md\#http), [https](\.\./\.\./\.\./\.\./index\.md\#https),
509[ldap](\.\./\.\./\.\./\.\./index\.md\#ldap),
510[mailto](\.\./\.\./\.\./\.\./index\.md\#mailto),
511[news](\.\./\.\./\.\./\.\./index\.md\#news),
512[prospero](\.\./\.\./\.\./\.\./index\.md\#prospero), [rfc
5131630](\.\./\.\./\.\./\.\./index\.md\#rfc\_1630), [rfc
5142255](\.\./\.\./\.\./\.\./index\.md\#rfc\_2255), [rfc
5152396](\.\./\.\./\.\./\.\./index\.md\#rfc\_2396), [rfc
5163986](\.\./\.\./\.\./\.\./index\.md\#rfc\_3986), [uri](\.\./\.\./\.\./\.\./index\.md\#uri),
517[url](\.\./\.\./\.\./\.\./index\.md\#url), [wais](\.\./\.\./\.\./\.\./index\.md\#wais),
518[www](\.\./\.\./\.\./\.\./index\.md\#www)
519
520# <a name='category'></a>CATEGORY
521
522Networking
523