diff options
-rw-r--r-- | doc/rfc1866.htm | 4446 | ||||
-rw-r--r-- | doc/rfc3513.htm | 1579 | ||||
-rw-r--r-- | doc/rfc3986.htm | 3539 |
3 files changed, 0 insertions, 9564 deletions
diff --git a/doc/rfc1866.htm b/doc/rfc1866.htm deleted file mode 100644 index 108a958..0000000 --- a/doc/rfc1866.htm +++ /dev/null @@ -1,4446 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html lang="en" xml:lang="en"> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" /> - <meta name="robots" content="index,follow" /> - <meta name="creator" content="rfcmarkup version 1.60" /> - <link rel="icon" href="/images/rfc.png" type="image/png" /> - <link rel="shortcut icon" href="/images/rfc.png" type="image/png" /> - <title>RFC 1866 - Hypertext Markup Language - 2.0</title> - - <style type="text/css"> - body { - margin: 0px 8px; - font-size: 1em; - } - h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { - font-weight: bold; - line-height: 0pt; - display: inline; - white-space: pre; - font-family: monospace; - font-size: 1em; - font-weight: bold; - } - pre { - font-size: 1em; - } - .pre { - white-space: pre; - font-family: monospace; - } - .header{ - font-weight: bold; - } - .invisible { - text-decoration: none; - color: white; - } - @media print { - body { - font-size: 10.5pt; - } - h1, h2, h3, h4, h5, h6 { - font-size: 10.5pt; - } - - a:link, a:visited { - color: inherit; - text-decoration: none; - } - .break { - page-break-before: always; - } - .noprint { - display: none; - } - } - @media screen { - .grey, .grey a:link, .grey a:visited { - color: #777; - } - .docinfo { - background-color: #EEE; - } - .top { - border-top: 2px solid #EEE; - } - .bgwhite { background-color: white; } - .bgred { background-color: #F44; } - .bggrey { background-color: #666; } - .bgbrown { background-color: #840; } - .bgorange { background-color: #FA0; } - .bgyellow { background-color: #EE0; } - .bgmagenta{ background-color: #F4F; } - .bgblue { background-color: #66F; } - .bgcyan { background-color: #4DD; } - .bggreen { background-color: #4F4; } - - .legend { font-size: 90%; } - .cplate { font-size: 70%; border: solid grey 1px; } - } - </style> - - <script type="text/javascript"><!-- - function addHeaderTags() { - var spans = document.getElementsByTagName("span"); - for (var i=0; i < spans.length; i++) { - var elem = spans[i]; - if (elem) { - var level = elem.getAttribute("class"); - if (level == "h1" || level == "h2" || level == "h3" || level == "h4" || level == "h5" || level == "h6") { - elem.innerHTML = "<"+level+">"+elem.innerHTML+"</"+level+">"; - } - } - } - } - var legend_html = "Colour legend:<br /> <table> <tr><td>Unknown:</td> <td><span class='cplate bgwhite'> </span></td></tr> <tr><td>Draft:</td> <td><span class='cplate bgred'> </span></td></tr> <tr><td>Informational:</td> <td><span class='cplate bgorange'> </span></td></tr> <tr><td>Experimental:</td> <td><span class='cplate bgyellow'> </span></td></tr> <tr><td>Best Common Practice:</td><td><span class='cplate bgmagenta'> </span></td></tr> <tr><td>Proposed Standard:</td><td><span class='cplate bgblue'> </span></td></tr> <tr><td>Draft Standard:</td> <td><span class='cplate bgcyan'> </span></td></tr> <tr><td>Standard:</td> <td><span class='cplate bggreen'> </span></td></tr> <tr><td>Historic:</td> <td><span class='cplate bggrey'> </span></td></tr> <tr><td>Obsolete:</td> <td><span class='cplate bgbrown'> </span></td></tr> </table>"; - function showElem(id) { - var elem = document.getElementById(id); - elem.innerHTML = eval(id+"_html"); - elem.style.visibility='visible'; - } - function hideElem(id) { - var elem = document.getElementById(id); - elem.style.visibility='hidden'; - elem.innerHTML = ""; - } - // --> - </script> -</head> -<body onload="addHeaderTags()"> - <div style="height: 8px;"> - <div onmouseover="this.style.cursor='pointer';" - onclick="showElem('legend');" - onmouseout="hideElem('legend')" - style="height: 6px; position: absolute;" - class="pre noprint docinfo bgbrown" - title="Click for colour legend." > </div> - <div id="legend" - class="docinfo noprint pre legend" - style="position:absolute; top: 4px; left: 4ex; visibility:hidden; background-color: white; padding: 4px 9px 5px 7px; border: solid #345 1px; " - onmouseover="showElem('legend');" - onmouseout="hideElem('legend');"> - </div> - </div> -<span class="pre noprint docinfo top">[<a href="../html/" title="Document search and retrieval page">RFCs/IDs</a>] [<a href="/rfc/rfc1866.txt" title="Plaintext version of this document">Plain Text</a>] [From <a href="draft-ietf-html-spec">draft-ietf-html-spec</a>] </span><br /> -<span class="pre noprint docinfo"> </span><br /> -<span class="pre noprint docinfo">Obsoleted by: <a href="./rfc2854">2854</a> HISTORIC</span><br /> -<span class="pre noprint docinfo"> </span><br /> -<pre> -Network Working Group T. Berners-Lee -Request for Comments: 1866 MIT/W3C -Category: Standards Track D. Connolly - November 1995 - - - <span class="h1">Hypertext Markup Language - 2.0</span> - -Status of this Memo - - This document specifies an Internet standards track protocol for the - Internet community, and requests discussion and suggestions for - improvements. Please refer to the current edition of the "Internet - Official Protocol Standards" (STD 1) for the standardization state - and status of this protocol. Distribution of this memo is unlimited. - -Abstract - - The Hypertext Markup Language (HTML) is a simple markup language used - to create hypertext documents that are platform independent. HTML - documents are SGML documents with generic semantics that are - appropriate for representing information from a wide range of - domains. HTML markup can represent hypertext news, mail, - documentation, and hypermedia; menus of options; database query - results; simple structured documents with in-lined graphics; and - hypertext views of existing bodies of information. - - HTML has been in use by the World Wide Web (WWW) global information - initiative since 1990. This specification roughly corresponds to the - capabilities of HTML in common use prior to June 1994. HTML is an - application of ISO Standard 8879:1986 Information Processing Text and - Office Systems; Standard Generalized Markup Language (SGML). - - The "text/html" Internet Media Type (<a href="./rfc1590">RFC 1590</a>) and MIME Content Type - (<a href="./rfc1521">RFC 1521</a>) is defined by this specification. - -Table of Contents - - <a href="#section-1">1</a>. Introduction ........................................... <a href="#page-2">2</a> - <a href="#section-1.1">1.1</a> Scope .................................................. <a href="#page-3">3</a> - <a href="#section-1.2">1.2</a> Conformance ............................................ <a href="#page-3">3</a> - <a href="#section-2">2</a>. Terms .................................................. <a href="#page-6">6</a> - <a href="#section-3">3</a>. HTML as an Application of SGML .........................<a href="#page-10">10</a> - <a href="#section-3.1">3.1</a> SGML Documents .........................................<a href="#page-10">10</a> - <a href="#section-3.2">3.2</a> HTML Lexical Syntax ................................... <a href="#page-12">12</a> - <a href="#section-3.3">3.3</a> HTML Public Text Identifiers .......................... <a href="#page-17">17</a> - <a href="#section-3.4">3.4</a> Example HTML Document ................................. <a href="#page-17">17</a> - <a href="#section-4">4</a>. HTML as an Internet Media Type ........................ <a href="#page-18">18</a> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 1]</span> -<a name="page-2" id="page-2" href="#page-2" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - <a href="#section-4.1">4.1</a> text/html media type .................................. <a href="#page-18">18</a> - <a href="#section-4.2">4.2</a> HTML Document Representation .......................... <a href="#page-19">19</a> - <a href="#section-5">5</a>. Document Structure .................................... <a href="#page-20">20</a> - <a href="#section-5.1">5.1</a> Document Element: HTML ................................ <a href="#page-21">21</a> - <a href="#section-5.2">5.2</a> Head: HEAD ............................................ <a href="#page-21">21</a> - <a href="#section-5.3">5.3</a> Body: BODY ............................................ <a href="#page-24">24</a> - <a href="#section-5.4">5.4</a> Headings: H1 ... H6 ................................... <a href="#page-24">24</a> - <a href="#section-5.5">5.5</a> Block Structuring Elements ............................ <a href="#page-25">25</a> - <a href="#section-5.6">5.6</a> List Elements ......................................... <a href="#page-28">28</a> - <a href="#section-5.7">5.7</a> Phrase Markup ......................................... <a href="#page-30">30</a> - <a href="#section-5.8">5.8</a> Line Break: BR ........................................ <a href="#page-34">34</a> - <a href="#section-5.9">5.9</a> Horizontal Rule: HR ................................... <a href="#page-34">34</a> - <a href="#section-5.10">5.10</a> Image: IMG ............................................ <a href="#page-34">34</a> - <a href="#section-6">6</a>. Characters, Words, and Paragraphs ..................... <a href="#page-35">35</a> - <a href="#section-6.1">6.1</a> The HTML Document Character Set ....................... <a href="#page-36">36</a> - <a href="#section-7">7</a>. Hyperlinks ............................................ <a href="#page-36">36</a> - <a href="#section-7.1">7.1</a> Accessing Resources ................................... <a href="#page-37">37</a> - <a href="#section-7.2">7.2</a> Activation of Hyperlinks .............................. <a href="#page-38">38</a> - <a href="#section-7.3">7.3</a> Simultaneous Presentation of Image Resources .......... <a href="#page-38">38</a> - <a href="#section-7.4">7.4</a> Fragment Identifiers .................................. <a href="#page-38">38</a> - <a href="#section-7.5">7.5</a> Queries and Indexes ................................... <a href="#page-39">39</a> - <a href="#section-7.6">7.6</a> Image Maps ............................................ <a href="#page-39">39</a> - <a href="#section-8">8</a>. Forms ................................................. <a href="#page-40">40</a> - <a href="#section-8.1">8.1</a> Form Elements ......................................... <a href="#page-40">40</a> - <a href="#section-8.2">8.2</a> Form Submission ....................................... <a href="#page-45">45</a> - <a href="#section-9">9</a>. HTML Public Text ...................................... <a href="#page-49">49</a> - <a href="#section-9.1">9.1</a> HTML DTD .............................................. <a href="#page-49">49</a> - <a href="#section-9.2">9.2</a> Strict HTML DTD ....................................... <a href="#page-61">61</a> - <a href="#section-9.3">9.3</a> Level 1 HTML DTD ...................................... <a href="#page-62">62</a> - <a href="#section-9.4">9.4</a> Strict Level 1 HTML DTD ............................... <a href="#page-63">63</a> - <a href="#section-9.5">9.5</a> SGML Declaration for HTML ............................. <a href="#page-64">64</a> - <a href="#section-9.6">9.6</a> Sample SGML Open Entity Catalog for HTML .............. <a href="#page-65">65</a> - <a href="#section-9.7">9.7</a> Character Entity Sets ................................. <a href="#page-66">66</a> - <a href="#section-10">10</a>. Security Considerations ............................... <a href="#page-69">69</a> - <a href="#section-11">11</a>. References ............................................ <a href="#page-69">69</a> - <a href="#section-12">12</a>. Acknowledgments ....................................... <a href="#page-71">71</a> - <a href="#section-12.1">12.1</a> Authors' Addresses .................................... <a href="#page-71">71</a> - <a href="#section-13">13</a>. The HTML Coded Character Set .......................... <a href="#page-72">72</a> - <a href="#section-14">14</a>. Proposed Entities ..................................... <a href="#page-75">75</a> - -<span class="h2"><a name="section-1">1</a>. Introduction</span> - - The HyperText Markup Language (HTML) is a simple data format used to - create hypertext documents that are portable from one platform to - another. HTML documents are SGML documents with generic semantics - that are appropriate for representing information from a wide range - of domains. - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 2]</span> -<a name="page-3" id="page-3" href="#page-3" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - As HTML is an application of SGML, this specification assumes a - working knowledge of [<a href="#ref-SGML">SGML</a>]. - -<span class="h3"><a name="section-1.1">1.1</a>. Scope</span> - - HTML has been in use by the World-Wide Web (WWW) global information - initiative since 1990. Previously, informal documentation on HTML has - been available from a number of sources on the Internet. This - specification brings together, clarifies, and formalizes a set of - features that roughly corresponds to the capabilities of HTML in - common use prior to June 1994. A number of new features to HTML are - being proposed and experimented in the Internet community. - - This document thus defines a HTML 2.0 (to distinguish it from the - previous informal specifications). Future (generally upwardly - compatible) versions of HTML with new features will be released with - higher version numbers. - - HTML is an application of ISO Standard 8879:1986, "Information - Processing Text and Office Systems; Standard Generalized Markup - Language" (SGML). The HTML Document Type Definition (DTD) is a formal - definition of the HTML syntax in terms of SGML. - - This specification also defines HTML as an Internet Media - Type[IMEDIA] and MIME Content Type[MIME] called `text/html'. As such, - it defines the semantics of the HTML syntax and how that syntax - should be interpreted by user agents. - -<span class="h3"><a name="section-1.2">1.2</a>. Conformance</span> - - This specification governs the syntax of HTML documents and aspects - of the behavior of HTML user agents. - -<span class="h4"><a name="section-1.2.1">1.2.1</a>. Documents</span> - - A document is a conforming HTML document if: - - * It is a conforming SGML document, and it conforms to the - HTML DTD (see 9.1, "HTML DTD"). - - NOTE - There are a number of syntactic idioms that - are not supported or are supported inconsistently in - some historical user agent implementations. These - idioms are identified in notes like this throughout - this specification. - - * It conforms to the application conventions in this - specification. For example, the value of the HREF attribute - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 3]</span> -<a name="page-4" id="page-4" href="#page-4" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - of the <A> element must conform to the URI syntax. - - * Its document character set includes [<a href="#ref-ISO-8859-1">ISO-8859-1</a>] and - agrees with [<a href="#ref-ISO-10646">ISO-10646</a>]; that is, each code position listed - in 13, "The HTML Coded Character Set" is included, and each - code position in the document character set is mapped to the - same character as [<a href="#ref-ISO-10646">ISO-10646</a>] designates for that code - position. - - NOTE - The document character set is somewhat - independent of the character encoding scheme used to - represent a document. For example, the `ISO-2022-JP' - character encoding scheme can be used for HTML - documents, since its repertoire is a subset of the - [<a href="#ref-ISO-10646">ISO-10646</a>] repertoire. The critical distinction is - that numeric character references agree with - [<a href="#ref-ISO-10646">ISO-10646</a>] regardless of how the document is - encoded. - -<span class="h4"><a name="section-1.2.2">1.2.2</a>. Feature Test Entities</span> - - The HTML DTD defines a standard HTML document type and several - variations, by way of feature test entities. Feature test entities - are declarations in the HTML DTD that control the inclusion or - exclusion of portions of the DTD. - - HTML.Recommended - Certain features of the language are necessary for - compatibility with widespread usage, but they may - compromise the structural integrity of a document. This - feature test entity selects a more prescriptive document - type definition that eliminates those features. It is - set to `IGNORE' by default. - - For example, in order to preserve the structure of a - document, an editing user agent may translate HTML - documents to the recommended subset, or it may require - that the documents be in the recommended subset for - import. - - HTML.Deprecated - Certain features of the language are necessary for - compatibility with earlier versions of the - specification, but they tend to be used and implemented - inconsistently, and their use is deprecated. This - feature test entity enables a document type definition - that allows these features. It is set to `INCLUDE' by - default. - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 4]</span> -<a name="page-5" id="page-5" href="#page-5" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - Documents generated by translation software or editing - software should not contain deprecated idioms. - -<span class="h4"><a name="section-1.2.3">1.2.3</a>. User Agents</span> - - An HTML user agent conforms to this specification if: - - * It parses the characters of an HTML document into data - characters and markup according to [<a href="#ref-SGML">SGML</a>]. - - NOTE - In the interest of robustness and - extensibility, there are a number of widely deployed - conventions for handling non-conforming documents. - See 4.2.1, "Undeclared Markup Error Handling" for - details. - - * It supports the `ISO-8859-1' character encoding scheme and - processes each character in the ISO Latin Alphabet No. 1 as - specified in 6.1, "The HTML Document Character Set". - - NOTE - To support non-western writing systems, HTML - user agents are encouraged to support - `ISO-10646-UCS-2' or similar character encoding - schemes and as much of the character repertoire of - [<a href="#ref-ISO-10646">ISO-10646</a>] as is practical. - - * It behaves identically for documents whose parsed token - sequences are identical. - - For example, comments and the whitespace in tags disappear - during tokenization, and hence they do not influence the - behavior of conforming user agents. - - * It allows the user to traverse (or at least attempt to - traverse, resources permitting) all hyperlinks from <A> - elements in an HTML document. - - An HTML user agent is a level 2 user agent if, additionally: - - * It allows the user to express all form field values - specified in an HTML document and to (attempt to) submit the - values as requests to information services. - - - - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 5]</span> -<a name="page-6" id="page-6" href="#page-6" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h2"><a name="section-2">2</a>. Terms</span> - - absolute URI - a URI in absolute form; for example, as per [<a href="#ref-URL" title='"Uniform Resource Locators (URL)"'>URL</a>] - - anchor - one of two ends of a hyperlink; typically, a phrase - marked as an <A> element. - - base URI - an absolute URI used in combination with a relative URI - to determine another absolute URI. - - character - An atom of information, for example a letter or a digit. - Graphic characters have associated glyphs, whereas - control characters have associated processing semantics. - - character encoding - scheme - A function whose domain is the set of sequences of - octets, and whose range is the set of sequences of - characters from a character repertoire; that is, a - sequence of octets and a character encoding scheme - determines a sequence of characters. - - character repertoire - A finite set of characters; e.g. the range of a coded - character set. - - code position - An integer. A coded character set and a code position - from its domain determine a character. - - coded character set - A function whose domain is a subset of the integers and - whose range is a character repertoire. That is, for some - set of integers (usually of the form {0, 1, 2, ..., N} - ), a coded character set and an integer in that set - determine a character. Conversely, a character and a - coded character set determine the character's code - position (or, in rare cases, a few code positions). - - conforming HTML user - agent - A user agent that conforms to this specification in its - processing of the Internet Media Type `text/html'. - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 6]</span> -<a name="page-7" id="page-7" href="#page-7" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - data character - Characters other than markup, which make up the content - of elements. - - document character set - a coded character set whose range includes all - characters used in a document. Every SGML document has - exactly one document character set. Numeric character - references are resolved via the document character set. - - DTD - document type definition. Rules that apply SGML to the - markup of documents of a particular type, including a - set of element and entity declarations. [<a href="#ref-SGML">SGML</a>] - - element - A component of the hierarchical structure defined by a - document type definition; it is identified in a document - instance by descriptive markup, usually a start-tag and - end-tag. [<a href="#ref-SGML">SGML</a>] - - end-tag - Descriptive markup that identifies the end of an - element. [<a href="#ref-SGML">SGML</a>] - - entity - data with an associated notation or interpretation; for - example, a sequence of octets associated with an - Internet Media Type. [<a href="#ref-SGML">SGML</a>] - - fragment identifier - the portion of an HREF attribute value following the `#' - character which modifies the presentation of the - destination of a hyperlink. - - form data set - a sequence of name/value pairs; the names are given by - an HTML document and the values are given by a user. - - HTML document - An SGML document conforming to this document type - definition. - - hyperlink - a relationship between two anchors, called the head and - the tail. The link goes from the tail to the head. The - head and tail are also known as destination and source, - respectively. - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 7]</span> -<a name="page-8" id="page-8" href="#page-8" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - markup - Syntactically delimited characters added to the data of - a document to represent its structure. There are four - different kinds of markup: descriptive markup (tags), - references, markup declarations, and processing - instructions. [<a href="#ref-SGML">SGML</a>] - - may - A document or user interface is conforming whether this - statement applies or not. - - media type - an Internet Media Type, as per [<a href="#ref-IMEDIA" title='"Media Type Registration Procedure"'>IMEDIA</a>]. - - message entity - a head and body. The head is a collection of name/value - fields, and the body is a sequence of octets. The head - defines the content type and content transfer encoding - of the body. [<a href="#ref-MIME" title='"MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies"'>MIME</a>] - - minimally conforming - HTML user agent - A user agent that conforms to this specification except - for form processing. It may only process level 1 HTML - documents. - - must - Documents or user agents in conflict with this statement - are not conforming. - - numeric character - reference - markup that refers to a character by its code position - in the document character set. - - SGML document - A sequence of characters organized physically as a set - of entities and logically into a hierarchy of elements. - An SGML document consists of data characters and markup; - the markup describes the structure of the information - and an instance of that structure. [<a href="#ref-SGML">SGML</a>] - - shall - If a document or user agent conflicts with this - statement, it does not conform to this specification. - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 8]</span> -<a name="page-9" id="page-9" href="#page-9" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - should - If a document or user agent conflicts with this - statement, undesirable results may occur in practice - even though it conforms to this specification. - - start-tag - Descriptive markup that identifies the start of an - element and specifies its generic identifier and - attributes. [<a href="#ref-SGML">SGML</a>] - - syntax-reference - character set - A coded character set whose range includes all - characters used for markup; e.g. name characters and - delimiter characters. - - tag - Markup that delimits an element. A tag includes a name - which refers to an element declaration in the DTD, and - may include attributes. [<a href="#ref-SGML">SGML</a>] - - text entity - A finite sequence of characters. A text entity typically - takes the form of a sequence of octets with some - associated character encoding scheme, transmitted over - the network or stored in a file. [<a href="#ref-SGML">SGML</a>] - - typical - Typical processing is described for many elements. This - is not a mandatory part of the specification but is - given as guidance for designers and to help explain the - uses for which the elements were intended. - - URI - A Uniform Resource Identifier is a formatted string that - serves as an identifier for a resource, typically on the - Internet. URIs are used in HTML to identify the anchors - of hyperlinks. URIs in common practice include Uniform - Resource Locators (URLs)[<a href="#ref-URL" title='"Uniform Resource Locators (URL)"'>URL</a>] and Relative URLs - [<a href="#ref-RELURL" title='"Relative Uniform Resource Locators"'>RELURL</a>]. - - user agent - A component of a distributed system that presents an - interface and processes requests on behalf of a user; - for example, a www browser or a mail user agent. - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 9]</span> -<a name="page-10" id="page-10" href="#page-10" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - WWW - The World-Wide Web is a hypertext-based, distributed - information system created by researchers at CERN in - Switzerland. <URL:http://www.w3.org/> - -<span class="h2"><a name="section-3">3</a>. HTML as an Application of SGML</span> - - HTML is an application of ISO 8879:1986 -- Standard Generalized - Markup Language (SGML). SGML is a system for defining structured - document types and markup languages to represent instances of those - document types[SGML]. The public text -- DTD and SGML declaration -- - of the HTML document type definition are provided in 9, "HTML Public - Text". - - The term "HTML" refers to both the document type defined here and the - markup language for representing instances of this document type. - -<span class="h3"><a name="section-3.1">3.1</a>. SGML Documents</span> - - An HTML document is an SGML document; that is, a sequence of - characters organized physically into a set of entities, and logically - as a hierarchy of elements. - - In the SGML specification, the first production of the SGML syntax - grammar separates an SGML document into three parts: an SGML - declaration, a prologue, and an instance. For the purposes of this - specification, the prologue is a DTD. This DTD describes another - grammar: the start symbol is given in the doctype declaration, the - terminals are data characters and tags, and the productions are - determined by the element declarations. The instance must conform to - the DTD, that is, it must be in the language defined by this grammar. - - The SGML declaration determines the lexicon of the grammar. It - specifies the document character set, which determines a character - repertoire that contains all characters that occur in all text - entities in the document, and the code positions associated with - those characters. - - The SGML declaration also specifies the syntax-reference character - set of the document, and a few other parameters that bind the - abstract syntax of SGML to a concrete syntax. This concrete syntax - determines how the sequence of characters of the document is mapped - to a sequence of terminals in the grammar of the prologue. - - - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 10]</span> -<a name="page-11" id="page-11" href="#page-11" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - For example, consider the following document: - - <!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"> - <title>Parsing Example</title> - <p>Some text. <em>&#42;wow&#42;</em></p> - - An HTML user agent should use the SGML declaration that is given in - 9.5, "SGML Declaration for HTML". According to its document character - set, `&#42;' refers to an asterisk character, `*'. - - The instance above is regarded as the following sequence of - terminals: - - 1. start-tag: TITLE - - 2. data characters: "Parsing Example" - - 3. end-tag: TITLE - - 4. start-tag: P - - 5. data characters "Some text." - - 6. start-tag: EM - - 7. data characters: "*wow*" - - 8. end-tag: EM - - 9. end-tag: P - - - - - - - - - - - - - - - - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 11]</span> -<a name="page-12" id="page-12" href="#page-12" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - The start symbol of the DTD grammar is HTML, and the productions are - given in the public text identified by `-//IETF//DTD HTML 2.0//EN' - (9.1, "HTML DTD"). The terminals above parse as: - - HTML - | - \-HEAD - | | - | \-TITLE - | | - | \-<TITLE> - | | - | \-"Parsing Example" - | | - | \-</TITLE> - | - \-BODY - | - \-P - | - \-<P> - | - \-"Some text. " - | - \-EM - | | - | \-<EM> - | | - | \-"*wow*" - | | - | \-</EM> - | - \-</P> - - Some of the elements are delimited explicitly by tags, while the - boundaries of others are inferred. The <HTML> element contains a - <HEAD> element and a <BODY> element. The <HEAD> contains <TITLE>, - which is explicitly delimited by start- and end-tags. - -<span class="h3"><a name="section-3.2">3.2</a>. HTML Lexical Syntax</span> - - SGML specifies an abstract syntax and a reference concrete syntax. - Aside from certain quantities and capacities (e.g. the limit on the - length of a name), all HTML documents use the reference concrete - syntax. In particular, all markup characters are in the repertoire of - [<a href="#ref-ISO-646" title='"./rfc1866"'>ISO-646</a>]. Data characters are drawn from the document character set - (see 6, "Characters, Words, and Paragraphs"). - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 12]</span> -<a name="page-13" id="page-13" href="#page-13" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - A complete discussion of SGML parsing, e.g. the mapping of a sequence - of characters to a sequence of tags and data, is left to the SGML - standard[SGML]. This section is only a summary. - -<span class="h4"><a name="section-3.2.1">3.2.1</a>. Data Characters</span> - - Any sequence of characters that do not constitute markup (see 9.6 - "Delimiter Recognition" of [<a href="#ref-SGML">SGML</a>]) are mapped directly to strings of - data characters. Some markup also maps to data character strings. - Numeric character references map to single-character strings, via the - document character set. Each reference to one of the general entities - defined in the HTML DTD maps to a single-character string. - - For example, - - abc&lt;def => "abc","<","def" - abc&#60;def => "abc","<","def" - - The terminating semicolon on entity or numeric character references - is only necessary when the character following the reference would - otherwise be recognized as part of the name (see 9.4.5 "Reference - End" in [<a href="#ref-SGML">SGML</a>]). - - abc &lt def => "abc ","<"," def" - abc &#60 def => "abc ","<"," def" - - An ampersand is only recognized as markup when it is followed by a - letter or a `#' and a digit: - - abc & lt def => "abc & lt def" - abc &# 60 def => "abc &# 60 def" - - A useful technique for translating plain text to HTML is to replace - each '<', '&', and '>' by an entity reference or numeric character - reference as follows: - - ENTITY NUMERIC - CHARACTER REFERENCE CHAR REF CHARACTER DESCRIPTION - --------- ---------- ----------- --------------------- - & &amp; &#38; Ampersand - < &lt; &#60; Less than - > &gt; &#62; Greater than - - NOTE - There are SGML mechanisms, CDATA and RCDATA - declared content, that allow most `<', `>', and `&' - characters to be entered without the use of entity - references. Because these mechanisms tend to be used and - implemented inconsistently, and because they conflict - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 13]</span> -<a name="page-14" id="page-14" href="#page-14" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - with techniques for reducing HTML to 7 bit ASCII for - transport, they are deprecated in this version of HTML. - See 5.5.2.1, "Example and Listing: XMP, LISTING". - -<span class="h4"><a name="section-3.2.2">3.2.2</a>. Tags</span> - - Tags delimit elements such as headings, paragraphs, lists, character - highlighting, and links. Most HTML elements are identified in a - document as a start-tag, which gives the element name and attributes, - followed by the content, followed by the end tag. Start-tags are - delimited by `<' and `>'; end tags are delimited by `</' and `>'. An - example is: - - <H1>This is a Heading</H1> - - Some elements only have a start-tag without an end-tag. For example, - to create a line break, use the `<BR>' tag. Additionally, the end - tags of some other elements, such as Paragraph (`</P>'), List Item - (`</LI>'), Definition Term (`</DT>'), and Definition Description - (`</DD>') elements, may be omitted. - - The content of an element is a sequence of data character strings and - nested elements. Some elements, such as anchors, cannot be nested. - Anchors and character highlighting may be put inside other - constructs. See the HTML DTD, 9.1, "HTML DTD" for full details. - - NOTE - The SGML declaration for HTML specifies SHORTTAG YES, which - means that there are other valid syntaxes for tags, such as NET - tags, `<EM/.../'; empty start tags, `<>'; and empty end-tags, - `</>'. Until support for these idioms is widely deployed, their - use is strongly discouraged. - -<span class="h4"><a name="section-3.2.3">3.2.3</a>. Names</span> - - A name consists of a letter followed by letters, digits, periods, or - hyphens. The length of a name is limited to 72 characters by the - `NAMELEN' parameter in the SGML declaration for HTML, 9.5, "SGML - Declaration for HTML". Element and attribute names are not case - sensitive, but entity names are. For example, `<BLOCKQUOTE>', - `<BlockQuote>', and `<blockquote>' are equivalent, whereas `&amp;' is - different from `&AMP;'. - - In a start-tag, the element name must immediately follow the tag open - delimiter `<'. - - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 14]</span> -<a name="page-15" id="page-15" href="#page-15" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h4"><a name="section-3.2.4">3.2.4</a>. Attributes</span> - - In a start-tag, white space and attributes are allowed between the - element name and the closing delimiter. An attribute specification - typically consists of an attribute name, an equal sign, and a value, - though some attribute specifications may be just a name token. White - space is allowed around the equal sign. - - The value of the attribute may be either: - - * A string literal, delimited by single quotes or double - quotes and not containing any occurrences of the delimiting - character. - - NOTE - Some historical implementations consider any - occurrence of the `>' character to signal the end of - a tag. For compatibility with such implementations, - when `>' appears in an attribute value, it should be - represented with a numeric character reference. For - example, `<IMG SRC="eq1.jpg" alt="a>b">' should be - written `<IMG SRC="eq1.jpg" alt="a&#62;b">' or `<IMG - SRC="eq1.jpg" alt="a&gt;b">'. - - * A name token (a sequence of letters, digits, periods, or - hyphens). Name tokens are not case sensitive. - - NOTE - Some historical implementations allow any - character except space or `>' in a name token. - - In this example, <img> is the element name, src is the attribute - name, and `http://host/dir/file.gif' is the attribute value: - - <img src='http://host/dir/file.gif'> - - A useful technique for computing an attribute value literal for a - given string is to replace each quote and white space character by an - entity reference or numeric character reference as follows: - - ENTITY NUMERIC - CHARACTER REFERENCE CHAR REF CHARACTER DESCRIPTION - --------- ---------- ----------- --------------------- - HT &#9; Tab - LF &#10; Line Feed - CR &#13; Carriage Return - SP &#32; Space - " &quot; &#34; Quotation mark - & &amp; &#38; Ampersand - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 15]</span> -<a name="page-16" id="page-16" href="#page-16" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - For example: - - <IMG SRC="image.jpg" alt="First &quot;real&quot; example"> - - The `NAMELEN' parameter in the SGML declaration (9.5, "SGML - Declaration for HTML") limits the length of an attribute value to - 1024 characters. - - Attributes such as ISMAP and COMPACT may be written using a minimized - syntax (see 7.9.1.2 "Omitted Attribute Name" in [<a href="#ref-SGML">SGML</a>]). The markup: - - <UL COMPACT="compact"> - - can be written using a minimized syntax: - - <UL COMPACT> - - NOTE - Some historical implementations only understand the minimized - syntax. - -<span class="h4"><a name="section-3.2.5">3.2.5</a>. Comments</span> - - To include comments in an HTML document, use a comment declaration. A - comment declaration consists of `<!' followed by zero or more - comments followed by `>'. Each comment starts with `--' and includes - all text up to and including the next occurrence of `--'. In a - comment declaration, white space is allowed after each comment, but - not before the first comment. The entire comment declaration is - ignored. - - NOTE - Some historical HTML implementations incorrectly consider - any `>' character to be the termination of a comment. - - For example: - - <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> - <HEAD> - <TITLE>HTML Comment Example</TITLE> - <!-- Id: html-sgml.sgm,v 1.5 1995/05/26 21:29:50 connolly Exp --> - <!-- another -- -- comment --> - <!> - </HEAD> - <BODY> - <p> <!- not a comment, just regular old data characters -> - - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 16]</span> -<a name="page-17" id="page-17" href="#page-17" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h3"><a name="section-3.3">3.3</a>. HTML Public Text Identifiers</span> - - To identify information as an HTML document conforming to this - specification, each document must start with one of the following - document type declarations. - - <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> - - This document type declaration refers to the HTML DTD in 9.1, "HTML - DTD". - - NOTE - If the body of a `text/html' message entity does not begin - with a document type declaration, an HTML user agent should infer - the above document type declaration. - - <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Level 2//EN"> - - This document type declaration also refers to the HTML DTD which - appears in 9.1, "HTML DTD". - - <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Level 1//EN"> - - This document type declaration refers to the level 1 HTML DTD in 9.3, - "Level 1 HTML DTD". Form elements must not occur in level 1 - documents. - - <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict//EN"> - <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 1//EN"> - - These two document type declarations refer to the HTML DTD in 9.2, - "Strict HTML DTD" and 9.4, "Strict Level 1 HTML DTD". They refer to - the more structurally rigid definition of HTML. - - HTML user agents may support other document types. In particular, - they may support other formal public identifiers, or other document - types altogether. They may support an internal declaration subset - with supplemental entity, element, and other markup declarations. - -<span class="h3"><a name="section-3.4">3.4</a>. Example HTML Document</span> - - <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> - <HTML> - <!-- Here's a good place to put a comment. --> - <HEAD> - <TITLE>Structural Example</TITLE> - </HEAD><BODY> - <H1>First Header</H1> - <P>This is a paragraph in the example HTML file. Keep in mind - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 17]</span> -<a name="page-18" id="page-18" href="#page-18" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - that the title does not appear in the document text, but that - the header (defined by H1) does.</P> - <OL> - <LI>First item in an ordered list. - <LI>Second item in an ordered list. - <UL COMPACT> - <LI> Note that lists can be nested; - <LI> Whitespace may be used to assist in reading the - HTML source. - </UL> - <LI>Third item in an ordered list. - </OL> - <P>This is an additional paragraph. Technically, end tags are - not required for paragraphs, although they are allowed. You can - include character highlighting in a paragraph. <EM>This sentence - of the paragraph is emphasized.</EM> Note that the &lt;/P&gt; - end tag has been omitted. - <P> - <IMG SRC ="triangle.xbm" alt="Warning: "> - Be sure to read these <b>bold instructions</b>. - </BODY></HTML> - -<span class="h2"><a name="section-4">4</a>. HTML as an Internet Media Type</span> - - An HTML user agent allows users to interact with resources which have - HTML representations. At a minimum, it must allow users to examine - and navigate the content of HTML level 1 documents. HTML user agents - should be able to preserve all formatting distinctions represented in - an HTML document, and be able to simultaneously present resources - referred to by IMG elements (they may ignore some formatting - distinctions or IMG resources at the request of the user). Level 2 - HTML user agents should support form entry and submission. - -<span class="h3"><a name="section-4.1">4.1</a>. text/html media type</span> - - This specification defines the Internet Media Type [<a href="#ref-IMEDIA" title='"Media Type Registration Procedure"'>IMEDIA</a>] (formerly - referred to as the Content Type [<a href="#ref-MIME" title='"MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies"'>MIME</a>]) called `text/html'. The - following is to be registered with [<a href="#ref-IANA" title='"Assigned Numbers"'>IANA</a>]. - - Media Type name - text - - Media subtype name - html - - Required parameters - none - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 18]</span> -<a name="page-19" id="page-19" href="#page-19" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - Optional parameters - level, charset - - Encoding considerations - any encoding is allowed - - Security considerations - see 10, "Security Considerations" - - The optional parameters are defined as follows: - - Level - The level parameter specifies the feature set used in - the document. The level is an integer number, implying - that any features of same or lower level may be present - in the document. Level 1 is all features defined in this - specification except those that require the <FORM> - element. Level 2 includes form processing. Level 2 is - the default. - - Charset - The charset parameter (as defined in <a href="./rfc1521#section-7.1.1">section 7.1.1 of - RFC 1521</a>[<a href="#ref-MIME" title='"MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies"'>MIME</a>]) may be given to specify the character - encoding scheme used to represent the HTML document as a - sequence of octets. The default value is outside the - scope of this specification; but for example, the - default is `US-ASCII' in the context of MIME mail, and - `ISO-8859-1' in the context of HTTP [<a href="#ref-HTTP" title='"Hypertext Transfer Protocol - HTTP/1.0"'>HTTP</a>]. - -<span class="h3"><a name="section-4.2">4.2</a>. HTML Document Representation</span> - - A message entity with a content type of `text/html' represents an - HTML document, consisting of a single text entity. The `charset' - parameter (whether implicit or explicit) identifies a character - encoding scheme. The text entity consists of the characters - determined by this character encoding scheme and the octets of the - body of the message entity. - -<span class="h4"><a name="section-4.2.1">4.2.1</a>. Undeclared Markup Error Handling</span> - - To facilitate experimentation and interoperability between - implementations of various versions of HTML, the installed base of - HTML user agents supports a superset of the HTML 2.0 language by - reducing it to HTML 2.0: markup in the form of a start-tag or end- - tag, whose generic identifier is not declared is mapped to nothing - during tokenization. Undeclared attributes are treated similarly. The - entire attribute specification of an unknown attribute (i.e., the - unknown attribute and its value, if any) should be ignored. On the - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 19]</span> -<a name="page-20" id="page-20" href="#page-20" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - other hand, references to undeclared entities should be treated as - data characters. - - For example: - - <div class=chapter><h1>foo</h1><p>...</div> - => <H1>,"foo",</H1>,<P>,"..." - xxx <P ID=z23> yyy - => "xxx ",<P>," yyy - Let &alpha; &amp; &beta; be finite sets. - => "Let &alpha; & &beta; be finite sets." - - Support for notifying the user of such errors is encouraged. - - Information providers are warned that this convention is not binding: - unspecified behavior may result, as such markup does not conform to - this specification. - -<span class="h4"><a name="section-4.2.2">4.2.2</a>. Conventional Representation of Newlines</span> - - SGML specifies that a text entity is a sequence of records, each - beginning with a record start character and ending with a record end - character (code positions 10 and 13 respectively) (<a href="#section-7.6.1">section 7.6.1</a>, - "Record Boundaries" in [<a href="#ref-SGML">SGML</a>]). - - [<a name="ref-MIME" id="ref-MIME">MIME</a>] specifies that a body of type `text/*' is a sequence of lines, - each terminated by CRLF, that is, octets 13, 10. - - In practice, HTML documents are frequently represented and - transmitted using an end of line convention that depends on the - conventions of the source of the document; frequently, that - representation consists of CR only, LF only, or a CR LF sequence. - Hence the decoding of the octets will often result in a text entity - with some missing record start and record end characters. - - Since there is no ambiguity, HTML user agents are encouraged to infer - the missing record start and end characters. - - An HTML user agent should treat end of line in any of its variations - as a word space in all contexts except preformatted text. Within - preformatted text, an HTML user agent should treat any of the three - common representations of end-of-line as starting a new line. - -<span class="h2"><a name="section-5">5</a>. Document Structure</span> - - An HTML document is a tree of elements, including a head and body, - headings, paragraphs, lists, etc. Form elements are discussed in 8, - "Forms". - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 20]</span> -<a name="page-21" id="page-21" href="#page-21" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h3"><a name="section-5.1">5.1</a>. Document Element: HTML</span> - - The HTML document element consists of a head and a body, much like a - memo or a mail message. The head contains the title and optional - elements. The body is a text flow consisting of paragraphs, lists, - and other elements. - -<span class="h3"><a name="section-5.2">5.2</a>. Head: HEAD</span> - - The head of an HTML document is an unordered collection of - information about the document. For example: - - <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> - <HEAD> - <TITLE>Introduction to HTML</TITLE> - </HEAD> - ... - -<span class="h4"><a name="section-5.2.1">5.2.1</a>. Title: TITLE</span> - - Every HTML document must contain a <TITLE> element. - - The title should identify the contents of the document in a global - context. A short title, such as "Introduction" may be meaningless out - of context. A title such as "Introduction to HTML Elements" is more - appropriate. - - NOTE - The length of a title is not limited; however, long titles - may be truncated in some applications. To minimize this - possibility, titles should be fewer than 64 characters. - - A user agent may display the title of a document in a history list or - as a label for the window displaying the document. This differs from - headings (5.4, "Headings: H1 ... H6"), which are typically displayed - within the body text flow. - -<span class="h4"><a name="section-5.2.2">5.2.2</a>. Base Address: BASE</span> - - The optional <BASE> element provides a base address for interpreting - relative URLs when the document is read out of context (see 7, - "Hyperlinks"). The value of the HREF attribute must be an absolute - URI. - -<span class="h4"><a name="section-5.2.3">5.2.3</a>. Keyword Index: ISINDEX</span> - - The <ISINDEX> element indicates that the user agent should allow the - user to search an index by giving keywords. See 7.5, "Queries and - Indexes" for details. - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 21]</span> -<a name="page-22" id="page-22" href="#page-22" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h4"><a name="section-5.2.4">5.2.4</a>. Link: LINK</span> - - The <LINK> element represents a hyperlink (see 7, "Hyperlinks"). Any - number of LINK elements may occur in the <HEAD> element of an HTML - document. It has the same attributes as the <A> element (see 5.7.3, - "Anchor: A"). - - The <LINK> element is typically used to indicate authorship, related - indexes and glossaries, older or more recent versions, document - hierarchy, associated resources such as style sheets, etc. - -<span class="h4"><a name="section-5.2.5">5.2.5</a>. Associated Meta-information: META</span> - - The <META> element is an extensible container for use in identifying - specialized document meta-information. Meta-information has two main - functions: - - * to provide a means to discover that the data set exists - and how it might be obtained or accessed; and - - * to document the content, quality, and features of a data - set, indicating its fitness for use. - - Each <META> element specifies a name/value pair. If multiple META - elements are provided with the same name, their combined contents-- - concatenated as a comma-separated list--is the value associated with - that name. - - NOTE - The <META> element should not be used where a - specific element, such as <TITLE>, would be more - appropriate. Rather than a <META> element with a URI as - the value of the CONTENT attribute, use a <LINK> - element. - - HTTP servers may read the content of the document <HEAD> to generate - header fields corresponding to any elements defining a value for the - attribute HTTP-EQUIV. - - NOTE - The method by which the server extracts document - meta-information is unspecified and not mandatory. The - <META> element only provides an extensible mechanism for - identifying and embedding document meta-information -- - how it may be used is up to the individual server - implementation and the HTML user agent. - - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 22]</span> -<a name="page-23" id="page-23" href="#page-23" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - Attributes of the META element: - - HTTP-EQUIV - binds the element to an HTTP header field. An HTTP - server may use this information to process the document. - In particular, it may include a header field in the - responses to requests for this document: the header name - is taken from the HTTP-EQUIV attribute value, and the - header value is taken from the value of the CONTENT - attribute. HTTP header names are not case sensitive. - - NAME - specifies the name of the name/value pair. If not - present, HTTP-EQUIV gives the name. - - CONTENT - specifies the value of the name/value pair. - - Examples - - If the document contains: - - <META HTTP-EQUIV="Expires" - CONTENT="Tue, 04 Dec 1993 21:29:02 GMT"> - <meta http-equiv="Keywords" CONTENT="Fred"> - <META HTTP-EQUIV="Reply-to" - content="fielding@ics.uci.edu (Roy Fielding)"> - <Meta Http-equiv="Keywords" CONTENT="Barney"> - - then the server may include the following header fields: - - Expires: Tue, 04 Dec 1993 21:29:02 GMT - Keywords: Fred, Barney - Reply-to: fielding@ics.uci.edu (Roy Fielding) - - as part of the HTTP response to a `GET' or `HEAD' request for - that document. - - An HTTP server must not use the <META> element to form an HTTP - response header unless the HTTP-EQUIV attribute is present. - - An HTTP server may disregard any <META> elements that specify - information controlled by the HTTP server, for example `Server', - - `Date', and `Last-modified'. - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 23]</span> -<a name="page-24" id="page-24" href="#page-24" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h4"><a name="section-5.2.6">5.2.6</a>. Next Id: NEXTID</span> - - The <NEXTID> element is included for historical reasons only. HTML - documents should not contain <NEXTID> elements. - - The <NEXTID> element gives a hint for the name to use for a new <A> - element when editing an HTML document. It should be distinct from all - NAME attribute values on <A> elements. For example: - - <NEXTID N=Z27> - -<span class="h3"><a name="section-5.3">5.3</a>. Body: BODY</span> - - The <BODY> element contains the text flow of the document, including - headings, paragraphs, lists, etc. - - For example: - - <BODY> - <h1>Important Stuff</h1> - <p>Explanation about important stuff... - </BODY> - -<a href="#section-5.4">5.4</a>. Headings: H1 ... H6 - - The six heading elements, <H1> through <H6>, denote section headings. - Although the order and occurrence of headings is not constrained by - the HTML DTD, documents should not skip levels (for example, from H1 - to H3), as converting such documents to other representations is - often problematic. - - Example of use: - - <H1>This is a heading</H1> - Here is some text - <H2>Second level heading</H2> - Here is some more text. - - Typical renderings are: - - H1 - Bold, very-large font, centered. One or two blank lines - above and below. - - H2 - Bold, large font, flush-left. One or two blank lines - above and below. - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 24]</span> -<a name="page-25" id="page-25" href="#page-25" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - H3 - Italic, large font, slightly indented from the left - margin. One or two blank lines above and below. - - H4 - Bold, normal font, indented more than H3. One blank line - above and below. - - H5 - Italic, normal font, indented as H4. One blank line - above. - - H6 - Bold, indented same as normal text, more than H5. One - blank line above. - -<span class="h3"><a name="section-5.5">5.5</a>. Block Structuring Elements</span> - - Block structuring elements include paragraphs, lists, and block - quotes. They must not contain heading elements, but they may contain - phrase markup, and in some cases, they may be nested. - -<span class="h4"><a name="section-5.5.1">5.5.1</a>. Paragraph: P</span> - - The <P> element indicates a paragraph. The exact indentation, leading - space, etc. of a paragraph is not specified and may be a function of - other tags, style sheets, etc. - - Typically, paragraphs are surrounded by a vertical space of one line - or half a line. The first line in a paragraph is indented in some - cases. - - Example of use: - - <H1>This Heading Precedes the Paragraph</H1> - <P>This is the text of the first paragraph. - <P>This is the text of the second paragraph. Although you do not - need to start paragraphs on new lines, maintaining this - convention facilitates document maintenance.</P> - <P>This is the text of a third paragraph.</P> - -<span class="h4"><a name="section-5.5.2">5.5.2</a>. Preformatted Text: PRE</span> - - The <PRE> element represents a character cell block of text and is - suitable for text that has been formatted for a monospaced font. - - The <PRE> tag may be used with the optional WIDTH attribute. The - WIDTH attribute specifies the maximum number of characters for a line - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 25]</span> -<a name="page-26" id="page-26" href="#page-26" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - and allows the HTML user agent to select a suitable font and - indentation. - - Within preformatted text: - - * Line breaks within the text are rendered as a move to the - beginning of the next line. - - NOTE - References to the "beginning of a new line" - do not imply that the renderer is forbidden from - using a constant left indent for rendering - preformatted text. The left indent may be - constrained by the width required. - - * Anchor elements and phrase markup may be used. - - NOTE - Constraints on the processing of <PRE> - content may limit or prevent the ability of the HTML - user agent to faithfully render phrase markup. - - * Elements that define paragraph formatting (headings, - address, etc.) must not be used. - - NOTE - Some historical documents contain <P> tags in - <PRE> elements. User agents are encouraged to treat - this as a line break. A <P> tag followed by a - newline character should produce only one line - break, not a line break plus a blank line. - - * The horizontal tab character (code position 9 in the HTML - document character set) must be interpreted as the smallest - positive nonzero number of spaces which will leave the - number of characters so far on the line as a multiple of 8. - Documents should not contain tab characters, as they are not - supported consistently. - - Example of use: - - <PRE> - Line 1. - Line 2 is to the right of line 1. <a href="abc">abc</a> - Line 3 aligns with line 2. <a href="def">def</a> - </PRE> - - - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 26]</span> -<a name="page-27" id="page-27" href="#page-27" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h5"><a name="section-5.5.2.1">5.5.2.1</a>. Example and Listing: XMP, LISTING</span> - - The <XMP> and <LISTING> elements are similar to the <PRE> element, - but they have a different syntax. Their content is declared as CDATA, - which means that no markup except the end-tag open delimiter-in- - context is recognized (see 9.6 "Delimiter Recognition" of [<a href="#ref-SGML">SGML</a>]). - - NOTE - In a previous draft of the HTML specification, the syntax - of <XMP> and <LISTING> elements allowed closing tags to be treated - as data characters, as long as the tag name was not <XMP> or - <LISTING>, respectively. - - Since CDATA declared content has a number of unfortunate interactions - with processing techniques and tends to be used and implemented - inconsistently, HTML documents should not contain <XMP> nor <LISTING> - elements -- the <PRE> tag is more expressive and more consistently - supported. - - The <LISTING> element should be rendered so that at least 132 - characters fit on a line. The <XMP> element should be rendered so - that at least 80 characters fit on a line but is otherwise identical - to the <LISTING> element. - - NOTE - In a previous draft, HTML included a <PLAINTEXT> element - that is similar to the <LISTING> element, except that there is no - closing tag: all characters after the <PLAINTEXT> start-tag are - data. - -<span class="h4"><a name="section-5.5.3">5.5.3</a>. Address: ADDRESS</span> - - The <ADDRESS> element contains such information as address, signature - and authorship, often at the beginning or end of the body of a - document. - - Typically, the <ADDRESS> element is rendered in an italic typeface - and may be indented. - - Example of use: - - <ADDRESS> - Newsletter editor<BR> - J.R. Brown<BR> - JimquickPost News, Jimquick, CT 01234<BR> - Tel (123) 456 7890 - </ADDRESS> - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 27]</span> -<a name="page-28" id="page-28" href="#page-28" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h4"><a name="section-5.5.4">5.5.4</a>. Block Quote: BLOCKQUOTE</span> - - The <BLOCKQUOTE> element contains text quoted from another source. - - A typical rendering might be a slight extra left and right indent, - and/or italic font. The <BLOCKQUOTE> typically provides space above - and below the quote. - - Single-font rendition may reflect the quotation style of Internet - mail by putting a vertical line of graphic characters, such as the - greater than symbol (>), in the left margin. - - Example of use: - - I think the play ends - <BLOCKQUOTE> - <P>Soft you now, the fair Ophelia. Nymph, in thy orisons, be all - my sins remembered. - </BLOCKQUOTE> - but I am not sure. - -<span class="h3"><a name="section-5.6">5.6</a>. List Elements</span> - - HTML includes a number of list elements. They may be used in - combination; for example, a <OL> may be nested in an <LI> element of - a <UL>. - - The COMPACT attribute suggests that a compact rendering be used. - -<span class="h4"><a name="section-5.6.1">5.6.1</a>. Unordered List: UL, LI</span> - - The <UL> represents a list of items -- typically rendered as a - bulleted list. - - The content of a <UL> element is a sequence of <LI> elements. For - example: - - <UL> - <LI>First list item - <LI>Second list item - <p>second paragraph of second item - <LI>Third list item - </UL> - -<span class="h4"><a name="section-5.6.2">5.6.2</a>. Ordered List: OL</span> - - The <OL> element represents an ordered list of items, sorted by - sequence or order of importance. It is typically rendered as a - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 28]</span> -<a name="page-29" id="page-29" href="#page-29" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - numbered list. - - The content of a <OL> element is a sequence of <LI> elements. For - example: - - <OL> - <LI>Click the Web button to open URI window. - <LI>Enter the URI number in the text field of the Open URI - window. The Web document you specified is displayed. - <ol> - <li>substep 1 - <li>substep 2 - </ol> - <LI>Click highlighted text to move from one link to another. - </OL> - -<span class="h4"><a name="section-5.6.3">5.6.3</a>. Directory List: DIR</span> - - The <DIR> element is similar to the <UL> element. It represents a - list of short items, typically up to 20 characters each. Items in a - directory list may be arranged in columns, typically 24 characters - wide. - - The content of a <DIR> element is a sequence of <LI> elements. - Nested block elements are not allowed in the content of <DIR> - elements. For example: - - <DIR> - <LI>A-H<LI>I-M - <LI>M-R<LI>S-Z - </DIR> - -<span class="h4"><a name="section-5.6.4">5.6.4</a>. Menu List: MENU</span> - - The <MENU> element is a list of items with typically one line per - item. The menu list style is typically more compact than the style of - an unordered list. - - The content of a <MENU> element is a sequence of <LI> elements. - Nested block elements are not allowed in the content of <MENU> - elements. For example: - - <MENU> - <LI>First item in the list. - <LI>Second item in the list. - <LI>Third item in the list. - </MENU> - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 29]</span> -<a name="page-30" id="page-30" href="#page-30" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h4"><a name="section-5.6.5">5.6.5</a>. Definition List: DL, DT, DD</span> - - A definition list is a list of terms and corresponding definitions. - Definition lists are typically formatted with the term flush-left and - the definition, formatted paragraph style, indented after the term. - - The content of a <DL> element is a sequence of <DT> elements and/or - <DD> elements, usually in pairs. Multiple <DT> may be paired with a - single <DD> element. Documents should not contain multiple - consecutive <DD> elements. - - Example of use: - - <DL> - <DT>Term<DD>This is the definition of the first term. - <DT>Term<DD>This is the definition of the second term. - </DL> - - If the DT term does not fit in the DT column (typically one third of - the display area), it may be extended across the page with the DD - section moved to the next line, or it may be wrapped onto successive - lines of the left hand column. - - The optional COMPACT attribute suggests that a compact rendering be - used, because the list items are small and/or the entire list is - large. - - Unless the COMPACT attribute is present, an HTML user agent may leave - white space between successive DT, DD pairs. The COMPACT attribute - may also reduce the width of the left-hand (DT) column. - - <DL COMPACT> - <DT>Term<DD>This is the first definition in compact format. - <DT>Term<DD>This is the second definition in compact format. - </DL> - -<span class="h3"><a name="section-5.7">5.7</a>. Phrase Markup</span> - - Phrases may be marked up according to idiomatic usage, typographic - appearance, or for use as hyperlink anchors. - - User agents must render highlighted phrases distinctly from plain - text. Additionally, <EM> content must be rendered as distinct from - <STRONG> content, and <B> content must rendered as distinct from <I> - content. - - Phrase elements may be nested within the content of other phrase - elements; however, HTML user agents may render nested phrase elements - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 30]</span> -<a name="page-31" id="page-31" href="#page-31" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - indistinctly from non-nested elements: - - plain <B>bold <I>italic</I></B> may be rendered - the same as plain <B>bold </B><I>italic</I> - -<span class="h4"><a name="section-5.7.1">5.7.1</a>. Idiomatic Elements</span> - - Phrases may be marked up to indicate certain idioms. - - NOTE - User agents may support the <DFN> element, not included in - this specification, as it has been deployed to some extent. It is - used to indicate the defining instance of a term, and it is - typically rendered in italic or bold italic. - -<span class="h5"><a name="section-5.7.1.1">5.7.1.1</a>. Citation: CITE</span> - - The <CITE> element is used to indicate the title of a book or - other citation. It is typically rendered as italics. For example: - - He just couldn't get enough of <cite>The Grapes of Wrath</cite>. - -<span class="h5"><a name="section-5.7.1.2">5.7.1.2</a>. Code: CODE</span> - - The <CODE> element indicates an example of code, typically - rendered in a mono-spaced font. The <CODE> element is intended for - short words or phrases of code; the <PRE> block structuring - element (5.5.2, "Preformatted Text: PRE") is more appropriate - for multiple-line listings. For example: - - The expression <code>x += 1</code> - is short for <code>x = x + 1</code>. - -<span class="h5"><a name="section-5.7.1.3">5.7.1.3</a>. Emphasis: EM</span> - - The <EM> element indicates an emphasized phrase, typically - rendered as italics. For example: - - A singular subject <em>always</em> takes a singular verb. - -<span class="h5"><a name="section-5.7.1.4">5.7.1.4</a>. Keyboard: KBD</span> - - The <KBD> element indicates text typed by a user, typically - rendered in a mono-spaced font. This is commonly used in - instruction manuals. For example: - - Enter <kbd>FIND IT</kbd> to search the database. - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 31]</span> -<a name="page-32" id="page-32" href="#page-32" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h5"><a name="section-5.7.1.5">5.7.1.5</a>. Sample: SAMP</span> - - The <SAMP> element indicates a sequence of literal characters, - typically rendered in a mono-spaced font. For example: - - The only word containing the letters <samp>mt</samp> is dreamt. - -<span class="h5"><a name="section-5.7.1.6">5.7.1.6</a>. Strong Emphasis: STRONG</span> - - The <STRONG> element indicates strong emphasis, typically rendered - in bold. For example: - - <strong>STOP</strong>, or I'll say "<strong>STOP</strong>" again! - -<span class="h5"><a name="section-5.7.1.7">5.7.1.7</a>. Variable: VAR</span> - - The <VAR> element indicates a placeholder variable, typically - rendered as italic. For example: - - Type <SAMP>html-check <VAR>file</VAR> | more</SAMP> - to check <VAR>file</VAR> for markup errors. - -<span class="h4"><a name="section-5.7.2">5.7.2</a>. Typographic Elements</span> - - Typographic elements are used to specify the format of marked - text. - - Typical renderings for idiomatic elements may vary between user - agents. If a specific rendering is necessary -- for example, when - referring to a specific text attribute as in "The italic parts are - mandatory" -- a typographic element can be used to ensure that the - intended typography is used where possible. - - NOTE - User agents may support some typographic elements not - included in this specification, as they have been deployed to some - extent. The <STRIKE> element indicates horizontal line through the - characters, and the <U> element indicates an underline. - -<span class="h5"><a name="section-5.7.2.1">5.7.2.1</a>. Bold: B</span> - - The <B> element indicates bold text. Where bold typography is - unavailable, an alternative representation may be used. - -<span class="h5"><a name="section-5.7.2.2">5.7.2.2</a>. Italic: I</span> - - The <I> element indicates italic text. Where italic typography is - unavailable, an alternative representation may be used. - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 32]</span> -<a name="page-33" id="page-33" href="#page-33" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h5"><a name="section-5.7.2.3">5.7.2.3</a>. Teletype: TT</span> - - The <TT> element indicates teletype (monospaced )text. Where a - teletype font is unavailable, an alternative representation may be - used. - -<span class="h4"><a name="section-5.7.3">5.7.3</a>. Anchor: A</span> - - The <A> element indicates a hyperlink anchor (see 7, "Hyperlinks"). - At least one of the NAME and HREF attributes should be present. - Attributes of the <A> element: - - HREF - gives the URI of the head anchor of a hyperlink. - - NAME - gives the name of the anchor, and makes it available as - a head of a hyperlink. - - TITLE - suggests a title for the destination resource -- - advisory only. The TITLE attribute may be used: - - * for display prior to accessing the destination - resource, for example, as a margin note or on a - small box while the mouse is over the anchor, or - while the document is being loaded; - - * for resources that do not include a title, such as - graphics, plain text and Gopher menus, for use as a - window title. - - REL - The REL attribute gives the relationship(s) described by - the hyperlink. The value is a whitespace separated list - of relationship names. The semantics of link - relationships are not specified in this document. - - REV - same as the REL attribute, but the semantics of the - relationship are in the reverse direction. A link from A - to B with REL="X" expresses the same relationship as a - link from B to A with REV="X". An anchor may have both - REL and REV attributes. - - URN - specifies a preferred, more persistent identifier for - the head anchor of the hyperlink. The syntax and - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 33]</span> -<a name="page-34" id="page-34" href="#page-34" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - semantics of the URN attribute are not yet specified. - - METHODS - specifies methods to be used in accessing the - destination, as a whitespace-separated list of names. - The set of applicable names is a function of the scheme - of the URI in the HREF attribute. For similar reasons as - for the TITLE attribute, it may be useful to include the - information in advance in the link. For example, the - HTML user agent may chose a different rendering as a - function of the methods allowed; for example, something - that is searchable may get a different icon. - -<span class="h3"><a name="section-5.8">5.8</a>. Line Break: BR</span> - - The <BR> element specifies a line break between words (see 6, - "Characters, Words, and Paragraphs"). For example: - - <P> Pease porridge hot<BR> - Pease porridge cold<BR> - Pease porridge in the pot<BR> - Nine days old. - -<span class="h3"><a name="section-5.9">5.9</a>. Horizontal Rule: HR</span> - - The <HR> element is a divider between sections of text; typically a - full width horizontal rule or equivalent graphic. For example: - - <HR> - <ADDRESS>February 8, 1995, CERN</ADDRESS> - </BODY> - -<span class="h3"><a name="section-5.10">5.10</a>. Image: IMG</span> - - The <IMG> element refers to an image or icon via a hyperlink (see - 7.3, "Simultaneous Presentation of Image Resources"). - - HTML user agents may process the value of the ALT attribute as an - alternative to processing the image resource indicated by the SRC - attribute. - - NOTE - Some HTML user agents can process graphics linked via - anchors, but not <IMG> graphics. If a graphic is essential, it - should be referenced from an <A> element rather than an <IMG> - element. If the graphic is not essential, then the <IMG> element - is appropriate. - - Attributes of the <IMG> element: - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 34]</span> -<a name="page-35" id="page-35" href="#page-35" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - ALIGN - alignment of the image with respect to the text - baseline. - - * `TOP' specifies that the top of the image aligns - with the tallest item on the line containing the - image. - - * `MIDDLE' specifies that the center of the image - aligns with the baseline of the line containing the - image. - - * `BOTTOM' specifies that the bottom of the image - aligns with the baseline of the line containing the - image. - - ALT - text to use in place of the referenced image resource, - for example due to processing constraints or user - preference. - - ISMAP - indicates an image map (see 7.6, "Image Maps"). - - SRC - specifies the URI of the image resource. - - NOTE - In practice, the media types of image - resources are limited to a few raster graphic - formats: typically `image/gif', `image/jpeg'. In - particular, `text/html' resources are not - intended to be used as image resources. - - Examples of use: - - <IMG SRC="triangle.xbm" ALT="Warning:"> Be sure - to read these instructions. - - <a href="http://machine/htbin/imagemap/sample"> - <IMG SRC="sample.xbm" ISMAP> - </a> - -<span class="h2"><a name="section-6">6</a>. Characters, Words, and Paragraphs</span> - - An HTML user agent should present the body of an HTML document as a - collection of typeset paragraphs and preformatted text. Except for - preformatted elements (<PRE>, <XMP>, <LISTING>, <TEXTAREA>), each - block structuring element is regarded as a paragraph by taking the - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 35]</span> -<a name="page-36" id="page-36" href="#page-36" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - data characters in its content and the content of its descendant - elements, concatenating them, and splitting the result into words, - separated by space, tab, or record end characters (and perhaps hyphen - characters). The sequence of words is typeset as a paragraph by - breaking it into lines. - -<span class="h3"><a name="section-6.1">6.1</a>. The HTML Document Character Set</span> - - The document character set specified in 9.5, "SGML Declaration for - HTML" must be supported by HTML user agents. It includes the graphic - characters of Latin Alphabet No. 1, or simply Latin-1. Latin-1 - comprises 191 graphic characters, including the alphabets of most - Western European languages. - - NOTE - Use of the non-breaking space and soft hyphen indicator - characters is discouraged because support for them is not widely - deployed. - - NOTE - To support non-western writing systems, a larger character - repertoire will be specified in a future version of HTML. The - document character set will be [<a href="#ref-ISO-10646">ISO-10646</a>], or some subset that - agrees with [<a href="#ref-ISO-10646">ISO-10646</a>]; in particular, all numeric character - references must use code positions assigned by [<a href="#ref-ISO-10646">ISO-10646</a>]. - - In SGML applications, the use of control characters is limited in - order to maximize the chance of successful interchange over - heterogeneous networks and operating systems. In the HTML document - character set only three control characters are allowed: Horizontal - Tab, Carriage Return, and Line Feed (code positions 9, 13, and 10). - - The HTML DTD references the Added Latin 1 entity set, to allow - mnemonic representation of selected Latin 1 characters using only the - widely supported ASCII character repertoire. For example: - - Kurt G&ouml;del was a famous logician and mathematician. - - See 9.7.2, "ISO Latin 1 Character Entity Set" for a table of the - "Added Latin 1" entities, and 13, "The HTML Coded Character Set" for - a table of the code positions of [ISO 8859-1] and the control - characters in the HTML document character set. - -<span class="h2"><a name="section-7">7</a>. Hyperlinks</span> - - In addition to general purpose elements such as paragraphs and lists, - HTML documents can express hyperlinks. An HTML user agent allows the - user to navigate these hyperlinks. - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 36]</span> -<a name="page-37" id="page-37" href="#page-37" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - A hyperlink is a relationship between two anchors, called the head - and the tail of the hyperlink[DEXTER]. Anchors are identified by an - anchor address: an absolute Uniform Resource Identifier (URI), - optionally followed by a '#' and a sequence of characters called a - fragment identifier. For example: - - <a href="http://www.w3.org/hypertext/WWW/TheProject.html">http://www.w3.org/hypertext/WWW/TheProject.html</a> - <a href="http://www.w3.org/hypertext/WWW/TheProject.html#z31">http://www.w3.org/hypertext/WWW/TheProject.html#z31</a> - - In an anchor address, the URI refers to a resource; it may be used in - a variety of information retrieval protocols to obtain an entity that - represents the resource, such as an HTML document. The fragment - identifier, if present, refers to some view on, or portion of the - resource. - - Each of the following markup constructs indicates the tail anchor of - a hyperlink or set of hyperlinks: - - * <A> elements with HREF present. - - * <LINK> elements. - - * <IMG> elements. - - * <INPUT> elements with the SRC attribute present. - - * <ISINDEX> elements. - - * <FORM> elements with `METHOD=GET'. - - These markup constructs refer to head anchors by a URI, either - absolute or relative, or a fragment identifier, or both. - - In the case of a relative URI, the absolute URI in the address of the - head anchor is the result of combining the relative URI with a base - absolute URI as in [<a href="#ref-RELURL" title='"Relative Uniform Resource Locators"'>RELURL</a>]. The base document is taken from the - document's <BASE> element, if present; else, it is determined as in - [<a href="#ref-RELURL" title='"Relative Uniform Resource Locators"'>RELURL</a>]. - -<span class="h3"><a name="section-7.1">7.1</a>. Accessing Resources</span> - - Once the address of the head anchor is determined, the user agent may - obtain a representation of the resource. - - For example, if the base URI is `http://host/x/y.html' and the - document contains: - - <img src="../icons/abc.gif"> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 37]</span> -<a name="page-38" id="page-38" href="#page-38" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - then the user agent uses the URI `http://host/icons/abc.gif' to - access the resource, as in [<a href="#ref-URL" title='"Uniform Resource Locators (URL)"'>URL</a>].. - -<span class="h3"><a name="section-7.2">7.2</a>. Activation of Hyperlinks</span> - - An HTML user agent allows the user to navigate the content of the - document and request activation of hyperlinks denoted by <A> - elements. HTML user agents should also allow activation of <LINK> - element hyperlinks. - - To activate a link, the user agent obtains a representation of the - resource identified in the address of the head anchor. If the - representation is another HTML document, navigation may begin again - with this new document. - -<span class="h3"><a name="section-7.3">7.3</a>. Simultaneous Presentation of Image Resources</span> - - An HTML user agent may activate hyperlinks indicated by <IMG> and - <INPUT> elements concurrently with processing the document; that is, - image hyperlinks may be processed without explicit request by the - user. Image resources should be embedded in the presentation at the - point of the tail anchor, that is the <IMG> or <INPUT> element. - - <LINK> hyperlinks may also be processed without explicit user - request; for example, style sheet resources may be processed before - or during the processing of the document. - -<span class="h3"><a name="section-7.4">7.4</a>. Fragment Identifiers</span> - - Any characters following a `#' character in a hypertext address - constitute a fragment identifier. In particular, an address of the - form `#fragment' refers to an anchor in the same document. - - The meaning of fragment identifiers depends on the media type of the - representation of the anchor's resource. For `text/html' - representations, it refers to the <A> element with a NAME attribute - whose value is the same as the fragment identifier. The matching is - case sensitive. The document should have exactly one such element. - The user agent should indicate the anchor element, for example by - scrolling to and/or highlighting the phrase. - - For example, if the base URI is `http://host/x/y.html' and the user - activated the link denoted by the following markup: - - <p> See: <a href="app1.html#bananas">appendix 1</a> - for more detail on bananas. - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 38]</span> -<a name="page-39" id="page-39" href="#page-39" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - Then the user agent accesses the resource identified by - `http://host/x/app1.html'. Assuming the resource is represented using - the `text/html' media type, the user agent must locate the <A> - element whose NAME attribute is `bananas' and begin navigation there. - -<span class="h3"><a name="section-7.5">7.5</a>. Queries and Indexes</span> - - The <ISINDEX> element represents a set of hyperlinks. The user can - choose from the set by providing keywords to the user agent. The - user agent computes the head URI by appending `?' and the keywords to - the base URI. The keywords are escaped according to [<a href="#ref-URL" title='"Uniform Resource Locators (URL)"'>URL</a>] and joined - by `+'. For example, if a document contains: - - <BASE HREF="http://host/index"> - <ISINDEX> - - and the user provides the keywords `apple' and `berry', then the - user agent must access the resource - `http://host/index?apple+berry'. - - <FORM> elements with `METHOD=GET' also represent sets of - hyperlinks. See 8.2.2, "Query Forms: METHOD=GET" for details. - -<span class="h3"><a name="section-7.6">7.6</a>. Image Maps</span> - - If the ISMAP attribute is present on an <IMG> element, the <IMG> - element must be contained in an <A> element with an HREF present. - This construct represents a set of hyperlinks. The user can choose - from the set by choosing a pixel of the image. The user agent - computes the head URI by appending `?' and the x and y coordinates of - the pixel to the URI given in the <A> element. For example, if a - document contains: - - <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> - <head><title>ImageMap Example</title> - <BASE HREF="http://host/index"></head> - <body> - <p> Choose any of these icons:<br> - <a href="/cgi-bin/imagemap"><img ismap src="icons.gif"></a> - - and the user chooses the upper-leftmost pixel, the chosen - hyperlink is the one with the URI - `http://host/cgi-bin/imagemap?0,0'. - - - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 39]</span> -<a name="page-40" id="page-40" href="#page-40" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h2"><a name="section-8">8</a>. Forms</span> - - A form is a template for a form data set and an associated - method and action URI. A form data set is a sequence of - name/value pair fields. The names are specified on the NAME - attributes of form input elements, and the values are given - initial values by various forms of markup and edited by the - user. The resulting form data set is used to access an - information service as a function of the action and method. - - Forms elements can be mixed in with document structuring - elements. For example, a <PRE> element may contain a <FORM> - element, or a <FORM> element may contain lists which contain - <INPUT> elements. This gives considerable flexibility in - designing the layout of forms. - - Form processing is a level 2 feature. - -<span class="h3"><a name="section-8.1">8.1</a>. Form Elements</span> - -<span class="h4"><a name="section-8.1.1">8.1.1</a>. Form: FORM</span> - - The <FORM> element contains a sequence of input elements, along - with document structuring elements. The attributes are: - - ACTION - specifies the action URI for the form. The action URI of - a form defaults to the base URI of the document (see 7, - "Hyperlinks"). - - METHOD - selects a method of accessing the action URI. The set of - applicable methods is a function of the scheme of the - action URI of the form. See 8.2.2, "Query Forms: - METHOD=GET" and 8.2.3, "Forms with Side-Effects: - METHOD=POST". - - ENCTYPE - specifies the media type used to encode the name/value - pairs for transport, in case the protocol does not - itself impose a format. See 8.2.1, "The form-urlencoded - Media Type". - -<span class="h4"><a name="section-8.1.2">8.1.2</a>. Input Field: INPUT</span> - - The <INPUT> element represents a field for user input. The TYPE - attribute discriminates between several variations of fields. - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 40]</span> -<a name="page-41" id="page-41" href="#page-41" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - The <INPUT> element has a number of attributes. The set of applicable - attributes depends on the value of the TYPE attribute. - -<span class="h5"><a name="section-8.1.2.1">8.1.2.1</a>. Text Field: INPUT TYPE=TEXT</span> - - The default value of the TYPE attribute is `TEXT', indicating a - single line text entry field. (Use the <TEXTAREA> element for multi- - line text fields.) - - Required attributes are: - - NAME - name for the form field corresponding to this element. - - The optional attributes are: - - MAXLENGTH - constrains the number of characters that can be entered - into a text input field. If the value of MAXLENGTH is - greater the the value of the SIZE attribute, the field - should scroll appropriately. The default number of - characters is unlimited. - - SIZE - specifies the amount of display space allocated to this - input field according to its type. The default depends - on the user agent. - - VALUE - The initial value of the field. - - For example: - -<p>Street Address: <input name=street><br> -Postal City code: <input name=city size=16 maxlength=16><br> -Zip Code: <input name=zip size=10 maxlength=10 value="99999-9999"><br> - -<span class="h5"><a name="section-8.1.2.2">8.1.2.2</a>. Password Field: INPUT TYPE=PASSWORD</span> - - An <INPUT> element with `TYPE=PASSWORD' is a text field as above, - except that the value is obscured as it is entered. (see also: 10, - "Security Considerations"). - - For example: - -<p>Name: <input name=login> Password: <input type=password name=passwd> - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 41]</span> -<a name="page-42" id="page-42" href="#page-42" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h5"><a name="section-8.1.2.3">8.1.2.3</a>. Check Box: INPUT TYPE=CHECKBOX</span> - - An <INPUT> element with `TYPE=CHECKBOX' represents a boolean choice. - A set of such elements with the same name represents an n-of-many - choice field. Required attributes are: - - NAME - symbolic name for the form field corresponding to this - element or group of elements. - - VALUE - The portion of the value of the field contributed by - this element. - - Optional attributes are: - - CHECKED - indicates that the initial state is on. - - For example: - - <p>What flavors do you like? - <input type=checkbox name=flavor value=vanilla>Vanilla<br> - <input type=checkbox name=flavor value=strawberry>Strawberry<br> - <input type=checkbox name=flavor value=chocolate checked>Chocolate<br> - -<span class="h5"><a name="section-8.1.2.4">8.1.2.4</a>. Radio Button: INPUT TYPE=RADIO</span> - - An <INPUT> element with `TYPE=RADIO' represents a boolean choice. A - set of such elements with the same name represents a 1-of-many choice - field. The NAME and VALUE attributes are required as for check boxes. - Optional attributes are: - - CHECKED - indicates that the initial state is on. - At all times, exactly one of the radio buttons in a set is checked. - If none of the <INPUT> elements of a set of radio buttons specifies - `CHECKED', then the user agent must check the first radio button of - the set initially. - - For example: - - <p>Which is your favorite? - <input type=radio name=flavor value=vanilla>Vanilla<br> - <input type=radio name=flavor value=strawberry>Strawberry<br> - <input type=radio name=flavor value=chocolate>Chocolate<br> - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 42]</span> -<a name="page-43" id="page-43" href="#page-43" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h5"><a name="section-8.1.2.5">8.1.2.5</a>. Image Pixel: INPUT TYPE=IMAGE</span> - - An <INPUT> element with `TYPE=IMAGE' specifies an image resource to - display, and allows input of two form fields: the x and y coordinate - of a pixel chosen from the image. The names of the fields are the - name of the field with `.x' and `.y' appended. `TYPE=IMAGE' implies - `TYPE=SUBMIT' processing; that is, when a pixel is chosen, the form - as a whole is submitted. - - The NAME attribute is required as for other input fields. The SRC - attribute is required and the ALIGN is optional as for the <IMG> - element (see 5.10, "Image: IMG"). - - For example: - - <p>Choose a point on the map: - <input type=image name=point src="map.gif"> - -<span class="h5"><a name="section-8.1.2.6">8.1.2.6</a>. Hidden Field: INPUT TYPE=HIDDEN</span> - - An <INPUT> element with `TYPE=HIDDEN' represents a hidden field.The - user does not interact with this field; instead, the VALUE attribute - specifies the value of the field. The NAME and VALUE attributes are - required. - - For example: - - <input type=hidden name=context value="l2k3j4l2k3j4l2k3j4lk23"> - -<span class="h5"><a name="section-8.1.2.7">8.1.2.7</a>. Submit Button: INPUT TYPE=SUBMIT</span> - - An <INPUT> element with `TYPE=SUBMIT' represents an input option, - typically a button, that instructs the user agent to submit the form. - Optional attributes are: - - NAME - indicates that this element contributes a form field - whose value is given by the VALUE attribute. If the NAME - attribute is not present, this element does not - contribute a form field. - - VALUE - indicates a label for the input (button). - - You may submit this request internally: - <input type=submit name=recipient value=internal><br> - or to the external world: - <input type=submit name=recipient value=world> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 43]</span> -<a name="page-44" id="page-44" href="#page-44" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h5"><a name="section-8.1.2.8">8.1.2.8</a>. Reset Button: INPUT TYPE=RESET</span> - - An <INPUT> element with `TYPE=RESET' represents an input option, - typically a button, that instructs the user agent to reset the form's - fields to their initial states. The VALUE attribute, if present, - indicates a label for the input (button). - - When you are finished, you may submit this request: - <input type=submit><br> - You may clear the form and start over at any time: <input type=reset> - -<span class="h4"><a name="section-8.1.3">8.1.3</a>. Selection: SELECT</span> - - The <SELECT> element constrains the form field to an enumerated list - of values. The values are given in <OPTION> elements. Attributes - are: - - MULTIPLE - indicates that more than one option may be included in - the value. - - NAME - specifies the name of the form field. - - SIZE - specifies the number of visible items. Select fields of - size one are typically pop-down menus, whereas select - fields with size greater than one are typically lists. - - For example: - - <SELECT NAME="flavor"> - <OPTION>Vanilla - <OPTION>Strawberry - <OPTION value="RumRasin">Rum and Raisin - <OPTION selected>Peach and Orange - </SELECT> - - The initial state has the first option selected, unless a SELECTED - attribute is present on any of the <OPTION> elements. - -<span class="h5"><a name="section-8.1.3.1">8.1.3.1</a>. Option: OPTION</span> - - The Option element can only occur within a Select element. It - represents one choice, and has the following attributes: - - SELECTED - Indicates that this option is initially selected. - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 44]</span> -<a name="page-45" id="page-45" href="#page-45" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - VALUE - indicates the value to be returned if this option is - chosen. The field value defaults to the content of the - <OPTION> element. - - The content of the <OPTION> element is presented to the user to - represent the option. It is used as a returned value if the VALUE - attribute is not present. - -<span class="h4"><a name="section-8.1.4">8.1.4</a>. Text Area: TEXTAREA</span> - - The <TEXTAREA> element represents a multi-line text field. - Attributes are: - - COLS - the number of visible columns to display for the text - area, in characters. - - NAME - Specifies the name of the form field. - - ROWS - The number of visible rows to display for the text area, - in characters. - - For example: - - <TEXTAREA NAME="address" ROWS=6 COLS=64> - HaL Computer Systems - 1315 Dell Avenue - Campbell, California 95008 - </TEXTAREA> - - The content of the <TEXTAREA> element is the field's initial value. - - Typically, the ROWS and COLS attributes determine the visible - dimension of the field in characters. The field is typically rendered - in a fixed-width font. HTML user agents should allow text to extend - beyond these limits by scrolling as needed. - -<span class="h3"><a name="section-8.2">8.2</a>. Form Submission</span> - - An HTML user agent begins processing a form by presenting the - document with the fields in their initial state. The user is allowed - to modify the fields, constrained by the field type etc. When the - user indicates that the form should be submitted (using a submit - button or image input), the form data set is processed according to - its method, action URI and enctype. - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 45]</span> -<a name="page-46" id="page-46" href="#page-46" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - When there is only one single-line text input field in a form, the - user agent should accept Enter in that field as a request to submit - the form. - -<span class="h4"><a name="section-8.2.1">8.2.1</a>. The form-urlencoded Media Type</span> - - The default encoding for all forms is `application/x-www-form- - urlencoded'. A form data set is represented in this media type as - follows: - - 1. The form field names and values are escaped: space - characters are replaced by `+', and then reserved characters - are escaped as per [<a href="#ref-URL" title='"Uniform Resource Locators (URL)"'>URL</a>]; that is, non-alphanumeric - characters are replaced by `%HH', a percent sign and two - hexadecimal digits representing the ASCII code of the - character. Line breaks, as in multi-line text field values, - are represented as CR LF pairs, i.e. `%0D%0A'. - - 2. The fields are listed in the order they appear in the - document with the name separated from the value by `=' and - the pairs separated from each other by `&'. Fields with null - values may be omitted. In particular, unselected radio - buttons and checkboxes should not appear in the encoded - data, but hidden fields with VALUE attributes present - should. - - NOTE - The URI from a query form submission can be - used in a normal anchor style hyperlink. - Unfortunately, the use of the `&' character to - separate form fields interacts with its use in SGML - attribute values as an entity reference delimiter. - For example, the URI `http://host/?x=1&y=2' must be - written `<a href="http://host/?x=1&#38;y=2"' or `<a - href="http://host/?x=1&amp;y=2">'. - - HTTP server implementors, and in particular, CGI - implementors are encouraged to support the use of - `;' in place of `&' to save users the trouble of - escaping `&' characters this way. - -<span class="h4"><a name="section-8.2.2">8.2.2</a>. Query Forms: METHOD=GET</span> - - If the processing of a form is idempotent (i.e. it has no lasting - observable effect on the state of the world), then the form method - should be `GET'. Many database searches have no visible side-effects - and make ideal applications of query forms. - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 46]</span> -<a name="page-47" id="page-47" href="#page-47" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - To process a form whose action URL is an HTTP URL and whose method is - `GET', the user agent starts with the action URI and appends a `?' - and the form data set, in `application/x-www-form-urlencoded' format - as above. The user agent then traverses the link to this URI just as - if it were an anchor (see 7.2, "Activation of Hyperlinks"). - - NOTE - The URL encoding may result in very long URIs, which cause - some historical HTTP server implementations to exhibit defective - behavior. As a result, some HTML forms are written using - `METHOD=POST' even though the form submission has no side-effects. - -<span class="h4"><a name="section-8.2.3">8.2.3</a>. Forms with Side-Effects: METHOD=POST</span> - - If the service associated with the processing of a form has side - effects (for example, modification of a database or subscription to a - service), the method should be `POST'. - - To process a form whose action URL is an HTTP URL and whose method is - `POST', the user agent conducts an HTTP POST transaction using the - action URI, and a message body of type `application/x-www-form- - urlencoded' format as above. The user agent should display the - response from the HTTP POST interaction just as it would display the - response from an HTTP GET above. - -<span class="h4"><a name="section-8.2.4">8.2.4</a>. Example Form Submission: Questionnaire Form</span> - - Consider the following document: - - <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> - <title>Sample of HTML Form Submission</title> - <H1>Sample Questionnaire</H1> - <P>Please fill out this questionnaire: - <FORM METHOD="POST" ACTION="http://www.w3.org/sample"> - <P>Your name: <INPUT NAME="name" size="48"> - <P>Male <INPUT NAME="gender" TYPE=RADIO VALUE="male"> - <P>Female <INPUT NAME="gender" TYPE=RADIO VALUE="female"> - <P>Number in family: <INPUT NAME="family" TYPE=text> - <P>Cities in which you maintain a residence: - <UL> - <LI>Kent <INPUT NAME="city" TYPE=checkbox VALUE="kent"> - <LI>Miami <INPUT NAME="city" TYPE=checkbox VALUE="miami"> - <LI>Other <TEXTAREA NAME="other" cols=48 rows=4></textarea> - </UL> - Nickname: <INPUT NAME="nickname" SIZE="42"> - <P>Thank you for responding to this questionnaire. - <P><INPUT TYPE=SUBMIT> <INPUT TYPE=RESET> - </FORM> - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 47]</span> -<a name="page-48" id="page-48" href="#page-48" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - The initial state of the form data set is: - - name - "" - - gender - "male" - - family - "" - - other - "" - - nickname - "" - - Note that the radio input has an initial value, while the - checkbox has none. - - The user might edit the fields and request that the form be - submitted. At that point, suppose the values are: - - name - "John Doe" - - gender - "male" - - family - "5" - - city - "kent" - - city - "miami" - - other - "abc\ndefk" - - nickname - "J&D" - - The user agent then conducts an HTTP POST transaction using the URI - `http://www.w3.org/sample'. The message body would be (ignore the - line break): - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 48]</span> -<a name="page-49" id="page-49" href="#page-49" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - name=John+Doe&gender=male&family=5&city=kent&city=miami& - other=abc%0D%0Adef&nickname=J%26D - -<span class="h2"><a name="section-9">9</a>. HTML Public Text</span> - -<span class="h3"><a name="section-9.1">9.1</a>. HTML DTD</span> - - This is the Document Type Definition for the HyperText Markup - Language, level 2. - -<!-- html.dtd - - Document Type Definition for the HyperText Markup Language - (HTML DTD) - - $Id: html.dtd,v 1.30 1995/09/21 23:30:19 connolly Exp $ - - Author: Daniel W. Connolly <connolly@w3.org> - See Also: html.decl, html-1.dtd - <a href="http://www.w3.org/hypertext/WWW/MarkUp/MarkUp.html">http://www.w3.org/hypertext/WWW/MarkUp/MarkUp.html</a> ---> - -<!ENTITY % HTML.Version - "-//IETF//DTD HTML 2.0//EN" - - -- Typical usage: - - <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> - <html> - ... - </html> - -- - > - - -<!--============ Feature Test Entities ========================--> - -<!ENTITY % HTML.Recommended "IGNORE" - -- Certain features of the language are necessary for - compatibility with widespread usage, but they may - compromise the structural integrity of a document. - This feature test entity enables a more prescriptive - document type definition that eliminates - those features. - --> - -<![ %HTML.Recommended [ - <!ENTITY % HTML.Deprecated "IGNORE"> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 49]</span> -<a name="page-50" id="page-50" href="#page-50" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -]]> - -<!ENTITY % HTML.Deprecated "INCLUDE" - -- Certain features of the language are necessary for - compatibility with earlier versions of the specification, - but they tend to be used and implemented inconsistently, - and their use is deprecated. This feature test entity - enables a document type definition that eliminates - these features. - --> - -<!ENTITY % HTML.Highlighting "INCLUDE" - -- Use this feature test entity to validate that a - document uses no highlighting tags, which may be - ignored on minimal implementations. - --> - -<!ENTITY % HTML.Forms "INCLUDE" - -- Use this feature test entity to validate that a document - contains no forms, which may not be supported in minimal - implementations - --> - -<!--============== Imported Names ==============================--> - -<!ENTITY % Content-Type "CDATA" - -- meaning an internet media type - (aka MIME content type, as per <a href="./rfc1521">RFC1521</a>) - --> - -<!ENTITY % HTTP-Method "GET | POST" - -- as per HTTP specification, in progress - --> - -<!--========= DTD "Macros" =====================--> - -<!ENTITY % heading "H1|H2|H3|H4|H5|H6"> - -<!ENTITY % list " UL | OL | DIR | MENU " > - - -<!--======= Character mnemonic entities =================--> - -<!ENTITY % ISOlat1 PUBLIC - "ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML"> -%ISOlat1; - -<!ENTITY amp CDATA "&#38;" -- ampersand --> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 50]</span> -<a name="page-51" id="page-51" href="#page-51" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<!ENTITY gt CDATA "&#62;" -- greater than --> -<!ENTITY lt CDATA "&#60;" -- less than --> -<!ENTITY quot CDATA "&#34;" -- double quote --> - - -<!--========= SGML Document Access (SDA) Parameter Entities =====--> - -<!-- HTML 2.0 contains SGML Document Access (SDA) fixed attributes -in support of easy transformation to the International Committee -for Accessible Document Design (ICADD) DTD - "-//EC-USA-CDA/ICADD//DTD ICADD22//EN". -<span class="h1"><a name="appendix-ICADD">ICADD</a> applications are designed to support usable access to</span> -structured information by print-impaired individuals through -Braille, large print and voice synthesis. For more information on -<span class="h1"><a name="appendix-SDA">SDA</a> & ICADD:</span> - - ISO 12083:1993, Annex A.8, Facilities for Braille, - large print and computer voice - - ICADD ListServ - <ICADD%ASUACAD.BITNET@ARIZVM1.ccit.arizona.edu> - - Usenet news group bit.listserv.easi - - Recording for the Blind, +1 800 221 4792 ---> - -<!ENTITY % SDAFORM "SDAFORM CDATA #FIXED" - -- one to one mapping --> -<!ENTITY % SDARULE "SDARULE CDATA #FIXED" - -- context-sensitive mapping --> -<!ENTITY % SDAPREF "SDAPREF CDATA #FIXED" - -- generated text prefix --> -<!ENTITY % SDASUFF "SDASUFF CDATA #FIXED" - -- generated text suffix --> -<!ENTITY % SDASUSP "SDASUSP NAME #FIXED" - -- suspend transform process --> - - -<!--========== Text Markup =====================--> - -<![ %HTML.Highlighting [ - -<!ENTITY % font " TT | B | I "> - -<!ENTITY % phrase "EM | STRONG | CODE | SAMP | KBD | VAR | CITE "> - -<!ENTITY % text "#PCDATA | A | IMG | BR | %phrase | %font"> - -<!ELEMENT (%font;|%phrase) - - (%text)*> -<!ATTLIST ( TT | CODE | SAMP | KBD | VAR ) - %SDAFORM; "Lit" - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 51]</span> -<a name="page-52" id="page-52" href="#page-52" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - > -<!ATTLIST ( B | STRONG ) - %SDAFORM; "B" - > -<!ATTLIST ( I | EM | CITE ) - %SDAFORM; "It" - > - -<!-- <TT> Typewriter text --> -<!-- <B> Bold text --> -<!-- <I> Italic text --> - -<!-- <EM> Emphasized phrase --> -<!-- <STRONG> Strong emphasis --> -<!-- <CODE> Source code phrase --> -<!-- <SAMP> Sample text or characters --> -<!-- <KBD> Keyboard phrase, e.g. user input --> -<!-- <VAR> Variable phrase or substitutable --> -<!-- <CITE> Name or title of cited work --> - -<!ENTITY % pre.content "#PCDATA | A | HR | BR | %font | %phrase"> - -]]> - -<!ENTITY % text "#PCDATA | A | IMG | BR"> - -<!ELEMENT BR - O EMPTY> -<!ATTLIST BR - %SDAPREF; "&#RE;" - > - -<!-- <BR> Line break --> - - -<!--========= Link Markup ======================--> - -<!ENTITY % linkType "NAMES"> - -<!ENTITY % linkExtraAttributes - "REL %linkType #IMPLIED - REV %linkType #IMPLIED - URN CDATA #IMPLIED - TITLE CDATA #IMPLIED - METHODS NAMES #IMPLIED - "> - -<![ %HTML.Recommended [ - <!ENTITY % A.content "(%text)*" - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 52]</span> -<a name="page-53" id="page-53" href="#page-53" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - -- <H1><a name="xxx">Heading</a></H1> - is preferred to - <a name="xxx"><H1>Heading</H1></a> - --> -]]> - -<!ENTITY % A.content "(%heading|%text)*"> - -<!ELEMENT A - - %A.content -(A)> -<!ATTLIST A - HREF CDATA #IMPLIED - NAME CDATA #IMPLIED - %linkExtraAttributes; - %SDAPREF; "<Anchor: #AttList>" - > -<!-- <A> Anchor; source/destination of link --> -<!-- <A NAME="..."> Name of this anchor --> -<!-- <A HREF="..."> Address of link destination --> -<!-- <A URN="..."> Permanent address of destination --> -<!-- <A REL=...> Relationship to destination --> -<!-- <A REV=...> Relationship of destination to this --> -<!-- <A TITLE="..."> Title of destination (advisory) --> -<!-- <A METHODS="..."> Operations on destination (advisory) --> - - -<!--========== Images ==========================--> - -<!ELEMENT IMG - O EMPTY> -<!ATTLIST IMG - SRC CDATA #REQUIRED - ALT CDATA #IMPLIED - ALIGN (top|middle|bottom) #IMPLIED - ISMAP (ISMAP) #IMPLIED - %SDAPREF; "<Fig><?SDATrans Img: #AttList>#AttVal(Alt)</Fig>" - > - -<!-- <IMG> Image; icon, glyph or illustration --> -<!-- <IMG SRC="..."> Address of image object --> -<!-- <IMG ALT="..."> Textual alternative --> -<!-- <IMG ALIGN=...> Position relative to text --> -<!-- <IMG ISMAP> Each pixel can be a link --> - -<!--========== Paragraphs=======================--> - -<!ELEMENT P - O (%text)*> -<!ATTLIST P - %SDAFORM; "Para" - > - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 53]</span> -<a name="page-54" id="page-54" href="#page-54" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<!-- <P> Paragraph --> - - -<!--========== Headings, Titles, Sections ===============--> - -<!ELEMENT HR - O EMPTY> -<!ATTLIST HR - %SDAPREF; "&#RE;&#RE;" - > - -<!-- <HR> Horizontal rule --> - -<!ELEMENT ( %heading ) - - (%text;)*> -<!ATTLIST H1 - %SDAFORM; "H1" - > -<!ATTLIST H2 - %SDAFORM; "H2" - > -<!ATTLIST H3 - %SDAFORM; "H3" - > -<!ATTLIST H4 - %SDAFORM; "H4" - > -<!ATTLIST H5 - %SDAFORM; "H5" - > -<!ATTLIST H6 - %SDAFORM; "H6" - > - -<!-- <H1> Heading, level 1 --> -<!-- <H2> Heading, level 2 --> -<!-- <H3> Heading, level 3 --> -<!-- <H4> Heading, level 4 --> -<!-- <H5> Heading, level 5 --> -<!-- <H6> Heading, level 6 --> - - -<!--========== Text Flows ======================--> - -<![ %HTML.Forms [ - <!ENTITY % block.forms "BLOCKQUOTE | FORM | ISINDEX"> -]]> - -<!ENTITY % block.forms "BLOCKQUOTE"> - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 54]</span> -<a name="page-55" id="page-55" href="#page-55" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<![ %HTML.Deprecated [ - <!ENTITY % preformatted "PRE | XMP | LISTING"> -]]> - -<!ENTITY % preformatted "PRE"> - -<!ENTITY % block "P | %list | DL - | %preformatted - | %block.forms"> - -<!ENTITY % flow "(%text|%block)*"> - -<!ENTITY % pre.content "#PCDATA | A | HR | BR"> -<!ELEMENT PRE - - (%pre.content)*> -<!ATTLIST PRE - WIDTH NUMBER #implied - %SDAFORM; "Lit" - > - -<!-- <PRE> Preformatted text --> -<!-- <PRE WIDTH=...> Maximum characters per line --> - -<![ %HTML.Deprecated [ - -<!ENTITY % literal "CDATA" - -- historical, non-conforming parsing mode where - the only markup signal is the end tag - in full - --> - -<!ELEMENT (XMP|LISTING) - - %literal> -<!ATTLIST XMP - %SDAFORM; "Lit" - %SDAPREF; "Example:&#RE;" - > -<!ATTLIST LISTING - %SDAFORM; "Lit" - %SDAPREF; "Listing:&#RE;" - > - -<!-- <XMP> Example section --> -<!-- <LISTING> Computer listing --> - -<!ELEMENT PLAINTEXT - O %literal> -<!-- <PLAINTEXT> Plain text passage --> - -<!ATTLIST PLAINTEXT - %SDAFORM; "Lit" - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 55]</span> -<a name="page-56" id="page-56" href="#page-56" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - > -]]> - -<!--========== Lists ==================--> - -<!ELEMENT DL - - (DT | DD)+> -<!ATTLIST DL - COMPACT (COMPACT) #IMPLIED - %SDAFORM; "List" - %SDAPREF; "Definition List:" - > - -<!ELEMENT DT - O (%text)*> -<!ATTLIST DT - %SDAFORM; "Term" - > - -<!ELEMENT DD - O %flow> -<!ATTLIST DD - %SDAFORM; "LItem" - > - -<!-- <DL> Definition list, or glossary --> -<!-- <DL COMPACT> Compact style list --> -<!-- <DT> Term in definition list --> -<!-- <DD> Definition of term --> - -<!ELEMENT (OL|UL) - - (LI)+> -<!ATTLIST OL - COMPACT (COMPACT) #IMPLIED - %SDAFORM; "List" - > -<!ATTLIST UL - COMPACT (COMPACT) #IMPLIED - %SDAFORM; "List" - > -<!-- <UL> Unordered list --> -<!-- <UL COMPACT> Compact list style --> -<!-- <OL> Ordered, or numbered list --> -<!-- <OL COMPACT> Compact list style --> - - -<!ELEMENT (DIR|MENU) - - (LI)+ -(%block)> -<!ATTLIST DIR - COMPACT (COMPACT) #IMPLIED - %SDAFORM; "List" - %SDAPREF; "<LHead>Directory</LHead>" - > - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 56]</span> -<a name="page-57" id="page-57" href="#page-57" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<!ATTLIST MENU - COMPACT (COMPACT) #IMPLIED - %SDAFORM; "List" - %SDAPREF; "<LHead>Menu</LHead>" - > - -<!-- <DIR> Directory list --> -<!-- <DIR COMPACT> Compact list style --> -<!-- <MENU> Menu list --> -<!-- <MENU COMPACT> Compact list style --> - -<!ELEMENT LI - O %flow> -<!ATTLIST LI - %SDAFORM; "LItem" - > - -<!-- <LI> List item --> - -<!--========== Document Body ===================--> - -<![ %HTML.Recommended [ - <!ENTITY % body.content "(%heading|%block|HR|ADDRESS|IMG)*" - -- <h1>Heading</h1> - <p>Text ... - is preferred to - <h1>Heading</h1> - Text ... - --> -]]> - -<!ENTITY % body.content "(%heading | %text | %block | - HR | ADDRESS)*"> - -<!ELEMENT BODY O O %body.content> - -<!-- <BODY> Document body --> - -<!ELEMENT BLOCKQUOTE - - %body.content> -<!ATTLIST BLOCKQUOTE - %SDAFORM; "BQ" - > - -<!-- <BLOCKQUOTE> Quoted passage --> - -<!ELEMENT ADDRESS - - (%text|P)*> -<!ATTLIST ADDRESS - %SDAFORM; "Lit" - %SDAPREF; "Address:&#RE;" - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 57]</span> -<a name="page-58" id="page-58" href="#page-58" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - > - -<!-- <ADDRESS> Address, signature, or byline --> - - -<!--======= Forms ====================--> - -<![ %HTML.Forms [ - -<!ELEMENT FORM - - %body.content -(FORM) +(INPUT|SELECT|TEXTAREA)> -<!ATTLIST FORM - ACTION CDATA #IMPLIED - METHOD (%HTTP-Method) GET - ENCTYPE %Content-Type; "application/x-www-form-urlencoded" - %SDAPREF; "<Para>Form:</Para>" - %SDASUFF; "<Para>Form End.</Para>" - > - -<!-- <FORM> Fill-out or data-entry form --> -<!-- <FORM ACTION="..."> Address for completed form --> -<!-- <FORM METHOD=...> Method of submitting form --> -<!-- <FORM ENCTYPE="..."> Representation of form data --> - -<!ENTITY % InputType "(TEXT | PASSWORD | CHECKBOX | - RADIO | SUBMIT | RESET | - IMAGE | HIDDEN )"> -<!ELEMENT INPUT - O EMPTY> -<!ATTLIST INPUT - TYPE %InputType TEXT - NAME CDATA #IMPLIED - VALUE CDATA #IMPLIED - SRC CDATA #IMPLIED - CHECKED (CHECKED) #IMPLIED - SIZE CDATA #IMPLIED - MAXLENGTH NUMBER #IMPLIED - ALIGN (top|middle|bottom) #IMPLIED - %SDAPREF; "Input: " - > - -<!-- <INPUT> Form input datum --> -<!-- <INPUT TYPE=...> Type of input interaction --> -<!-- <INPUT NAME=...> Name of form datum --> -<!-- <INPUT VALUE="..."> Default/initial/selected value --> -<!-- <INPUT SRC="..."> Address of image --> -<!-- <INPUT CHECKED> Initial state is "on" --> -<!-- <INPUT SIZE=...> Field size hint --> -<!-- <INPUT MAXLENGTH=...> Data length maximum --> -<!-- <INPUT ALIGN=...> Image alignment --> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 58]</span> -<a name="page-59" id="page-59" href="#page-59" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<!ELEMENT SELECT - - (OPTION+) -(INPUT|SELECT|TEXTAREA)> -<!ATTLIST SELECT - NAME CDATA #REQUIRED - SIZE NUMBER #IMPLIED - MULTIPLE (MULTIPLE) #IMPLIED - %SDAFORM; "List" - %SDAPREF; - "<LHead>Select #AttVal(Multiple)</LHead>" - > - -<!-- <SELECT> Selection of option(s) --> -<!-- <SELECT NAME=...> Name of form datum --> -<!-- <SELECT SIZE=...> Options displayed at a time --> -<!-- <SELECT MULTIPLE> Multiple selections allowed --> - -<!ELEMENT OPTION - O (#PCDATA)*> -<!ATTLIST OPTION - SELECTED (SELECTED) #IMPLIED - VALUE CDATA #IMPLIED - %SDAFORM; "LItem" - %SDAPREF; - "Option: #AttVal(Value) #AttVal(Selected)" - > - -<!-- <OPTION> A selection option --> -<!-- <OPTION SELECTED> Initial state --> -<!-- <OPTION VALUE="..."> Form datum value for this option--> - -<!ELEMENT TEXTAREA - - (#PCDATA)* -(INPUT|SELECT|TEXTAREA)> -<!ATTLIST TEXTAREA - NAME CDATA #REQUIRED - ROWS NUMBER #REQUIRED - COLS NUMBER #REQUIRED - %SDAFORM; "Para" - %SDAPREF; "Input Text -- #AttVal(Name): " - > - -<!-- <TEXTAREA> An area for text input --> -<!-- <TEXTAREA NAME=...> Name of form datum --> -<!-- <TEXTAREA ROWS=...> Height of area --> -<!-- <TEXTAREA COLS=...> Width of area --> - -]]> - - -<!--======= Document Head ======================--> - -<![ %HTML.Recommended [ - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 59]</span> -<a name="page-60" id="page-60" href="#page-60" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - <!ENTITY % head.extra ""> -]]> -<!ENTITY % head.extra "& NEXTID?"> - -<!ENTITY % head.content "TITLE & ISINDEX? & BASE? %head.extra"> - -<!ELEMENT HEAD O O (%head.content) +(META|LINK)> - -<!-- <HEAD> Document head --> - -<!ELEMENT TITLE - - (#PCDATA)* -(META|LINK)> -<!ATTLIST TITLE - %SDAFORM; "Ti" > - -<!-- <TITLE> Title of document --> - -<!ELEMENT LINK - O EMPTY> -<!ATTLIST LINK - HREF CDATA #REQUIRED - %linkExtraAttributes; - %SDAPREF; "Linked to : #AttVal (TITLE) (URN) (HREF)>" > - -<!-- <LINK> Link from this document --> -<!-- <LINK HREF="..."> Address of link destination --> -<!-- <LINK URN="..."> Lasting name of destination --> -<!-- <LINK REL=...> Relationship to destination --> -<!-- <LINK REV=...> Relationship of destination to this --> -<!-- <LINK TITLE="..."> Title of destination (advisory) --> -<!-- <LINK METHODS="..."> Operations allowed (advisory) --> - -<!ELEMENT ISINDEX - O EMPTY> -<!ATTLIST ISINDEX - %SDAPREF; - "<Para>[Document is indexed/searchable.]</Para>"> - -<!-- <ISINDEX> Document is a searchable index --> - -<!ELEMENT BASE - O EMPTY> -<!ATTLIST BASE - HREF CDATA #REQUIRED > - -<!-- <BASE> Base context document --> -<!-- <BASE HREF="..."> Address for this document --> - -<!ELEMENT NEXTID - O EMPTY> -<!ATTLIST NEXTID - N CDATA #REQUIRED > - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 60]</span> -<a name="page-61" id="page-61" href="#page-61" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<!-- <NEXTID> Next ID to use for link name --> -<!-- <NEXTID N=...> Next ID to use for link name --> - -<!ELEMENT META - O EMPTY> -<!ATTLIST META - HTTP-EQUIV NAME #IMPLIED - NAME NAME #IMPLIED - CONTENT CDATA #REQUIRED > - -<!-- <META> Generic Meta-information --> -<!-- <META HTTP-EQUIV=...> HTTP response header name --> -<!-- <META NAME=...> Meta-information name --> -<!-- <META CONTENT="..."> Associated information --> - -<!--======= Document Structure =================--> - -<![ %HTML.Deprecated [ - <!ENTITY % html.content "HEAD, BODY, PLAINTEXT?"> -]]> -<!ENTITY % html.content "HEAD, BODY"> - -<!ELEMENT HTML O O (%html.content)> -<!ENTITY % version.attr "VERSION CDATA #FIXED '%HTML.Version;'"> - -<!ATTLIST HTML - %version.attr; - %SDAFORM; "Book" - > - -<!-- <HTML> HTML Document --> - -<span class="h3"><a name="section-9.2">9.2</a>. Strict HTML DTD</span> - - This document type declaration refers to the HTML DTD with the - `HTML.Recommended' entity defined as `INCLUDE' rather than IGNORE; - that is, it refers to the more structurally rigid definition of HTML. - -<!-- html-s.dtd - - Document Type Definition for the HyperText Markup Language - with strict validation (HTML Strict DTD). - - $Id: html-s.dtd,v 1.3 1995/06/02 18:55:46 connolly Exp $ - - Author: Daniel W. Connolly <connolly@w3.org> - See Also: <a href="http://www.w3.org/hypertext/WWW/MarkUp/MarkUp.html">http://www.w3.org/hypertext/WWW/MarkUp/MarkUp.html</a> ---> - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 61]</span> -<a name="page-62" id="page-62" href="#page-62" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<!ENTITY % HTML.Version - "-//IETF//DTD HTML 2.0 Strict//EN" - - -- Typical usage: - - <!DOCTYPE HTML PUBLIC - "-//IETF//DTD HTML Strict//EN"> - <html> - ... - </html> - -- - > - -<!-- Feature Test Entities --> -<!ENTITY % HTML.Recommended "INCLUDE"> - -<!ENTITY % html PUBLIC "-//IETF//DTD HTML 2.0//EN"> -%html; - -<span class="h3"><a name="section-9.3">9.3</a>. Level 1 HTML DTD</span> - - This document type declaration refers to the HTML DTD with the - `HTML.Forms' entity defined as `IGNORE' rather than `INCLUDE'. - Documents which contain <FORM> elements do not conform to this DTD, - and must use the level 2 DTD. - -<!-- html-1.dtd - - Document Type Definition for the HyperText Markup Language - with Level 1 Extensions (HTML Level 1 DTD). - - $Id: html-1.dtd,v 1.2 1995/03/29 18:53:10 connolly Exp $ - - Author: Daniel W. Connolly <connolly@w3.org> - See Also: <a href="http://info.cern.ch/hypertext/WWW/MarkUp/MarkUp.html">http://info.cern.ch/hypertext/WWW/MarkUp/MarkUp.html</a> - ---> - -<!ENTITY % HTML.Version - "-//IETF//DTD HTML 2.0 Level 1//EN" - - -- Typical usage: - - <!DOCTYPE HTML PUBLIC - "-//IETF//DTD HTML Level 1//EN"> - <html> - ... - </html> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 62]</span> -<a name="page-63" id="page-63" href="#page-63" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - -- - > - -<!-- Feature Test Entities --> -<!ENTITY % HTML.Forms "IGNORE"> - -<!ENTITY % html PUBLIC "-//IETF//DTD HTML 2.0//EN"> -%html; - -<span class="h3"><a name="section-9.4">9.4</a>. Strict Level 1 HTML DTD</span> - - This document type declaration refers to the level 1 HTML DTD with - the `HTML.Recommended' entity defined as `INCLUDE' rather than - IGNORE; that is, it refers to the more structurally rigid definition - of HTML. - -<!-- html-1s.dtd - - Document Type Definition for the HyperText Markup Language - Struct Level 1 - - $Id: html-1s.dtd,v 1.3 1995/06/02 18:55:43 connolly Exp $ - - Author: Daniel W. Connolly <connolly@w3.org> - See Also: <a href="http://www.w3.org/hypertext/WWW/MarkUp/MarkUp.html">http://www.w3.org/hypertext/WWW/MarkUp/MarkUp.html</a> ---> - -<!ENTITY % HTML.Version - "-//IETF//DTD HTML 2.0 Strict Level 1//EN" - - -- Typical usage: - - <!DOCTYPE HTML PUBLIC - "-//IETF//DTD HTML Strict Level 1//EN"> - <html> - ... - </html> - -- - > - -<!-- Feature Test Entities --> - - -<!ENTITY % HTML.Recommended "INCLUDE"> - -<!ENTITY % html-1 PUBLIC "-//IETF//DTD HTML 2.0 Level 1//EN"> -%html-1; - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 63]</span> -<a name="page-64" id="page-64" href="#page-64" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h3"><a name="section-9.5">9.5</a>. SGML Declaration for HTML</span> - - This is the SGML Declaration for HyperText Markup Language. - -<!SGML "ISO 8879:1986" --- - SGML Declaration for HyperText Markup Language (HTML). - --- - -CHARSET - BASESET "ISO 646:1983//CHARSET - International Reference Version - (IRV)//ESC 2/5 4/0" - DESCSET 0 9 UNUSED - 9 2 9 - 11 2 UNUSED - 13 1 13 - 14 18 UNUSED - 32 95 32 - 127 1 UNUSED - BASESET "ISO Registration Number 100//CHARSET - ECMA-94 Right Part of - Latin Alphabet Nr. 1//ESC 2/13 4/1" - - DESCSET 128 32 UNUSED - 160 96 32 - -<span class="h1"><a name="appendix-CAPACITY">CAPACITY</a> SGMLREF</span> - TOTALCAP 150000 - GRPCAP 150000 - ENTCAP 150000 - -<span class="h1"><a name="appendix-SCOPE">SCOPE</a> DOCUMENT</span> -SYNTAX - SHUNCHAR CONTROLS 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 - 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 127 - BASESET "ISO 646:1983//CHARSET - International Reference Version - (IRV)//ESC 2/5 4/0" - DESCSET 0 128 0 - FUNCTION - RE 13 - RS 10 - SPACE 32 - TAB SEPCHAR 9 - NAMING LCNMSTRT "" - UCNMSTRT "" - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 64]</span> -<a name="page-65" id="page-65" href="#page-65" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - LCNMCHAR ".-" - UCNMCHAR ".-" - NAMECASE GENERAL YES - ENTITY NO - DELIM GENERAL SGMLREF - SHORTREF SGMLREF - NAMES SGMLREF - QUANTITY SGMLREF - ATTSPLEN 2100 - LITLEN 1024 - NAMELEN 72 -- somewhat arbitrary; taken from - internet line length conventions -- - PILEN 1024 - TAGLVL 100 - TAGLEN 2100 - GRPGTCNT 150 - GRPCNT 64 - -FEATURES - MINIMIZE - DATATAG NO - OMITTAG YES - RANK NO - SHORTTAG YES - LINK - SIMPLE NO - IMPLICIT NO - EXPLICIT NO - OTHER - CONCUR NO - SUBDOC NO - FORMAL YES - APPINFO "SDA" -- conforming SGML Document Access application - -- -> -<!-- - $Id: html.decl,v 1.17 1995/06/08 14:59:32 connolly Exp $ - - Author: Daniel W. Connolly <connolly@w3.org> - - See also: <a href="http://www.w3.org/hypertext/WWW/MarkUp/MarkUp.html">http://www.w3.org/hypertext/WWW/MarkUp/MarkUp.html</a> - --> - -<span class="h3"><a name="section-9.6">9.6</a>. Sample SGML Open Entity Catalog for HTML</span> - - The SGML standard describes an "entity manager" as the portion or - component of an SGML system that maps SGML entities into the actual - storage model (e.g., the file system). The standard itself does not - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 65]</span> -<a name="page-66" id="page-66" href="#page-66" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - define a particular mapping methodology or notation. - - To assist the interoperability among various SGML tools and systems, - the SGML Open consortium has passed a technical resolution that - defines a format for an application-independent entity catalog that - maps external identifiers and/or entity names to file names. - - Each entry in the catalog associates a storage object identifier - (such as a file name) with information about the external entity that - appears in the SGML document. In addition to entries that associate - public identifiers, a catalog entry can associate an entity name with - a storage object identifier. For example, the following are possible - catalog entries: - - -- catalog: SGML Open style entity catalog for HTML -- - -- $Id: catalog,v 1.3 1995/09/21 23:30:23 connolly Exp $ -- - - -- Ways to refer to Level 2: most general to most specific -- -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "-//IETF//DTD HTML//EN" html.dtd</span> -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "-//IETF//DTD HTML 2.0//EN" html.dtd</span> -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "-//IETF//DTD HTML Level 2//EN" html.dtd</span> -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "-//IETF//DTD HTML 2.0 Level 2//EN" html.dtd</span> - - -- Ways to refer to Level 1: most general to most specific -- -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "-//IETF//DTD HTML Level 1//EN" html-1.dtd</span> -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "-//IETF//DTD HTML 2.0 Level 1//EN" html-1.dtd</span> - - -- Ways to refer to - Strict Level 2: most general to most specific -- -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "-//IETF//DTD HTML Strict//EN" html-s.dtd</span> -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "-//IETF//DTD HTML 2.0 Strict//EN" html-s.dtd</span> -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "-//IETF//DTD HTML Strict Level 2//EN" html-s.dtd</span> -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "-//IETF//DTD HTML 2.0 Strict Level 2//EN" html-s.dtd</span> - - -- Ways to refer to - Strict Level 1: most general to most specific -- -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "-//IETF//DTD HTML Strict Level 1//EN" html-1s.dtd</span> -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "-//IETF//DTD HTML 2.0 Strict Level 1//EN" html-1s.dtd</span> - - -- ISO latin 1 entity set for HTML -- -<span class="h1"><a name="appendix-PUBLIC">PUBLIC</a> "ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML" ISOlat1\</span> -sgml - -<span class="h3"><a name="section-9.7">9.7</a>. Character Entity Sets</span> - - The HTML DTD defines the following entities. They represent - particular graphic characters which have special meanings in places - in the markup, or may not be part of the character set available to - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 66]</span> -<a name="page-67" id="page-67" href="#page-67" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - the writer. - -<span class="h4"><a name="section-9.7.1">9.7.1</a>. Numeric and Special Graphic Entity Set</span> - - The following table lists each of the characters included from the - Numeric and Special Graphic entity set, along with its name, syntax - for use, and description. This list is derived from `ISO Standard - 8879:1986//ENTITIES Numeric and Special Graphic//EN'. However, HTML - does not include for the entire entity set -- only the entities - listed below are included. - - GLYPH NAME SYNTAX DESCRIPTION - < lt &lt; Less than sign - > gt &gt; Greater than signn - & amp &amp; Ampersand - " quot &quot; Double quote sign - -<span class="h4"><a name="section-9.7.2">9.7.2</a>. ISO Latin 1 Character Entity Set</span> - - The following public text lists each of the characters specified in - the Added Latin 1 entity set, along with its name, syntax for use, - and description. This list is derived from ISO Standard - 8879:1986//ENTITIES Added Latin 1//EN. HTML includes the entire - entity set. - -<!-- (C) International Organization for Standardization 1986 - Permission to copy in any form is granted for use with - conforming SGML systems and applications as defined in - ISO 8879, provided this notice is included in all copies. ---> -<!-- Character entity set. Typical invocation: - <!ENTITY % ISOlat1 PUBLIC - "ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML"> - %ISOlat1; ---> -<!-- Modified for use in HTML - $Id: ISOlat1.sgml,v 1.2 1994/11/30 23:45:12 connolly Exp $ --> -<!ENTITY AElig CDATA "&#198;" -- capital AE diphthong (ligature) --> -<!ENTITY Aacute CDATA "&#193;" -- capital A, acute accent --> -<!ENTITY Acirc CDATA "&#194;" -- capital A, circumflex accent --> -<!ENTITY Agrave CDATA "&#192;" -- capital A, grave accent --> -<!ENTITY Aring CDATA "&#197;" -- capital A, ring --> -<!ENTITY Atilde CDATA "&#195;" -- capital A, tilde --> -<!ENTITY Auml CDATA "&#196;" -- capital A, dieresis or umlaut mark --> -<!ENTITY Ccedil CDATA "&#199;" -- capital C, cedilla --> -<!ENTITY ETH CDATA "&#208;" -- capital Eth, Icelandic --> -<!ENTITY Eacute CDATA "&#201;" -- capital E, acute accent --> -<!ENTITY Ecirc CDATA "&#202;" -- capital E, circumflex accent --> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 67]</span> -<a name="page-68" id="page-68" href="#page-68" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<!ENTITY Egrave CDATA "&#200;" -- capital E, grave accent --> -<!ENTITY Euml CDATA "&#203;" -- capital E, dieresis or umlaut mark --> -<!ENTITY Iacute CDATA "&#205;" -- capital I, acute accent --> -<!ENTITY Icirc CDATA "&#206;" -- capital I, circumflex accent --> -<!ENTITY Igrave CDATA "&#204;" -- capital I, grave accent --> -<!ENTITY Iuml CDATA "&#207;" -- capital I, dieresis or umlaut mark --> -<!ENTITY Ntilde CDATA "&#209;" -- capital N, tilde --> -<!ENTITY Oacute CDATA "&#211;" -- capital O, acute accent --> -<!ENTITY Ocirc CDATA "&#212;" -- capital O, circumflex accent --> -<!ENTITY Ograve CDATA "&#210;" -- capital O, grave accent --> -<!ENTITY Oslash CDATA "&#216;" -- capital O, slash --> -<!ENTITY Otilde CDATA "&#213;" -- capital O, tilde --> -<!ENTITY Ouml CDATA "&#214;" -- capital O, dieresis or umlaut mark --> -<!ENTITY THORN CDATA "&#222;" -- capital THORN, Icelandic --> -<!ENTITY Uacute CDATA "&#218;" -- capital U, acute accent --> -<!ENTITY Ucirc CDATA "&#219;" -- capital U, circumflex accent --> -<!ENTITY Ugrave CDATA "&#217;" -- capital U, grave accent --> -<!ENTITY Uuml CDATA "&#220;" -- capital U, dieresis or umlaut mark --> -<!ENTITY Yacute CDATA "&#221;" -- capital Y, acute accent --> -<!ENTITY aacute CDATA "&#225;" -- small a, acute accent --> -<!ENTITY acirc CDATA "&#226;" -- small a, circumflex accent --> -<!ENTITY aelig CDATA "&#230;" -- small ae diphthong (ligature) --> -<!ENTITY agrave CDATA "&#224;" -- small a, grave accent --> -<!ENTITY aring CDATA "&#229;" -- small a, ring --> -<!ENTITY atilde CDATA "&#227;" -- small a, tilde --> -<!ENTITY auml CDATA "&#228;" -- small a, dieresis or umlaut mark --> -<!ENTITY ccedil CDATA "&#231;" -- small c, cedilla --> -<!ENTITY eacute CDATA "&#233;" -- small e, acute accent --> -<!ENTITY ecirc CDATA "&#234;" -- small e, circumflex accent --> -<!ENTITY egrave CDATA "&#232;" -- small e, grave accent --> -<!ENTITY eth CDATA "&#240;" -- small eth, Icelandic --> -<!ENTITY euml CDATA "&#235;" -- small e, dieresis or umlaut mark --> -<!ENTITY iacute CDATA "&#237;" -- small i, acute accent --> -<!ENTITY icirc CDATA "&#238;" -- small i, circumflex accent --> -<!ENTITY igrave CDATA "&#236;" -- small i, grave accent --> -<!ENTITY iuml CDATA "&#239;" -- small i, dieresis or umlaut mark --> -<!ENTITY ntilde CDATA "&#241;" -- small n, tilde --> -<!ENTITY oacute CDATA "&#243;" -- small o, acute accent --> -<!ENTITY ocirc CDATA "&#244;" -- small o, circumflex accent --> -<!ENTITY ograve CDATA "&#242;" -- small o, grave accent --> -<!ENTITY oslash CDATA "&#248;" -- small o, slash --> -<!ENTITY otilde CDATA "&#245;" -- small o, tilde --> -<!ENTITY ouml CDATA "&#246;" -- small o, dieresis or umlaut mark --> -<!ENTITY szlig CDATA "&#223;" -- small sharp s, German (sz ligature)-> -<!ENTITY thorn CDATA "&#254;" -- small thorn, Icelandic --> -<!ENTITY uacute CDATA "&#250;" -- small u, acute accent --> -<!ENTITY ucirc CDATA "&#251;" -- small u, circumflex accent --> -<!ENTITY ugrave CDATA "&#249;" -- small u, grave accent --> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 68]</span> -<a name="page-69" id="page-69" href="#page-69" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<!ENTITY uuml CDATA "&#252;" -- small u, dieresis or umlaut mark --> -<!ENTITY yacute CDATA "&#253;" -- small y, acute accent --> -<!ENTITY yuml CDATA "&#255;" -- small y, dieresis or umlaut mark --> - -<span class="h2"><a name="section-10">10</a>. Security Considerations</span> - - Anchors, embedded images, and all other elements which contain URIs - as parameters may cause the URI to be dereferenced in response to - user input. In this case, the security considerations of [<a href="#ref-URL" title='"Uniform Resource Locators (URL)"'>URL</a>] apply. - - The widely deployed methods for submitting forms requests -- HTTP and - SMTP -- provide little assurance of confidentiality. Information - providers who request sensitive information via forms -- especially - by way of the `PASSWORD' type input field (see 8.1.2, "Input Field: - INPUT") -- should be aware and make their users aware of the lack of - confidentiality. - -<span class="h2"><a name="section-11">11</a>. References</span> - - [<a name="ref-URI" id="ref-URI">URI</a>] - Berners-Lee, T., "Universal Resource Identifiers in WWW: - A Unifying Syntax for the Expression of Names and - Addresses of Objects on the Network as used in the - World- Wide Web", <a href="./rfc1630">RFC 1630</a>, CERN, June 1994. - <URL:ftp://ds.internic.net/rfc/rfc1630.txt> - - [<a name="ref-URL" id="ref-URL">URL</a>] - Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform - Resource Locators (URL)", <a href="./rfc1738">RFC 1738</a>, CERN, Xerox PARC, - University of Minnesota, December 1994. - <URL:ftp://ds.internic.net/rfc/rfc1738.txt> - - [<a name="ref-HTTP" id="ref-HTTP">HTTP</a>] - Berners-Lee, T., Fielding, R., and H. Frystyk Nielsen, - "Hypertext Transfer Protocol - HTTP/1.0", Work in - Progress, MIT, UC Irvine, CERN, March 1995. - - [<a name="ref-MIME" id="ref-MIME">MIME</a>] - Borenstein, N., and N. Freed. "MIME (Multipurpose - Internet Mail Extensions) Part One: Mechanisms for - Specifying and Describing the Format of Internet Message - Bodies", <a href="./rfc1521">RFC 1521</a>, Bellcore, Innosoft, September 1993. - <URL:ftp://ds.internic.net/rfc/rfc1521.txt> - - [<a name="ref-RELURL" id="ref-RELURL">RELURL</a>] - Fielding, R., "Relative Uniform Resource Locators", <a href="./rfc1808">RFC</a> - <a href="./rfc1808">1808</a>, June 1995 - <URL:ftp://ds.internic.net/rfc/rfc1808.txt> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 69]</span> -<a name="page-70" id="page-70" href="#page-70" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - [<a name="ref-GOLD90" id="ref-GOLD90">GOLD90</a>] - Goldfarb, C., "The SGML Handbook", Y. Rubinsky, Ed., - Oxford University Press, 1990. - - [<a name="ref-DEXTER" id="ref-DEXTER">DEXTER</a>] - Frank Halasz and Mayer Schwartz, "The Dexter Hypertext - Reference Model", Communications of the ACM, pp. - 30-39, vol. 37 no. 2, Feb 1994. - - [<a name="ref-IMEDIA" id="ref-IMEDIA">IMEDIA</a>] - Postel, J., "Media Type Registration Procedure", - <a href="./rfc1590">RFC 1590</a>, USC/Information Sciences Institute, March 1994. - <URL:ftp://ds.internic.net/rfc/rfc1590.txt> - - [<a name="ref-IANA" id="ref-IANA">IANA</a>] - Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, - <a href="./rfc1700">RFC 1700</a>, USC/Information Sciecnes Institute, October - 1994. <URL:ftp://ds.internic.net/rfc/rfc1700.txt> - - [<a name="ref-SQ91" id="ref-SQ91">SQ91</a>] - SoftQuad. "The SGML Primer", 3rd ed., SoftQuad Inc., - 1991. <URL:http://www.sq.com/> - - [<a name="ref-ISO-646" id="ref-ISO-646">ISO-646</a>] - ISO/IEC 646:1991 Information technology -- ISO 7-bit - coded character set for information interchange - <URL:http://www.iso.ch/cate/d4777.html> - - [<a name="ref-ISO-10646" id="ref-ISO-10646">ISO-10646</a>] - ISO/IEC 10646-1:1993 Information technology -- Universal - Multiple-Octet Coded Character Set (UCS) -- Part 1: - Architecture and Basic Multilingual Plane - <URL:http://www.iso.ch/cate/d18741.html> - - [<a name="ref-ISO-8859-1" id="ref-ISO-8859-1">ISO-8859-1</a>] - ISO 8859. International Standard -- Information - Processing -- 8-bit Single-Byte Coded Graphic Character - Sets -- Part 1: Latin Alphabet No. 1, ISO 8859-1:1987. - <URL:http://www.iso.ch/cate/d16338.html> - - [<a name="ref-SGML" id="ref-SGML">SGML</a>] - ISO 8879. Information Processing -- Text and Office - Systems - Standard Generalized Markup Language (SGML), - 1986. <URL:http://www.iso.ch/cate/d16387.html> - - - - - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 70]</span> -<a name="page-71" id="page-71" href="#page-71" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h2"><a name="section-12">12</a>. Acknowledgments</span> - - The HTML document type was designed by Tim Berners-Lee at CERN as - part of the 1990 World Wide Web project. In 1992, Dan Connolly wrote - the HTML Document Type Definition (DTD) and a brief HTML - specification. - - Since 1993, a wide variety of Internet participants have contributed - to the evolution of HTML, which has included the addition of in-line - images introduced by the NCSA Mosaic software for WWW. Dave Raggett - played an important role in deriving the forms material from the - HTML+ specification. - - Dan Connolly and Karen Olson Muldrow rewrote the HTML Specification - in 1994. The document was then edited by the HTML working group as a - whole, with updates being made by Eric Schieler, Mike Knezovich, and - Eric W. Sink at Spyglass, Inc. Finally, Roy Fielding restructured - the entire draft into its current form. - - Special thanks to the many active participants in the HTML working - group, too numerous to list individually, without whom there would be - no standards process and no standard. That this document approaches - its objective of carefully converging a description of current - practice and formalization of HTML's relationship to SGML is a - tribute to their effort. - -<span class="h3"><a name="section-12.1">12.1</a>. Authors' Addresses</span> - - Tim Berners-Lee - Director, W3 Consortium - MIT Laboratory for Computer Science - 545 Technology Square - Cambridge, MA 02139, U.S.A. - - Phone: +1 (617) 253 9670 - Fax: +1 (617) 258 8682 - EMail: timbl@w3.org - - - Daniel W. Connolly - Research Technical Staff, W3 Consortium - MIT Laboratory for Computer Science - 545 Technology Square - Cambridge, MA 02139, U.S.A. - - Phone: +1 (617) 258 8682 - EMail: connolly@w3.org - URI: <a href="http://www.w3.org/hypertext/WWW/People/Connolly/">http://www.w3.org/hypertext/WWW/People/Connolly/</a> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 71]</span> -<a name="page-72" id="page-72" href="#page-72" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - -<span class="h2"><a name="section-13">13</a>. The HTML Coded Character Set</span> - - This list details the code positions and characters of the HTML - document character set, specified in 9.5, "SGML Declaration for - HTML". This coded character set is based on [<a href="#ref-ISO-8859-1">ISO-8859-1</a>]. - - REFERENCE DESCRIPTION - -------------- ----------- - &#00; - &#08; Unused - &#09; Horizontal tab - &#10; Line feed - &#11; - &#12; Unused - &#13; Carriage Return - &#14; - &#31; Unused - &#32; Space - &#33; Exclamation mark - &#34; Quotation mark - &#35; Number sign - &#36; Dollar sign - &#37; Percent sign - &#38; Ampersand - &#39; Apostrophe - &#40; Left parenthesis - &#41; Right parenthesis - &#42; Asterisk - &#43; Plus sign - &#44; Comma - &#45; Hyphen - &#46; Period (fullstop) - &#47; Solidus (slash) - &#48; - &#57; Digits 0-9 - &#58; Colon - &#59; Semi-colon - &#60; Less than - &#61; Equals sign - &#62; Greater than - &#63; Question mark - &#64; Commercial at - &#65; - &#90; Letters A-Z - &#91; Left square bracket - &#92; Reverse solidus (backslash) - &#93; Right square bracket - &#94; Caret - &#95; Horizontal bar (underscore) - &#96; Acute accent - &#97; - &#122; Letters a-z - &#123; Left curly brace - &#124; Vertical bar - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 72]</span> -<a name="page-73" id="page-73" href="#page-73" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - &#125; Right curly brace - &#126; Tilde - &#127; - &#159; Unused - &#160; Non-breaking Space - &#161; Inverted exclamation - &#162; Cent sign - &#163; Pound sterling - &#164; General currency sign - &#165; Yen sign - &#166; Broken vertical bar - &#167; Section sign - &#168; Umlaut (dieresis) - &#169; Copyright - &#170; Feminine ordinal - &#171; Left angle quote, guillemotleft - &#172; Not sign - &#173; Soft hyphen - &#174; Registered trademark - &#175; Macron accent - &#176; Degree sign - &#177; Plus or minus - &#178; Superscript two - &#179; Superscript three - &#180; Acute accent - &#181; Micro sign - &#182; Paragraph sign - &#183; Middle dot - &#184; Cedilla - &#185; Superscript one - &#186; Masculine ordinal - &#187; Right angle quote, guillemotright - &#188; Fraction one-fourth - &#189; Fraction one-half - &#190; Fraction three-fourths - &#191; Inverted question mark - &#192; Capital A, grave accent - &#193; Capital A, acute accent - &#194; Capital A, circumflex accent - &#195; Capital A, tilde - &#196; Capital A, dieresis or umlaut mark - &#197; Capital A, ring - &#198; Capital AE dipthong (ligature) - &#199; Capital C, cedilla - &#200; Capital E, grave accent - &#201; Capital E, acute accent - &#202; Capital E, circumflex accent - &#203; Capital E, dieresis or umlaut mark - &#204; Capital I, grave accent - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 73]</span> -<a name="page-74" id="page-74" href="#page-74" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - &#205; Capital I, acute accent - &#206; Capital I, circumflex accent - &#207; Capital I, dieresis or umlaut mark - &#208; Capital Eth, Icelandic - &#209; Capital N, tilde - &#210; Capital O, grave accent - &#211; Capital O, acute accent - &#212; Capital O, circumflex accent - &#213; Capital O, tilde - &#214; Capital O, dieresis or umlaut mark - &#215; Multiply sign - &#216; Capital O, slash - &#217; Capital U, grave accent - &#218; Capital U, acute accent - &#219; Capital U, circumflex accent - &#220; Capital U, dieresis or umlaut mark - &#221; Capital Y, acute accent - &#222; Capital THORN, Icelandic - &#223; Small sharp s, German (sz ligature) - &#224; Small a, grave accent - &#225; Small a, acute accent - &#226; Small a, circumflex accent - &#227; Small a, tilde - &#228; Small a, dieresis or umlaut mark - &#229; Small a, ring - &#230; Small ae dipthong (ligature) - &#231; Small c, cedilla - &#232; Small e, grave accent - &#233; Small e, acute accent - &#234; Small e, circumflex accent - &#235; Small e, dieresis or umlaut mark - &#236; Small i, grave accent - &#237; Small i, acute accent - &#238; Small i, circumflex accent - &#239; Small i, dieresis or umlaut mark - &#240; Small eth, Icelandic - &#241; Small n, tilde - &#242; Small o, grave accent - &#243; Small o, acute accent - &#244; Small o, circumflex accent - &#245; Small o, tilde - &#246; Small o, dieresis or umlaut mark - &#247; Division sign - &#248; Small o, slash - &#249; Small u, grave accent - &#250; Small u, acute accent - &#251; Small u, circumflex accent - &#252; Small u, dieresis or umlaut mark - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 74]</span> -<a name="page-75" id="page-75" href="#page-75" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - &#253; Small y, acute accent - &#254; Small thorn, Icelandic - &#255; Small y, dieresis or umlaut mark - -<span class="h2"><a name="section-14">14</a>. Proposed Entities</span> - - The HTML DTD references the "Added Latin 1" entity set, which only - supplies named entities for a subset of the non-ASCII characters in - [<a href="#ref-ISO-8859-1">ISO-8859-1</a>], namely the accented characters. The following entities - should be supported so that all ISO 8859-1 characters may only be - referenced symbolically. The names for these entities are taken from - the appendixes of [<a href="#ref-SGML">SGML</a>]. - - <!ENTITY nbsp CDATA "&#160;" -- no-break space --> - <!ENTITY iexcl CDATA "&#161;" -- inverted exclamation mark --> - <!ENTITY cent CDATA "&#162;" -- cent sign --> - <!ENTITY pound CDATA "&#163;" -- pound sterling sign --> - <!ENTITY curren CDATA "&#164;" -- general currency sign --> - <!ENTITY yen CDATA "&#165;" -- yen sign --> - <!ENTITY brvbar CDATA "&#166;" -- broken (vertical) bar --> - <!ENTITY sect CDATA "&#167;" -- section sign --> - <!ENTITY uml CDATA "&#168;" -- umlaut (dieresis) --> - <!ENTITY copy CDATA "&#169;" -- copyright sign --> - <!ENTITY ordf CDATA "&#170;" -- ordinal indicator, feminine --> - <!ENTITY laquo CDATA "&#171;" -- angle quotation mark, left --> - <!ENTITY not CDATA "&#172;" -- not sign --> - <!ENTITY shy CDATA "&#173;" -- soft hyphen --> - <!ENTITY reg CDATA "&#174;" -- registered sign --> - <!ENTITY macr CDATA "&#175;" -- macron --> - <!ENTITY deg CDATA "&#176;" -- degree sign --> - <!ENTITY plusmn CDATA "&#177;" -- plus-or-minus sign --> - <!ENTITY sup2 CDATA "&#178;" -- superscript two --> - <!ENTITY sup3 CDATA "&#179;" -- superscript three --> - <!ENTITY acute CDATA "&#180;" -- acute accent --> - <!ENTITY micro CDATA "&#181;" -- micro sign --> - <!ENTITY para CDATA "&#182;" -- pilcrow (paragraph sign) --> - <!ENTITY middot CDATA "&#183;" -- middle dot --> - <!ENTITY cedil CDATA "&#184;" -- cedilla --> - <!ENTITY sup1 CDATA "&#185;" -- superscript one --> - <!ENTITY ordm CDATA "&#186;" -- ordinal indicator, masculine --> - <!ENTITY raquo CDATA "&#187;" -- angle quotation mark, right --> - <!ENTITY frac14 CDATA "&#188;" -- fraction one-quarter --> - <!ENTITY frac12 CDATA "&#189;" -- fraction one-half --> - <!ENTITY frac34 CDATA "&#190;" -- fraction three-quarters --> - <!ENTITY iquest CDATA "&#191;" -- inverted question mark --> - <!ENTITY Agrave CDATA "&#192;" -- capital A, grave accent --> - <!ENTITY Aacute CDATA "&#193;" -- capital A, acute accent --> - <!ENTITY Acirc CDATA "&#194;" -- capital A, circumflex accent --> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 75]</span> -<a name="page-76" id="page-76" href="#page-76" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - <!ENTITY Atilde CDATA "&#195;" -- capital A, tilde --> - <!ENTITY Auml CDATA "&#196;" -- capital A, dieresis or umlaut mark --> - <!ENTITY Aring CDATA "&#197;" -- capital A, ring --> - <!ENTITY AElig CDATA "&#198;" -- capital AE diphthong (ligature) --> - <!ENTITY Ccedil CDATA "&#199;" -- capital C, cedilla --> - <!ENTITY Egrave CDATA "&#200;" -- capital E, grave accent --> - <!ENTITY Eacute CDATA "&#201;" -- capital E, acute accent --> - <!ENTITY Ecirc CDATA "&#202;" -- capital E, circumflex accent --> - <!ENTITY Euml CDATA "&#203;" -- capital E, dieresis or umlaut mark --> - <!ENTITY Igrave CDATA "&#204;" -- capital I, grave accent --> - <!ENTITY Iacute CDATA "&#205;" -- capital I, acute accent --> - <!ENTITY Icirc CDATA "&#206;" -- capital I, circumflex accent --> - <!ENTITY Iuml CDATA "&#207;" -- capital I, dieresis or umlaut mark --> - <!ENTITY ETH CDATA "&#208;" -- capital Eth, Icelandic --> - <!ENTITY Ntilde CDATA "&#209;" -- capital N, tilde --> - <!ENTITY Ograve CDATA "&#210;" -- capital O, grave accent --> - <!ENTITY Oacute CDATA "&#211;" -- capital O, acute accent --> - <!ENTITY Ocirc CDATA "&#212;" -- capital O, circumflex accent --> - <!ENTITY Otilde CDATA "&#213;" -- capital O, tilde --> - <!ENTITY Ouml CDATA "&#214;" -- capital O, dieresis or umlaut mark --> - <!ENTITY times CDATA "&#215;" -- multiply sign --> - <!ENTITY Oslash CDATA "&#216;" -- capital O, slash --> - <!ENTITY Ugrave CDATA "&#217;" -- capital U, grave accent --> - <!ENTITY Uacute CDATA "&#218;" -- capital U, acute accent --> - <!ENTITY Ucirc CDATA "&#219;" -- capital U, circumflex accent --> - <!ENTITY Uuml CDATA "&#220;" -- capital U, dieresis or umlaut mark --> - <!ENTITY Yacute CDATA "&#221;" -- capital Y, acute accent --> - <!ENTITY THORN CDATA "&#222;" -- capital THORN, Icelandic --> - <!ENTITY szlig CDATA "&#223;" -- small sharp s, German (sz ligature) --> - <!ENTITY agrave CDATA "&#224;" -- small a, grave accent --> - <!ENTITY aacute CDATA "&#225;" -- small a, acute accent --> - <!ENTITY acirc CDATA "&#226;" -- small a, circumflex accent --> - <!ENTITY atilde CDATA "&#227;" -- small a, tilde --> - <!ENTITY auml CDATA "&#228;" -- small a, dieresis or umlaut mark --> - <!ENTITY aring CDATA "&#229;" -- small a, ring --> - <!ENTITY aelig CDATA "&#230;" -- small ae diphthong (ligature) --> - <!ENTITY ccedil CDATA "&#231;" -- small c, cedilla --> - <!ENTITY egrave CDATA "&#232;" -- small e, grave accent --> - <!ENTITY eacute CDATA "&#233;" -- small e, acute accent --> - <!ENTITY ecirc CDATA "&#234;" -- small e, circumflex accent --> - <!ENTITY euml CDATA "&#235;" -- small e, dieresis or umlaut mark --> - <!ENTITY igrave CDATA "&#236;" -- small i, grave accent --> - <!ENTITY iacute CDATA "&#237;" -- small i, acute accent --> - <!ENTITY icirc CDATA "&#238;" -- small i, circumflex accent --> - <!ENTITY iuml CDATA "&#239;" -- small i, dieresis or umlaut mark --> - <!ENTITY eth CDATA "&#240;" -- small eth, Icelandic --> - <!ENTITY ntilde CDATA "&#241;" -- small n, tilde --> - <!ENTITY ograve CDATA "&#242;" -- small o, grave accent --> - - - -<span class="grey">Berners-Lee & Connolly Standards Track [Page 76]</span> -<a name="page-77" id="page-77" href="#page-77" class="invisible"><span class="break"> </span></a> -<span class="grey"><a href="./rfc1866">RFC 1866</a> Hypertext Markup Language - 2.0 November 1995</span> - - - <!ENTITY oacute CDATA "&#243;" -- small o, acute accent --> - <!ENTITY ocirc CDATA "&#244;" -- small o, circumflex accent --> - <!ENTITY otilde CDATA "&#245;" -- small o, tilde --> - <!ENTITY ouml CDATA "&#246;" -- small o, dieresis or umlaut mark --> - <!ENTITY divide CDATA "&#247;" -- divide sign --> - <!ENTITY oslash CDATA "&#248;" -- small o, slash --> - <!ENTITY ugrave CDATA "&#249;" -- small u, grave accent --> - <!ENTITY uacute CDATA "&#250;" -- small u, acute accent --> - <!ENTITY ucirc CDATA "&#251;" -- small u, circumflex accent --> - <!ENTITY uuml CDATA "&#252;" -- small u, dieresis or umlaut mark --> - <!ENTITY yacute CDATA "&#253;" -- small y, acute accent --> - <!ENTITY thorn CDATA "&#254;" -- small thorn, Icelandic --> - <!ENTITY yuml CDATA "&#255;" -- small y, dieresis or umlaut mark --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Berners-Lee & Connolly Standards Track [Page 77] -<span class="break"> </span> - -</pre><br /> -<span class="noprint"><small><small>Html markup produced by rfcmarkup 1.60, available from -<a href="http://tools.ietf.org/tools/rfcmarkup/">http://tools.ietf.org/tools/rfcmarkup/</a> -</small></small></span> -</body></html> diff --git a/doc/rfc3513.htm b/doc/rfc3513.htm deleted file mode 100644 index 0b8bfb6..0000000 --- a/doc/rfc3513.htm +++ /dev/null @@ -1,1579 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xml:lang="en" lang="en"><head>
-
-
- <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
- <meta name="robots" content="index,follow">
- <meta name="creator" content="rfcmarkup version 1.46">
- <link rel="icon" href="http://tools.ietf.org/images/rfc.png" type="image/png">
- <link rel="shortcut icon" href="http://tools.ietf.org/images/rfc.png" type="image/png"><title>RFC 3513 Internet Protocol Version 6 (IPv6) Addressing Architecture</title>
-
-
- <style type="text/css">
- body {
- margin: 0px 8px;
- font-size: 1em;
- }
- h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
- font-weight: bold;
- line-height: 0pt;
- display: inline;
- white-space: pre;
- font-family: monospace;
- font-size: 1em;
- font-weight: bold;
- }
- pre {
- font-size: 1em;
- }
- .pre {
- white-space: pre;
- font-family: monospace;
- }
- .header{
- font-weight: bold;
- }
- @media print {
- body {
- font-size: 10.5pt;
- }
- h1, h2, h3, h4, h5, h6 {
- font-size: 10.5pt;
- }
-
- a:link, a:visited {
- color: inherit;
- text-decoration: none;
- }
- .break {
- page-break-before: always;
- text-decoration: none;
- }
- .noprint {
- display: none;
- }
- }
- @media screen {
- .grey, .grey a:link, .grey a:visited {
- color: #777;
- }
- .break {
- text-decoration: none;
- display: none;
- }
- .docinfo {
- background-color: #EEE;
- }
- .top {
- border-top: 2px solid #EEE;
- }
- .bgwhite { background-color: white; }
- .bgred { background-color: #F44; }
- .bggrey { background-color: #666; }
- .bgbrown { background-color: #840; }
- .bgorange { background-color: #FA0; }
- .bgyellow { background-color: #EE0; }
- .bgmagenta{ background-color: #F4F; }
- .bgblue { background-color: #66F; }
- .bgcyan { background-color: #4DD; }
- .bggreen { background-color: #4F4; }
-
- .legend { font-size: 90%; }
- .cplate { font-size: 70%; border: solid grey 1px; }
- }
- </style>
-
- <script type="text/javascript"><!--
- function addHeaderTags() {
- var spans = document.getElementsByTagName("span");
- for (var i=0; i < spans.length; i++) {
- var elem = spans[i];
- if (elem) {
- var level = elem.getAttribute("class");
- if (level == "h1" || level == "h2" || level == "h3" || level == "h4" || level == "h5" || level == "h6") {
- elem.innerHTML = "<"+level+">"+elem.innerHTML+"</"+level+">";
- }
- }
- }
- }
- var legend_html = "Colour legend:<br /> <table> <tr><td>Unknown:</td> <td><span class='cplate bgwhite'> </span></td></tr> <tr><td>Draft:</td> <td><span class='cplate bgred'> </span></td></tr> <tr><td>Informational:</td> <td><span class='cplate bgorange'> </span></td></tr> <tr><td>Experimental:</td> <td><span class='cplate bgyellow'> </span></td></tr> <tr><td>Best Common Practice:</td><td><span class='cplate bgmagenta'> </span></td></tr> <tr><td>Proposed Standard:</td><td><span class='cplate bgblue'> </span></td></tr> <tr><td>Draft Standard:</td> <td><span class='cplate bgcyan'> </span></td></tr> <tr><td>Standard:</td> <td><span class='cplate bggreen'> </span></td></tr> <tr><td>Historic:</td> <td><span class='cplate bggrey'> </span></td></tr> <tr><td>Obsolete:</td> <td><span class='cplate bgbrown'> </span></td></tr> </table>";
- function showElem(id) {
- var elem = document.getElementById(id);
- elem.innerHTML = eval(id+"_html");
- elem.style.visibility='visible';
- }
- function hideElem(id) {
- var elem = document.getElementById(id);
- elem.style.visibility='hidden';
- elem.innerHTML = "";
- }
- // -->
- </script></head><body onload="addHeaderTags()">
- <div style="height: 8px;">
- <span style="cursor: pointer;" onmouseover="this.style.cursor='pointer';" onclick="showElem('legend');" onmouseout="hideElem('legend')" class="pre noprint docinfo bgbrown" title="Click for colour legend."> </span>
- <div id="legend" class="docinfo noprint pre legend" style="border: 1px solid rgb(51, 68, 85); padding: 4px 9px 5px 7px; position: absolute; top: 4px; left: 4ex; visibility: hidden; background-color: white;" onmouseover="showElem('legend');" onmouseout="hideElem('legend');"></div>
- </div>
-<span class="pre noprint docinfo top">[<a href="http://tools.ietf.org/html/">RFCs/IDs</a>] [<a href="http://tools.ietf.org/rfc/rfc3513.txt">Plain Text</a>] [From <a href="http://tools.ietf.org/html/draft-ietf-ipngwg-addr-arch-v3">draft-ietf-ipngwg-addr-arch-v3</a>] </span><br>
-<span class="pre noprint docinfo"> </span><br>
-<span class="pre noprint docinfo">Obsoleted by: <a href="http://tools.ietf.org/html/rfc4291">4291</a> PROPOSED STANDARD</span><br>
-<span class="pre noprint docinfo"> </span><br>
-<pre>Network Working Group R. Hinden
-Request for Comments: 3513 Nokia
-Obsoletes: <a href="http://tools.ietf.org/html/rfc2373">2373</a> S. Deering
-Category: Standards Track Cisco Systems
- April 2003
-
-
- <span class="h1"><h1>Internet Protocol Version 6 (IPv6) Addressing Architecture</h1></span>
-
-Status of this Memo
-
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the "Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
-
-Copyright Notice
-
- Copyright (C) The Internet Society (2003). All Rights Reserved.
-
-Abstract
-
- This specification defines the addressing architecture of the IP
- Version 6 (IPv6) protocol. The document includes the IPv6 addressing
- model, text representations of IPv6 addresses, definition of IPv6
- unicast addresses, anycast addresses, and multicast addresses, and an
- IPv6 node's required addresses.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 1]</span>
-<a name="page-2" id="page-2" href="#page-2"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
-Table of Contents
-
- <a href="#section-1">1</a>. Introduction.................................................<a href="#page-3">3</a>
- <a href="#section-2">2</a>. IPv6 Addressing..............................................<a href="#page-3">3</a>
- <a href="#section-2.1">2.1</a> Addressing Model.........................................<a href="#page-4">4</a>
- <a href="#section-2.2">2.2</a> Text Representation of Addresses.........................<a href="#page-4">4</a>
- <a href="#section-2.3">2.3</a> Text Representation of Address Prefixes..................<a href="#page-5">5</a>
- <a href="#section-2.4">2.4</a> Address Type Identification..............................<a href="#page-6">6</a>
- <a href="#section-2.5">2.5</a> Unicast Addresses........................................<a href="#page-7">7</a>
- <a href="#section-2.5.1">2.5.1</a> Interface Identifiers..............................<a href="#page-8">8</a>
- <a href="#section-2.5.2">2.5.2</a> The Unspecified Address............................<a href="#page-9">9</a>
- <a href="#section-2.5.3">2.5.3</a> The Loopback Address...............................<a href="#page-9">9</a>
- <a href="#section-2.5.4">2.5.4</a> Global Unicast Addresses..........................<a href="#page-10">10</a>
- <a href="#section-2.5.5">2.5.5</a> IPv6 Addresses with Embedded IPv4 Addresses.......<a href="#page-10">10</a>
- <a href="#section-2.5.6">2.5.6</a> Local-use IPv6 Unicast Addresses..................<a href="#page-11">11</a>
- <a href="#section-2.6">2.6</a> Anycast Addresses.......................................<a href="#page-12">12</a>
- <a href="#section-2.6.1">2.6.1</a> Required Anycast Address..........................<a href="#page-13">13</a>
- <a href="#section-2.7">2.7</a> Multicast Addresses.....................................<a href="#page-13">13</a>
- <a href="#section-2.7.1">2.7.1</a> Pre-Defined Multicast Addresses...................<a href="#page-15">15</a>
- <a href="#section-2.8">2.8</a> A Node's Required Addresses.............................<a href="#page-17">17</a>
- <a href="#section-3">3</a>. Security Considerations.....................................<a href="#page-17">17</a>
- <a href="#section-4">4</a>. IANA Considerations.........................................<a href="#page-18">18</a>
- <a href="#section-5">5</a>. References..................................................<a href="#page-19">19</a>
- <a href="#section-5.1">5.1</a> Normative References....................................<a href="#page-19">19</a>
- <a href="#section-5.2">5.2</a> Informative References..................................<a href="#page-19">19</a>
- APPENDIX A: Creating Modified EUI-64 format Interface IDs......<a href="#page-21">21</a>
- APPENDIX B: Changes from <a href="http://tools.ietf.org/html/rfc2373">RFC-2373</a>..............................<a href="#page-24">24</a>
- Authors' Addresses.............................................<a href="#page-25">25</a>
- Full Copyright Statement.......................................<a href="#page-26">26</a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 2]</span>
-<a name="page-3" id="page-3" href="#page-3"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
-<span class="h2"><h2><a name="section-1">1</a>. Introduction</h2></span>
-
- This specification defines the addressing architecture of the IP
- Version 6 (IPv6) protocol. It includes the basic formats for the
- various types of IPv6 addresses (unicast, anycast, and multicast).
-
- The authors would like to acknowledge the contributions of Paul
- Francis, Scott Bradner, Jim Bound, Brian Carpenter, Matt Crawford,
- Deborah Estrin, Roger Fajman, Bob Fink, Peter Ford, Bob Gilligan,
- Dimitry Haskin, Tom Harsch, Christian Huitema, Tony Li, Greg
- Minshall, Thomas Narten, Erik Nordmark, Yakov Rekhter, Bill Simpson,
- Sue Thomson, Markku Savela, and Larry Masinter.
-
-<span class="h2"><h2><a name="section-2">2</a>. IPv6 Addressing</h2></span>
-
- IPv6 addresses are 128-bit identifiers for interfaces and sets of
- interfaces (where "interface" is as defined in <a href="#section-2">section 2</a> of [<a href="#ref-IPV6" title=""Internet Protocol, Version 6 (IPv6) Specification"">IPV6</a>]).
- There are three types of addresses:
-
- Unicast: An identifier for a single interface. A packet sent to a
- unicast address is delivered to the interface identified
- by that address.
-
- Anycast: An identifier for a set of interfaces (typically belonging
- to different nodes). A packet sent to an anycast address
- is delivered to one of the interfaces identified by that
- address (the "nearest" one, according to the routing
- protocols' measure of distance).
-
- Multicast: An identifier for a set of interfaces (typically belonging
- to different nodes). A packet sent to a multicast address
- is delivered to all interfaces identified by that address.
-
- There are no broadcast addresses in IPv6, their function being
- superseded by multicast addresses.
-
- In this document, fields in addresses are given a specific name, for
- example "subnet". When this name is used with the term "ID" for
- identifier after the name (e.g., "subnet ID"), it refers to the
- contents of the named field. When it is used with the term "prefix"
- (e.g., "subnet prefix") it refers to all of the address from the left
- up to and including this field.
-
- In IPv6, all zeros and all ones are legal values for any field,
- unless specifically excluded. Specifically, prefixes may contain, or
- end with, zero-valued fields.
-
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 3]</span>
-<a name="page-4" id="page-4" href="#page-4"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
-<span class="h3"><h3><a name="section-2.1">2.1</a> Addressing Model</h3></span>
-
- IPv6 addresses of all types are assigned to interfaces, not nodes.
- An IPv6 unicast address refers to a single interface. Since each
- interface belongs to a single node, any of that node's interfaces'
- unicast addresses may be used as an identifier for the node.
-
- All interfaces are required to have at least one link-local unicast
- address (see <a href="#section-2.8">section 2.8</a> for additional required addresses). A
- single interface may also have multiple IPv6 addresses of any type
- (unicast, anycast, and multicast) or scope. Unicast addresses with
- scope greater than link-scope are not needed for interfaces that are
- not used as the origin or destination of any IPv6 packets to or from
- non-neighbors. This is sometimes convenient for point-to-point
- interfaces. There is one exception to this addressing model:
-
- A unicast address or a set of unicast addresses may be assigned to
- multiple physical interfaces if the implementation treats the
- multiple physical interfaces as one interface when presenting it
- to the internet layer. This is useful for load-sharing over
- multiple physical interfaces.
-
- Currently IPv6 continues the IPv4 model that a subnet prefix is
- associated with one link. Multiple subnet prefixes may be assigned
- to the same link.
-
-<span class="h3"><h3><a name="section-2.2">2.2</a> Text Representation of Addresses</h3></span>
-
- There are three conventional forms for representing IPv6 addresses as
- text strings:
-
- 1. The preferred form is x:x:x:x:x:x:x:x, where the 'x's are the
- hexadecimal values of the eight 16-bit pieces of the address.
-
- Examples:
-
- FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
-
- 1080:0:0:0:8:800:200C:417A
-
- Note that it is not necessary to write the leading zeros in an
- individual field, but there must be at least one numeral in every
- field (except for the case described in 2.).
-
- 2. Due to some methods of allocating certain styles of IPv6
- addresses, it will be common for addresses to contain long strings
- of zero bits. In order to make writing addresses containing zero
- bits easier a special syntax is available to compress the zeros.
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 4]</span>
-<a name="page-5" id="page-5" href="#page-5"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- The use of "::" indicates one or more groups of 16 bits of zeros.
- The "::" can only appear once in an address. The "::" can also be
- used to compress leading or trailing zeros in an address.
-
- For example, the following addresses:
-
- 1080:0:0:0:8:800:200C:417A a unicast address
- FF01:0:0:0:0:0:0:101 a multicast address
- 0:0:0:0:0:0:0:1 the loopback address
- 0:0:0:0:0:0:0:0 the unspecified addresses
-
- may be represented as:
-
- 1080::8:800:200C:417A a unicast address
- FF01::101 a multicast address
- ::1 the loopback address
- :: the unspecified addresses
-
- 3. An alternative form that is sometimes more convenient when dealing
- with a mixed environment of IPv4 and IPv6 nodes is
- x:x:x:x:x:x:d.d.d.d, where the 'x's are the hexadecimal values of
- the six high-order 16-bit pieces of the address, and the 'd's are
- the decimal values of the four low-order 8-bit pieces of the
- address (standard IPv4 representation). Examples:
-
- 0:0:0:0:0:0:13.1.68.3
-
- 0:0:0:0:0:FFFF:129.144.52.38
-
- or in compressed form:
-
- ::13.1.68.3
-
- ::FFFF:129.144.52.38
-
-<span class="h3"><h3><a name="section-2.3">2.3</a> Text Representation of Address Prefixes</h3></span>
-
- The text representation of IPv6 address prefixes is similar to the
- way IPv4 addresses prefixes are written in CIDR notation [<a href="#ref-CIDR" title=""Classless Inter-Domain Routing (CIDR): An Address Assignment and Aggregation Strategy"">CIDR</a>]. An
- IPv6 address prefix is represented by the notation:
-
- ipv6-address/prefix-length
-
- where
-
- ipv6-address is an IPv6 address in any of the notations listed
- in <a href="#section-2.2">section 2.2</a>.
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 5]</span>
-<a name="page-6" id="page-6" href="#page-6"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- prefix-length is a decimal value specifying how many of the
- leftmost contiguous bits of the address comprise
- the prefix.
-
- For example, the following are legal representations of the 60-bit
- prefix 12AB00000000CD3 (hexadecimal):
-
- 12AB:0000:0000:CD30:0000:0000:0000:0000/60
- 12AB::CD30:0:0:0:0/60
- 12AB:0:0:CD30::/60
-
- The following are NOT legal representations of the above prefix:
-
- 12AB:0:0:CD3/60 may drop leading zeros, but not trailing zeros,
- within any 16-bit chunk of the address
-
- 12AB::CD30/60 address to left of "/" expands to
- 12AB:0000:0000:0000:0000:000:0000:CD30
-
- 12AB::CD3/60 address to left of "/" expands to
- 12AB:0000:0000:0000:0000:000:0000:0CD3
-
- When writing both a node address and a prefix of that node address
- (e.g., the node's subnet prefix), the two can combined as follows:
-
- the node address 12AB:0:0:CD30:123:4567:89AB:CDEF
- and its subnet number 12AB:0:0:CD30::/60
-
- can be abbreviated as 12AB:0:0:CD30:123:4567:89AB:CDEF/60
-
-<a href="#section-2.4">2.4</a> Address Type Identification
-
- The type of an IPv6 address is identified by the high-order bits of
- the address, as follows:
-
- Address type Binary prefix IPv6 notation Section
- ------------ ------------- ------------- -------
- Unspecified 00...0 (128 bits) ::/128 2.5.2
- Loopback 00...1 (128 bits) ::1/128 2.5.3
- Multicast 11111111 FF00::/8 2.7
- Link-local unicast 1111111010 FE80::/10 2.5.6
- Site-local unicast 1111111011 FEC0::/10 2.5.6
- Global unicast (everything else)
-
- Anycast addresses are taken from the unicast address spaces (of any
- scope) and are not syntactically distinguishable from unicast
- addresses.
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 6]</span>
-<a name="page-7" id="page-7" href="#page-7"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- The general format of global unicast addresses is described in
- <a href="#section-2.5.4">section 2.5.4</a>. Some special-purpose subtypes of global unicast
- addresses which contain embedded IPv4 addresses (for the purposes of
- IPv4-IPv6 interoperation) are described in <a href="#section-2.5.5">section 2.5.5</a>.
-
- Future specifications may redefine one or more sub-ranges of the
- global unicast space for other purposes, but unless and until that
- happens, implementations must treat all addresses that do not start
- with any of the above-listed prefixes as global unicast addresses.
-
-<span class="h3"><h3><a name="section-2.5">2.5</a> Unicast Addresses</h3></span>
-
- IPv6 unicast addresses are aggregable with prefixes of arbitrary
- bit-length similar to IPv4 addresses under Classless Interdomain
- Routing.
-
- There are several types of unicast addresses in IPv6, in particular
- global unicast, site-local unicast, and link-local unicast. There
- are also some special-purpose subtypes of global unicast, such as
- IPv6 addresses with embedded IPv4 addresses or encoded NSAP
- addresses. Additional address types or subtypes can be defined in
- the future.
-
- IPv6 nodes may have considerable or little knowledge of the internal
- structure of the IPv6 address, depending on the role the node plays
- (for instance, host versus router). At a minimum, a node may
- consider that unicast addresses (including its own) have no internal
- structure:
-
- | 128 bits |
- +-----------------------------------------------------------------+
- | node address |
- +-----------------------------------------------------------------+
-
- A slightly sophisticated host (but still rather simple) may
- additionally be aware of subnet prefix(es) for the link(s) it is
- attached to, where different addresses may have different values for
- n:
-
- | n bits | 128-n bits |
- +------------------------------------------------+----------------+
- | subnet prefix | interface ID |
- +------------------------------------------------+----------------+
-
- Though a very simple router may have no knowledge of the internal
- structure of IPv6 unicast addresses, routers will more generally have
- knowledge of one or more of the hierarchical boundaries for the
- operation of routing protocols. The known boundaries will differ
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 7]</span>
-<a name="page-8" id="page-8" href="#page-8"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- from router to router, depending on what positions the router holds
- in the routing hierarchy.
-
-<span class="h4"><h4><a name="section-2.5.1">2.5.1</a> Interface Identifiers</h4></span>
-
- Interface identifiers in IPv6 unicast addresses are used to identify
- interfaces on a link. They are required to be unique within a subnet
- prefix. It is recommended that the same interface identifier not be
- assigned to different nodes on a link. They may also be unique over
- a broader scope. In some cases an interface's identifier will be
- derived directly from that interface's link-layer address. The same
- interface identifier may be used on multiple interfaces on a single
- node, as long as they are attached to different subnets.
-
- Note that the uniqueness of interface identifiers is independent of
- the uniqueness of IPv6 addresses. For example, a global unicast
- address may be created with a non-global scope interface identifier
- and a site-local address may be created with a global scope interface
- identifier.
-
- For all unicast addresses, except those that start with binary value
- 000, Interface IDs are required to be 64 bits long and to be
- constructed in Modified EUI-64 format.
-
- Modified EUI-64 format based Interface identifiers may have global
- scope when derived from a global token (e.g., IEEE 802 48-bit MAC or
- IEEE EUI-64 identifiers [<a href="#ref-EUI64" title=""./rfc3513"">EUI64</a>]) or may have local scope where a
- global token is not available (e.g., serial links, tunnel end-points,
- etc.) or where global tokens are undesirable (e.g., temporary tokens
- for privacy [<a href="#ref-PRIV" title=""Privacy Extensions for Stateless Address Autoconfiguration in IPv6"">PRIV</a>]).
-
- Modified EUI-64 format interface identifiers are formed by inverting
- the "u" bit (universal/local bit in IEEE EUI-64 terminology) when
- forming the interface identifier from IEEE EUI-64 identifiers. In
- the resulting Modified EUI-64 format the "u" bit is set to one (1) to
- indicate global scope, and it is set to zero (0) to indicate local
- scope. The first three octets in binary of an IEEE EUI-64 identifier
- are as follows:
-
- 0 0 0 1 1 2
- |0 7 8 5 6 3|
- +----+----+----+----+----+----+
- |cccc|ccug|cccc|cccc|cccc|cccc|
- +----+----+----+----+----+----+
-
- written in Internet standard bit-order , where "u" is the
- universal/local bit, "g" is the individual/group bit, and "c" are the
- bits of the company_id. Appendix A: "Creating Modified EUI-64 format
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 8]</span>
-<a name="page-9" id="page-9" href="#page-9"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- Interface Identifiers" provides examples on the creation of Modified
- EUI-64 format based interface identifiers.
-
- The motivation for inverting the "u" bit when forming an interface
- identifier is to make it easy for system administrators to hand
- configure non-global identifiers when hardware tokens are not
- available. This is expected to be case for serial links, tunnel end-
- points, etc. The alternative would have been for these to be of the
- form 0200:0:0:1, 0200:0:0:2, etc., instead of the much simpler 1, 2,
- etc.
-
- The use of the universal/local bit in the Modified EUI-64 format
- identifier is to allow development of future technology that can take
- advantage of interface identifiers with global scope.
-
- The details of forming interface identifiers are defined in the
- appropriate "IPv6 over <link>" specification such as "IPv6 over
- Ethernet" [<a href="#ref-ETHER" title=""Transmission of IPv6 Packets over Ethernet Networks"">ETHER</a>], "IPv6 over FDDI" [<a href="#ref-FDDI" title=""Transmission of IPv6 Packets over FDDI Networks"">FDDI</a>], etc.
-
-<span class="h4"><h4><a name="section-2.5.2">2.5.2</a> The Unspecified Address</h4></span>
-
- The address 0:0:0:0:0:0:0:0 is called the unspecified address. It
- must never be assigned to any node. It indicates the absence of an
- address. One example of its use is in the Source Address field of
- any IPv6 packets sent by an initializing host before it has learned
- its own address.
-
- The unspecified address must not be used as the destination address
- of IPv6 packets or in IPv6 Routing Headers. An IPv6 packet with a
- source address of unspecified must never be forwarded by an IPv6
- router.
-
-<span class="h4"><h4><a name="section-2.5.3">2.5.3</a> The Loopback Address</h4></span>
-
- The unicast address 0:0:0:0:0:0:0:1 is called the loopback address.
- It may be used by a node to send an IPv6 packet to itself. It may
- never be assigned to any physical interface. It is treated as
- having link-local scope, and may be thought of as the link-local
- unicast address of a virtual interface (typically called "the
- loopback interface") to an imaginary link that goes nowhere.
-
- The loopback address must not be used as the source address in IPv6
- packets that are sent outside of a single node. An IPv6 packet with
- a destination address of loopback must never be sent outside of a
- single node and must never be forwarded by an IPv6 router. A packet
- received on an interface with destination address of loopback must be
- dropped.
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 9]</span>
-<a name="page-10" id="page-10" href="#page-10"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
-<span class="h4"><h4><a name="section-2.5.4">2.5.4</a> Global Unicast Addresses</h4></span>
-
- The general format for IPv6 global unicast addresses is as follows:
-
- | n bits | m bits | 128-n-m bits |
- +------------------------+-----------+----------------------------+
- | global routing prefix | subnet ID | interface ID |
- +------------------------+-----------+----------------------------+
-
- where the global routing prefix is a (typically hierarchically-
- structured) value assigned to a site (a cluster of subnets/links),
- the subnet ID is an identifier of a link within the site, and the
- interface ID is as defined in <a href="#section-2.5.1">section 2.5.1</a>.
-
- All global unicast addresses other than those that start with binary
- 000 have a 64-bit interface ID field (i.e., n + m = 64), formatted as
- described in <a href="#section-2.5.1">section 2.5.1</a>. Global unicast addresses that start with
- binary 000 have no such constraint on the size or structure of the
- interface ID field.
-
- Examples of global unicast addresses that start with binary 000 are
- the IPv6 address with embedded IPv4 addresses described in section
- 2.5.5 and the IPv6 address containing encoded NSAP addresses
- specified in [<a href="#ref-NSAP" title=""OSI NSAPs and IPv6"">NSAP</a>]. An example of global addresses starting with a
- binary value other than 000 (and therefore having a 64-bit interface
- ID field) can be found in [<a href="#ref-AGGR" title=""An Aggregatable Global Unicast Address Format"">AGGR</a>].
-
-<span class="h4"><h4><a name="section-2.5.5">2.5.5</a> IPv6 Addresses with Embedded IPv4 Addresses</h4></span>
-
- The IPv6 transition mechanisms [<a href="#ref-TRAN" title=""Transition Mechanisms for IPv6 Hosts and Routers"">TRAN</a>] include a technique for hosts
- and routers to dynamically tunnel IPv6 packets over IPv4 routing
- infrastructure. IPv6 nodes that use this technique are assigned
- special IPv6 unicast addresses that carry a global IPv4 address in
- the low-order 32 bits. This type of address is termed an "IPv4-
- compatible IPv6 address" and has the format:
-
- | 80 bits | 16 | 32 bits |
- +--------------------------------------+--------------------------+
- |0000..............................0000|0000| IPv4 address |
- +--------------------------------------+----+---------------------+
-
- Note: The IPv4 address used in the "IPv4-compatible IPv6 address"
- must be a globally-unique IPv4 unicast address.
-
- A second type of IPv6 address which holds an embedded IPv4 address is
- also defined. This address type is used to represent the addresses
- of IPv4 nodes as IPv6 addresses. This type of address is termed an
- "IPv4-mapped IPv6 address" and has the format:
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 10]</span>
-<a name="page-11" id="page-11" href="#page-11"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- | 80 bits | 16 | 32 bits |
- +--------------------------------------+--------------------------+
- |0000..............................0000|FFFF| IPv4 address |
- +--------------------------------------+----+---------------------+
-
-<span class="h4"><h4><a name="section-2.5.6">2.5.6</a> Local-Use IPv6 Unicast Addresses</h4></span>
-
- There are two types of local-use unicast addresses defined. These
- are Link-Local and Site-Local. The Link-Local is for use on a single
- link and the Site-Local is for use in a single site. Link-Local
- addresses have the following format:
-
- | 10 |
- | bits | 54 bits | 64 bits |
- +----------+-------------------------+----------------------------+
- |1111111010| 0 | interface ID |
- +----------+-------------------------+----------------------------+
-
- Link-Local addresses are designed to be used for addressing on a
- single link for purposes such as automatic address configuration,
- neighbor discovery, or when no routers are present.
-
- Routers must not forward any packets with link-local source or
- destination addresses to other links.
-
- Site-Local addresses have the following format:
-
- | 10 |
- | bits | 54 bits | 64 bits |
- +----------+-------------------------+----------------------------+
- |1111111011| subnet ID | interface ID |
- +----------+-------------------------+----------------------------+
-
- Site-local addresses are designed to be used for addressing inside of
- a site without the need for a global prefix. Although a subnet ID
- may be up to 54-bits long, it is expected that globally-connected
- sites will use the same subnet IDs for site-local and global
- prefixes.
-
- Routers must not forward any packets with site-local source or
- destination addresses outside of the site.
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 11]</span>
-<a name="page-12" id="page-12" href="#page-12"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
-<span class="h3"><h3><a name="section-2.6">2.6</a> Anycast Addresses</h3></span>
-
- An IPv6 anycast address is an address that is assigned to more than
- one interface (typically belonging to different nodes), with the
- property that a packet sent to an anycast address is routed to the
- "nearest" interface having that address, according to the routing
- protocols' measure of distance.
-
- Anycast addresses are allocated from the unicast address space, using
- any of the defined unicast address formats. Thus, anycast addresses
- are syntactically indistinguishable from unicast addresses. When a
- unicast address is assigned to more than one interface, thus turning
- it into an anycast address, the nodes to which the address is
- assigned must be explicitly configured to know that it is an anycast
- address.
-
- For any assigned anycast address, there is a longest prefix P of that
- address that identifies the topological region in which all
- interfaces belonging to that anycast address reside. Within the
- region identified by P, the anycast address must be maintained as a
- separate entry in the routing system (commonly referred to as a "host
- route"); outside the region identified by P, the anycast address may
- be aggregated into the routing entry for prefix P.
-
- Note that in the worst case, the prefix P of an anycast set may be
- the null prefix, i.e., the members of the set may have no topological
- locality. In that case, the anycast address must be maintained as a
- separate routing entry throughout the entire internet, which presents
- a severe scaling limit on how many such "global" anycast sets may be
- supported. Therefore, it is expected that support for global anycast
- sets may be unavailable or very restricted.
-
- One expected use of anycast addresses is to identify the set of
- routers belonging to an organization providing internet service.
- Such addresses could be used as intermediate addresses in an IPv6
- Routing header, to cause a packet to be delivered via a particular
- service provider or sequence of service providers.
-
- Some other possible uses are to identify the set of routers attached
- to a particular subnet, or the set of routers providing entry into a
- particular routing domain.
-
- There is little experience with widespread, arbitrary use of internet
- anycast addresses, and some known complications and hazards when
- using them in their full generality [<a href="#ref-ANYCST" title=""Host Anycasting Service"">ANYCST</a>]. Until more experience
- has been gained and solutions are specified, the following
- restrictions are imposed on IPv6 anycast addresses:
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 12]</span>
-<a name="page-13" id="page-13" href="#page-13"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- o An anycast address must not be used as the source address of an
- IPv6 packet.
-
- o An anycast address must not be assigned to an IPv6 host, that is,
- it may be assigned to an IPv6 router only.
-
-<span class="h4"><h4><a name="section-2.6.1">2.6.1</a> Required Anycast Address</h4></span>
-
- The Subnet-Router anycast address is predefined. Its format is as
- follows:
-
- | n bits | 128-n bits |
- +------------------------------------------------+----------------+
- | subnet prefix | 00000000000000 |
- +------------------------------------------------+----------------+
-
- The "subnet prefix" in an anycast address is the prefix which
- identifies a specific link. This anycast address is syntactically
- the same as a unicast address for an interface on the link with the
- interface identifier set to zero.
-
- Packets sent to the Subnet-Router anycast address will be delivered
- to one router on the subnet. All routers are required to support the
- Subnet-Router anycast addresses for the subnets to which they have
- interfaces.
-
- The subnet-router anycast address is intended to be used for
- applications where a node needs to communicate with any one of the
- set of routers.
-
-<span class="h3"><h3><a name="section-2.7">2.7</a> Multicast Addresses</h3></span>
-
- An IPv6 multicast address is an identifier for a group of interfaces
- (typically on different nodes). An interface may belong to any
- number of multicast groups. Multicast addresses have the following
- format:
-
- | 8 | 4 | 4 | 112 bits |
- +------ -+----+----+---------------------------------------------+
- |11111111|flgs|scop| group ID |
- +--------+----+----+---------------------------------------------+
-
- binary 11111111 at the start of the address identifies the
- address as being a multicast address.
-
- +-+-+-+-+
- flgs is a set of 4 flags: |0|0|0|T|
- +-+-+-+-+
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 13]</span>
-<a name="page-14" id="page-14" href="#page-14"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- The high-order 3 flags are reserved, and must be initialized
- to 0.
-
- T = 0 indicates a permanently-assigned ("well-known")
- multicast address, assigned by the Internet Assigned Number
- Authority (IANA).
-
- T = 1 indicates a non-permanently-assigned ("transient")
- multicast address.
-
- scop is a 4-bit multicast scope value used to limit the scope
- of the multicast group. The values are:
-
- 0 reserved
- 1 interface-local scope
- 2 link-local scope
- 3 reserved
- 4 admin-local scope
- 5 site-local scope
- 6 (unassigned)
- 7 (unassigned)
- 8 organization-local scope
- 9 (unassigned)
- A (unassigned)
- B (unassigned)
- C (unassigned)
- D (unassigned)
- E global scope
- F reserved
-
- interface-local scope spans only a single interface on a
- node, and is useful only for loopback transmission of
- multicast.
-
- link-local and site-local multicast scopes span the same
- topological regions as the corresponding unicast scopes.
-
- admin-local scope is the smallest scope that must be
- administratively configured, i.e., not automatically derived
- from physical connectivity or other, non- multicast-related
- configuration.
-
- organization-local scope is intended to span multiple sites
- belonging to a single organization.
-
- scopes labeled "(unassigned)" are available for
- administrators to define additional multicast regions.
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 14]</span>
-<a name="page-15" id="page-15" href="#page-15"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- group ID identifies the multicast group, either permanent or
- transient, within the given scope.
-
- The "meaning" of a permanently-assigned multicast address is
- independent of the scope value. For example, if the "NTP servers
- group" is assigned a permanent multicast address with a group ID of
- 101 (hex), then:
-
- FF01:0:0:0:0:0:0:101 means all NTP servers on the same interface
- (i.e., the same node) as the sender.
-
- FF02:0:0:0:0:0:0:101 means all NTP servers on the same link as the
- sender.
-
- FF05:0:0:0:0:0:0:101 means all NTP servers in the same site as the
- sender.
-
- FF0E:0:0:0:0:0:0:101 means all NTP servers in the internet.
-
- Non-permanently-assigned multicast addresses are meaningful only
- within a given scope. For example, a group identified by the non-
- permanent, site-local multicast address FF15:0:0:0:0:0:0:101 at one
- site bears no relationship to a group using the same address at a
- different site, nor to a non-permanent group using the same group ID
- with different scope, nor to a permanent group with the same group
- ID.
-
- Multicast addresses must not be used as source addresses in IPv6
- packets or appear in any Routing header.
-
- Routers must not forward any multicast packets beyond of the scope
- indicated by the scop field in the destination multicast address.
-
- Nodes must not originate a packet to a multicast address whose scop
- field contains the reserved value 0; if such a packet is received, it
- must be silently dropped. Nodes should not originate a packet to a
- multicast address whose scop field contains the reserved value F; if
- such a packet is sent or received, it must be treated the same as
- packets destined to a global (scop E) multicast address.
-
-<span class="h4"><h4><a name="section-2.7.1">2.7.1</a> Pre-Defined Multicast Addresses</h4></span>
-
- The following well-known multicast addresses are pre-defined. The
- group ID's defined in this section are defined for explicit scope
- values.
-
- Use of these group IDs for any other scope values, with the T flag
- equal to 0, is not allowed.
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 15]</span>
-<a name="page-16" id="page-16" href="#page-16"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- Reserved Multicast Addresses: FF00:0:0:0:0:0:0:0
- FF01:0:0:0:0:0:0:0
- FF02:0:0:0:0:0:0:0
- FF03:0:0:0:0:0:0:0
- FF04:0:0:0:0:0:0:0
- FF05:0:0:0:0:0:0:0
- FF06:0:0:0:0:0:0:0
- FF07:0:0:0:0:0:0:0
- FF08:0:0:0:0:0:0:0
- FF09:0:0:0:0:0:0:0
- FF0A:0:0:0:0:0:0:0
- FF0B:0:0:0:0:0:0:0
- FF0C:0:0:0:0:0:0:0
- FF0D:0:0:0:0:0:0:0
- FF0E:0:0:0:0:0:0:0
- FF0F:0:0:0:0:0:0:0
-
- The above multicast addresses are reserved and shall never be
- assigned to any multicast group.
-
- All Nodes Addresses: FF01:0:0:0:0:0:0:1
- FF02:0:0:0:0:0:0:1
-
- The above multicast addresses identify the group of all IPv6 nodes,
- within scope 1 (interface-local) or 2 (link-local).
-
- All Routers Addresses: FF01:0:0:0:0:0:0:2
- FF02:0:0:0:0:0:0:2
- FF05:0:0:0:0:0:0:2
-
- The above multicast addresses identify the group of all IPv6 routers,
- within scope 1 (interface-local), 2 (link-local), or 5 (site-local).
-
- Solicited-Node Address: FF02:0:0:0:0:1:FFXX:XXXX
-
- Solicited-node multicast address are computed as a function of a
- node's unicast and anycast addresses. A solicited-node multicast
- address is formed by taking the low-order 24 bits of an address
- (unicast or anycast) and appending those bits to the prefix
- FF02:0:0:0:0:1:FF00::/104 resulting in a multicast address in the
- range
-
- FF02:0:0:0:0:1:FF00:0000
-
- to
-
- FF02:0:0:0:0:1:FFFF:FFFF
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 16]</span>
-<a name="page-17" id="page-17" href="#page-17"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- For example, the solicited node multicast address corresponding to
- the IPv6 address 4037::01:800:200E:8C6C is FF02::1:FF0E:8C6C. IPv6
- addresses that differ only in the high-order bits, e.g., due to
- multiple high-order prefixes associated with different aggregations,
- will map to the same solicited-node address thereby, reducing the
- number of multicast addresses a node must join.
-
- A node is required to compute and join (on the appropriate interface)
- the associated Solicited-Node multicast addresses for every unicast
- and anycast address it is assigned.
-
-<span class="h3"><h3><a name="section-2.8">2.8</a> A Node's Required Addresses</h3></span>
-
- A host is required to recognize the following addresses as
- identifying itself:
-
- o Its required Link-Local Address for each interface.
- o Any additional Unicast and Anycast Addresses that have been
- configured for the node's interfaces (manually or
- automatically).
- o The loopback address.
- o The All-Nodes Multicast Addresses defined in <a href="#section-2.7.1">section 2.7.1</a>.
- o The Solicited-Node Multicast Address for each of its unicast
- and anycast addresses.
- o Multicast Addresses of all other groups to which the node
- belongs.
-
- A router is required to recognize all addresses that a host is
- required to recognize, plus the following addresses as identifying
- itself:
-
- o The Subnet-Router Anycast Addresses for all interfaces for
- which it is configured to act as a router.
- o All other Anycast Addresses with which the router has been
- configured.
- o The All-Routers Multicast Addresses defined in <a href="#section-2.7.1">section 2.7.1</a>.
-
-<span class="h2"><h2><a name="section-3">3</a>. Security Considerations</h2></span>
-
- IPv6 addressing documents do not have any direct impact on Internet
- infrastructure security. Authentication of IPv6 packets is defined
- in [<a href="#ref-AUTH" title=""IP Authentication Header"">AUTH</a>].
-
-
-
-
-
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 17]</span>
-<a name="page-18" id="page-18" href="#page-18"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
-<span class="h2"><h2><a name="section-4">4</a>. IANA Considerations</h2></span>
-
- The table and notes at <a href="http://www.isi.edu/in-notes/iana/assignments/ipv6-address-space.txt">http://www.isi.edu/in-</a>
- <a href="http://www.isi.edu/in-notes/iana/assignments/ipv6-address-space.txt">notes/iana/assignments/ipv6-address-space.txt</a> should be replaced with
- the following:
-
- INTERNET PROTOCOL VERSION 6 ADDRESS SPACE
-
- The initial assignment of IPv6 address space is as follows:
-
- Allocation Prefix Fraction of
- (binary) Address Space
- ----------------------------------- -------- -------------
- Unassigned (see Note 1 below) 0000 0000 1/256
- Unassigned 0000 0001 1/256
- Reserved for NSAP Allocation 0000 001 1/128 [<a href="http://tools.ietf.org/html/rfc1888">RFC1888</a>]
- Unassigned 0000 01 1/64
- Unassigned 0000 1 1/32
- Unassigned 0001 1/16
- Global Unicast 001 1/8 [<a href="http://tools.ietf.org/html/rfc2374">RFC2374</a>]
- Unassigned 010 1/8
- Unassigned 011 1/8
- Unassigned 100 1/8
- Unassigned 101 1/8
- Unassigned 110 1/8
- Unassigned 1110 1/16
- Unassigned 1111 0 1/32
- Unassigned 1111 10 1/64
- Unassigned 1111 110 1/128
- Unassigned 1111 1110 0 1/512
- Link-Local Unicast Addresses 1111 1110 10 1/1024
- Site-Local Unicast Addresses 1111 1110 11 1/1024
- Multicast Addresses 1111 1111 1/256
-
- Notes:
-
- 1. The "unspecified address", the "loopback address", and the IPv6
- Addresses with Embedded IPv4 Addresses are assigned out of the
- 0000 0000 binary prefix space.
-
- 2. For now, IANA should limit its allocation of IPv6 unicast address
- space to the range of addresses that start with binary value 001.
- The rest of the global unicast address space (approximately 85% of
- the IPv6 address space) is reserved for future definition and use,
- and is not to be assigned by IANA at this time.
-
-
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 18]</span>
-<a name="page-19" id="page-19" href="#page-19"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
-<span class="h2"><h2><a name="section-5">5</a>. References</h2></span>
-
-<span class="h3"><h3><a name="section-5.1">5.1</a> Normative References</h3></span>
-
- [<a name="ref-IPV6" id="ref-IPV6">IPV6</a>] Deering, S. and R. Hinden, "Internet Protocol, Version 6
- (IPv6) Specification", <a href="http://tools.ietf.org/html/rfc2460">RFC 2460</a>, December 1998.
-
- [<a name="ref-RFC2026" id="ref-RFC2026">RFC2026</a>] Bradner, S., "The Internet Standards Process -- Revision
- 3", <a href="http://tools.ietf.org/html/bcp9">BCP 9</a> , <a href="http://tools.ietf.org/html/rfc2026">RFC 2026</a>, October 1996.
-
-<span class="h3"><h3><a name="section-5.2">5.2</a> Informative References</h3></span>
-
- [<a name="ref-ANYCST" id="ref-ANYCST">ANYCST</a>] Partridge, C., Mendez, T. and W. Milliken, "Host Anycasting
- Service", <a href="http://tools.ietf.org/html/rfc1546">RFC 1546</a>, November 1993.
-
- [<a name="ref-AUTH" id="ref-AUTH">AUTH</a>] Kent, S. and R. Atkinson, "IP Authentication Header", <a href="http://tools.ietf.org/html/rfc2402">RFC</a>
- <a href="http://tools.ietf.org/html/rfc2402">2402</a>, November 1998.
-
- [<a name="ref-AGGR" id="ref-AGGR">AGGR</a>] Hinden, R., O'Dell, M. and S. Deering, "An Aggregatable
- Global Unicast Address Format", <a href="http://tools.ietf.org/html/rfc2374">RFC 2374</a>, July 1998.
-
- [<a name="ref-CIDR" id="ref-CIDR">CIDR</a>] Fuller, V., Li, T., Yu, J. and K. Varadhan, "Classless
- Inter-Domain Routing (CIDR): An Address Assignment and
- Aggregation Strategy", <a href="http://tools.ietf.org/html/rfc1519">RFC 1519</a>, September 1993.
-
- [<a name="ref-ETHER" id="ref-ETHER">ETHER</a>] Crawford, M., "Transmission of IPv6 Packets over Ethernet
- Networks", <a href="http://tools.ietf.org/html/rfc2464">RFC 2464</a>, December 1998.
-
- [<a name="ref-EUI64" id="ref-EUI64">EUI64</a>] IEEE, "Guidelines for 64-bit Global Identifier (EUI-64)
- Registration Authority",
- <a href="http://standards.ieee.org/regauth/oui/tutorials/EUI64.html">http://standards.ieee.org/regauth/oui/tutorials/EUI64.html</a>,
- March 1997.
-
- [<a name="ref-FDDI" id="ref-FDDI">FDDI</a>] Crawford, M., "Transmission of IPv6 Packets over FDDI
- Networks", <a href="http://tools.ietf.org/html/rfc2467">RFC 2467</a>, December 1998.
-
- [<a name="ref-MASGN" id="ref-MASGN">MASGN</a>] Hinden, R. and S. Deering, "IPv6 Multicast Address
- Assignments", <a href="http://tools.ietf.org/html/rfc2375">RFC 2375</a>, July 1998.
-
- [<a name="ref-NSAP" id="ref-NSAP">NSAP</a>] Bound, J., Carpenter, B., Harrington, D., Houldsworth, J.
- and A. Lloyd, "OSI NSAPs and IPv6", <a href="http://tools.ietf.org/html/rfc1888">RFC 1888</a>, August 1996.
-
- [<a name="ref-PRIV" id="ref-PRIV">PRIV</a>] Narten, T. and R. Draves, "Privacy Extensions for Stateless
- Address Autoconfiguration in IPv6", <a href="http://tools.ietf.org/html/rfc3041">RFC 3041</a>, January 2001.
-
- [<a name="ref-TOKEN" id="ref-TOKEN">TOKEN</a>] Crawford, M., Narten, T. and S. Thomas, "Transmission of
- IPv6 Packets over Token Ring Networks", <a href="http://tools.ietf.org/html/rfc2470">RFC 2470</a>, December
- 1998.
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 19]</span>
-<a name="page-20" id="page-20" href="#page-20"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- [<a name="ref-TRAN" id="ref-TRAN">TRAN</a>] Gilligan, R. and E. Nordmark, "Transition Mechanisms for
- IPv6 Hosts and Routers", <a href="http://tools.ietf.org/html/rfc2893">RFC 2893</a>, August 2000.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 20]</span>
-<a name="page-21" id="page-21" href="#page-21"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
-APPENDIX A: Creating Modified EUI-64 format Interface Identifiers
-
- Depending on the characteristics of a specific link or node there are
- a number of approaches for creating Modified EUI-64 format interface
- identifiers. This appendix describes some of these approaches.
-
-Links or Nodes with IEEE EUI-64 Identifiers
-
- The only change needed to transform an IEEE EUI-64 identifier to an
- interface identifier is to invert the "u" (universal/local) bit. For
- example, a globally unique IEEE EUI-64 identifier of the form:
-
- |0 1|1 3|3 4|4 6|
- |0 5|6 1|2 7|8 3|
- +----------------+----------------+----------------+----------------+
- |cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
- +----------------+----------------+----------------+----------------+
-
- where "c" are the bits of the assigned company_id, "0" is the value
- of the universal/local bit to indicate global scope, "g" is
- individual/group bit, and "m" are the bits of the manufacturer-
- selected extension identifier. The IPv6 interface identifier would
- be of the form:
-
- |0 1|1 3|3 4|4 6|
- |0 5|6 1|2 7|8 3|
- +----------------+----------------+----------------+----------------+
- |cccccc1gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
- +----------------+----------------+----------------+----------------+
-
- The only change is inverting the value of the universal/local bit.
-
-Links or Nodes with IEEE 802 48 bit MAC's
-
- [<a name="ref-EUI64" id="ref-EUI64">EUI64</a>] defines a method to create a IEEE EUI-64 identifier from an
- IEEE 48bit MAC identifier. This is to insert two octets, with
- hexadecimal values of 0xFF and 0xFE, in the middle of the 48 bit MAC
- (between the company_id and vendor supplied id). For example, the 48
- bit IEEE MAC with global scope:
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 21]</span>
-<a name="page-22" id="page-22" href="#page-22"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- |0 1|1 3|3 4|
- |0 5|6 1|2 7|
- +----------------+----------------+----------------+
- |cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|
- +----------------+----------------+----------------+
-
- where "c" are the bits of the assigned company_id, "0" is the value
- of the universal/local bit to indicate global scope, "g" is
- individual/group bit, and "m" are the bits of the manufacturer-
- selected extension identifier. The interface identifier would be of
- the form:
-
- |0 1|1 3|3 4|4 6|
- |0 5|6 1|2 7|8 3|
- +----------------+----------------+----------------+----------------+
- |cccccc1gcccccccc|cccccccc11111111|11111110mmmmmmmm|mmmmmmmmmmmmmmmm|
- +----------------+----------------+----------------+----------------+
-
- When IEEE 802 48bit MAC addresses are available (on an interface or a
- node), an implementation may use them to create interface identifiers
- due to their availability and uniqueness properties.
-
-Links with Other Kinds of Identifiers
-
- There are a number of types of links that have link-layer interface
- identifiers other than IEEE EIU-64 or IEEE 802 48-bit MACs. Examples
- include LocalTalk and Arcnet. The method to create an Modified EUI-
- 64 format identifier is to take the link identifier (e.g., the
- LocalTalk 8 bit node identifier) and zero fill it to the left. For
- example, a LocalTalk 8 bit node identifier of hexadecimal value 0x4F
- results in the following interface identifier:
-
- |0 1|1 3|3 4|4 6|
- |0 5|6 1|2 7|8 3|
- +----------------+----------------+----------------+----------------+
- |0000000000000000|0000000000000000|0000000000000000|0000000001001111|
- +----------------+----------------+----------------+----------------+
-
- Note that this results in the universal/local bit set to "0" to
- indicate local scope.
-
-Links without Identifiers
-
- There are a number of links that do not have any type of built-in
- identifier. The most common of these are serial links and configured
- tunnels. Interface identifiers must be chosen that are unique within
- a subnet-prefix.
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 22]</span>
-<a name="page-23" id="page-23" href="#page-23"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- When no built-in identifier is available on a link the preferred
- approach is to use a global interface identifier from another
- interface or one which is assigned to the node itself. When using
- this approach no other interface connecting the same node to the same
- subnet-prefix may use the same identifier.
-
- If there is no global interface identifier available for use on the
- link the implementation needs to create a local-scope interface
- identifier. The only requirement is that it be unique within a
- subnet prefix. There are many possible approaches to select a
- subnet-prefix-unique interface identifier. These include:
-
- Manual Configuration
- Node Serial Number
- Other node-specific token
-
- The subnet-prefix-unique interface identifier should be generated in
- a manner that it does not change after a reboot of a node or if
- interfaces are added or deleted from the node.
-
- The selection of the appropriate algorithm is link and implementation
- dependent. The details on forming interface identifiers are defined
- in the appropriate "IPv6 over <link>" specification. It is strongly
- recommended that a collision detection algorithm be implemented as
- part of any automatic algorithm.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 23]</span>
-<a name="page-24" id="page-24" href="#page-24"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
-APPENDIX B: Changes from <a href="http://tools.ietf.org/html/rfc2373">RFC-2373</a>
-
- The following changes were made from <a href="http://tools.ietf.org/html/rfc2373">RFC-2373</a> "IP Version 6
- Addressing Architecture":
-
- - Clarified text in <a href="#section-2.2">section 2.2</a> to allow "::" to represent one or
- more groups of 16 bits of zeros.
- - Changed uniqueness requirement of Interface Identifiers from
- unique on a link to unique within a subnet prefix. Also added a
- recommendation that the same interface identifier not be assigned
- to different machines on a link.
- - Change site-local format to make the subnet ID field 54-bit long
- and remove the 38-bit zero's field.
- - Added description of multicast scop values and rules to handle the
- reserved scop value 0.
- - Revised sections 2.4 and 2.5.6 to simplify and clarify how
- different address types are identified. This was done to insure
- that implementations do not build in any knowledge about global
- unicast format prefixes. Changes include:
- o Removed Format Prefix (FP) terminology
- o Revised list of address types to only include exceptions to
- global unicast and a singe entry that identifies everything
- else as Global Unicast.
- o Removed list of defined prefix exceptions from <a href="#section-2.5.6">section 2.5.6</a>
- as it is now the main part of <a href="#section-2.4">section 2.4</a>.
- - Clarified text relating to EUI-64 identifiers to distinguish
- between IPv6's "Modified EUI-64 format" identifiers and IEEE EUI-
- 64 identifiers.
- - Combined the sections on the Global Unicast Addresses and NSAP
- Addresses into a single section on Global Unicast Addresses,
- generalized the Global Unicast format, and cited [<a href="#ref-AGGR" title=""An Aggregatable Global Unicast Address Format"">AGGR</a>] and [<a href="#ref-NSAP" title=""OSI NSAPs and IPv6"">NSAP</a>]
- as examples.
- - Reordered sections 2.5.4 and 2.5.5.
- - Removed <a href="#section-2.7.2">section 2.7.2</a> Assignment of New IPv6 Multicast Addresses
- because this is being redefined elsewhere.
- - Added an IANA considerations section that updates the IANA IPv6
- address allocations and documents the NSAP and AGGR allocations.
- - Added clarification that the "IPv4-compatible IPv6 address" must
- use global IPv4 unicast addresses.
- - Divided references in to normative and non-normative sections.
- - Added reference to [<a href="#ref-PRIV" title=""Privacy Extensions for Stateless Address Autoconfiguration in IPv6"">PRIV</a>] in <a href="#section-2.5.1">section 2.5.1</a>
- - Added clarification that routers must not forward multicast
- packets outside of the scope indicated in the multicast address.
- - Added clarification that routers must not forward packets with
- source address of the unspecified address.
- - Added clarification that routers must drop packets received on an
- interface with destination address of loopback.
- - Clarified the definition of IPv4-mapped addresses.
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 24]</span>
-<a name="page-25" id="page-25" href="#page-25"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
- - Removed the ABNF Description of Text Representations Appendix.
- - Removed the address block reserved for IPX addresses.
- - Multicast scope changes:
- o Changed name of scope value 1 from "node-local" to
- "interface-local"
- o Defined scope value 4 as "admin-local"
- - Corrected reference to <a href="http://tools.ietf.org/html/rfc1933">RFC1933</a> and updated references.
- - Many small changes to clarify and make the text more consistent.
-
-Authors' Addresses
-
- Robert M. Hinden
- Nokia
- 313 Fairchild Drive
- Mountain View, CA 94043
- USA
-
- Phone: +1 650 625-2004
- EMail: hinden@iprg.nokia.com
-
-
- Stephen E. Deering
- Cisco Systems, Inc.
- 170 West Tasman Drive
- San Jose, CA 95134-1706
- USA
-
- Phone: +1 408 527-8213
- EMail: deering@cisco.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Hinden & Deering Standards Track [Page 25]</span>
-<a name="page-26" id="page-26" href="#page-26"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a> IPv6 Addressing Architecture April 2003</span>
-
-
-Full Copyright Statement
-
- Copyright (C) The Internet Society (2003). All Rights Reserved.
-
- This document and translations of it may be copied and furnished to
- others, and derivative works that comment on or otherwise explain it
- or assist in its implementation may be prepared, copied, published
- and distributed, in whole or in part, without restriction of any
- kind, provided that the above copyright notice and this paragraph are
- included on all such copies and derivative works. However, this
- document itself may not be modified in any way, such as by removing
- the copyright notice or references to the Internet Society or other
- Internet organizations, except as needed for the purpose of
- developing Internet standards in which case the procedures for
- copyrights defined in the Internet Standards process must be
- followed, or as required to translate it into languages other than
- English.
-
- The limited permissions granted above are perpetual and will not be
- revoked by the Internet Society or its successors or assigns.
-
- This document and the information contained herein is provided on an
- "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
- TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
- BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
- HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
- MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-Acknowledgement
-
- Funding for the RFC Editor function is currently provided by the
- Internet Society.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Hinden & Deering Standards Track [Page 26]
-<span class="break"> </span>
-
-</pre><br>
-<span class="noprint"><small><small>Html markup produced by rfcmarkup 1.46, available from
-<a href="http://tools.ietf.org/tools/rfcmarkup/">http://tools.ietf.org/tools/rfcmarkup/</a>
-</small></small></span>
-
-</body></html>
\ No newline at end of file diff --git a/doc/rfc3986.htm b/doc/rfc3986.htm deleted file mode 100644 index b392007..0000000 --- a/doc/rfc3986.htm +++ /dev/null @@ -1,3539 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xml:lang="en" lang="en"><head>
-
-
- <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
- <meta name="robots" content="index,follow">
- <meta name="creator" content="rfcmarkup version 1.46">
- <link rel="icon" href="http://tools.ietf.org/images/rfc.png" type="image/png">
- <link rel="shortcut icon" href="http://tools.ietf.org/images/rfc.png" type="image/png"><title>RFC 3986 Uniform Resource Identifier (URI): Generic Syntax</title>
-
-
- <style type="text/css">
- body {
- margin: 0px 8px;
- font-size: 1em;
- }
- h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
- font-weight: bold;
- line-height: 0pt;
- display: inline;
- white-space: pre;
- font-family: monospace;
- font-size: 1em;
- font-weight: bold;
- }
- pre {
- font-size: 1em;
- }
- .pre {
- white-space: pre;
- font-family: monospace;
- }
- .header{
- font-weight: bold;
- }
- @media print {
- body {
- font-size: 10.5pt;
- }
- h1, h2, h3, h4, h5, h6 {
- font-size: 10.5pt;
- }
-
- a:link, a:visited {
- color: inherit;
- text-decoration: none;
- }
- .break {
- page-break-before: always;
- text-decoration: none;
- }
- .noprint {
- display: none;
- }
- }
- @media screen {
- .grey, .grey a:link, .grey a:visited {
- color: #777;
- }
- .break {
- text-decoration: none;
- display: none;
- }
- .docinfo {
- background-color: #EEE;
- }
- .top {
- border-top: 2px solid #EEE;
- }
- .bgwhite { background-color: white; }
- .bgred { background-color: #F44; }
- .bggrey { background-color: #666; }
- .bgbrown { background-color: #840; }
- .bgorange { background-color: #FA0; }
- .bgyellow { background-color: #EE0; }
- .bgmagenta{ background-color: #F4F; }
- .bgblue { background-color: #66F; }
- .bgcyan { background-color: #4DD; }
- .bggreen { background-color: #4F4; }
-
- .legend { font-size: 90%; }
- .cplate { font-size: 70%; border: solid grey 1px; }
- }
- </style>
-
- <script type="text/javascript"><!--
- function addHeaderTags() {
- var spans = document.getElementsByTagName("span");
- for (var i=0; i < spans.length; i++) {
- var elem = spans[i];
- if (elem) {
- var level = elem.getAttribute("class");
- if (level == "h1" || level == "h2" || level == "h3" || level == "h4" || level == "h5" || level == "h6") {
- elem.innerHTML = "<"+level+">"+elem.innerHTML+"</"+level+">";
- }
- }
- }
- }
- var legend_html = "Colour legend:<br /> <table> <tr><td>Unknown:</td> <td><span class='cplate bgwhite'> </span></td></tr> <tr><td>Draft:</td> <td><span class='cplate bgred'> </span></td></tr> <tr><td>Informational:</td> <td><span class='cplate bgorange'> </span></td></tr> <tr><td>Experimental:</td> <td><span class='cplate bgyellow'> </span></td></tr> <tr><td>Best Common Practice:</td><td><span class='cplate bgmagenta'> </span></td></tr> <tr><td>Proposed Standard:</td><td><span class='cplate bgblue'> </span></td></tr> <tr><td>Draft Standard:</td> <td><span class='cplate bgcyan'> </span></td></tr> <tr><td>Standard:</td> <td><span class='cplate bggreen'> </span></td></tr> <tr><td>Historic:</td> <td><span class='cplate bggrey'> </span></td></tr> <tr><td>Obsolete:</td> <td><span class='cplate bgbrown'> </span></td></tr> </table>";
- function showElem(id) {
- var elem = document.getElementById(id);
- elem.innerHTML = eval(id+"_html");
- elem.style.visibility='visible';
- }
- function hideElem(id) {
- var elem = document.getElementById(id);
- elem.style.visibility='hidden';
- elem.innerHTML = "";
- }
- // -->
- </script></head><body onload="addHeaderTags()">
- <div style="height: 8px;">
- <span style="cursor: pointer;" onmouseover="this.style.cursor='pointer';" onclick="showElem('legend');" onmouseout="hideElem('legend')" class="pre noprint docinfo bggreen" title="Click for colour legend."> </span>
- <div id="legend" class="docinfo noprint pre legend" style="border: 1px solid rgb(51, 68, 85); padding: 4px 9px 5px 7px; position: absolute; top: 4px; left: 4ex; visibility: hidden; background-color: white;" onmouseover="showElem('legend');" onmouseout="hideElem('legend');"></div>
- </div>
-<span class="pre noprint docinfo top">[<a href="http://tools.ietf.org/html/">RFCs/IDs</a>] [<a href="http://tools.ietf.org/rfc/rfc3986.txt">Plain Text</a>] [From <a href="http://tools.ietf.org/html/draft-fielding-uri-rfc2396bis">draft-fielding-uri-rfc2396bis</a>] </span><br>
-<span class="pre noprint docinfo"> </span><br>
-<span class="pre noprint docinfo"> STANDARD</span><br>
-<span class="pre noprint docinfo"> </span><br>
-<pre>Network Working Group T. Berners-Lee
-Request for Comments: 3986 W3C/MIT
-STD: 66 R. Fielding
-Updates: <a href="http://tools.ietf.org/html/rfc1738">1738</a> Day Software
-Obsoletes: <a href="http://tools.ietf.org/html/rfc2732">2732</a>, <a href="http://tools.ietf.org/html/rfc2396">2396</a>, <a href="http://tools.ietf.org/html/rfc1808">1808</a> L. Masinter
-Category: Standards Track Adobe Systems
- January 2005
-
-
- <span class="h1"><h1>Uniform Resource Identifier (URI): Generic Syntax</h1></span>
-
-Status of This Memo
-
- This document specifies an Internet standards track protocol for the
- Internet community, and requests discussion and suggestions for
- improvements. Please refer to the current edition of the "Internet
- Official Protocol Standards" (STD 1) for the standardization state
- and status of this protocol. Distribution of this memo is unlimited.
-
-Copyright Notice
-
- Copyright (C) The Internet Society (2005).
-
-Abstract
-
- A Uniform Resource Identifier (URI) is a compact sequence of
- characters that identifies an abstract or physical resource. This
- specification defines the generic URI syntax and a process for
- resolving URI references that might be in relative form, along with
- guidelines and security considerations for the use of URIs on the
- Internet. The URI syntax defines a grammar that is a superset of all
- valid URIs, allowing an implementation to parse the common components
- of a URI reference without knowing the scheme-specific requirements
- of every possible identifier. This specification does not define a
- generative grammar for URIs; that task is performed by the individual
- specifications of each URI scheme.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 1]</span>
-<a name="page-2" id="page-2" href="#page-2"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-Table of Contents
-
- <a href="#section-1">1</a>. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-4">4</a>
- <a href="#section-1.1">1.1</a>. Overview of URIs . . . . . . . . . . . . . . . . . . . . <a href="#page-4">4</a>
- <a href="#section-1.1.1">1.1.1</a>. Generic Syntax . . . . . . . . . . . . . . . . . <a href="#page-6">6</a>
- <a href="#section-1.1.2">1.1.2</a>. Examples . . . . . . . . . . . . . . . . . . . . <a href="#page-7">7</a>
- <a href="#section-1.1.3">1.1.3</a>. URI, URL, and URN . . . . . . . . . . . . . . . <a href="#page-7">7</a>
- <a href="#section-1.2">1.2</a>. Design Considerations . . . . . . . . . . . . . . . . . <a href="#page-8">8</a>
- <a href="#section-1.2.1">1.2.1</a>. Transcription . . . . . . . . . . . . . . . . . <a href="#page-8">8</a>
- <a href="#section-1.2.2">1.2.2</a>. Separating Identification from Interaction . . . <a href="#page-9">9</a>
- <a href="#section-1.2.3">1.2.3</a>. Hierarchical Identifiers . . . . . . . . . . . . <a href="#page-10">10</a>
- <a href="#section-1.3">1.3</a>. Syntax Notation . . . . . . . . . . . . . . . . . . . . <a href="#page-11">11</a>
- <a href="#section-2">2</a>. Characters . . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-11">11</a>
- <a href="#section-2.1">2.1</a>. Percent-Encoding . . . . . . . . . . . . . . . . . . . . <a href="#page-12">12</a>
- <a href="#section-2.2">2.2</a>. Reserved Characters . . . . . . . . . . . . . . . . . . <a href="#page-12">12</a>
- <a href="#section-2.3">2.3</a>. Unreserved Characters . . . . . . . . . . . . . . . . . <a href="#page-13">13</a>
- <a href="#section-2.4">2.4</a>. When to Encode or Decode . . . . . . . . . . . . . . . . <a href="#page-14">14</a>
- <a href="#section-2.5">2.5</a>. Identifying Data . . . . . . . . . . . . . . . . . . . . <a href="#page-14">14</a>
- <a href="#section-3">3</a>. Syntax Components . . . . . . . . . . . . . . . . . . . . . . <a href="#page-16">16</a>
- <a href="#section-3.1">3.1</a>. Scheme . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-17">17</a>
- <a href="#section-3.2">3.2</a>. Authority . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-17">17</a>
- <a href="#section-3.2.1">3.2.1</a>. User Information . . . . . . . . . . . . . . . . <a href="#page-18">18</a>
- <a href="#section-3.2.2">3.2.2</a>. Host . . . . . . . . . . . . . . . . . . . . . . <a href="#page-18">18</a>
- <a href="#section-3.2.3">3.2.3</a>. Port . . . . . . . . . . . . . . . . . . . . . . <a href="#page-22">22</a>
- <a href="#section-3.3">3.3</a>. Path . . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-22">22</a>
- <a href="#section-3.4">3.4</a>. Query . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-23">23</a>
- <a href="#section-3.5">3.5</a>. Fragment . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-24">24</a>
- <a href="#section-4">4</a>. Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-25">25</a>
- <a href="#section-4.1">4.1</a>. URI Reference . . . . . . . . . . . . . . . . . . . . . <a href="#page-25">25</a>
- <a href="#section-4.2">4.2</a>. Relative Reference . . . . . . . . . . . . . . . . . . . <a href="#page-26">26</a>
- <a href="#section-4.3">4.3</a>. Absolute URI . . . . . . . . . . . . . . . . . . . . . . <a href="#page-27">27</a>
- <a href="#section-4.4">4.4</a>. Same-Document Reference . . . . . . . . . . . . . . . . <a href="#page-27">27</a>
- <a href="#section-4.5">4.5</a>. Suffix Reference . . . . . . . . . . . . . . . . . . . . <a href="#page-27">27</a>
- <a href="#section-5">5</a>. Reference Resolution . . . . . . . . . . . . . . . . . . . . . <a href="#page-28">28</a>
- <a href="#section-5.1">5.1</a>. Establishing a Base URI . . . . . . . . . . . . . . . . <a href="#page-28">28</a>
- <a href="#section-5.1.1">5.1.1</a>. Base URI Embedded in Content . . . . . . . . . . <a href="#page-29">29</a>
- <a href="#section-5.1.2">5.1.2</a>. Base URI from the Encapsulating Entity . . . . . <a href="#page-29">29</a>
- <a href="#section-5.1.3">5.1.3</a>. Base URI from the Retrieval URI . . . . . . . . <a href="#page-30">30</a>
- <a href="#section-5.1.4">5.1.4</a>. Default Base URI . . . . . . . . . . . . . . . . <a href="#page-30">30</a>
- <a href="#section-5.2">5.2</a>. Relative Resolution . . . . . . . . . . . . . . . . . . <a href="#page-30">30</a>
- <a href="#section-5.2.1">5.2.1</a>. Pre-parse the Base URI . . . . . . . . . . . . . <a href="#page-31">31</a>
- <a href="#section-5.2.2">5.2.2</a>. Transform References . . . . . . . . . . . . . . <a href="#page-31">31</a>
- <a href="#section-5.2.3">5.2.3</a>. Merge Paths . . . . . . . . . . . . . . . . . . <a href="#page-32">32</a>
- <a href="#section-5.2.4">5.2.4</a>. Remove Dot Segments . . . . . . . . . . . . . . <a href="#page-33">33</a>
- <a href="#section-5.3">5.3</a>. Component Recomposition . . . . . . . . . . . . . . . . <a href="#page-35">35</a>
- <a href="#section-5.4">5.4</a>. Reference Resolution Examples . . . . . . . . . . . . . <a href="#page-35">35</a>
- <a href="#section-5.4.1">5.4.1</a>. Normal Examples . . . . . . . . . . . . . . . . <a href="#page-36">36</a>
- <a href="#section-5.4.2">5.4.2</a>. Abnormal Examples . . . . . . . . . . . . . . . <a href="#page-36">36</a>
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 2]</span>
-<a name="page-3" id="page-3" href="#page-3"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- <a href="#section-6">6</a>. Normalization and Comparison . . . . . . . . . . . . . . . . . <a href="#page-38">38</a>
- <a href="#section-6.1">6.1</a>. Equivalence . . . . . . . . . . . . . . . . . . . . . . <a href="#page-38">38</a>
- <a href="#section-6.2">6.2</a>. Comparison Ladder . . . . . . . . . . . . . . . . . . . <a href="#page-39">39</a>
- <a href="#section-6.2.1">6.2.1</a>. Simple String Comparison . . . . . . . . . . . . <a href="#page-39">39</a>
- <a href="#section-6.2.2">6.2.2</a>. Syntax-Based Normalization . . . . . . . . . . . <a href="#page-40">40</a>
- <a href="#section-6.2.3">6.2.3</a>. Scheme-Based Normalization . . . . . . . . . . . <a href="#page-41">41</a>
- <a href="#section-6.2.4">6.2.4</a>. Protocol-Based Normalization . . . . . . . . . . <a href="#page-42">42</a>
- <a href="#section-7">7</a>. Security Considerations . . . . . . . . . . . . . . . . . . . <a href="#page-43">43</a>
- <a href="#section-7.1">7.1</a>. Reliability and Consistency . . . . . . . . . . . . . . <a href="#page-43">43</a>
- <a href="#section-7.2">7.2</a>. Malicious Construction . . . . . . . . . . . . . . . . . <a href="#page-43">43</a>
- <a href="#section-7.3">7.3</a>. Back-End Transcoding . . . . . . . . . . . . . . . . . . <a href="#page-44">44</a>
- <a href="#section-7.4">7.4</a>. Rare IP Address Formats . . . . . . . . . . . . . . . . <a href="#page-45">45</a>
- <a href="#section-7.5">7.5</a>. Sensitive Information . . . . . . . . . . . . . . . . . <a href="#page-45">45</a>
- <a href="#section-7.6">7.6</a>. Semantic Attacks . . . . . . . . . . . . . . . . . . . . <a href="#page-45">45</a>
- <a href="#section-8">8</a>. IANA Considerations . . . . . . . . . . . . . . . . . . . . . <a href="#page-46">46</a>
- <a href="#section-9">9</a>. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-46">46</a>
- <a href="#section-10">10</a>. References . . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-46">46</a>
- <a href="#section-10.1">10.1</a>. Normative References . . . . . . . . . . . . . . . . . . <a href="#page-46">46</a>
- <a href="#section-10.2">10.2</a>. Informative References . . . . . . . . . . . . . . . . . <a href="#page-47">47</a>
- A. Collected ABNF for URI . . . . . . . . . . . . . . . . . . . . <a href="#page-49">49</a>
- B. Parsing a URI Reference with a Regular Expression . . . . . . <a href="#page-50">50</a>
- C. Delimiting a URI in Context . . . . . . . . . . . . . . . . . <a href="#page-51">51</a>
- D. Changes from <a href="http://tools.ietf.org/html/rfc2396">RFC 2396</a> . . . . . . . . . . . . . . . . . . . . <a href="#page-53">53</a>
- D.1. Additions . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-53">53</a>
- D.2. Modifications . . . . . . . . . . . . . . . . . . . . . <a href="#page-53">53</a>
- Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-56">56</a>
- Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-60">60</a>
- Full Copyright Statement . . . . . . . . . . . . . . . . . . . . . <a href="#page-61">61</a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 3]</span>
-<a name="page-4" id="page-4" href="#page-4"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h2"><h2><a name="section-1">1</a>. Introduction</h2></span>
-
- A Uniform Resource Identifier (URI) provides a simple and extensible
- means for identifying a resource. This specification of URI syntax
- and semantics is derived from concepts introduced by the World Wide
- Web global information initiative, whose use of these identifiers
- dates from 1990 and is described in "Universal Resource Identifiers
- in WWW" [<a href="http://tools.ietf.org/html/rfc1630" title=""Universal Resource Identifiers in WWW: A Unifying Syntax for the Expression of Names and Addresses of Objects on the Network as used in the World-Wide Web"">RFC1630</a>]. The syntax is designed to meet the
- recommendations laid out in "Functional Recommendations for Internet
- Resource Locators" [<a href="http://tools.ietf.org/html/rfc1736" title=""Functional Recommendations for Internet Resource Locators"">RFC1736</a>] and "Functional Requirements for Uniform
- Resource Names" [<a href="http://tools.ietf.org/html/rfc1737" title=""Functional Requirements for Uniform Resource Names"">RFC1737</a>].
-
- This document obsoletes [<a href="http://tools.ietf.org/html/rfc2396" title=""Uniform Resource Identifiers (URI): Generic Syntax"">RFC2396</a>], which merged "Uniform Resource
- Locators" [<a href="http://tools.ietf.org/html/rfc1738" title=""Uniform Resource Locators (URL)"">RFC1738</a>] and "Relative Uniform Resource Locators"
- [<a href="http://tools.ietf.org/html/rfc1808" title=""Relative Uniform Resource Locators"">RFC1808</a>] in order to define a single, generic syntax for all URIs.
- It obsoletes [<a href="http://tools.ietf.org/html/rfc2732" title=""Format for Literal IPv6 Addresses in URL&#39;s"">RFC2732</a>], which introduced syntax for an IPv6 address.
- It excludes portions of <a href="http://tools.ietf.org/html/rfc1738">RFC 1738</a> that defined the specific syntax of
- individual URI schemes; those portions will be updated as separate
- documents. The process for registration of new URI schemes is
- defined separately by [<a href="#ref-BCP35" title=""Registration Procedures for URL Scheme Names"">BCP35</a>]. Advice for designers of new URI
- schemes can be found in [<a href="http://tools.ietf.org/html/rfc2718" title=""Guidelines for new URL Schemes"">RFC2718</a>]. All significant changes from <a href="http://tools.ietf.org/html/rfc2396">RFC</a>
- <a href="http://tools.ietf.org/html/rfc2396">2396</a> are noted in Appendix D.
-
- This specification uses the terms "character" and "coded character
- set" in accordance with the definitions provided in [<a href="#ref-BCP19" title=""IANA Charset Registration Procedures"">BCP19</a>], and
- "character encoding" in place of what [<a href="#ref-BCP19" title=""IANA Charset Registration Procedures"">BCP19</a>] refers to as a
- "charset".
-
-<span class="h3"><h3><a name="section-1.1">1.1</a>. Overview of URIs</h3></span>
-
- URIs are characterized as follows:
-
- Uniform
-
- Uniformity provides several benefits. It allows different types
- of resource identifiers to be used in the same context, even when
- the mechanisms used to access those resources may differ. It
- allows uniform semantic interpretation of common syntactic
- conventions across different types of resource identifiers. It
- allows introduction of new types of resource identifiers without
- interfering with the way that existing identifiers are used. It
- allows the identifiers to be reused in many different contexts,
- thus permitting new applications or protocols to leverage a pre-
- existing, large, and widely used set of resource identifiers.
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 4]</span>
-<a name="page-5" id="page-5" href="#page-5"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- Resource
-
- This specification does not limit the scope of what might be a
- resource; rather, the term "resource" is used in a general sense
- for whatever might be identified by a URI. Familiar examples
- include an electronic document, an image, a source of information
- with a consistent purpose (e.g., "today's weather report for Los
- Angeles"), a service (e.g., an HTTP-to-SMS gateway), and a
- collection of other resources. A resource is not necessarily
- accessible via the Internet; e.g., human beings, corporations, and
- bound books in a library can also be resources. Likewise,
- abstract concepts can be resources, such as the operators and
- operands of a mathematical equation, the types of a relationship
- (e.g., "parent" or "employee"), or numeric values (e.g., zero,
- one, and infinity).
-
- Identifier
-
- An identifier embodies the information required to distinguish
- what is being identified from all other things within its scope of
- identification. Our use of the terms "identify" and "identifying"
- refer to this purpose of distinguishing one resource from all
- other resources, regardless of how that purpose is accomplished
- (e.g., by name, address, or context). These terms should not be
- mistaken as an assumption that an identifier defines or embodies
- the identity of what is referenced, though that may be the case
- for some identifiers. Nor should it be assumed that a system
- using URIs will access the resource identified: in many cases,
- URIs are used to denote resources without any intention that they
- be accessed. Likewise, the "one" resource identified might not be
- singular in nature (e.g., a resource might be a named set or a
- mapping that varies over time).
-
- A URI is an identifier consisting of a sequence of characters
- matching the syntax rule named <URI> in <a href="#section-3">Section 3</a>. It enables
- uniform identification of resources via a separately defined
- extensible set of naming schemes (<a href="#section-3.1">Section 3.1</a>). How that
- identification is accomplished, assigned, or enabled is delegated to
- each scheme specification.
-
- This specification does not place any limits on the nature of a
- resource, the reasons why an application might seek to refer to a
- resource, or the kinds of systems that might use URIs for the sake of
- identifying resources. This specification does not require that a
- URI persists in identifying the same resource over time, though that
- is a common goal of all URI schemes. Nevertheless, nothing in this
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 5]</span>
-<a name="page-6" id="page-6" href="#page-6"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- specification prevents an application from limiting itself to
- particular types of resources, or to a subset of URIs that maintains
- characteristics desired by that application.
-
- URIs have a global scope and are interpreted consistently regardless
- of context, though the result of that interpretation may be in
- relation to the end-user's context. For example, "<a href="http://localhost/">http://localhost/</a>"
- has the same interpretation for every user of that reference, even
- though the network interface corresponding to "localhost" may be
- different for each end-user: interpretation is independent of access.
- However, an action made on the basis of that reference will take
- place in relation to the end-user's context, which implies that an
- action intended to refer to a globally unique thing must use a URI
- that distinguishes that resource from all other things. URIs that
- identify in relation to the end-user's local context should only be
- used when the context itself is a defining aspect of the resource,
- such as when an on-line help manual refers to a file on the end-
- user's file system (e.g., "file:///etc/hosts").
-
-<span class="h4"><h4><a name="section-1.1.1">1.1.1</a>. Generic Syntax</h4></span>
-
- Each URI begins with a scheme name, as defined in <a href="#section-3.1">Section 3.1</a>, that
- refers to a specification for assigning identifiers within that
- scheme. As such, the URI syntax is a federated and extensible naming
- system wherein each scheme's specification may further restrict the
- syntax and semantics of identifiers using that scheme.
-
- This specification defines those elements of the URI syntax that are
- required of all URI schemes or are common to many URI schemes. It
- thus defines the syntax and semantics needed to implement a scheme-
- independent parsing mechanism for URI references, by which the
- scheme-dependent handling of a URI can be postponed until the
- scheme-dependent semantics are needed. Likewise, protocols and data
- formats that make use of URI references can refer to this
- specification as a definition for the range of syntax allowed for all
- URIs, including those schemes that have yet to be defined. This
- decouples the evolution of identification schemes from the evolution
- of protocols, data formats, and implementations that make use of
- URIs.
-
- A parser of the generic URI syntax can parse any URI reference into
- its major components. Once the scheme is determined, further
- scheme-specific parsing can be performed on the components. In other
- words, the URI generic syntax is a superset of the syntax of all URI
- schemes.
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 6]</span>
-<a name="page-7" id="page-7" href="#page-7"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h4"><h4><a name="section-1.1.2">1.1.2</a>. Examples</h4></span>
-
- The following example URIs illustrate several URI schemes and
- variations in their common syntax components:
-
- <a href="ftp://ftp.is.co.za/rfc/rfc1808.txt">ftp://ftp.is.co.za/rfc/rfc1808.txt</a>
-
- <a href="http://www.ietf.org/rfc/rfc2396.txt">http://www.ietf.org/rfc/rfc2396.txt</a>
-
- ldap://[2001:db8::7]/c=GB?objectClass?one
-
- mailto:John.Doe@example.com
-
- news:comp.infosystems.www.servers.unix
-
- tel:+1-816-555-1212
-
- telnet://192.0.2.16:80/
-
- urn:oasis:names:specification:docbook:dtd:xml:4.1.2
-
-
-<span class="h4"><h4><a name="section-1.1.3">1.1.3</a>. URI, URL, and URN</h4></span>
-
- A URI can be further classified as a locator, a name, or both. The
- term "Uniform Resource Locator" (URL) refers to the subset of URIs
- that, in addition to identifying a resource, provide a means of
- locating the resource by describing its primary access mechanism
- (e.g., its network "location"). The term "Uniform Resource Name"
- (URN) has been used historically to refer to both URIs under the
- "urn" scheme [<a href="http://tools.ietf.org/html/rfc2141" title=""URN Syntax"">RFC2141</a>], which are required to remain globally unique
- and persistent even when the resource ceases to exist or becomes
- unavailable, and to any other URI with the properties of a name.
-
- An individual scheme does not have to be classified as being just one
- of "name" or "locator". Instances of URIs from any given scheme may
- have the characteristics of names or locators or both, often
- depending on the persistence and care in the assignment of
- identifiers by the naming authority, rather than on any quality of
- the scheme. Future specifications and related documentation should
- use the general term "URI" rather than the more restrictive terms
- "URL" and "URN" [<a href="http://tools.ietf.org/html/rfc3305" title=""Report from the Joint W3C/IETF URI Planning Interest Group: Uniform Resource Identifiers (URIs), URLs, and Uniform Resource Names (URNs): Clarifications and Recommendations"">RFC3305</a>].
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 7]</span>
-<a name="page-8" id="page-8" href="#page-8"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h3"><h3><a name="section-1.2">1.2</a>. Design Considerations</h3></span>
-
-<span class="h4"><h4><a name="section-1.2.1">1.2.1</a>. Transcription</h4></span>
-
- The URI syntax has been designed with global transcription as one of
- its main considerations. A URI is a sequence of characters from a
- very limited set: the letters of the basic Latin alphabet, digits,
- and a few special characters. A URI may be represented in a variety
- of ways; e.g., ink on paper, pixels on a screen, or a sequence of
- character encoding octets. The interpretation of a URI depends only
- on the characters used and not on how those characters are
- represented in a network protocol.
-
- The goal of transcription can be described by a simple scenario.
- Imagine two colleagues, Sam and Kim, sitting in a pub at an
- international conference and exchanging research ideas. Sam asks Kim
- for a location to get more information, so Kim writes the URI for the
- research site on a napkin. Upon returning home, Sam takes out the
- napkin and types the URI into a computer, which then retrieves the
- information to which Kim referred.
-
- There are several design considerations revealed by the scenario:
-
- o A URI is a sequence of characters that is not always represented
- as a sequence of octets.
-
- o A URI might be transcribed from a non-network source and thus
- should consist of characters that are most likely able to be
- entered into a computer, within the constraints imposed by
- keyboards (and related input devices) across languages and
- locales.
-
- o A URI often has to be remembered by people, and it is easier for
- people to remember a URI when it consists of meaningful or
- familiar components.
-
- These design considerations are not always in alignment. For
- example, it is often the case that the most meaningful name for a URI
- component would require characters that cannot be typed into some
- systems. The ability to transcribe a resource identifier from one
- medium to another has been considered more important than having a
- URI consist of the most meaningful of components.
-
- In local or regional contexts and with improving technology, users
- might benefit from being able to use a wider range of characters;
- such use is not defined by this specification. Percent-encoded
- octets (<a href="#section-2.1">Section 2.1</a>) may be used within a URI to represent characters
- outside the range of the US-ASCII coded character set if this
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 8]</span>
-<a name="page-9" id="page-9" href="#page-9"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- representation is allowed by the scheme or by the protocol element in
- which the URI is referenced. Such a definition should specify the
- character encoding used to map those characters to octets prior to
- being percent-encoded for the URI.
-
-<span class="h4"><h4><a name="section-1.2.2">1.2.2</a>. Separating Identification from Interaction</h4></span>
-
- A common misunderstanding of URIs is that they are only used to refer
- to accessible resources. The URI itself only provides
- identification; access to the resource is neither guaranteed nor
- implied by the presence of a URI. Instead, any operation associated
- with a URI reference is defined by the protocol element, data format
- attribute, or natural language text in which it appears.
-
- Given a URI, a system may attempt to perform a variety of operations
- on the resource, as might be characterized by words such as "access",
- "update", "replace", or "find attributes". Such operations are
- defined by the protocols that make use of URIs, not by this
- specification. However, we do use a few general terms for describing
- common operations on URIs. URI "resolution" is the process of
- determining an access mechanism and the appropriate parameters
- necessary to dereference a URI; this resolution may require several
- iterations. To use that access mechanism to perform an action on the
- URI's resource is to "dereference" the URI.
-
- When URIs are used within information retrieval systems to identify
- sources of information, the most common form of URI dereference is
- "retrieval": making use of a URI in order to retrieve a
- representation of its associated resource. A "representation" is a
- sequence of octets, along with representation metadata describing
- those octets, that constitutes a record of the state of the resource
- at the time when the representation is generated. Retrieval is
- achieved by a process that might include using the URI as a cache key
- to check for a locally cached representation, resolution of the URI
- to determine an appropriate access mechanism (if any), and
- dereference of the URI for the sake of applying a retrieval
- operation. Depending on the protocols used to perform the retrieval,
- additional information might be supplied about the resource (resource
- metadata) and its relation to other resources.
-
- URI references in information retrieval systems are designed to be
- late-binding: the result of an access is generally determined when it
- is accessed and may vary over time or due to other aspects of the
- interaction. These references are created in order to be used in the
- future: what is being identified is not some specific result that was
- obtained in the past, but rather some characteristic that is expected
- to be true for future results. In such cases, the resource referred
- to by the URI is actually a sameness of characteristics as observed
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 9]</span>
-<a name="page-10" id="page-10" href="#page-10"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- over time, perhaps elucidated by additional comments or assertions
- made by the resource provider.
-
- Although many URI schemes are named after protocols, this does not
- imply that use of these URIs will result in access to the resource
- via the named protocol. URIs are often used simply for the sake of
- identification. Even when a URI is used to retrieve a representation
- of a resource, that access might be through gateways, proxies,
- caches, and name resolution services that are independent of the
- protocol associated with the scheme name. The resolution of some
- URIs may require the use of more than one protocol (e.g., both DNS
- and HTTP are typically used to access an "http" URI's origin server
- when a representation isn't found in a local cache).
-
-<span class="h4"><h4><a name="section-1.2.3">1.2.3</a>. Hierarchical Identifiers</h4></span>
-
- The URI syntax is organized hierarchically, with components listed in
- order of decreasing significance from left to right. For some URI
- schemes, the visible hierarchy is limited to the scheme itself:
- everything after the scheme component delimiter (":") is considered
- opaque to URI processing. Other URI schemes make the hierarchy
- explicit and visible to generic parsing algorithms.
-
- The generic syntax uses the slash ("/"), question mark ("?"), and
- number sign ("#") characters to delimit components that are
- significant to the generic parser's hierarchical interpretation of an
- identifier. In addition to aiding the readability of such
- identifiers through the consistent use of familiar syntax, this
- uniform representation of hierarchy across naming schemes allows
- scheme-independent references to be made relative to that hierarchy.
-
- It is often the case that a group or "tree" of documents has been
- constructed to serve a common purpose, wherein the vast majority of
- URI references in these documents point to resources within the tree
- rather than outside it. Similarly, documents located at a particular
- site are much more likely to refer to other resources at that site
- than to resources at remote sites. Relative referencing of URIs
- allows document trees to be partially independent of their location
- and access scheme. For instance, it is possible for a single set of
- hypertext documents to be simultaneously accessible and traversable
- via each of the "file", "http", and "ftp" schemes if the documents
- refer to each other with relative references. Furthermore, such
- document trees can be moved, as a whole, without changing any of the
- relative references.
-
- A relative reference (<a href="#section-4.2">Section 4.2</a>) refers to a resource by describing
- the difference within a hierarchical name space between the reference
- context and the target URI. The reference resolution algorithm,
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 10]</span>
-<a name="page-11" id="page-11" href="#page-11"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- presented in <a href="#section-5">Section 5</a>, defines how such a reference is transformed
- to the target URI. As relative references can only be used within
- the context of a hierarchical URI, designers of new URI schemes
- should use a syntax consistent with the generic syntax's hierarchical
- components unless there are compelling reasons to forbid relative
- referencing within that scheme.
-
- NOTE: Previous specifications used the terms "partial URI" and
- "relative URI" to denote a relative reference to a URI. As some
- readers misunderstood those terms to mean that relative URIs are a
- subset of URIs rather than a method of referencing URIs, this
- specification simply refers to them as relative references.
-
- All URI references are parsed by generic syntax parsers when used.
- However, because hierarchical processing has no effect on an absolute
- URI used in a reference unless it contains one or more dot-segments
- (complete path segments of "." or "..", as described in <a href="#section-3.3">Section 3.3</a>),
- URI scheme specifications can define opaque identifiers by
- disallowing use of slash characters, question mark characters, and
- the URIs "scheme:." and "scheme:..".
-
-<span class="h3"><h3><a name="section-1.3">1.3</a>. Syntax Notation</h3></span>
-
- This specification uses the Augmented Backus-Naur Form (ABNF)
- notation of [<a href="http://tools.ietf.org/html/rfc2234" title=""Augmented BNF for Syntax Specifications: ABNF"">RFC2234</a>], including the following core ABNF syntax rules
- defined by that specification: ALPHA (letters), CR (carriage return),
- DIGIT (decimal digits), DQUOTE (double quote), HEXDIG (hexadecimal
- digits), LF (line feed), and SP (space). The complete URI syntax is
- collected in Appendix A.
-
-<span class="h2"><h2><a name="section-2">2</a>. Characters</h2></span>
-
- The URI syntax provides a method of encoding data, presumably for the
- sake of identifying a resource, as a sequence of characters. The URI
- characters are, in turn, frequently encoded as octets for transport
- or presentation. This specification does not mandate any particular
- character encoding for mapping between URI characters and the octets
- used to store or transmit those characters. When a URI appears in a
- protocol element, the character encoding is defined by that protocol;
- without such a definition, a URI is assumed to be in the same
- character encoding as the surrounding text.
-
- The ABNF notation defines its terminal values to be non-negative
- integers (codepoints) based on the US-ASCII coded character set
- [<a href="#ref-ASCII" title=""Coded Character Set -- 7-bit American Standard Code for Information Interchange"">ASCII</a>]. Because a URI is a sequence of characters, we must invert
- that relation in order to understand the URI syntax. Therefore, the
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 11]</span>
-<a name="page-12" id="page-12" href="#page-12"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- integer values used by the ABNF must be mapped back to their
- corresponding characters via US-ASCII in order to complete the syntax
- rules.
-
- A URI is composed from a limited set of characters consisting of
- digits, letters, and a few graphic symbols. A reserved subset of
- those characters may be used to delimit syntax components within a
- URI while the remaining characters, including both the unreserved set
- and those reserved characters not acting as delimiters, define each
- component's identifying data.
-
-<span class="h3"><h3><a name="section-2.1">2.1</a>. Percent-Encoding</h3></span>
-
- A percent-encoding mechanism is used to represent a data octet in a
- component when that octet's corresponding character is outside the
- allowed set or is being used as a delimiter of, or within, the
- component. A percent-encoded octet is encoded as a character
- triplet, consisting of the percent character "%" followed by the two
- hexadecimal digits representing that octet's numeric value. For
- example, "%20" is the percent-encoding for the binary octet
- "00100000" (ABNF: %x20), which in US-ASCII corresponds to the space
- character (SP). <a href="#section-2.4">Section 2.4</a> describes when percent-encoding and
- decoding is applied.
-
- pct-encoded = "%" HEXDIG HEXDIG
-
- The uppercase hexadecimal digits 'A' through 'F' are equivalent to
- the lowercase digits 'a' through 'f', respectively. If two URIs
- differ only in the case of hexadecimal digits used in percent-encoded
- octets, they are equivalent. For consistency, URI producers and
- normalizers should use uppercase hexadecimal digits for all percent-
- encodings.
-
-<span class="h3"><h3><a name="section-2.2">2.2</a>. Reserved Characters</h3></span>
-
- URIs include components and subcomponents that are delimited by
- characters in the "reserved" set. These characters are called
- "reserved" because they may (or may not) be defined as delimiters by
- the generic syntax, by each scheme-specific syntax, or by the
- implementation-specific syntax of a URI's dereferencing algorithm.
- If data for a URI component would conflict with a reserved
- character's purpose as a delimiter, then the conflicting data must be
- percent-encoded before the URI is formed.
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 12]</span>
-<a name="page-13" id="page-13" href="#page-13"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- reserved = gen-delims / sub-delims
-
- gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
-
- sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
- / "*" / "+" / "," / ";" / "="
-
- The purpose of reserved characters is to provide a set of delimiting
- characters that are distinguishable from other data within a URI.
- URIs that differ in the replacement of a reserved character with its
- corresponding percent-encoded octet are not equivalent. Percent-
- encoding a reserved character, or decoding a percent-encoded octet
- that corresponds to a reserved character, will change how the URI is
- interpreted by most applications. Thus, characters in the reserved
- set are protected from normalization and are therefore safe to be
- used by scheme-specific and producer-specific algorithms for
- delimiting data subcomponents within a URI.
-
- A subset of the reserved characters (gen-delims) is used as
- delimiters of the generic URI components described in <a href="#section-3">Section 3</a>. A
- component's ABNF syntax rule will not use the reserved or gen-delims
- rule names directly; instead, each syntax rule lists the characters
- allowed within that component (i.e., not delimiting it), and any of
- those characters that are also in the reserved set are "reserved" for
- use as subcomponent delimiters within the component. Only the most
- common subcomponents are defined by this specification; other
- subcomponents may be defined by a URI scheme's specification, or by
- the implementation-specific syntax of a URI's dereferencing
- algorithm, provided that such subcomponents are delimited by
- characters in the reserved set allowed within that component.
-
- URI producing applications should percent-encode data octets that
- correspond to characters in the reserved set unless these characters
- are specifically allowed by the URI scheme to represent data in that
- component. If a reserved character is found in a URI component and
- no delimiting role is known for that character, then it must be
- interpreted as representing the data octet corresponding to that
- character's encoding in US-ASCII.
-
-<span class="h3"><h3><a name="section-2.3">2.3</a>. Unreserved Characters</h3></span>
-
- Characters that are allowed in a URI but do not have a reserved
- purpose are called unreserved. These include uppercase and lowercase
- letters, decimal digits, hyphen, period, underscore, and tilde.
-
- unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 13]</span>
-<a name="page-14" id="page-14" href="#page-14"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- URIs that differ in the replacement of an unreserved character with
- its corresponding percent-encoded US-ASCII octet are equivalent: they
- identify the same resource. However, URI comparison implementations
- do not always perform normalization prior to comparison (see Section
- 6). For consistency, percent-encoded octets in the ranges of ALPHA
- (%41-%5A and %61-%7A), DIGIT (%30-%39), hyphen (%2D), period (%2E),
- underscore (%5F), or tilde (%7E) should not be created by URI
- producers and, when found in a URI, should be decoded to their
- corresponding unreserved characters by URI normalizers.
-
-<span class="h3"><h3><a name="section-2.4">2.4</a>. When to Encode or Decode</h3></span>
-
- Under normal circumstances, the only time when octets within a URI
- are percent-encoded is during the process of producing the URI from
- its component parts. This is when an implementation determines which
- of the reserved characters are to be used as subcomponent delimiters
- and which can be safely used as data. Once produced, a URI is always
- in its percent-encoded form.
-
- When a URI is dereferenced, the components and subcomponents
- significant to the scheme-specific dereferencing process (if any)
- must be parsed and separated before the percent-encoded octets within
- those components can be safely decoded, as otherwise the data may be
- mistaken for component delimiters. The only exception is for
- percent-encoded octets corresponding to characters in the unreserved
- set, which can be decoded at any time. For example, the octet
- corresponding to the tilde ("~") character is often encoded as "%7E"
- by older URI processing implementations; the "%7E" can be replaced by
- "~" without changing its interpretation.
-
- Because the percent ("%") character serves as the indicator for
- percent-encoded octets, it must be percent-encoded as "%25" for that
- octet to be used as data within a URI. Implementations must not
- percent-encode or decode the same string more than once, as decoding
- an already decoded string might lead to misinterpreting a percent
- data octet as the beginning of a percent-encoding, or vice versa in
- the case of percent-encoding an already percent-encoded string.
-
-<span class="h3"><h3><a name="section-2.5">2.5</a>. Identifying Data</h3></span>
-
- URI characters provide identifying data for each of the URI
- components, serving as an external interface for identification
- between systems. Although the presence and nature of the URI
- production interface is hidden from clients that use its URIs (and is
- thus beyond the scope of the interoperability requirements defined by
- this specification), it is a frequent source of confusion and errors
- in the interpretation of URI character issues. Implementers have to
- be aware that there are multiple character encodings involved in the
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 14]</span>
-<a name="page-15" id="page-15" href="#page-15"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- production and transmission of URIs: local name and data encoding,
- public interface encoding, URI character encoding, data format
- encoding, and protocol encoding.
-
- Local names, such as file system names, are stored with a local
- character encoding. URI producing applications (e.g., origin
- servers) will typically use the local encoding as the basis for
- producing meaningful names. The URI producer will transform the
- local encoding to one that is suitable for a public interface and
- then transform the public interface encoding into the restricted set
- of URI characters (reserved, unreserved, and percent-encodings).
- Those characters are, in turn, encoded as octets to be used as a
- reference within a data format (e.g., a document charset), and such
- data formats are often subsequently encoded for transmission over
- Internet protocols.
-
- For most systems, an unreserved character appearing within a URI
- component is interpreted as representing the data octet corresponding
- to that character's encoding in US-ASCII. Consumers of URIs assume
- that the letter "X" corresponds to the octet "01011000", and even
- when that assumption is incorrect, there is no harm in making it. A
- system that internally provides identifiers in the form of a
- different character encoding, such as EBCDIC, will generally perform
- character translation of textual identifiers to UTF-8 [<a href="#ref-STD63" title=""UTF-8, a transformation format of ISO 10646"">STD63</a>] (or
- some other superset of the US-ASCII character encoding) at an
- internal interface, thereby providing more meaningful identifiers
- than those resulting from simply percent-encoding the original
- octets.
-
- For example, consider an information service that provides data,
- stored locally using an EBCDIC-based file system, to clients on the
- Internet through an HTTP server. When an author creates a file with
- the name "Laguna Beach" on that file system, the "http" URI
- corresponding to that resource is expected to contain the meaningful
- string "Laguna%20Beach". If, however, that server produces URIs by
- using an overly simplistic raw octet mapping, then the result would
- be a URI containing "%D3%81%87%A4%95%81@%C2%85%81%83%88". An
- internal transcoding interface fixes this problem by transcoding the
- local name to a superset of US-ASCII prior to producing the URI.
- Naturally, proper interpretation of an incoming URI on such an
- interface requires that percent-encoded octets be decoded (e.g.,
- "%20" to SP) before the reverse transcoding is applied to obtain the
- local name.
-
- In some cases, the internal interface between a URI component and the
- identifying data that it has been crafted to represent is much less
- direct than a character encoding translation. For example, portions
- of a URI might reflect a query on non-ASCII data, or numeric
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 15]</span>
-<a name="page-16" id="page-16" href="#page-16"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- coordinates on a map. Likewise, a URI scheme may define components
- with additional encoding requirements that are applied prior to
- forming the component and producing the URI.
-
- When a new URI scheme defines a component that represents textual
- data consisting of characters from the Universal Character Set [<a href="#ref-UCS" title=""Information Technology - Universal Multiple-Octet Coded Character Set (UCS)"">UCS</a>],
- the data should first be encoded as octets according to the UTF-8
- character encoding [<a href="#ref-STD63" title=""UTF-8, a transformation format of ISO 10646"">STD63</a>]; then only those octets that do not
- correspond to characters in the unreserved set should be percent-
- encoded. For example, the character A would be represented as "A",
- the character LATIN CAPITAL LETTER A WITH GRAVE would be represented
- as "%C3%80", and the character KATAKANA LETTER A would be represented
- as "%E3%82%A2".
-
-<span class="h2"><h2><a name="section-3">3</a>. Syntax Components</h2></span>
-
- The generic URI syntax consists of a hierarchical sequence of
- components referred to as the scheme, authority, path, query, and
- fragment.
-
- URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
-
- hier-part = "//" authority path-abempty
- / path-absolute
- / path-rootless
- / path-empty
-
- The scheme and path components are required, though the path may be
- empty (no characters). When authority is present, the path must
- either be empty or begin with a slash ("/") character. When
- authority is not present, the path cannot begin with two slash
- characters ("//"). These restrictions result in five different ABNF
- rules for a path (<a href="#section-3.3">Section 3.3</a>), only one of which will match any
- given URI reference.
-
- The following are two example URIs and their component parts:
-
- foo://example.com:8042/over/there?name=ferret#nose
- \_/ \______________/\_________/ \_________/ \__/
- | | | | |
- scheme authority path query fragment
- | _____________________|__
- / \ / \
- urn:example:animal:ferret:nose
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 16]</span>
-<a name="page-17" id="page-17" href="#page-17"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h3"><h3><a name="section-3.1">3.1</a>. Scheme</h3></span>
-
- Each URI begins with a scheme name that refers to a specification for
- assigning identifiers within that scheme. As such, the URI syntax is
- a federated and extensible naming system wherein each scheme's
- specification may further restrict the syntax and semantics of
- identifiers using that scheme.
-
- Scheme names consist of a sequence of characters beginning with a
- letter and followed by any combination of letters, digits, plus
- ("+"), period ("."), or hyphen ("-"). Although schemes are case-
- insensitive, the canonical form is lowercase and documents that
- specify schemes must do so with lowercase letters. An implementation
- should accept uppercase letters as equivalent to lowercase in scheme
- names (e.g., allow "HTTP" as well as "http") for the sake of
- robustness but should only produce lowercase scheme names for
- consistency.
-
- scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
-
- Individual schemes are not specified by this document. The process
- for registration of new URI schemes is defined separately by [<a href="#ref-BCP35" title=""Registration Procedures for URL Scheme Names"">BCP35</a>].
- The scheme registry maintains the mapping between scheme names and
- their specifications. Advice for designers of new URI schemes can be
- found in [<a href="http://tools.ietf.org/html/rfc2718" title=""Guidelines for new URL Schemes"">RFC2718</a>]. URI scheme specifications must define their own
- syntax so that all strings matching their scheme-specific syntax will
- also match the <absolute-URI> grammar, as described in <a href="#section-4.3">Section 4.3</a>.
-
- When presented with a URI that violates one or more scheme-specific
- restrictions, the scheme-specific resolution process should flag the
- reference as an error rather than ignore the unused parts; doing so
- reduces the number of equivalent URIs and helps detect abuses of the
- generic syntax, which might indicate that the URI has been
- constructed to mislead the user (<a href="#section-7.6">Section 7.6</a>).
-
-<span class="h3"><h3><a name="section-3.2">3.2</a>. Authority</h3></span>
-
- Many URI schemes include a hierarchical element for a naming
- authority so that governance of the name space defined by the
- remainder of the URI is delegated to that authority (which may, in
- turn, delegate it further). The generic syntax provides a common
- means for distinguishing an authority based on a registered name or
- server address, along with optional port and user information.
-
- The authority component is preceded by a double slash ("//") and is
- terminated by the next slash ("/"), question mark ("?"), or number
- sign ("#") character, or by the end of the URI.
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 17]</span>
-<a name="page-18" id="page-18" href="#page-18"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- authority = [ userinfo "@" ] host [ ":" port ]
-
- URI producers and normalizers should omit the ":" delimiter that
- separates host from port if the port component is empty. Some
- schemes do not allow the userinfo and/or port subcomponents.
-
- If a URI contains an authority component, then the path component
- must either be empty or begin with a slash ("/") character. Non-
- validating parsers (those that merely separate a URI reference into
- its major components) will often ignore the subcomponent structure of
- authority, treating it as an opaque string from the double-slash to
- the first terminating delimiter, until such time as the URI is
- dereferenced.
-
-<span class="h4"><h4><a name="section-3.2.1">3.2.1</a>. User Information</h4></span>
-
- The userinfo subcomponent may consist of a user name and, optionally,
- scheme-specific information about how to gain authorization to access
- the resource. The user information, if present, is followed by a
- commercial at-sign ("@") that delimits it from the host.
-
- userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
-
- Use of the format "user:password" in the userinfo field is
- deprecated. Applications should not render as clear text any data
- after the first colon (":") character found within a userinfo
- subcomponent unless the data after the colon is the empty string
- (indicating no password). Applications may choose to ignore or
- reject such data when it is received as part of a reference and
- should reject the storage of such data in unencrypted form. The
- passing of authentication information in clear text has proven to be
- a security risk in almost every case where it has been used.
-
- Applications that render a URI for the sake of user feedback, such as
- in graphical hypertext browsing, should render userinfo in a way that
- is distinguished from the rest of a URI, when feasible. Such
- rendering will assist the user in cases where the userinfo has been
- misleadingly crafted to look like a trusted domain name
- (<a href="#section-7.6">Section 7.6</a>).
-
-<span class="h4"><h4><a name="section-3.2.2">3.2.2</a>. Host</h4></span>
-
- The host subcomponent of authority is identified by an IP literal
- encapsulated within square brackets, an IPv4 address in dotted-
- decimal form, or a registered name. The host subcomponent is case-
- insensitive. The presence of a host subcomponent within a URI does
- not imply that the scheme requires access to the given host on the
- Internet. In many cases, the host syntax is used only for the sake
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 18]</span>
-<a name="page-19" id="page-19" href="#page-19"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- of reusing the existing registration process created and deployed for
- DNS, thus obtaining a globally unique name without the cost of
- deploying another registry. However, such use comes with its own
- costs: domain name ownership may change over time for reasons not
- anticipated by the URI producer. In other cases, the data within the
- host component identifies a registered name that has nothing to do
- with an Internet host. We use the name "host" for the ABNF rule
- because that is its most common purpose, not its only purpose.
-
- host = IP-literal / IPv4address / reg-name
-
- The syntax rule for host is ambiguous because it does not completely
- distinguish between an IPv4address and a reg-name. In order to
- disambiguate the syntax, we apply the "first-match-wins" algorithm:
- If host matches the rule for IPv4address, then it should be
- considered an IPv4 address literal and not a reg-name. Although host
- is case-insensitive, producers and normalizers should use lowercase
- for registered names and hexadecimal addresses for the sake of
- uniformity, while only using uppercase letters for percent-encodings.
-
- A host identified by an Internet Protocol literal address, version 6
- [<a href="http://tools.ietf.org/html/rfc3513" title=""Internet Protocol Version 6 (IPv6) Addressing Architecture"">RFC3513</a>] or later, is distinguished by enclosing the IP literal
- within square brackets ("[" and "]"). This is the only place where
- square bracket characters are allowed in the URI syntax. In
- anticipation of future, as-yet-undefined IP literal address formats,
- an implementation may use an optional version flag to indicate such a
- format explicitly rather than rely on heuristic determination.
-
- IP-literal = "[" ( IPv6address / IPvFuture ) "]"
-
- IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
-
- The version flag does not indicate the IP version; rather, it
- indicates future versions of the literal format. As such,
- implementations must not provide the version flag for the existing
- IPv4 and IPv6 literal address forms described below. If a URI
- containing an IP-literal that starts with "v" (case-insensitive),
- indicating that the version flag is present, is dereferenced by an
- application that does not know the meaning of that version flag, then
- the application should return an appropriate error for "address
- mechanism not supported".
-
- A host identified by an IPv6 literal address is represented inside
- the square brackets without a preceding version flag. The ABNF
- provided here is a translation of the text definition of an IPv6
- literal address provided in [<a href="http://tools.ietf.org/html/rfc3513" title=""Internet Protocol Version 6 (IPv6) Addressing Architecture"">RFC3513</a>]. This syntax does not support
- IPv6 scoped addressing zone identifiers.
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 19]</span>
-<a name="page-20" id="page-20" href="#page-20"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- A 128-bit IPv6 address is divided into eight 16-bit pieces. Each
- piece is represented numerically in case-insensitive hexadecimal,
- using one to four hexadecimal digits (leading zeroes are permitted).
- The eight encoded pieces are given most-significant first, separated
- by colon characters. Optionally, the least-significant two pieces
- may instead be represented in IPv4 address textual format. A
- sequence of one or more consecutive zero-valued 16-bit pieces within
- the address may be elided, omitting all their digits and leaving
- exactly two consecutive colons in their place to mark the elision.
-
- IPv6address = 6( h16 ":" ) ls32
- / "::" 5( h16 ":" ) ls32
- / [ h16 ] "::" 4( h16 ":" ) ls32
- / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
- / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
- / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32
- / [ *4( h16 ":" ) h16 ] "::" ls32
- / [ *5( h16 ":" ) h16 ] "::" h16
- / [ *6( h16 ":" ) h16 ] "::"
-
- ls32 = ( h16 ":" h16 ) / IPv4address
- ; least-significant 32 bits of address
-
- h16 = 1*4HEXDIG
- ; 16 bits of address represented in hexadecimal
-
- A host identified by an IPv4 literal address is represented in
- dotted-decimal notation (a sequence of four decimal numbers in the
- range 0 to 255, separated by "."), as described in [<a href="http://tools.ietf.org/html/rfc1123" title=""Requirements for Internet Hosts - Application and Support"">RFC1123</a>] by
- reference to [<a href="http://tools.ietf.org/html/rfc0952" title=""DoD Internet host table specification"">RFC0952</a>]. Note that other forms of dotted notation may
- be interpreted on some platforms, as described in <a href="#section-7.4">Section 7.4</a>, but
- only the dotted-decimal form of four octets is allowed by this
- grammar.
-
- IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet
-
- dec-octet = DIGIT ; 0-9
- / %x31-39 DIGIT ; 10-99
- / "1" 2DIGIT ; 100-199
- / "2" %x30-34 DIGIT ; 200-249
- / "25" %x30-35 ; 250-255
-
- A host identified by a registered name is a sequence of characters
- usually intended for lookup within a locally defined host or service
- name registry, though the URI's scheme-specific semantics may require
- that a specific registry (or fixed name table) be used instead. The
- most common name registry mechanism is the Domain Name System (DNS).
- A registered name intended for lookup in the DNS uses the syntax
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 20]</span>
-<a name="page-21" id="page-21" href="#page-21"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- defined in <a href="#section-3.5">Section 3.5</a> of [<a href="http://tools.ietf.org/html/rfc1034" title=""Domain names - concepts and facilities"">RFC1034</a>] and <a href="#section-2.1">Section 2.1</a> of [<a href="http://tools.ietf.org/html/rfc1123" title=""Requirements for Internet Hosts - Application and Support"">RFC1123</a>].
- Such a name consists of a sequence of domain labels separated by ".",
- each domain label starting and ending with an alphanumeric character
- and possibly also containing "-" characters. The rightmost domain
- label of a fully qualified domain name in DNS may be followed by a
- single "." and should be if it is necessary to distinguish between
- the complete domain name and some local domain.
-
- reg-name = *( unreserved / pct-encoded / sub-delims )
-
- If the URI scheme defines a default for host, then that default
- applies when the host subcomponent is undefined or when the
- registered name is empty (zero length). For example, the "file" URI
- scheme is defined so that no authority, an empty host, and
- "localhost" all mean the end-user's machine, whereas the "http"
- scheme considers a missing authority or empty host invalid.
-
- This specification does not mandate a particular registered name
- lookup technology and therefore does not restrict the syntax of reg-
- name beyond what is necessary for interoperability. Instead, it
- delegates the issue of registered name syntax conformance to the
- operating system of each application performing URI resolution, and
- that operating system decides what it will allow for the purpose of
- host identification. A URI resolution implementation might use DNS,
- host tables, yellow pages, NetInfo, WINS, or any other system for
- lookup of registered names. However, a globally scoped naming
- system, such as DNS fully qualified domain names, is necessary for
- URIs intended to have global scope. URI producers should use names
- that conform to the DNS syntax, even when use of DNS is not
- immediately apparent, and should limit these names to no more than
- 255 characters in length.
-
- The reg-name syntax allows percent-encoded octets in order to
- represent non-ASCII registered names in a uniform way that is
- independent of the underlying name resolution technology. Non-ASCII
- characters must first be encoded according to UTF-8 [<a href="#ref-STD63" title=""UTF-8, a transformation format of ISO 10646"">STD63</a>], and then
- each octet of the corresponding UTF-8 sequence must be percent-
- encoded to be represented as URI characters. URI producing
- applications must not use percent-encoding in host unless it is used
- to represent a UTF-8 character sequence. When a non-ASCII registered
- name represents an internationalized domain name intended for
- resolution via the DNS, the name must be transformed to the IDNA
- encoding [<a href="http://tools.ietf.org/html/rfc3490" title=""Internationalizing Domain Names in Applications (IDNA)"">RFC3490</a>] prior to name lookup. URI producers should
- provide these registered names in the IDNA encoding, rather than a
- percent-encoding, if they wish to maximize interoperability with
- legacy URI resolvers.
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 21]</span>
-<a name="page-22" id="page-22" href="#page-22"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h4"><h4><a name="section-3.2.3">3.2.3</a>. Port</h4></span>
-
- The port subcomponent of authority is designated by an optional port
- number in decimal following the host and delimited from it by a
- single colon (":") character.
-
- port = *DIGIT
-
- A scheme may define a default port. For example, the "http" scheme
- defines a default port of "80", corresponding to its reserved TCP
- port number. The type of port designated by the port number (e.g.,
- TCP, UDP, SCTP) is defined by the URI scheme. URI producers and
- normalizers should omit the port component and its ":" delimiter if
- port is empty or if its value would be the same as that of the
- scheme's default.
-
-<span class="h3"><h3><a name="section-3.3">3.3</a>. Path</h3></span>
-
- The path component contains data, usually organized in hierarchical
- form, that, along with data in the non-hierarchical query component
- (<a href="#section-3.4">Section 3.4</a>), serves to identify a resource within the scope of the
- URI's scheme and naming authority (if any). The path is terminated
- by the first question mark ("?") or number sign ("#") character, or
- by the end of the URI.
-
- If a URI contains an authority component, then the path component
- must either be empty or begin with a slash ("/") character. If a URI
- does not contain an authority component, then the path cannot begin
- with two slash characters ("//"). In addition, a URI reference
- (<a href="#section-4.1">Section 4.1</a>) may be a relative-path reference, in which case the
- first path segment cannot contain a colon (":") character. The ABNF
- requires five separate rules to disambiguate these cases, only one of
- which will match the path substring within a given URI reference. We
- use the generic term "path component" to describe the URI substring
- matched by the parser to one of these rules.
-
- path = path-abempty ; begins with "/" or is empty
- / path-absolute ; begins with "/" but not "//"
- / path-noscheme ; begins with a non-colon segment
- / path-rootless ; begins with a segment
- / path-empty ; zero characters
-
- path-abempty = *( "/" segment )
- path-absolute = "/" [ segment-nz *( "/" segment ) ]
- path-noscheme = segment-nz-nc *( "/" segment )
- path-rootless = segment-nz *( "/" segment )
- path-empty = 0<pchar>
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 22]</span>
-<a name="page-23" id="page-23" href="#page-23"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- segment = *pchar
- segment-nz = 1*pchar
- segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
- ; non-zero-length segment without any colon ":"
-
- pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
-
- A path consists of a sequence of path segments separated by a slash
- ("/") character. A path is always defined for a URI, though the
- defined path may be empty (zero length). Use of the slash character
- to indicate hierarchy is only required when a URI will be used as the
- context for relative references. For example, the URI
- <mailto:fred@example.com> has a path of "fred@example.com", whereas
- the URI <foo://info.example.com?fred> has an empty path.
-
- The path segments "." and "..", also known as dot-segments, are
- defined for relative reference within the path name hierarchy. They
- are intended for use at the beginning of a relative-path reference
- (<a href="#section-4.2">Section 4.2</a>) to indicate relative position within the hierarchical
- tree of names. This is similar to their role within some operating
- systems' file directory structures to indicate the current directory
- and parent directory, respectively. However, unlike in a file
- system, these dot-segments are only interpreted within the URI path
- hierarchy and are removed as part of the resolution process (Section
- 5.2).
-
- Aside from dot-segments in hierarchical paths, a path segment is
- considered opaque by the generic syntax. URI producing applications
- often use the reserved characters allowed in a segment to delimit
- scheme-specific or dereference-handler-specific subcomponents. For
- example, the semicolon (";") and equals ("=") reserved characters are
- often used to delimit parameters and parameter values applicable to
- that segment. The comma (",") reserved character is often used for
- similar purposes. For example, one URI producer might use a segment
- such as "name;v=1.1" to indicate a reference to version 1.1 of
- "name", whereas another might use a segment such as "name,1.1" to
- indicate the same. Parameter types may be defined by scheme-specific
- semantics, but in most cases the syntax of a parameter is specific to
- the implementation of the URI's dereferencing algorithm.
-
-<span class="h3"><h3><a name="section-3.4">3.4</a>. Query</h3></span>
-
- The query component contains non-hierarchical data that, along with
- data in the path component (<a href="#section-3.3">Section 3.3</a>), serves to identify a
- resource within the scope of the URI's scheme and naming authority
- (if any). The query component is indicated by the first question
- mark ("?") character and terminated by a number sign ("#") character
- or by the end of the URI.
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 23]</span>
-<a name="page-24" id="page-24" href="#page-24"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- query = *( pchar / "/" / "?" )
-
- The characters slash ("/") and question mark ("?") may represent data
- within the query component. Beware that some older, erroneous
- implementations may not handle such data correctly when it is used as
- the base URI for relative references (<a href="#section-5.1">Section 5.1</a>), apparently
- because they fail to distinguish query data from path data when
- looking for hierarchical separators. However, as query components
- are often used to carry identifying information in the form of
- "key=value" pairs and one frequently used value is a reference to
- another URI, it is sometimes better for usability to avoid percent-
- encoding those characters.
-
-<span class="h3"><h3><a name="section-3.5">3.5</a>. Fragment</h3></span>
-
- The fragment identifier component of a URI allows indirect
- identification of a secondary resource by reference to a primary
- resource and additional identifying information. The identified
- secondary resource may be some portion or subset of the primary
- resource, some view on representations of the primary resource, or
- some other resource defined or described by those representations. A
- fragment identifier component is indicated by the presence of a
- number sign ("#") character and terminated by the end of the URI.
-
- fragment = *( pchar / "/" / "?" )
-
- The semantics of a fragment identifier are defined by the set of
- representations that might result from a retrieval action on the
- primary resource. The fragment's format and resolution is therefore
- dependent on the media type [<a href="http://tools.ietf.org/html/rfc2046" title=""Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types"">RFC2046</a>] of a potentially retrieved
- representation, even though such a retrieval is only performed if the
- URI is dereferenced. If no such representation exists, then the
- semantics of the fragment are considered unknown and are effectively
- unconstrained. Fragment identifier semantics are independent of the
- URI scheme and thus cannot be redefined by scheme specifications.
-
- Individual media types may define their own restrictions on or
- structures within the fragment identifier syntax for specifying
- different types of subsets, views, or external references that are
- identifiable as secondary resources by that media type. If the
- primary resource has multiple representations, as is often the case
- for resources whose representation is selected based on attributes of
- the retrieval request (a.k.a., content negotiation), then whatever is
- identified by the fragment should be consistent across all of those
- representations. Each representation should either define the
- fragment so that it corresponds to the same secondary resource,
- regardless of how it is represented, or should leave the fragment
- undefined (i.e., not found).
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 24]</span>
-<a name="page-25" id="page-25" href="#page-25"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- As with any URI, use of a fragment identifier component does not
- imply that a retrieval action will take place. A URI with a fragment
- identifier may be used to refer to the secondary resource without any
- implication that the primary resource is accessible or will ever be
- accessed.
-
- Fragment identifiers have a special role in information retrieval
- systems as the primary form of client-side indirect referencing,
- allowing an author to specifically identify aspects of an existing
- resource that are only indirectly provided by the resource owner. As
- such, the fragment identifier is not used in the scheme-specific
- processing of a URI; instead, the fragment identifier is separated
- from the rest of the URI prior to a dereference, and thus the
- identifying information within the fragment itself is dereferenced
- solely by the user agent, regardless of the URI scheme. Although
- this separate handling is often perceived to be a loss of
- information, particularly for accurate redirection of references as
- resources move over time, it also serves to prevent information
- providers from denying reference authors the right to refer to
- information within a resource selectively. Indirect referencing also
- provides additional flexibility and extensibility to systems that use
- URIs, as new media types are easier to define and deploy than new
- schemes of identification.
-
- The characters slash ("/") and question mark ("?") are allowed to
- represent data within the fragment identifier. Beware that some
- older, erroneous implementations may not handle this data correctly
- when it is used as the base URI for relative references (Section
- 5.1).
-
-<span class="h2"><h2><a name="section-4">4</a>. Usage</h2></span>
-
- When applications make reference to a URI, they do not always use the
- full form of reference defined by the "URI" syntax rule. To save
- space and take advantage of hierarchical locality, many Internet
- protocol elements and media type formats allow an abbreviation of a
- URI, whereas others restrict the syntax to a particular form of URI.
- We define the most common forms of reference syntax in this
- specification because they impact and depend upon the design of the
- generic syntax, requiring a uniform parsing algorithm in order to be
- interpreted consistently.
-
-<span class="h3"><h3><a name="section-4.1">4.1</a>. URI Reference</h3></span>
-
- URI-reference is used to denote the most common usage of a resource
- identifier.
-
- URI-reference = URI / relative-ref
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 25]</span>
-<a name="page-26" id="page-26" href="#page-26"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- A URI-reference is either a URI or a relative reference. If the
- URI-reference's prefix does not match the syntax of a scheme followed
- by its colon separator, then the URI-reference is a relative
- reference.
-
- A URI-reference is typically parsed first into the five URI
- components, in order to determine what components are present and
- whether the reference is relative. Then, each component is parsed
- for its subparts and their validation. The ABNF of URI-reference,
- along with the "first-match-wins" disambiguation rule, is sufficient
- to define a validating parser for the generic syntax. Readers
- familiar with regular expressions should see Appendix B for an
- example of a non-validating URI-reference parser that will take any
- given string and extract the URI components.
-
-<span class="h3"><h3><a name="section-4.2">4.2</a>. Relative Reference</h3></span>
-
- A relative reference takes advantage of the hierarchical syntax
- (<a href="#section-1.2.3">Section 1.2.3</a>) to express a URI reference relative to the name space
- of another hierarchical URI.
-
- relative-ref = relative-part [ "?" query ] [ "#" fragment ]
-
- relative-part = "//" authority path-abempty
- / path-absolute
- / path-noscheme
- / path-empty
-
- The URI referred to by a relative reference, also known as the target
- URI, is obtained by applying the reference resolution algorithm of
- <a href="#section-5">Section 5</a>.
-
- A relative reference that begins with two slash characters is termed
- a network-path reference; such references are rarely used. A
- relative reference that begins with a single slash character is
- termed an absolute-path reference. A relative reference that does
- not begin with a slash character is termed a relative-path reference.
-
- A path segment that contains a colon character (e.g., "this:that")
- cannot be used as the first segment of a relative-path reference, as
- it would be mistaken for a scheme name. Such a segment must be
- preceded by a dot-segment (e.g., "./this:that") to make a relative-
- path reference.
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 26]</span>
-<a name="page-27" id="page-27" href="#page-27"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h3"><h3><a name="section-4.3">4.3</a>. Absolute URI</h3></span>
-
- Some protocol elements allow only the absolute form of a URI without
- a fragment identifier. For example, defining a base URI for later
- use by relative references calls for an absolute-URI syntax rule that
- does not allow a fragment.
-
- absolute-URI = scheme ":" hier-part [ "?" query ]
-
- URI scheme specifications must define their own syntax so that all
- strings matching their scheme-specific syntax will also match the
- <absolute-URI> grammar. Scheme specifications will not define
- fragment identifier syntax or usage, regardless of its applicability
- to resources identifiable via that scheme, as fragment identification
- is orthogonal to scheme definition. However, scheme specifications
- are encouraged to include a wide range of examples, including
- examples that show use of the scheme's URIs with fragment identifiers
- when such usage is appropriate.
-
-<span class="h3"><h3><a name="section-4.4">4.4</a>. Same-Document Reference</h3></span>
-
- When a URI reference refers to a URI that is, aside from its fragment
- component (if any), identical to the base URI (<a href="#section-5.1">Section 5.1</a>), that
- reference is called a "same-document" reference. The most frequent
- examples of same-document references are relative references that are
- empty or include only the number sign ("#") separator followed by a
- fragment identifier.
-
- When a same-document reference is dereferenced for a retrieval
- action, the target of that reference is defined to be within the same
- entity (representation, document, or message) as the reference;
- therefore, a dereference should not result in a new retrieval action.
-
- Normalization of the base and target URIs prior to their comparison,
- as described in Sections 6.2.2 and 6.2.3, is allowed but rarely
- performed in practice. Normalization may increase the set of same-
- document references, which may be of benefit to some caching
- applications. As such, reference authors should not assume that a
- slightly different, though equivalent, reference URI will (or will
- not) be interpreted as a same-document reference by any given
- application.
-
-<span class="h3"><h3><a name="section-4.5">4.5</a>. Suffix Reference</h3></span>
-
- The URI syntax is designed for unambiguous reference to resources and
- extensibility via the URI scheme. However, as URI identification and
- usage have become commonplace, traditional media (television, radio,
- newspapers, billboards, etc.) have increasingly used a suffix of the
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 27]</span>
-<a name="page-28" id="page-28" href="#page-28"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- URI as a reference, consisting of only the authority and path
- portions of the URI, such as
-
- www.w3.org/Addressing/
-
- or simply a DNS registered name on its own. Such references are
- primarily intended for human interpretation rather than for machines,
- with the assumption that context-based heuristics are sufficient to
- complete the URI (e.g., most registered names beginning with "www"
- are likely to have a URI prefix of "http://"). Although there is no
- standard set of heuristics for disambiguating a URI suffix, many
- client implementations allow them to be entered by the user and
- heuristically resolved.
-
- Although this practice of using suffix references is common, it
- should be avoided whenever possible and should never be used in
- situations where long-term references are expected. The heuristics
- noted above will change over time, particularly when a new URI scheme
- becomes popular, and are often incorrect when used out of context.
- Furthermore, they can lead to security issues along the lines of
- those described in [<a href="http://tools.ietf.org/html/rfc1535" title=""A Security Problem and Proposed Correction With Widely Deployed DNS Software"">RFC1535</a>].
-
- As a URI suffix has the same syntax as a relative-path reference, a
- suffix reference cannot be used in contexts where a relative
- reference is expected. As a result, suffix references are limited to
- places where there is no defined base URI, such as dialog boxes and
- off-line advertisements.
-
-<span class="h2"><h2><a name="section-5">5</a>. Reference Resolution</h2></span>
-
- This section defines the process of resolving a URI reference within
- a context that allows relative references so that the result is a
- string matching the <URI> syntax rule of <a href="#section-3">Section 3</a>.
-
-<span class="h3"><h3><a name="section-5.1">5.1</a>. Establishing a Base URI</h3></span>
-
- The term "relative" implies that a "base URI" exists against which
- the relative reference is applied. Aside from fragment-only
- references (<a href="#section-4.4">Section 4.4</a>), relative references are only usable when a
- base URI is known. A base URI must be established by the parser
- prior to parsing URI references that might be relative. A base URI
- must conform to the <absolute-URI> syntax rule (<a href="#section-4.3">Section 4.3</a>). If the
- base URI is obtained from a URI reference, then that reference must
- be converted to absolute form and stripped of any fragment component
- prior to its use as a base URI.
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 28]</span>
-<a name="page-29" id="page-29" href="#page-29"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- The base URI of a reference can be established in one of four ways,
- discussed below in order of precedence. The order of precedence can
- be thought of in terms of layers, where the innermost defined base
- URI has the highest precedence. This can be visualized graphically
- as follows:
-
- .----------------------------------------------------------.
- | .----------------------------------------------------. |
- | | .----------------------------------------------. | |
- | | | .----------------------------------------. | | |
- | | | | .----------------------------------. | | | |
- | | | | | <relative-reference> | | | | |
- | | | | `----------------------------------' | | | |
- | | | | (5.1.1) Base URI embedded in content | | | |
- | | | `----------------------------------------' | | |
- | | | (5.1.2) Base URI of the encapsulating entity | | |
- | | | (message, representation, or none) | | |
- | | `----------------------------------------------' | |
- | | (5.1.3) URI used to retrieve the entity | |
- | `----------------------------------------------------' |
- | (5.1.4) Default Base URI (application-dependent) |
- `----------------------------------------------------------'
-
-<span class="h4"><h4><a name="section-5.1.1">5.1.1</a>. Base URI Embedded in Content</h4></span>
-
- Within certain media types, a base URI for relative references can be
- embedded within the content itself so that it can be readily obtained
- by a parser. This can be useful for descriptive documents, such as
- tables of contents, which may be transmitted to others through
- protocols other than their usual retrieval context (e.g., email or
- USENET news).
-
- It is beyond the scope of this specification to specify how, for each
- media type, a base URI can be embedded. The appropriate syntax, when
- available, is described by the data format specification associated
- with each media type.
-
-<span class="h4"><h4><a name="section-5.1.2">5.1.2</a>. Base URI from the Encapsulating Entity</h4></span>
-
- If no base URI is embedded, the base URI is defined by the
- representation's retrieval context. For a document that is enclosed
- within another entity, such as a message or archive, the retrieval
- context is that entity. Thus, the default base URI of a
- representation is the base URI of the entity in which the
- representation is encapsulated.
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 29]</span>
-<a name="page-30" id="page-30" href="#page-30"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- A mechanism for embedding a base URI within MIME container types
- (e.g., the message and multipart types) is defined by MHTML
- [<a href="http://tools.ietf.org/html/rfc2557" title=""MIME Encapsulation of Aggregate Documents, such as HTML (MHTML)"">RFC2557</a>]. Protocols that do not use the MIME message header syntax,
- but that do allow some form of tagged metadata to be included within
- messages, may define their own syntax for defining a base URI as part
- of a message.
-
-<span class="h4"><h4><a name="section-5.1.3">5.1.3</a>. Base URI from the Retrieval URI</h4></span>
-
- If no base URI is embedded and the representation is not encapsulated
- within some other entity, then, if a URI was used to retrieve the
- representation, that URI shall be considered the base URI. Note that
- if the retrieval was the result of a redirected request, the last URI
- used (i.e., the URI that resulted in the actual retrieval of the
- representation) is the base URI.
-
-<span class="h4"><h4><a name="section-5.1.4">5.1.4</a>. Default Base URI</h4></span>
-
- If none of the conditions described above apply, then the base URI is
- defined by the context of the application. As this definition is
- necessarily application-dependent, failing to define a base URI by
- using one of the other methods may result in the same content being
- interpreted differently by different types of applications.
-
- A sender of a representation containing relative references is
- responsible for ensuring that a base URI for those references can be
- established. Aside from fragment-only references, relative
- references can only be used reliably in situations where the base URI
- is well defined.
-
-<span class="h3"><h3><a name="section-5.2">5.2</a>. Relative Resolution</h3></span>
-
- This section describes an algorithm for converting a URI reference
- that might be relative to a given base URI into the parsed components
- of the reference's target. The components can then be recomposed, as
- described in <a href="#section-5.3">Section 5.3</a>, to form the target URI. This algorithm
- provides definitive results that can be used to test the output of
- other implementations. Applications may implement relative reference
- resolution by using some other algorithm, provided that the results
- match what would be given by this one.
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 30]</span>
-<a name="page-31" id="page-31" href="#page-31"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h4"><h4><a name="section-5.2.1">5.2.1</a>. Pre-parse the Base URI</h4></span>
-
- The base URI (Base) is established according to the procedure of
- <a href="#section-5.1">Section 5.1</a> and parsed into the five main components described in
- <a href="#section-3">Section 3</a>. Note that only the scheme component is required to be
- present in a base URI; the other components may be empty or
- undefined. A component is undefined if its associated delimiter does
- not appear in the URI reference; the path component is never
- undefined, though it may be empty.
-
- Normalization of the base URI, as described in Sections 6.2.2 and
- 6.2.3, is optional. A URI reference must be transformed to its
- target URI before it can be normalized.
-
-<span class="h4"><h4><a name="section-5.2.2">5.2.2</a>. Transform References</h4></span>
-
- For each URI reference (R), the following pseudocode describes an
- algorithm for transforming R into its target URI (T):
-
- -- The URI reference is parsed into the five URI components
- --
- (R.scheme, R.authority, R.path, R.query, R.fragment) = parse(R);
-
- -- A non-strict parser may ignore a scheme in the reference
- -- if it is identical to the base URI's scheme.
- --
- if ((not strict) and (R.scheme == Base.scheme)) then
- undefine(R.scheme);
- endif;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 31]</span>
-<a name="page-32" id="page-32" href="#page-32"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- if defined(R.scheme) then
- T.scheme = R.scheme;
- T.authority = R.authority;
- T.path = remove_dot_segments(R.path);
- T.query = R.query;
- else
- if defined(R.authority) then
- T.authority = R.authority;
- T.path = remove_dot_segments(R.path);
- T.query = R.query;
- else
- if (R.path == "") then
- T.path = Base.path;
- if defined(R.query) then
- T.query = R.query;
- else
- T.query = Base.query;
- endif;
- else
- if (R.path starts-with "/") then
- T.path = remove_dot_segments(R.path);
- else
- T.path = merge(Base.path, R.path);
- T.path = remove_dot_segments(T.path);
- endif;
- T.query = R.query;
- endif;
- T.authority = Base.authority;
- endif;
- T.scheme = Base.scheme;
- endif;
-
- T.fragment = R.fragment;
-
-<span class="h4"><h4><a name="section-5.2.3">5.2.3</a>. Merge Paths</h4></span>
-
- The pseudocode above refers to a "merge" routine for merging a
- relative-path reference with the path of the base URI. This is
- accomplished as follows:
-
- o If the base URI has a defined authority component and an empty
- path, then return a string consisting of "/" concatenated with the
- reference's path; otherwise,
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 32]</span>
-<a name="page-33" id="page-33" href="#page-33"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- o return a string consisting of the reference's path component
- appended to all but the last segment of the base URI's path (i.e.,
- excluding any characters after the right-most "/" in the base URI
- path, or excluding the entire base URI path if it does not contain
- any "/" characters).
-
-<span class="h4"><h4><a name="section-5.2.4">5.2.4</a>. Remove Dot Segments</h4></span>
-
- The pseudocode also refers to a "remove_dot_segments" routine for
- interpreting and removing the special "." and ".." complete path
- segments from a referenced path. This is done after the path is
- extracted from a reference, whether or not the path was relative, in
- order to remove any invalid or extraneous dot-segments prior to
- forming the target URI. Although there are many ways to accomplish
- this removal process, we describe a simple method using two string
- buffers.
-
- 1. The input buffer is initialized with the now-appended path
- components and the output buffer is initialized to the empty
- string.
-
- 2. While the input buffer is not empty, loop as follows:
-
- A. If the input buffer begins with a prefix of "../" or "./",
- then remove that prefix from the input buffer; otherwise,
-
- B. if the input buffer begins with a prefix of "/./" or "/.",
- where "." is a complete path segment, then replace that
- prefix with "/" in the input buffer; otherwise,
-
- C. if the input buffer begins with a prefix of "/../" or "/..",
- where ".." is a complete path segment, then replace that
- prefix with "/" in the input buffer and remove the last
- segment and its preceding "/" (if any) from the output
- buffer; otherwise,
-
- D. if the input buffer consists only of "." or "..", then remove
- that from the input buffer; otherwise,
-
- E. move the first path segment in the input buffer to the end of
- the output buffer, including the initial "/" character (if
- any) and any subsequent characters up to, but not including,
- the next "/" character or the end of the input buffer.
-
- 3. Finally, the output buffer is returned as the result of
- remove_dot_segments.
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 33]</span>
-<a name="page-34" id="page-34" href="#page-34"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- Note that dot-segments are intended for use in URI references to
- express an identifier relative to the hierarchy of names in the base
- URI. The remove_dot_segments algorithm respects that hierarchy by
- removing extra dot-segments rather than treat them as an error or
- leaving them to be misinterpreted by dereference implementations.
-
- The following illustrates how the above steps are applied for two
- examples of merged paths, showing the state of the two buffers after
- each step.
-
- STEP OUTPUT BUFFER INPUT BUFFER
-
- 1 : /a/b/c/./../../g
- 2E: /a /b/c/./../../g
- 2E: /a/b /c/./../../g
- 2E: /a/b/c /./../../g
- 2B: /a/b/c /../../g
- 2C: /a/b /../g
- 2C: /a /g
- 2E: /a/g
-
- STEP OUTPUT BUFFER INPUT BUFFER
-
- <a href="#section-1">1</a> : mid/content=5/../6
- 2E: mid /content=5/../6
- 2E: mid/content=5 /../6
- 2C: mid /6
- 2E: mid/6
-
- Some applications may find it more efficient to implement the
- remove_dot_segments algorithm by using two segment stacks rather than
- strings.
-
- Note: Beware that some older, erroneous implementations will fail
- to separate a reference's query component from its path component
- prior to merging the base and reference paths, resulting in an
- interoperability failure if the query component contains the
- strings "/../" or "/./".
-
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 34]</span>
-<a name="page-35" id="page-35" href="#page-35"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h3"><h3><a name="section-5.3">5.3</a>. Component Recomposition</h3></span>
-
- Parsed URI components can be recomposed to obtain the corresponding
- URI reference string. Using pseudocode, this would be:
-
- result = ""
-
- if defined(scheme) then
- append scheme to result;
- append ":" to result;
- endif;
-
- if defined(authority) then
- append "//" to result;
- append authority to result;
- endif;
-
- append path to result;
-
- if defined(query) then
- append "?" to result;
- append query to result;
- endif;
-
- if defined(fragment) then
- append "#" to result;
- append fragment to result;
- endif;
-
- return result;
-
- Note that we are careful to preserve the distinction between a
- component that is undefined, meaning that its separator was not
- present in the reference, and a component that is empty, meaning that
- the separator was present and was immediately followed by the next
- component separator or the end of the reference.
-
-<span class="h3"><h3><a name="section-5.4">5.4</a>. Reference Resolution Examples</h3></span>
-
- Within a representation with a well defined base URI of
-
- http://a/b/c/d;p?q
-
- a relative reference is transformed to its target URI as follows.
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 35]</span>
-<a name="page-36" id="page-36" href="#page-36"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h4"><h4><a name="section-5.4.1">5.4.1</a>. Normal Examples</h4></span>
-
- "g:h" = "g:h"
- "g" = "<a href="http://a/b/c/g">http://a/b/c/g</a>"
- "./g" = "<a href="http://a/b/c/g">http://a/b/c/g</a>"
- "g/" = "<a href="http://a/b/c/g/">http://a/b/c/g/</a>"
- "/g" = "<a href="http://a/g">http://a/g</a>"
- "//g" = "http://g"
- "?y" = "http://a/b/c/d;p?y"
- "g?y" = "<a href="http://a/b/c/g?y">http://a/b/c/g?y</a>"
- "#s" = "http://a/b/c/d;p?q#s"
- "g#s" = "<a href="http://a/b/c/g#s">http://a/b/c/g#s</a>"
- "g?y#s" = "<a href="http://a/b/c/g?y#s">http://a/b/c/g?y#s</a>"
- ";x" = "http://a/b/c/;x"
- "g;x" = "http://a/b/c/g;x"
- "g;x?y#s" = "http://a/b/c/g;x?y#s"
- "" = "http://a/b/c/d;p?q"
- "." = "<a href="http://a/b/c/">http://a/b/c/</a>"
- "./" = "<a href="http://a/b/c/">http://a/b/c/</a>"
- ".." = "<a href="http://a/b/">http://a/b/</a>"
- "../" = "<a href="http://a/b/">http://a/b/</a>"
- "../g" = "<a href="http://a/b/g">http://a/b/g</a>"
- "../.." = "<a href="http://a/">http://a/</a>"
- "../../" = "<a href="http://a/">http://a/</a>"
- "../../g" = "<a href="http://a/g">http://a/g</a>"
-
-<span class="h4"><h4><a name="section-5.4.2">5.4.2</a>. Abnormal Examples</h4></span>
-
- Although the following abnormal examples are unlikely to occur in
- normal practice, all URI parsers should be capable of resolving them
- consistently. Each example uses the same base as that above.
-
- Parsers must be careful in handling cases where there are more ".."
- segments in a relative-path reference than there are hierarchical
- levels in the base URI's path. Note that the ".." syntax cannot be
- used to change the authority component of a URI.
-
- "../../../g" = "<a href="http://a/g">http://a/g</a>"
- "../../../../g" = "<a href="http://a/g">http://a/g</a>"
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 36]</span>
-<a name="page-37" id="page-37" href="#page-37"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- Similarly, parsers must remove the dot-segments "." and ".." when
- they are complete components of a path, but not when they are only
- part of a segment.
-
- "/./g" = "<a href="http://a/g">http://a/g</a>"
- "/../g" = "<a href="http://a/g">http://a/g</a>"
- "g." = "<a href="http://a/b/c/g">http://a/b/c/g</a>."
- ".g" = "<a href="http://a/b/c/.g">http://a/b/c/.g</a>"
- "g.." = "<a href="http://a/b/c/g">http://a/b/c/g</a>.."
- "..g" = "<a href="http://a/b/c/..g">http://a/b/c/..g</a>"
-
- Less likely are cases where the relative reference uses unnecessary
- or nonsensical forms of the "." and ".." complete path segments.
-
- "./../g" = "<a href="http://a/b/g">http://a/b/g</a>"
- "./g/." = "<a href="http://a/b/c/g/">http://a/b/c/g/</a>"
- "g/./h" = "<a href="http://a/b/c/g/h">http://a/b/c/g/h</a>"
- "g/../h" = "<a href="http://a/b/c/h">http://a/b/c/h</a>"
- "g;x=1/./y" = "http://a/b/c/g;x=1/y"
- "g;x=1/../y" = "<a href="http://a/b/c/y">http://a/b/c/y</a>"
-
- Some applications fail to separate the reference's query and/or
- fragment components from the path component before merging it with
- the base path and removing dot-segments. This error is rarely
- noticed, as typical usage of a fragment never includes the hierarchy
- ("/") character and the query component is not normally used within
- relative references.
-
- "g?y/./x" = "<a href="http://a/b/c/g?y/./x">http://a/b/c/g?y/./x</a>"
- "g?y/../x" = "<a href="http://a/b/c/g?y/../x">http://a/b/c/g?y/../x</a>"
- "g#s/./x" = "<a href="http://a/b/c/g#s/./x">http://a/b/c/g#s/./x</a>"
- "g#s/../x" = "<a href="http://a/b/c/g#s/../x">http://a/b/c/g#s/../x</a>"
-
- Some parsers allow the scheme name to be present in a relative
- reference if it is the same as the base URI scheme. This is
- considered to be a loophole in prior specifications of partial URI
- [<a href="http://tools.ietf.org/html/rfc1630" title=""Universal Resource Identifiers in WWW: A Unifying Syntax for the Expression of Names and Addresses of Objects on the Network as used in the World-Wide Web"">RFC1630</a>]. Its use should be avoided but is allowed for backward
- compatibility.
-
- "http:g" = "http:g" ; for strict parsers
- / "<a href="http://a/b/c/g">http://a/b/c/g</a>" ; for backward compatibility
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 37]</span>
-<a name="page-38" id="page-38" href="#page-38"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h2"><h2><a name="section-6">6</a>. Normalization and Comparison</h2></span>
-
- One of the most common operations on URIs is simple comparison:
- determining whether two URIs are equivalent without using the URIs to
- access their respective resource(s). A comparison is performed every
- time a response cache is accessed, a browser checks its history to
- color a link, or an XML parser processes tags within a namespace.
- Extensive normalization prior to comparison of URIs is often used by
- spiders and indexing engines to prune a search space or to reduce
- duplication of request actions and response storage.
-
- URI comparison is performed for some particular purpose. Protocols
- or implementations that compare URIs for different purposes will
- often be subject to differing design trade-offs in regards to how
- much effort should be spent in reducing aliased identifiers. This
- section describes various methods that may be used to compare URIs,
- the trade-offs between them, and the types of applications that might
- use them.
-
-<span class="h3"><h3><a name="section-6.1">6.1</a>. Equivalence</h3></span>
-
- Because URIs exist to identify resources, presumably they should be
- considered equivalent when they identify the same resource. However,
- this definition of equivalence is not of much practical use, as there
- is no way for an implementation to compare two resources unless it
- has full knowledge or control of them. For this reason,
- determination of equivalence or difference of URIs is based on string
- comparison, perhaps augmented by reference to additional rules
- provided by URI scheme definitions. We use the terms "different" and
- "equivalent" to describe the possible outcomes of such comparisons,
- but there are many application-dependent versions of equivalence.
-
- Even though it is possible to determine that two URIs are equivalent,
- URI comparison is not sufficient to determine whether two URIs
- identify different resources. For example, an owner of two different
- domain names could decide to serve the same resource from both,
- resulting in two different URIs. Therefore, comparison methods are
- designed to minimize false negatives while strictly avoiding false
- positives.
-
- In testing for equivalence, applications should not directly compare
- relative references; the references should be converted to their
- respective target URIs before comparison. When URIs are compared to
- select (or avoid) a network action, such as retrieval of a
- representation, fragment components (if any) should be excluded from
- the comparison.
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 38]</span>
-<a name="page-39" id="page-39" href="#page-39"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h3"><h3><a name="section-6.2">6.2</a>. Comparison Ladder</h3></span>
-
- A variety of methods are used in practice to test URI equivalence.
- These methods fall into a range, distinguished by the amount of
- processing required and the degree to which the probability of false
- negatives is reduced. As noted above, false negatives cannot be
- eliminated. In practice, their probability can be reduced, but this
- reduction requires more processing and is not cost-effective for all
- applications.
-
- If this range of comparison practices is considered as a ladder, the
- following discussion will climb the ladder, starting with practices
- that are cheap but have a relatively higher chance of producing false
- negatives, and proceeding to those that have higher computational
- cost and lower risk of false negatives.
-
-<span class="h4"><h4><a name="section-6.2.1">6.2.1</a>. Simple String Comparison</h4></span>
-
- If two URIs, when considered as character strings, are identical,
- then it is safe to conclude that they are equivalent. This type of
- equivalence test has very low computational cost and is in wide use
- in a variety of applications, particularly in the domain of parsing.
-
- Testing strings for equivalence requires some basic precautions.
- This procedure is often referred to as "bit-for-bit" or
- "byte-for-byte" comparison, which is potentially misleading. Testing
- strings for equality is normally based on pair comparison of the
- characters that make up the strings, starting from the first and
- proceeding until both strings are exhausted and all characters are
- found to be equal, until a pair of characters compares unequal, or
- until one of the strings is exhausted before the other.
-
- This character comparison requires that each pair of characters be
- put in comparable form. For example, should one URI be stored in a
- byte array in EBCDIC encoding and the second in a Java String object
- (UTF-16), bit-for-bit comparisons applied naively will produce
- errors. It is better to speak of equality on a character-for-
- character basis rather than on a byte-for-byte or bit-for-bit basis.
- In practical terms, character-by-character comparisons should be done
- codepoint-by-codepoint after conversion to a common character
- encoding.
-
- False negatives are caused by the production and use of URI aliases.
- Unnecessary aliases can be reduced, regardless of the comparison
- method, by consistently providing URI references in an already-
- normalized form (i.e., a form identical to what would be produced
- after normalization is applied, as described below).
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 39]</span>
-<a name="page-40" id="page-40" href="#page-40"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- Protocols and data formats often limit some URI comparisons to simple
- string comparison, based on the theory that people and
- implementations will, in their own best interest, be consistent in
- providing URI references, or at least consistent enough to negate any
- efficiency that might be obtained from further normalization.
-
-<span class="h4"><h4><a name="section-6.2.2">6.2.2</a>. Syntax-Based Normalization</h4></span>
-
- Implementations may use logic based on the definitions provided by
- this specification to reduce the probability of false negatives.
- This processing is moderately higher in cost than character-for-
- character string comparison. For example, an application using this
- approach could reasonably consider the following two URIs equivalent:
-
- example://a/b/c/%7Bfoo%7D
- eXAMPLE://a/./b/../b/%63/%7bfoo%7d
-
- Web user agents, such as browsers, typically apply this type of URI
- normalization when determining whether a cached response is
- available. Syntax-based normalization includes such techniques as
- case normalization, percent-encoding normalization, and removal of
- dot-segments.
-
-<span class="h5"><h5><a name="section-6.2.2.1">6.2.2.1</a>. Case Normalization</h5></span>
-
- For all URIs, the hexadecimal digits within a percent-encoding
- triplet (e.g., "%3a" versus "%3A") are case-insensitive and therefore
- should be normalized to use uppercase letters for the digits A-F.
-
- When a URI uses components of the generic syntax, the component
- syntax equivalence rules always apply; namely, that the scheme and
- host are case-insensitive and therefore should be normalized to
- lowercase. For example, the URI <HTTP://www.EXAMPLE.com/> is
- equivalent to <http://www.example.com/>. The other generic syntax
- components are assumed to be case-sensitive unless specifically
- defined otherwise by the scheme (see <a href="#section-6.2.3">Section 6.2.3</a>).
-
-<span class="h5"><h5><a name="section-6.2.2.2">6.2.2.2</a>. Percent-Encoding Normalization</h5></span>
-
- The percent-encoding mechanism (<a href="#section-2.1">Section 2.1</a>) is a frequent source of
- variance among otherwise identical URIs. In addition to the case
- normalization issue noted above, some URI producers percent-encode
- octets that do not require percent-encoding, resulting in URIs that
- are equivalent to their non-encoded counterparts. These URIs should
- be normalized by decoding any percent-encoded octet that corresponds
- to an unreserved character, as described in <a href="#section-2.3">Section 2.3</a>.
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 40]</span>
-<a name="page-41" id="page-41" href="#page-41"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h5"><h5><a name="section-6.2.2.3">6.2.2.3</a>. Path Segment Normalization</h5></span>
-
- The complete path segments "." and ".." are intended only for use
- within relative references (<a href="#section-4.1">Section 4.1</a>) and are removed as part of
- the reference resolution process (<a href="#section-5.2">Section 5.2</a>). However, some
- deployed implementations incorrectly assume that reference resolution
- is not necessary when the reference is already a URI and thus fail to
- remove dot-segments when they occur in non-relative paths. URI
- normalizers should remove dot-segments by applying the
- remove_dot_segments algorithm to the path, as described in
- <a href="#section-5.2.4">Section 5.2.4</a>.
-
-<span class="h4"><h4><a name="section-6.2.3">6.2.3</a>. Scheme-Based Normalization</h4></span>
-
- The syntax and semantics of URIs vary from scheme to scheme, as
- described by the defining specification for each scheme.
- Implementations may use scheme-specific rules, at further processing
- cost, to reduce the probability of false negatives. For example,
- because the "http" scheme makes use of an authority component, has a
- default port of "80", and defines an empty path to be equivalent to
- "/", the following four URIs are equivalent:
-
- http://example.com
- http://example.com/
- <a href="http://example.com/">http://example.com:/</a>
- <a href="http://example.com/">http://example.com:80/</a>
-
- In general, a URI that uses the generic syntax for authority with an
- empty path should be normalized to a path of "/". Likewise, an
- explicit ":port", for which the port is empty or the default for the
- scheme, is equivalent to one where the port and its ":" delimiter are
- elided and thus should be removed by scheme-based normalization. For
- example, the second URI above is the normal form for the "http"
- scheme.
-
- Another case where normalization varies by scheme is in the handling
- of an empty authority component or empty host subcomponent. For many
- scheme specifications, an empty authority or host is considered an
- error; for others, it is considered equivalent to "localhost" or the
- end-user's host. When a scheme defines a default for authority and a
- URI reference to that default is desired, the reference should be
- normalized to an empty authority for the sake of uniformity, brevity,
- and internationalization. If, however, either the userinfo or port
- subcomponents are non-empty, then the host should be given explicitly
- even if it matches the default.
-
- Normalization should not remove delimiters when their associated
- component is empty unless licensed to do so by the scheme
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 41]</span>
-<a name="page-42" id="page-42" href="#page-42"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- specification. For example, the URI "http://example.com/?" cannot be
- assumed to be equivalent to any of the examples above. Likewise, the
- presence or absence of delimiters within a userinfo subcomponent is
- usually significant to its interpretation. The fragment component is
- not subject to any scheme-based normalization; thus, two URIs that
- differ only by the suffix "#" are considered different regardless of
- the scheme.
-
- Some schemes define additional subcomponents that consist of case-
- insensitive data, giving an implicit license to normalizers to
- convert this data to a common case (e.g., all lowercase). For
- example, URI schemes that define a subcomponent of path to contain an
- Internet hostname, such as the "mailto" URI scheme, cause that
- subcomponent to be case-insensitive and thus subject to case
- normalization (e.g., "mailto:Joe@Example.COM" is equivalent to
- "mailto:Joe@example.com", even though the generic syntax considers
- the path component to be case-sensitive).
-
- Other scheme-specific normalizations are possible.
-
-<span class="h4"><h4><a name="section-6.2.4">6.2.4</a>. Protocol-Based Normalization</h4></span>
-
- Substantial effort to reduce the incidence of false negatives is
- often cost-effective for web spiders. Therefore, they implement even
- more aggressive techniques in URI comparison. For example, if they
- observe that a URI such as
-
- http://example.com/data
-
- redirects to a URI differing only in the trailing slash
-
- http://example.com/data/
-
- they will likely regard the two as equivalent in the future. This
- kind of technique is only appropriate when equivalence is clearly
- indicated by both the result of accessing the resources and the
- common conventions of their scheme's dereference algorithm (in this
- case, use of redirection by HTTP origin servers to avoid problems
- with relative references).
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 42]</span>
-<a name="page-43" id="page-43" href="#page-43"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h2"><h2><a name="section-7">7</a>. Security Considerations</h2></span>
-
- A URI does not in itself pose a security threat. However, as URIs
- are often used to provide a compact set of instructions for access to
- network resources, care must be taken to properly interpret the data
- within a URI, to prevent that data from causing unintended access,
- and to avoid including data that should not be revealed in plain
- text.
-
-<span class="h3"><h3><a name="section-7.1">7.1</a>. Reliability and Consistency</h3></span>
-
- There is no guarantee that once a URI has been used to retrieve
- information, the same information will be retrievable by that URI in
- the future. Nor is there any guarantee that the information
- retrievable via that URI in the future will be observably similar to
- that retrieved in the past. The URI syntax does not constrain how a
- given scheme or authority apportions its namespace or maintains it
- over time. Such guarantees can only be obtained from the person(s)
- controlling that namespace and the resource in question. A specific
- URI scheme may define additional semantics, such as name persistence,
- if those semantics are required of all naming authorities for that
- scheme.
-
-<span class="h3"><h3><a name="section-7.2">7.2</a>. Malicious Construction</h3></span>
-
- It is sometimes possible to construct a URI so that an attempt to
- perform a seemingly harmless, idempotent operation, such as the
- retrieval of a representation, will in fact cause a possibly damaging
- remote operation. The unsafe URI is typically constructed by
- specifying a port number other than that reserved for the network
- protocol in question. The client unwittingly contacts a site running
- a different protocol service, and data within the URI contains
- instructions that, when interpreted according to this other protocol,
- cause an unexpected operation. A frequent example of such abuse has
- been the use of a protocol-based scheme with a port component of
- "25", thereby fooling user agent software into sending an unintended
- or impersonating message via an SMTP server.
-
- Applications should prevent dereference of a URI that specifies a TCP
- port number within the "well-known port" range (0 - 1023) unless the
- protocol being used to dereference that URI is compatible with the
- protocol expected on that well-known port. Although IANA maintains a
- registry of well-known ports, applications should make such
- restrictions user-configurable to avoid preventing the deployment of
- new services.
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 43]</span>
-<a name="page-44" id="page-44" href="#page-44"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- When a URI contains percent-encoded octets that match the delimiters
- for a given resolution or dereference protocol (for example, CR and
- LF characters for the TELNET protocol), these percent-encodings must
- not be decoded before transmission across that protocol. Transfer of
- the percent-encoding, which might violate the protocol, is less
- harmful than allowing decoded octets to be interpreted as additional
- operations or parameters, perhaps triggering an unexpected and
- possibly harmful remote operation.
-
-<span class="h3"><h3><a name="section-7.3">7.3</a>. Back-End Transcoding</h3></span>
-
- When a URI is dereferenced, the data within it is often parsed by
- both the user agent and one or more servers. In HTTP, for example, a
- typical user agent will parse a URI into its five major components,
- access the authority's server, and send it the data within the
- authority, path, and query components. A typical server will take
- that information, parse the path into segments and the query into
- key/value pairs, and then invoke implementation-specific handlers to
- respond to the request. As a result, a common security concern for
- server implementations that handle a URI, either as a whole or split
- into separate components, is proper interpretation of the octet data
- represented by the characters and percent-encodings within that URI.
-
- Percent-encoded octets must be decoded at some point during the
- dereference process. Applications must split the URI into its
- components and subcomponents prior to decoding the octets, as
- otherwise the decoded octets might be mistaken for delimiters.
- Security checks of the data within a URI should be applied after
- decoding the octets. Note, however, that the "%00" percent-encoding
- (NUL) may require special handling and should be rejected if the
- application is not expecting to receive raw data within a component.
-
- Special care should be taken when the URI path interpretation process
- involves the use of a back-end file system or related system
- functions. File systems typically assign an operational meaning to
- special characters, such as the "/", "\", ":", "[", and "]"
- characters, and to special device names like ".", "..", "...", "aux",
- "lpt", etc. In some cases, merely testing for the existence of such
- a name will cause the operating system to pause or invoke unrelated
- system calls, leading to significant security concerns regarding
- denial of service and unintended data transfer. It would be
- impossible for this specification to list all such significant
- characters and device names. Implementers should research the
- reserved names and characters for the types of storage device that
- may be attached to their applications and restrict the use of data
- obtained from URI components accordingly.
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 44]</span>
-<a name="page-45" id="page-45" href="#page-45"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-<span class="h3"><h3><a name="section-7.4">7.4</a>. Rare IP Address Formats</h3></span>
-
- Although the URI syntax for IPv4address only allows the common
- dotted-decimal form of IPv4 address literal, many implementations
- that process URIs make use of platform-dependent system routines,
- such as gethostbyname() and inet_aton(), to translate the string
- literal to an actual IP address. Unfortunately, such system routines
- often allow and process a much larger set of formats than those
- described in <a href="#section-3.2.2">Section 3.2.2</a>.
-
- For example, many implementations allow dotted forms of three
- numbers, wherein the last part is interpreted as a 16-bit quantity
- and placed in the right-most two bytes of the network address (e.g.,
- a Class B network). Likewise, a dotted form of two numbers means
- that the last part is interpreted as a 24-bit quantity and placed in
- the right-most three bytes of the network address (Class A), and a
- single number (without dots) is interpreted as a 32-bit quantity and
- stored directly in the network address. Adding further to the
- confusion, some implementations allow each dotted part to be
- interpreted as decimal, octal, or hexadecimal, as specified in the C
- language (i.e., a leading 0x or 0X implies hexadecimal; a leading 0
- implies octal; otherwise, the number is interpreted as decimal).
-
- These additional IP address formats are not allowed in the URI syntax
- due to differences between platform implementations. However, they
- can become a security concern if an application attempts to filter
- access to resources based on the IP address in string literal format.
- If this filtering is performed, literals should be converted to
- numeric form and filtered based on the numeric value, and not on a
- prefix or suffix of the string form.
-
-<span class="h3"><h3><a name="section-7.5">7.5</a>. Sensitive Information</h3></span>
-
- URI producers should not provide a URI that contains a username or
- password that is intended to be secret. URIs are frequently
- displayed by browsers, stored in clear text bookmarks, and logged by
- user agent history and intermediary applications (proxies). A
- password appearing within the userinfo component is deprecated and
- should be considered an error (or simply ignored) except in those
- rare cases where the 'password' parameter is intended to be public.
-
-<span class="h3"><h3><a name="section-7.6">7.6</a>. Semantic Attacks</h3></span>
-
- Because the userinfo subcomponent is rarely used and appears before
- the host in the authority component, it can be used to construct a
- URI intended to mislead a human user by appearing to identify one
- (trusted) naming authority while actually identifying a different
- authority hidden behind the noise. For example
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 45]</span>
-<a name="page-46" id="page-46" href="#page-46"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- ftp://cnn.example.com&story=breaking_news@10.0.0.1/top_story.htm
-
- might lead a human user to assume that the host is 'cnn.example.com',
- whereas it is actually '10.0.0.1'. Note that a misleading userinfo
- subcomponent could be much longer than the example above.
-
- A misleading URI, such as that above, is an attack on the user's
- preconceived notions about the meaning of a URI rather than an attack
- on the software itself. User agents may be able to reduce the impact
- of such attacks by distinguishing the various components of the URI
- when they are rendered, such as by using a different color or tone to
- render userinfo if any is present, though there is no panacea. More
- information on URI-based semantic attacks can be found in [<a href="#ref-Siedzik" title=""Semantic Attacks: What&#39;s in a URL?"">Siedzik</a>].
-
-<span class="h2"><h2><a name="section-8">8</a>. IANA Considerations</h2></span>
-
- URI scheme names, as defined by <scheme> in <a href="#section-3.1">Section 3.1</a>, form a
- registered namespace that is managed by IANA according to the
- procedures defined in [<a href="#ref-BCP35" title=""Registration Procedures for URL Scheme Names"">BCP35</a>]. No IANA actions are required by this
- document.
-
-<span class="h2"><h2><a name="section-9">9</a>. Acknowledgements</h2></span>
-
- This specification is derived from <a href="http://tools.ietf.org/html/rfc2396">RFC 2396</a> [<a href="http://tools.ietf.org/html/rfc2396" title=""Uniform Resource Identifiers (URI): Generic Syntax"">RFC2396</a>], <a href="http://tools.ietf.org/html/rfc1808">RFC 1808</a>
- [<a href="http://tools.ietf.org/html/rfc1808" title=""Relative Uniform Resource Locators"">RFC1808</a>], and <a href="http://tools.ietf.org/html/rfc1738">RFC 1738</a> [<a href="http://tools.ietf.org/html/rfc1738" title=""Uniform Resource Locators (URL)"">RFC1738</a>]; the acknowledgements in those
- documents still apply. It also incorporates the update (with
- corrections) for IPv6 literals in the host syntax, as defined by
- Robert M. Hinden, Brian E. Carpenter, and Larry Masinter in
- [<a href="http://tools.ietf.org/html/rfc2732" title=""Format for Literal IPv6 Addresses in URL&#39;s"">RFC2732</a>]. In addition, contributions by Gisle Aas, Reese Anschultz,
- Daniel Barclay, Tim Bray, Mike Brown, Rob Cameron, Jeremy Carroll,
- Dan Connolly, Adam M. Costello, John Cowan, Jason Diamond, Martin
- Duerst, Stefan Eissing, Clive D.W. Feather, Al Gilman, Tony Hammond,
- Elliotte Harold, Pat Hayes, Henry Holtzman, Ian B. Jacobs, Michael
- Kay, John C. Klensin, Graham Klyne, Dan Kohn, Bruce Lilly, Andrew
- Main, Dave McAlpin, Ira McDonald, Michael Mealling, Ray Merkert,
- Stephen Pollei, Julian Reschke, Tomas Rokicki, Miles Sabin, Kai
- Schaetzl, Mark Thomson, Ronald Tschalaer, Norm Walsh, Marc Warne,
- Stuart Williams, and Henry Zongaro are gratefully acknowledged.
-
-<span class="h2"><h2><a name="section-10">10</a>. References</h2></span>
-
-<span class="h3"><h3><a name="section-10.1">10.1</a>. Normative References</h3></span>
-
- [<a name="ref-ASCII" id="ref-ASCII">ASCII</a>] American National Standards Institute, "Coded Character
- Set -- 7-bit American Standard Code for Information
- Interchange", ANSI X3.4, 1986.
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 46]</span>
-<a name="page-47" id="page-47" href="#page-47"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- [<a name="ref-RFC2234" id="ref-RFC2234">RFC2234</a>] Crocker, D. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", <a href="http://tools.ietf.org/html/rfc2234">RFC 2234</a>, November 1997.
-
- [<a name="ref-STD63" id="ref-STD63">STD63</a>] Yergeau, F., "UTF-8, a transformation format of
- ISO 10646", STD 63, <a href="http://tools.ietf.org/html/rfc3629">RFC 3629</a>, November 2003.
-
- [<a name="ref-UCS" id="ref-UCS">UCS</a>] International Organization for Standardization,
- "Information Technology - Universal Multiple-Octet Coded
- Character Set (UCS)", ISO/IEC 10646:2003, December 2003.
-
-<span class="h3"><h3><a name="section-10.2">10.2</a>. Informative References</h3></span>
-
- [<a name="ref-BCP19" id="ref-BCP19">BCP19</a>] Freed, N. and J. Postel, "IANA Charset Registration
- Procedures", <a href="http://tools.ietf.org/html/bcp19">BCP 19</a>, <a href="http://tools.ietf.org/html/rfc2978">RFC 2978</a>, October 2000.
-
- [<a name="ref-BCP35" id="ref-BCP35">BCP35</a>] Petke, R. and I. King, "Registration Procedures for URL
- Scheme Names", <a href="http://tools.ietf.org/html/bcp35">BCP 35</a>, <a href="http://tools.ietf.org/html/rfc2717">RFC 2717</a>, November 1999.
-
- [<a name="ref-RFC0952" id="ref-RFC0952">RFC0952</a>] Harrenstien, K., Stahl, M., and E. Feinler, "DoD Internet
- host table specification", <a href="http://tools.ietf.org/html/rfc952">RFC 952</a>, October 1985.
-
- [<a name="ref-RFC1034" id="ref-RFC1034">RFC1034</a>] Mockapetris, P., "Domain names - concepts and facilities",
- STD 13, <a href="http://tools.ietf.org/html/rfc1034">RFC 1034</a>, November 1987.
-
- [<a name="ref-RFC1123" id="ref-RFC1123">RFC1123</a>] Braden, R., "Requirements for Internet Hosts - Application
- and Support", STD 3, <a href="http://tools.ietf.org/html/rfc1123">RFC 1123</a>, October 1989.
-
- [<a name="ref-RFC1535" id="ref-RFC1535">RFC1535</a>] Gavron, E., "A Security Problem and Proposed Correction
- With Widely Deployed DNS Software", <a href="http://tools.ietf.org/html/rfc1535">RFC 1535</a>,
- October 1993.
-
- [<a name="ref-RFC1630" id="ref-RFC1630">RFC1630</a>] Berners-Lee, T., "Universal Resource Identifiers in WWW: A
- Unifying Syntax for the Expression of Names and Addresses
- of Objects on the Network as used in the World-Wide Web",
- <a href="http://tools.ietf.org/html/rfc1630">RFC 1630</a>, June 1994.
-
- [<a name="ref-RFC1736" id="ref-RFC1736">RFC1736</a>] Kunze, J., "Functional Recommendations for Internet
- Resource Locators", <a href="http://tools.ietf.org/html/rfc1736">RFC 1736</a>, February 1995.
-
- [<a name="ref-RFC1737" id="ref-RFC1737">RFC1737</a>] Sollins, K. and L. Masinter, "Functional Requirements for
- Uniform Resource Names", <a href="http://tools.ietf.org/html/rfc1737">RFC 1737</a>, December 1994.
-
- [<a name="ref-RFC1738" id="ref-RFC1738">RFC1738</a>] Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform
- Resource Locators (URL)", <a href="http://tools.ietf.org/html/rfc1738">RFC 1738</a>, December 1994.
-
- [<a name="ref-RFC1808" id="ref-RFC1808">RFC1808</a>] Fielding, R., "Relative Uniform Resource Locators",
- <a href="http://tools.ietf.org/html/rfc1808">RFC 1808</a>, June 1995.
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 47]</span>
-<a name="page-48" id="page-48" href="#page-48"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- [<a name="ref-RFC2046" id="ref-RFC2046">RFC2046</a>] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
- Extensions (MIME) Part Two: Media Types", <a href="http://tools.ietf.org/html/rfc2046">RFC 2046</a>,
- November 1996.
-
- [<a name="ref-RFC2141" id="ref-RFC2141">RFC2141</a>] Moats, R., "URN Syntax", <a href="http://tools.ietf.org/html/rfc2141">RFC 2141</a>, May 1997.
-
- [<a name="ref-RFC2396" id="ref-RFC2396">RFC2396</a>] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
- Resource Identifiers (URI): Generic Syntax", <a href="http://tools.ietf.org/html/rfc2396">RFC 2396</a>,
- August 1998.
-
- [<a name="ref-RFC2518" id="ref-RFC2518">RFC2518</a>] Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D.
- Jensen, "HTTP Extensions for Distributed Authoring --
- WEBDAV", <a href="http://tools.ietf.org/html/rfc2518">RFC 2518</a>, February 1999.
-
- [<a name="ref-RFC2557" id="ref-RFC2557">RFC2557</a>] Palme, J., Hopmann, A., and N. Shelness, "MIME
- Encapsulation of Aggregate Documents, such as HTML
- (MHTML)", <a href="http://tools.ietf.org/html/rfc2557">RFC 2557</a>, March 1999.
-
- [<a name="ref-RFC2718" id="ref-RFC2718">RFC2718</a>] Masinter, L., Alvestrand, H., Zigmond, D., and R. Petke,
- "Guidelines for new URL Schemes", <a href="http://tools.ietf.org/html/rfc2718">RFC 2718</a>, November 1999.
-
- [<a name="ref-RFC2732" id="ref-RFC2732">RFC2732</a>] Hinden, R., Carpenter, B., and L. Masinter, "Format for
- Literal IPv6 Addresses in URL's", <a href="http://tools.ietf.org/html/rfc2732">RFC 2732</a>, December 1999.
-
- [<a name="ref-RFC3305" id="ref-RFC3305">RFC3305</a>] Mealling, M. and R. Denenberg, "Report from the Joint
- W3C/IETF URI Planning Interest Group: Uniform Resource
- Identifiers (URIs), URLs, and Uniform Resource Names
- (URNs): Clarifications and Recommendations", <a href="http://tools.ietf.org/html/rfc3305">RFC 3305</a>,
- August 2002.
-
- [<a name="ref-RFC3490" id="ref-RFC3490">RFC3490</a>] Faltstrom, P., Hoffman, P., and A. Costello,
- "Internationalizing Domain Names in Applications (IDNA)",
- <a href="http://tools.ietf.org/html/rfc3490">RFC 3490</a>, March 2003.
-
- [<a name="ref-RFC3513" id="ref-RFC3513">RFC3513</a>] Hinden, R. and S. Deering, "Internet Protocol Version 6
- (IPv6) Addressing Architecture", <a href="http://tools.ietf.org/html/rfc3513">RFC 3513</a>, April 2003.
-
- [<a name="ref-Siedzik" id="ref-Siedzik">Siedzik</a>] Siedzik, R., "Semantic Attacks: What's in a URL?",
- April 2001, <<a href="http://www.giac.org/practical/gsec/Richard_Siedzik_GSEC.pdf">http://www.giac.org/practical/gsec/</a>
- <a href="http://www.giac.org/practical/gsec/Richard_Siedzik_GSEC.pdf">Richard_Siedzik_GSEC.pdf</a>>.
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 48]</span>
-<a name="page-49" id="page-49" href="#page-49"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-Appendix A. Collected ABNF for URI
-
- URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
-
- hier-part = "//" authority path-abempty
- / path-absolute
- / path-rootless
- / path-empty
-
- URI-reference = URI / relative-ref
-
- absolute-URI = scheme ":" hier-part [ "?" query ]
-
- relative-ref = relative-part [ "?" query ] [ "#" fragment ]
-
- relative-part = "//" authority path-abempty
- / path-absolute
- / path-noscheme
- / path-empty
-
- scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
-
- authority = [ userinfo "@" ] host [ ":" port ]
- userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
- host = IP-literal / IPv4address / reg-name
- port = *DIGIT
-
- IP-literal = "[" ( IPv6address / IPvFuture ) "]"
-
- IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
-
- IPv6address = 6( h16 ":" ) ls32
- / "::" 5( h16 ":" ) ls32
- / [ h16 ] "::" 4( h16 ":" ) ls32
- / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
- / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
- / [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32
- / [ *4( h16 ":" ) h16 ] "::" ls32
- / [ *5( h16 ":" ) h16 ] "::" h16
- / [ *6( h16 ":" ) h16 ] "::"
-
- h16 = 1*4HEXDIG
- ls32 = ( h16 ":" h16 ) / IPv4address
- IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 49]</span>
-<a name="page-50" id="page-50" href="#page-50"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- dec-octet = DIGIT ; 0-9
- / %x31-39 DIGIT ; 10-99
- / "1" 2DIGIT ; 100-199
- / "2" %x30-34 DIGIT ; 200-249
- / "25" %x30-35 ; 250-255
-
- reg-name = *( unreserved / pct-encoded / sub-delims )
-
- path = path-abempty ; begins with "/" or is empty
- / path-absolute ; begins with "/" but not "//"
- / path-noscheme ; begins with a non-colon segment
- / path-rootless ; begins with a segment
- / path-empty ; zero characters
-
- path-abempty = *( "/" segment )
- path-absolute = "/" [ segment-nz *( "/" segment ) ]
- path-noscheme = segment-nz-nc *( "/" segment )
- path-rootless = segment-nz *( "/" segment )
- path-empty = 0<pchar>
-
- segment = *pchar
- segment-nz = 1*pchar
- segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
- ; non-zero-length segment without any colon ":"
-
- pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
-
- query = *( pchar / "/" / "?" )
-
- fragment = *( pchar / "/" / "?" )
-
- pct-encoded = "%" HEXDIG HEXDIG
-
- unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- reserved = gen-delims / sub-delims
- gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
- sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
- / "*" / "+" / "," / ";" / "="
-
-Appendix B. Parsing a URI Reference with a Regular Expression
-
- As the "first-match-wins" algorithm is identical to the "greedy"
- disambiguation method used by POSIX regular expressions, it is
- natural and commonplace to use a regular expression for parsing the
- potential five components of a URI reference.
-
- The following line is the regular expression for breaking-down a
- well-formed URI reference into its components.
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 50]</span>
-<a name="page-51" id="page-51" href="#page-51"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
- 12 3 4 5 6 7 8 9
-
- The numbers in the second line above are only to assist readability;
- they indicate the reference points for each subexpression (i.e., each
- paired parenthesis). We refer to the value matched for subexpression
- <n> as $<n>. For example, matching the above expression to
-
- <a href="http://www.ics.uci.edu/pub/ietf/uri/#Related">http://www.ics.uci.edu/pub/ietf/uri/#Related</a>
-
- results in the following subexpression matches:
-
- $1 = http:
- $2 = http
- $3 = //www.ics.uci.edu
- $4 = www.ics.uci.edu
- $5 = /pub/ietf/uri/
- $6 = <undefined>
- $7 = <undefined>
- $8 = #Related
- $9 = Related
-
- where <undefined> indicates that the component is not present, as is
- the case for the query component in the above example. Therefore, we
- can determine the value of the five components as
-
- scheme = $2
- authority = $4
- path = $5
- query = $7
- fragment = $9
-
- Going in the opposite direction, we can recreate a URI reference from
- its components by using the algorithm of <a href="#section-5.3">Section 5.3</a>.
-
-Appendix C. Delimiting a URI in Context
-
- URIs are often transmitted through formats that do not provide a
- clear context for their interpretation. For example, there are many
- occasions when a URI is included in plain text; examples include text
- sent in email, USENET news, and on printed paper. In such cases, it
- is important to be able to delimit the URI from the rest of the text,
- and in particular from punctuation marks that might be mistaken for
- part of the URI.
-
- In practice, URIs are delimited in a variety of ways, but usually
- within double-quotes "http://example.com/", angle brackets
- <http://example.com/>, or just by using whitespace:
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 51]</span>
-<a name="page-52" id="page-52" href="#page-52"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- http://example.com/
-
- These wrappers do not form part of the URI.
-
- In some cases, extra whitespace (spaces, line-breaks, tabs, etc.) may
- have to be added to break a long URI across lines. The whitespace
- should be ignored when the URI is extracted.
-
- No whitespace should be introduced after a hyphen ("-") character.
- Because some typesetters and printers may (erroneously) introduce a
- hyphen at the end of line when breaking it, the interpreter of a URI
- containing a line break immediately after a hyphen should ignore all
- whitespace around the line break and should be aware that the hyphen
- may or may not actually be part of the URI.
-
- Using <> angle brackets around each URI is especially recommended as
- a delimiting style for a reference that contains embedded whitespace.
-
- The prefix "URL:" (with or without a trailing space) was formerly
- recommended as a way to help distinguish a URI from other bracketed
- designators, though it is not commonly used in practice and is no
- longer recommended.
-
- For robustness, software that accepts user-typed URI should attempt
- to recognize and strip both delimiters and embedded whitespace.
-
- For example, the text
-
- Yes, Jim, I found it under "<a href="http://www.w3.org/Addressing/">http://www.w3.org/Addressing/</a>",
- but you can probably pick it up from <ftp://foo.example.
- http://www.ics.uci.edu/pub/
- <a href="http://www.ics.uci.edu/pub/ietf/uri/historical.html#WARNING">ietf/uri/historical.html#WARNING</a>>.
-
- contains the URI references
-
- <a href="http://www.w3.org/Addressing/">http://www.w3.org/Addressing/</a>
- ftp://foo.example.com/rfc/
- <a href="http://www.ics.uci.edu/pub/ietf/uri/historical.html#WARNING">http://www.ics.uci.edu/pub/ietf/uri/historical.html#WARNING</a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 52]</span>
-<a name="page-53" id="page-53" href="#page-53"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-Appendix D. Changes from <a href="http://tools.ietf.org/html/rfc2396">RFC 2396</a>
-
-D.1. Additions
-
- An ABNF rule for URI has been introduced to correspond to one common
- usage of the term: an absolute URI with optional fragment.
-
- IPv6 (and later) literals have been added to the list of possible
- identifiers for the host portion of an authority component, as
- described by [<a href="http://tools.ietf.org/html/rfc2732" title=""Format for Literal IPv6 Addresses in URL&#39;s"">RFC2732</a>], with the addition of "[" and "]" to the
- reserved set and a version flag to anticipate future versions of IP
- literals. Square brackets are now specified as reserved within the
- authority component and are not allowed outside their use as
- delimiters for an IP literal within host. In order to make this
- change without changing the technical definition of the path, query,
- and fragment components, those rules were redefined to directly
- specify the characters allowed.
-
- As [<a href="http://tools.ietf.org/html/rfc2732" title=""Format for Literal IPv6 Addresses in URL&#39;s"">RFC2732</a>] defers to [<a href="http://tools.ietf.org/html/rfc3513" title=""Internet Protocol Version 6 (IPv6) Addressing Architecture"">RFC3513</a>] for definition of an IPv6 literal
- address, which, unfortunately, lacks an ABNF description of
- IPv6address, we created a new ABNF rule for IPv6address that matches
- the text representations defined by <a href="#section-2.2">Section 2.2</a> of [<a href="http://tools.ietf.org/html/rfc3513" title=""Internet Protocol Version 6 (IPv6) Addressing Architecture"">RFC3513</a>].
- Likewise, the definition of IPv4address has been improved in order to
- limit each decimal octet to the range 0-255.
-
- <a href="#section-6">Section 6</a>, on URI normalization and comparison, has been completely
- rewritten and extended by using input from Tim Bray and discussion
- within the W3C Technical Architecture Group.
-
-D.2. Modifications
-
- The ad-hoc BNF syntax of <a href="http://tools.ietf.org/html/rfc2396">RFC 2396</a> has been replaced with the ABNF of
- [<a href="http://tools.ietf.org/html/rfc2234" title=""Augmented BNF for Syntax Specifications: ABNF"">RFC2234</a>]. This change required all rule names that formerly
- included underscore characters to be renamed with a dash instead. In
- addition, a number of syntax rules have been eliminated or simplified
- to make the overall grammar more comprehensible. Specifications that
- refer to the obsolete grammar rules may be understood by replacing
- those rules according to the following table:
-
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 53]</span>
-<a name="page-54" id="page-54" href="#page-54"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- +----------------+--------------------------------------------------+
- | obsolete rule | translation |
- +----------------+--------------------------------------------------+
- | absoluteURI | absolute-URI |
- | relativeURI | relative-part [ "?" query ] |
- | hier_part | ( "//" authority path-abempty / |
- | | path-absolute ) [ "?" query ] |
- | | |
- | opaque_part | path-rootless [ "?" query ] |
- | net_path | "//" authority path-abempty |
- | abs_path | path-absolute |
- | rel_path | path-rootless |
- | rel_segment | segment-nz-nc |
- | reg_name | reg-name |
- | server | authority |
- | hostport | host [ ":" port ] |
- | hostname | reg-name |
- | path_segments | path-abempty |
- | param | *<pchar excluding ";"> |
- | | |
- | uric | unreserved / pct-encoded / ";" / "?" / ":" |
- | | / "@" / "&" / "=" / "+" / "$" / "," / "/" |
- | | |
- | uric_no_slash | unreserved / pct-encoded / ";" / "?" / ":" |
- | | / "@" / "&" / "=" / "+" / "$" / "," |
- | | |
- | mark | "-" / "_" / "." / "!" / "~" / "*" / "'" |
- | | / "(" / ")" |
- | | |
- | escaped | pct-encoded |
- | hex | HEXDIG |
- | alphanum | ALPHA / DIGIT |
- +----------------+--------------------------------------------------+
-
- Use of the above obsolete rules for the definition of scheme-specific
- syntax is deprecated.
-
- <a href="#section-2">Section 2</a>, on characters, has been rewritten to explain what
- characters are reserved, when they are reserved, and why they are
- reserved, even when they are not used as delimiters by the generic
- syntax. The mark characters that are typically unsafe to decode,
- including the exclamation mark ("!"), asterisk ("*"), single-quote
- ("'"), and open and close parentheses ("(" and ")"), have been moved
- to the reserved set in order to clarify the distinction between
- reserved and unreserved and, hopefully, to answer the most common
- question of scheme designers. Likewise, the section on
- percent-encoded characters has been rewritten, and URI normalizers
- are now given license to decode any percent-encoded octets
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 54]</span>
-<a name="page-55" id="page-55" href="#page-55"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- corresponding to unreserved characters. In general, the terms
- "escaped" and "unescaped" have been replaced with "percent-encoded"
- and "decoded", respectively, to reduce confusion with other forms of
- escape mechanisms.
-
- The ABNF for URI and URI-reference has been redesigned to make them
- more friendly to LALR parsers and to reduce complexity. As a result,
- the layout form of syntax description has been removed, along with
- the uric, uric_no_slash, opaque_part, net_path, abs_path, rel_path,
- path_segments, rel_segment, and mark rules. All references to
- "opaque" URIs have been replaced with a better description of how the
- path component may be opaque to hierarchy. The relativeURI rule has
- been replaced with relative-ref to avoid unnecessary confusion over
- whether they are a subset of URI. The ambiguity regarding the
- parsing of URI-reference as a URI or a relative-ref with a colon in
- the first segment has been eliminated through the use of five
- separate path matching rules.
-
- The fragment identifier has been moved back into the section on
- generic syntax components and within the URI and relative-ref rules,
- though it remains excluded from absolute-URI. The number sign ("#")
- character has been moved back to the reserved set as a result of
- reintegrating the fragment syntax.
-
- The ABNF has been corrected to allow the path component to be empty.
- This also allows an absolute-URI to consist of nothing after the
- "scheme:", as is present in practice with the "dav:" namespace
- [<a href="http://tools.ietf.org/html/rfc2518" title=""HTTP Extensions for Distributed Authoring -- WEBDAV"">RFC2518</a>] and with the "about:" scheme used internally by many WWW
- browser implementations. The ambiguity regarding the boundary
- between authority and path has been eliminated through the use of
- five separate path matching rules.
-
- Registry-based naming authorities that use the generic syntax are now
- defined within the host rule. This change allows current
- implementations, where whatever name provided is simply fed to the
- local name resolution mechanism, to be consistent with the
- specification. It also removes the need to re-specify DNS name
- formats here. Furthermore, it allows the host component to contain
- percent-encoded octets, which is necessary to enable
- internationalized domain names to be provided in URIs, processed in
- their native character encodings at the application layers above URI
- processing, and passed to an IDNA library as a registered name in the
- UTF-8 character encoding. The server, hostport, hostname,
- domainlabel, toplabel, and alphanum rules have been removed.
-
- The resolving relative references algorithm of [<a href="http://tools.ietf.org/html/rfc2396" title=""Uniform Resource Identifiers (URI): Generic Syntax"">RFC2396</a>] has been
- rewritten with pseudocode for this revision to improve clarity and
- fix the following issues:
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 55]</span>
-<a name="page-56" id="page-56" href="#page-56"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- o [<a href="http://tools.ietf.org/html/rfc2396" title=""Uniform Resource Identifiers (URI): Generic Syntax"">RFC2396</a>] <a href="#section-5.2">section 5.2</a>, step 6a, failed to account for a base URI
- with no path.
-
- o Restored the behavior of [<a href="http://tools.ietf.org/html/rfc1808" title=""Relative Uniform Resource Locators"">RFC1808</a>] where, if the reference
- contains an empty path and a defined query component, the target
- URI inherits the base URI's path component.
-
- o The determination of whether a URI reference is a same-document
- reference has been decoupled from the URI parser, simplifying the
- URI processing interface within applications in a way consistent
- with the internal architecture of deployed URI processing
- implementations. The determination is now based on comparison to
- the base URI after transforming a reference to absolute form,
- rather than on the format of the reference itself. This change
- may result in more references being considered "same-document"
- under this specification than there would be under the rules given
- in <a href="http://tools.ietf.org/html/rfc2396">RFC 2396</a>, especially when normalization is used to reduce
- aliases. However, it does not change the status of existing
- same-document references.
-
- o Separated the path merge routine into two routines: merge, for
- describing combination of the base URI path with a relative-path
- reference, and remove_dot_segments, for describing how to remove
- the special "." and ".." segments from a composed path. The
- remove_dot_segments algorithm is now applied to all URI reference
- paths in order to match common implementations and to improve the
- normalization of URIs in practice. This change only impacts the
- parsing of abnormal references and same-scheme references wherein
- the base URI has a non-hierarchical path.
-
-Index
-
- A
- ABNF 11
- absolute 27
- absolute-path 26
- absolute-URI 27
- access 9
- authority 17, 18
-
- B
- base URI 28
-
- C
- character encoding 4
- character 4
- characters 8, 11
- coded character set 4
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 56]</span>
-<a name="page-57" id="page-57" href="#page-57"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- D
- dec-octet 20
- dereference 9
- dot-segments 23
-
- F
- fragment 16, 24
-
- G
- gen-delims 13
- generic syntax 6
-
- H
- h16 20
- hier-part 16
- hierarchical 10
- host 18
-
- I
- identifier 5
- IP-literal 19
- IPv4 20
- IPv4address 19, 20
- IPv6 19
- IPv6address 19, 20
- IPvFuture 19
-
- L
- locator 7
- ls32 20
-
- M
- merge 32
-
- N
- name 7
- network-path 26
-
- P
- path 16, 22, 26
- path-abempty 22
- path-absolute 22
- path-empty 22
- path-noscheme 22
- path-rootless 22
- path-abempty 16, 22, 26
- path-absolute 16, 22, 26
- path-empty 16, 22, 26
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 57]</span>
-<a name="page-58" id="page-58" href="#page-58"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- path-rootless 16, 22
- pchar 23
- pct-encoded 12
- percent-encoding 12
- port 22
-
- Q
- query 16, 23
-
- R
- reg-name 21
- registered name 20
- relative 10, 28
- relative-path 26
- relative-ref 26
- remove_dot_segments 33
- representation 9
- reserved 12
- resolution 9, 28
- resource 5
- retrieval 9
-
- S
- same-document 27
- sameness 9
- scheme 16, 17
- segment 22, 23
- segment-nz 23
- segment-nz-nc 23
- sub-delims 13
- suffix 27
-
- T
- transcription 8
-
- U
- uniform 4
- unreserved 13
- URI grammar
- absolute-URI 27
- ALPHA 11
- authority 18
- CR 11
- dec-octet 20
- DIGIT 11
- DQUOTE 11
- fragment 24
- gen-delims 13
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 58]</span>
-<a name="page-59" id="page-59" href="#page-59"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
- h16 20
- HEXDIG 11
- hier-part 16
- host 19
- IP-literal 19
- IPv4address 20
- IPv6address 20
- IPvFuture 19
- LF 11
- ls32 20
- OCTET 11
- path 22
- path-abempty 22
- path-absolute 22
- path-empty 22
- path-noscheme 22
- path-rootless 22
- pchar 23
- pct-encoded 12
- port 22
- query 24
- reg-name 21
- relative-ref 26
- reserved 13
- scheme 17
- segment 23
- segment-nz 23
- segment-nz-nc 23
- SP 11
- sub-delims 13
- unreserved 13
- URI 16
- URI-reference 25
- userinfo 18
- URI 16
- URI-reference 25
- URL 7
- URN 7
- userinfo 18
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 59]</span>
-<a name="page-60" id="page-60" href="#page-60"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-Authors' Addresses
-
- Tim Berners-Lee
- World Wide Web Consortium
- Massachusetts Institute of Technology
- 77 Massachusetts Avenue
- Cambridge, MA 02139
- USA
-
- Phone: +1-617-253-5702
- Fax: +1-617-258-5999
- EMail: timbl@w3.org
- URI: <a href="http://www.w3.org/People/Berners-Lee/">http://www.w3.org/People/Berners-Lee/</a>
-
-
- Roy T. Fielding
- Day Software
- 5251 California Ave., Suite 110
- Irvine, CA 92617
- USA
-
- Phone: +1-949-679-2960
- Fax: +1-949-679-2972
- EMail: fielding@gbiv.com
- URI: <a href="http://roy.gbiv.com/">http://roy.gbiv.com/</a>
-
-
- Larry Masinter
- Adobe Systems Incorporated
- 345 Park Ave
- San Jose, CA 95110
- USA
-
- Phone: +1-408-536-3024
- EMail: LMM@acm.org
- URI: <a href="http://larry.masinter.net/">http://larry.masinter.net/</a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<span class="grey">Berners-Lee, et al. Standards Track [Page 60]</span>
-<a name="page-61" id="page-61" href="#page-61"><span class="break"> </span></a>
-<span class="grey"><a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> URI Generic Syntax January 2005</span>
-
-
-Full Copyright Statement
-
- Copyright (C) The Internet Society (2005).
-
- This document is subject to the rights, licenses and restrictions
- contained in <a href="http://tools.ietf.org/html/bcp78">BCP 78</a>, and except as set forth therein, the authors
- retain all their rights.
-
- This document and the information contained herein are provided on an
- "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
- OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
- ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
- INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
- INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
- WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-Intellectual Property
-
- The IETF takes no position regarding the validity or scope of any
- Intellectual Property Rights or other rights that might be claimed to
- pertain to the implementation or use of the technology described in
- this document or the extent to which any license under such rights
- might or might not be available; nor does it represent that it has
- made any independent effort to identify any such rights. Information
- on the IETF's procedures with respect to rights in IETF Documents can
- be found in <a href="http://tools.ietf.org/html/bcp78">BCP 78</a> and <a href="http://tools.ietf.org/html/bcp79">BCP 79</a>.
-
- Copies of IPR disclosures made to the IETF Secretariat and any
- assurances of licenses to be made available, or the result of an
- attempt made to obtain a general license or permission for the use of
- such proprietary rights by implementers or users of this
- specification can be obtained from the IETF on-line IPR repository at
- <a href="http://www.ietf.org/ipr">http://www.ietf.org/ipr</a>.
-
- The IETF invites any interested party to bring to its attention any
- copyrights, patents or patent applications, or other proprietary
- rights that may cover technology that may be required to implement
- this standard. Please address the information to the IETF at ietf-
- ipr@ietf.org.
-
-
-Acknowledgement
-
- Funding for the RFC Editor function is currently provided by the
- Internet Society.
-
-
-
-
-
-
-Berners-Lee, et al. Standards Track [Page 61]
-<span class="break"> </span>
-
-</pre><br>
-<span class="noprint"><small><small>Html markup produced by rfcmarkup 1.46, available from
-<a href="http://tools.ietf.org/tools/rfcmarkup/">http://tools.ietf.org/tools/rfcmarkup/</a>
-</small></small></span>
-
-</body></html>
\ No newline at end of file |