| < draft-ietf-appsawg-file-scheme-01.txt | draft-ietf-appsawg-file-scheme-02.txt > | |||
|---|---|---|---|---|
| Applications Area Working Group M. Kerwin | Applications Area Working Group M. Kerwin | |||
| Internet-Draft QUT | Internet-Draft QUT | |||
| Obsoletes: 1738 (if approved) April 14, 2015 | Obsoletes: 1738 (if approved) May 28, 2015 | |||
| Intended status: Standards Track | Intended status: Standards Track | |||
| Expires: October 16, 2015 | Expires: November 29, 2015 | |||
| The file URI Scheme | The file URI Scheme | |||
| draft-ietf-appsawg-file-scheme-01 | draft-ietf-appsawg-file-scheme-02 | |||
| Abstract | Abstract | |||
| This document specifies the "file" Uniform Resource Identifier (URI) | This document specifies the "file" Uniform Resource Identifier (URI) | |||
| scheme, obsoleting the definition in RFC 1738. | scheme, obsoleting the definition in RFC 1738. | |||
| It attemps to define a common core which is intended to interoperate | It attemps to define a common core which is intended to interoperate | |||
| across the broad spectrum of existing implementations, while at the | across the broad spectrum of existing implementations, while at the | |||
| same time documenting other current practices. | same time documenting other current practices. | |||
| skipping to change at page 1, line 41 ¶ | skipping to change at page 1, line 41 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on October 16, 2015. | This Internet-Draft will expire on November 29, 2015. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. History . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. History . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.2. Similar Technologies . . . . . . . . . . . . . . . . . . 3 | 1.2. Similar Technologies . . . . . . . . . . . . . . . . . . 3 | |||
| 1.3. Notational Conventions . . . . . . . . . . . . . . . . . 3 | 1.3. Notational Conventions . . . . . . . . . . . . . . . . . 4 | |||
| 2. Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Operations on file URIs . . . . . . . . . . . . . . . . . . . 4 | 3. Operations on file URIs . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1. Translating Local File Path to file URI . . . . . . . . . 5 | 3.1. Translating Local File Path to file URI . . . . . . . . . 5 | |||
| 3.2. Translating UNC String to file URI . . . . . . . . . . . 6 | 3.2. Translating UNC String to file URI . . . . . . . . . . . 6 | |||
| 3.3. Translating Non-local File Path to file URI . . . . . . . 7 | 3.3. Translating Non-local File Path to file URI . . . . . . . 7 | |||
| 3.4. Incompatible File Paths . . . . . . . . . . . . . . . . . 7 | 3.4. Incompatible File Paths . . . . . . . . . . . . . . . . . 7 | |||
| 3.4.1. Win32 Namespaces . . . . . . . . . . . . . . . . . . 7 | 3.4.1. Win32 Namespaces . . . . . . . . . . . . . . . . . . 7 | |||
| 4. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 9 | 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 9 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 10 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 10 | 8.2. Informative References . . . . . . . . . . . . . . . . . 10 | |||
| Appendix A. Example URIs . . . . . . . . . . . . . . . . . . . . 11 | Appendix A. Example URIs . . . . . . . . . . . . . . . . . . . . 12 | |||
| Appendix B. System-specific Operations . . . . . . . . . . . . . 11 | Appendix B. System-specific Operations . . . . . . . . . . . . . 12 | |||
| B.1. POSIX Systems . . . . . . . . . . . . . . . . . . . . . . 12 | B.1. POSIX Systems . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| B.2. DOS- and Windows-Like Systems . . . . . . . . . . . . . . 12 | B.2. DOS- and Windows-Like Systems . . . . . . . . . . . . . . 12 | |||
| B.3. Mac OS X Systems . . . . . . . . . . . . . . . . . . . . 12 | B.3. Mac OS X Systems . . . . . . . . . . . . . . . . . . . . 13 | |||
| B.4. OpenVMS Files-11 Systems . . . . . . . . . . . . . . . . 12 | B.4. OpenVMS Files-11 Systems . . . . . . . . . . . . . . . . 13 | |||
| Appendix C. Nonstandard Syntax Variations . . . . . . . . . . . 12 | Appendix C. Nonstandard Syntax Variations . . . . . . . . . . . 13 | |||
| C.1. DOS and Windows Drive Letters . . . . . . . . . . . . . . 12 | C.1. DOS and Windows Drive Letters . . . . . . . . . . . . . . 13 | |||
| C.1.1. Vertical Bar Character . . . . . . . . . . . . . . . 13 | C.1.1. Relative Paths . . . . . . . . . . . . . . . . . . . 14 | |||
| C.2. UNC Paths . . . . . . . . . . . . . . . . . . . . . . . . 14 | C.1.2. Vertical Bar Character . . . . . . . . . . . . . . . 14 | |||
| C.3. Backslash as Separator . . . . . . . . . . . . . . . . . 15 | C.2. UNC Paths . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| Appendix D. Example of IRI vs Percent-Encoded URI . . . . . . . 15 | C.3. Backslash as Separator . . . . . . . . . . . . . . . . . 16 | |||
| Appendix E. UNC Syntax . . . . . . . . . . . . . . . . . . . . . 16 | Appendix D. Example of IRI vs Percent-Encoded URI . . . . . . . 16 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 17 | Appendix E. UNC Syntax . . . . . . . . . . . . . . . . . . . . . 17 | |||
| Appendix F. Collected Rules . . . . . . . . . . . . . . . . . . 18 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 19 | ||||
| 1. Introduction | 1. Introduction | |||
| A file URI identifies a file on a particular file system. It can be | A file URI identifies a file on a particular file system. It can be | |||
| used in discussions about the file, and if other conditions are met | used in discussions about the file, and if other conditions are met | |||
| it can be dereferenced to directly access the file. | it can be dereferenced to directly access the file. | |||
| The file URI scheme is not coupled with a specific protocol. As | The file URI scheme is not coupled with a specific protocol. As | |||
| such, there is no well-defined set of operations that can be | such, there is no well-defined set of operations that can be | |||
| performed on file URIs, nor a specific media type associated with | performed on file URIs, nor a specific media type associated with | |||
| skipping to change at page 5, line 50 ¶ | skipping to change at page 6, line 9 ¶ | |||
| 2. Append the transformed segment and a delimiting slash | 2. Append the transformed segment and a delimiting slash | |||
| character "/" to the URI. | character "/" to the URI. | |||
| 6. If the path includes a file name: | 6. If the path includes a file name: | |||
| 1. Transform the file name to a path segment as above. | 1. Transform the file name to a path segment as above. | |||
| 2. Append the transformed segment to the URI. | 2. Append the transformed segment to the URI. | |||
| Differences from RFC 1738 | Differences from RFC 1738 | |||
| In [RFC1738] a file URL always started with the token "file://", | In [RFC1738] a file URL always started with the token "file://", | |||
| followed by an authority and a "/". That "/" was not considered part | followed by an authority and a "/". That "/" was not considered part | |||
| of the path. This implies that the correct encoding for a file path | of the path. This implies that the correct encoding for a file path | |||
| in a UNIX-like environment would have been: | in a UNIX-like environment would have been: | |||
| token + authority + slash + path | token + authority + slash + path | |||
| = "file://" + "" + "/" + "/path/to/file.txt" | = "file://" + "" + "/" + "/path/to/file.txt" | |||
| = "file:////path/to/file.txt" | = "file:////path/to/file.txt" | |||
| However that construct was never used in practice, and in fact would | However that construct was never used in practice, and in fact would | |||
| skipping to change at page 7, line 5 ¶ | skipping to change at page 7, line 13 ¶ | |||
| Section 3.3) as per Section 2 of [RFC3986]. | Section 3.3) as per Section 2 of [RFC3986]. | |||
| 2. Append a delimiting slash character "/" and the transformed | 2. Append a delimiting slash character "/" and the transformed | |||
| segment to the URI. | segment to the URI. | |||
| Example: | Example: | |||
| UNC String: \\host.example.com\Share\path\to\file.txt | UNC String: \\host.example.com\Share\path\to\file.txt | |||
| URI: file://host.example.com/Share/path/to/file.txt | URI: file://host.example.com/Share/path/to/file.txt | |||
| Differences from RFC 1738 | Differences from RFC 1738 | |||
| In [RFC1738] a file URL an authority of "localhost" was used to refer | In [RFC1738] a file URL an authority of "localhost" was used to refer | |||
| to the local file system, but in this specification it equates to a | to the local file system, but in this specification it equates to a | |||
| UNC string with the host "localhost". | UNC string with the host "localhost". | |||
| 3.3. Translating Non-local File Path to file URI | 3.3. Translating Non-local File Path to file URI | |||
| Translating a non-local file path other than a UNC string to a file | Translating a non-local file path other than a UNC string to a file | |||
| URI follows the same basic algorithm as for local files, above, | URI follows the same basic algorithm as for local files, above, | |||
| except that the authority MUST refer to the network-accesible node | except that the authority MUST refer to the network-accesible node | |||
| skipping to change at page 8, line 30 ¶ | skipping to change at page 8, line 40 ¶ | |||
| are complex topics, and the use of file URIs can complicate the | are complex topics, and the use of file URIs can complicate the | |||
| security model in effect for file privileges. Software using file | security model in effect for file privileges. Software using file | |||
| URIs MUST NOT grant greater access than would be available for other | URIs MUST NOT grant greater access than would be available for other | |||
| file access methods. | file access methods. | |||
| File systems typically assign an operational meaning to special | File systems typically assign an operational meaning to special | |||
| characters, such as the "/", "\", ":", "[", and "]" characters, and | characters, such as the "/", "\", ":", "[", and "]" characters, and | |||
| to special device names like ".", "..", "...", "aux", "lpt", etc. In | to special device names like ".", "..", "...", "aux", "lpt", etc. In | |||
| some cases, merely testing for the existence of such a name will | some cases, merely testing for the existence of such a name will | |||
| cause the operating system to pause or invoke unrelated system calls, | cause the operating system to pause or invoke unrelated system calls, | |||
| leading to significant securt concerns regarding denial of service | leading to significant security concerns regarding denial of service | |||
| and unintended data transfer. It would be impossible for this | and unintended data transfer. It would be impossible for this | |||
| specification to list all such significant characters and device | specification to list all such significant characters and device | |||
| names. Implementers MUST research the reserved names and characters | names. Implementers MUST research the reserved names and characters | |||
| for the types of storage device that may be attached to their | for the types of storage device that may be attached to their | |||
| application and restrict the use of data obtained from URI components | application and restrict the use of data obtained from URI components | |||
| accordingly. | accordingly. | |||
| Additionally, as discussed in the HP OpenVMS Systems Documentation | Additionally, as discussed in the HP OpenVMS Systems Documentation | |||
| http://h71000.www7.hp.com/doc/84final/ba554_90015/ch03s09.html | http://h71000.www7.hp.com/doc/84final/ba554_90015/ch03s09.html | |||
| "access control strings include sufficient information to allow | "access control strings include sufficient information to allow | |||
| someone to break in to the remote account, [therefore] they create | someone to break in to the remote account, [therefore] they create | |||
| serious security exposure." In a similar vein, the presence of a | serious security exposure." In a similar vein, the presence of a | |||
| password in a "user:password" userinfo field is deprecated by | password in a "user:password" userinfo field is deprecated by | |||
| [RFC3986]. As such, the userinfo field of a file URI, if present, | [RFC3986]. As such, the userinfo field of a file URI, if present, | |||
| MUST NOT contain a password. | MUST NOT contain a password. | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| IANA maintains the registry of URI Schemes [BCP115] at | ||||
| http://www.iana.org/assignments/uri-schemes/ . | ||||
| This document defines the following URI scheme, so the "Permanent URI | This document defines the following URI scheme, so the "Permanent URI | |||
| Schemes" registry has been updated accordingly. | Schemes" registry has been updated accordingly. This registration | |||
| complies with [BCP115]. | ||||
| +------------+--------------------------+-----------+ | Scheme name: | |||
| | URI Scheme | Description | Reference | | file | |||
| +------------+--------------------------+-----------+ | ||||
| | file | Host-specific file names | RFC XXXX | | Status: | |||
| +------------+--------------------------+-----------+ | permanent | |||
| Applications/protocols that use this scheme name: | ||||
| Commonly used in hypertext documents to refer to files without | ||||
| depending on network access. Supported by major browsers. | ||||
| Windows API (PathCreateFromUrl, UrlCreateFromPath). | ||||
| Perl LWP. | ||||
| Contact: | ||||
| Matthew Kerwin <matthew.kerwin@qut.edu.au> | ||||
| Change Controller: | ||||
| This scheme is registered under the IETF tree. As such, the IETF | ||||
| maintains change control. | ||||
| [RFC Editor Note: Replace XXXX with this RFC's reference.] | [RFC Editor Note: Replace XXXX with this RFC's reference.] | |||
| 7. Acknowledgements | 7. Acknowledgements | |||
| This specification is derived from [RFC1738], [RFC3986], and | This specification is derived from [RFC1738], [RFC3986], and | |||
| [I-D.hoffman-file-uri] (expired); the acknowledgements in those | [I-D.hoffman-file-uri] (expired); the acknowledgements in those | |||
| documents still apply. | documents still apply. | |||
| Additional thanks to Dave Risney, author of the informative IE Blog | Additional thanks to Dave Risney, author of the informative IE Blog | |||
| skipping to change at page 10, line 23 ¶ | skipping to change at page 10, line 46 ¶ | |||
| [RFC6874] Carpenter, B., Cheshire, S., and R. Hinden, "Representing | [RFC6874] Carpenter, B., Cheshire, S., and R. Hinden, "Representing | |||
| IPv6 Zone Identifiers in Address Literals and Uniform | IPv6 Zone Identifiers in Address Literals and Uniform | |||
| Resource Identifiers", RFC 6874, February 2013. | Resource Identifiers", RFC 6874, February 2013. | |||
| [UTR15] Davis, M. and K. Whistler, "Unicode Normalization Forms", | [UTR15] Davis, M. and K. Whistler, "Unicode Normalization Forms", | |||
| August 2012. | August 2012. | |||
| 8.2. Informative References | 8.2. Informative References | |||
| [Bug107540] | ||||
| Bugzilla@Mozilla, "Bug 107540", October 2007, | ||||
| <https://bugzilla.mozilla.org/show_bug.cgi?id=107540>. | ||||
| [I-D.hoffman-file-uri] | [I-D.hoffman-file-uri] | |||
| Hoffman, P., "The file URI Scheme", draft-hoffman-file- | Hoffman, P., "The file URI Scheme", draft-hoffman-file- | |||
| uri-03 (work in progress), January 2005. | uri-03 (work in progress), January 2005. | |||
| [MS-DTYP] Microsoft Open Specifications, "Windows Data Types, 2.2.56 | [MS-DTYP] Microsoft Open Specifications, "Windows Data Types, 2.2.56 | |||
| UNC", January 2013, | UNC", January 2013, | |||
| <http://msdn.microsoft.com/en-us/library/gg465305.aspx>. | <http://msdn.microsoft.com/en-us/library/gg465305.aspx>. | |||
| [MS-NBTE] Microsoft Open Specifications, "NetBIOS over TCP (NBT) | [MS-NBTE] Microsoft Open Specifications, "NetBIOS over TCP (NBT) | |||
| Extensions", May 2014, | Extensions", May 2014, | |||
| skipping to change at page 12, line 18 ¶ | skipping to change at page 12, line 49 ¶ | |||
| B.2. DOS- and Windows-Like Systems | B.2. DOS- and Windows-Like Systems | |||
| When mapping a DOS- or Windows-like file path to a URI, use the drive | When mapping a DOS- or Windows-like file path to a URI, use the drive | |||
| letter (e.g. "c:") as the first path segment. | letter (e.g. "c:") as the first path segment. | |||
| Some implementations leave the leading slash off before the drive | Some implementations leave the leading slash off before the drive | |||
| letter. See Appendix C.1) | letter. See Appendix C.1) | |||
| Some implementations replace ":" with "|", while others leave it off | Some implementations replace ":" with "|", while others leave it off | |||
| completed. See Appendix C.1.1 | completely. See Appendix C.1.2 | |||
| B.3. Mac OS X Systems | B.3. Mac OS X Systems | |||
| o HFS+ uses non-standard UTF-8 [STD63] form (like NFD) | o HFS+ uses non-standard UTF-8 [STD63] form (like NFD) | |||
| - take care transforming <-> NFC [UTR15] | * take care transforming <-> NFC [UTR15] | |||
| B.4. OpenVMS Files-11 Systems | B.4. OpenVMS Files-11 Systems | |||
| When mapping a VMS file path to a file URI, use the device name as | When mapping a VMS file path to a file URI, use the device name as | |||
| the first path segment. Note that the dollars sign "$" is a reserved | the first path segment. Note that the dollars sign "$" is a reserved | |||
| character ([RFC3986], Section 2.2), so should be percent-encoded. | character ([RFC3986], Section 2.2), so should be percent-encoded. | |||
| If the VMS file path includes a node reference, use that as the | If the VMS file path includes a node reference, use that as the | |||
| authority. Where the original node reference includes a username and | authority. Where the original node reference includes a username and | |||
| password in an access control string, they can be transcribed into | password in an access control string, they can be transcribed into | |||
| skipping to change at page 13, line 17 ¶ | skipping to change at page 13, line 48 ¶ | |||
| drive-letter = ALPHA ":" | drive-letter = ALPHA ":" | |||
| This is intended to support URIs of the form: | This is intended to support URIs of the form: | |||
| o "file:c:/path/to/file" | o "file:c:/path/to/file" | |||
| The minimal representation of a local file in a DOS- or | The minimal representation of a local file in a DOS- or | |||
| Windows-based environment, with no authority field and an | Windows-based environment, with no authority field and an | |||
| absolute path that begins with a drive letter. | absolute path that begins with a drive letter. | |||
| C.1.1. Vertical Bar Character | Note that comparison of drive letters in DOS or Windows file paths is | |||
| case-insensitive. Some implementations therefore canonicalize drive | ||||
| letters in file URIs by converting them to uppercase. | ||||
| C.1.1. Relative Paths | ||||
| In DOS- or Windows-based file systems, relative paths beginning with | ||||
| a slash "/" should be resolved relative to the drive letter, and | ||||
| resolution of ".." dot segments (per Section 5.2.4 of [RFC3986]) | ||||
| should not ever overwrite the drive letter. | ||||
| e.g.: | ||||
| base: file:///c:/path/to/file.txt | ||||
| rel. URI: /some/other/thing.bmp | ||||
| resolved: file:///c:/some/other/thing.bmp | ||||
| base: file:///c:/foo.txt | ||||
| rel. URI: ../../bar.txt | ||||
| resolved: file:///c:/bar.txt | ||||
| Relative paths with a drive letter followed by a character other than | ||||
| a slash (e.g. "c:bar/baz.txt" or "c:../foo.txt") should not be | ||||
| accepted as valid URIs in DOS or Windows systems. | ||||
| C.1.2. Vertical Bar Character | ||||
| Historically some implementations have used a vertical line character | Historically some implementations have used a vertical line character | |||
| "|" instead of a colon ":" in the drive letter construct. [RFC3986] | "|" instead of a colon ":" in the drive letter construct. [RFC3986] | |||
| forbids the use of the vertical line, however it may be necessary to | forbids the use of the vertical line, however it may be necessary to | |||
| interpret or update old URIs. | interpret or update old URIs. | |||
| For interpreting such URIs, the "auth-path" and "local-path" rules in | For interpreting such URIs, the "auth-path" and "local-path" rules in | |||
| Section 2 and the "drive-letter" rule above are replaced with the | Section 2 and the "drive-letter" rule above are replaced with the | |||
| following: | following: | |||
| skipping to change at page 13, line 44 ¶ | skipping to change at page 15, line 4 ¶ | |||
| file-absolute = "/" drive-letter path-absolute | file-absolute = "/" drive-letter path-absolute | |||
| drive-letter = ALPHA ":" | drive-letter = ALPHA ":" | |||
| / ALPHA "|" | / ALPHA "|" | |||
| This is intended to support URIs of the form: | This is intended to support URIs of the form: | |||
| o "file:///c|/path/to/file" | o "file:///c|/path/to/file" | |||
| o "file:/c|/path/to/file" | o "file:/c|/path/to/file" | |||
| o "file:c|/path/to/file" | o "file:c|/path/to/file" | |||
| Regular DOS or Windows file URIs, with vertical line characters | Regular DOS or Windows file URIs, with vertical line characters | |||
| in the drive letter construct. | in the drive letter construct. | |||
| To update such an old URI, replace the vertical line "|" with a colon | To update such an old URI, replace the vertical line "|" with a colon | |||
| ":". | ":". | |||
| C.2. UNC Paths | C.2. UNC Paths | |||
| It is common to encounter file URIs that encode entire UNC strings in | It is common to encounter file URIs that encode entire UNC strings in | |||
| the path, with all backslash "\" characters replaced with slashes | the path, with all backslash "\" characters replaced with slashes | |||
| "/". | "/". | |||
| To interpret such URIs, the "auth-path" rule in Section 2 is replaced | To interpret such URIs, the "auth-path" rule in Section 2 is replaced | |||
| with the following: | with the following: | |||
| auth-path = [ file-auth ] path-absolute | auth-path = [ file-auth ] path-absolute | |||
| / unc-authority path-absolute | / unc-authority path-absolute | |||
| unc-authority = 2*3"/" authority | unc-authority = 2*3"/" [ userinfo "@" ] file-host | |||
| [FIXME: "authority" allows '[' and ']' in IPv6 literals, but | file-host = inline-IP / IPv4address / reg-name | |||
| RFC3986 forbids them in the path, so the "unc-authority" rule is | ||||
| not entirely valid.] | ||||
| For example: | inline-IP = "%5B" ( IPv6address / IPvFuture ) "%5D" | |||
| Traditional: | This syntax uses the "userinfo", "IPv4address, "IPv6address", | |||
| file:////hostname/share/object/names | "IPvFuture", and "reg-name` rules from [RFC3986]. | |||
| \_____/\__________________________ / | ||||
| Scheme Transformed UNC string | ||||
| Firefox: | Note that the "file-host" rule is the same as "host" but with | |||
| file://///hostname/share/object/names | percent-encoding applied to "[" and "]" characters. | |||
| \_____/|\__________________________ / | ||||
| Scheme | Transformed UNC string | ||||
| Extra slash | ||||
| This extended syntax is intended to support URIs that take the | This extended syntax is intended to support URIs that take the | |||
| following forms, in addition to those in Appendix A: | following forms, in addition to those in Appendix A: | |||
| Non-local files: | Non-local files: | |||
| o "file:////host.example.com/path/to/file" | o "file:////host.example.com/path/to/file" | |||
| The "traditional" representation of a non-local file, with an | The "traditional" representation of a non-local file, with an | |||
| empty authority and a complete (transformed) UNC string in the | empty authority and a complete (transformed) UNC string in the | |||
| path. | path. | |||
| o "file://///host.example.com/path/to/file" | o "file://///host.example.com/path/to/file" | |||
| As above, with an extra slash between the empty authority and | As above, with an extra slash between the empty authority and | |||
| the transformed UNC string, conformant with the definition from | the transformed UNC string, conformant with the definition from | |||
| [RFC1738]; see: exceptions in Section 3.2. This representation | ||||
| is notably used by the Firefox web browser. | [RFC1738]. This representation is notably used by the Firefox | |||
| web browser. See Bugzilla#107540 [Bug107540]. | ||||
| It also further limits the set of file URIs that can be translated to | It also further limits the set of file URIs that can be translated to | |||
| a local file path to those whose path does not encode a UNC string. | a local file path to those with a path that does not encode a UNC | |||
| string. | ||||
| C.3. Backslash as Separator | C.3. Backslash as Separator | |||
| Historically some implementations have copied entire file paths into | Historically some implementations have copied entire file paths into | |||
| the path components of file URIs. Where DOS or Windows file paths | the path components of file URIs. Where DOS or Windows file paths | |||
| were copied thus, resulting URI strings contained unencoded backslash | were copied thus, resulting URI strings contained unencoded backslash | |||
| "\" characters, which are forbidden by both [RFC1738] and [RFC3986]. | "\" characters, which are forbidden by both [RFC1738] and [RFC3986]. | |||
| It may be possible to translate or update such an invalid file URI by | It may be possible to translate or update such an invalid file URI by | |||
| replacing all backslashes "\" with slashes "/", if it can be | replacing all backslashes "\" with slashes "/", if it can be | |||
| skipping to change at page 17, line 5 ¶ | skipping to change at page 18, line 5 ¶ | |||
| o "netbios-name" from [MS-NBTE], Section 2.2.1. | o "netbios-name" from [MS-NBTE], Section 2.2.1. | |||
| o "fqdn" from [RFC1035] or [RFC1123] | o "fqdn" from [RFC1035] or [RFC1123] | |||
| o "ip-address" from Section 2.1 of [RFC1123], or Section 2.2 of | o "ip-address" from Section 2.1 of [RFC1123], or Section 2.2 of | |||
| [RFC4291]. | [RFC4291]. | |||
| The precise format of "sharename" depends on the protocol; see: SMB | The precise format of "sharename" depends on the protocol; see: SMB | |||
| [MS-SMB], NFS [RFC3530], NCP [NOVELL]. | [MS-SMB], NFS [RFC3530], NCP [NOVELL]. | |||
| Appendix F. Collected Rules | ||||
| Here are the collected syntax rules for all optional appendices, | ||||
| presented for convenience. | ||||
| file-URI = file-scheme ":" file-hier-part | ||||
| file-scheme = "file" | ||||
| file-hier-part = "//" auth-path | ||||
| / local-path | ||||
| auth-path = [ file-auth ] path-absolute | ||||
| / [ file-auth ] file-absolute | ||||
| / unc-authority path-absolute | ||||
| local-path = [ drive-letter ] path-absolute | ||||
| / file-absolute | ||||
| file-auth = [ userinfo "@" ] host | ||||
| unc-authority = 2*3"/" [ userinfo "@" ] file-host | ||||
| file-host = inline-IP / IPv4address / reg-name | ||||
| inline-IP = "%5B" ( IPv6address / IPvFuture ) "%5D" | ||||
| file-absolute = "/" drive-letter path-absolute | ||||
| drive-letter = ALPHA ":" | ||||
| / ALPHA "|" | ||||
| This collected syntax is intended to support file URIs that take the | ||||
| following forms: | ||||
| Local files: | ||||
| o "file:///path/to/file" | ||||
| A traditional file URI for a local file, with an empty | ||||
| authority. | ||||
| o "file:/path/to/file" | ||||
| The minimal representation of a local file, with no authority | ||||
| field and an absolute path that begins with a slash "/". | ||||
| o "file:c:/path/to/file" | ||||
| The minimal representation of a local file in a DOS- or | ||||
| Windows-based environment, with no authority field and an | ||||
| absolute path that begins with a drive letter. | ||||
| o "file:///c|/path/to/file" | ||||
| o "file:/c|/path/to/file" | ||||
| o "file:c|/path/to/file" | ||||
| Regular DOS or Windows file URIs, with vertical line characters | ||||
| in the drive letter construct. | ||||
| Non-local files: | ||||
| o "file://host.example.com/path/to/file" | ||||
| The representation of a non-local file, with an explicit | ||||
| authority. | ||||
| o "file:////host.example.com/path/to/file" | ||||
| The "traditional" representation of a non-local file, with an | ||||
| empty authority and a complete (transformed) UNC string in the | ||||
| path. | ||||
| o "file://///host.example.com/path/to/file" | ||||
| As above, with an extra slash between the empty authority and | ||||
| the transformed UNC string. | ||||
| Author's Address | Author's Address | |||
| Matthew Kerwin | Matthew Kerwin | |||
| QUT | Queensland University of Technology | |||
| Victoria Park Road | ||||
| Kelvin Grove, QLD 4059 | ||||
| Australia | ||||
| Email: matthew.kerwin@qut.edu.au | Email: matthew.kerwin@qut.edu.au | |||
| End of changes. 32 change blocks. | ||||
| 56 lines changed or deleted | 177 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||