Changeset 2743


Ignore:
Timestamp:
Nov 3, 2015, 11:50:59 PM (4 years ago)
Author:
julian.reschke@…
Message:

update XSLTs; update specs

Files:
2 added
60 edited

Legend:

Unmodified
Added
Removed
  • rfc2629xslt/rfc2629.xslt

    r2740 r2743  
    256256
    257257<!-- WORK IN PROGRESS; ONLY A FEW CLASSES SUPPORTED FOR NOW -->
     258<xsl:variable name="css-docstatus"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'docstatus'"/></xsl:call-template></xsl:variable>
    258259<xsl:variable name="css-error"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'error'"/></xsl:call-template></xsl:variable>
     260<xsl:variable name="css-fbbutton"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'fbbutton'"/></xsl:call-template></xsl:variable>
     261<xsl:variable name="css-feedback"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'feedback'"/></xsl:call-template></xsl:variable>
     262<xsl:variable name="css-header"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'header'"/></xsl:call-template></xsl:variable>
     263<xsl:variable name="css-left"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'left'"/></xsl:call-template></xsl:variable>
    259264<xsl:variable name="css-noprint"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'noprint'"/></xsl:call-template></xsl:variable>
     265<xsl:variable name="css-note"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'note'"/></xsl:call-template></xsl:variable>
     266<xsl:variable name="css-publishedasrfc"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'publishedasrfc'"/></xsl:call-template></xsl:variable>
     267<xsl:variable name="css-reference"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'reference'"/></xsl:call-template></xsl:variable>
     268<xsl:variable name="css-right"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'right'"/></xsl:call-template></xsl:variable>
    260269<xsl:variable name="css-tcenter"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'tcenter'"/></xsl:call-template></xsl:variable>
    261270<xsl:variable name="css-tleft"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'tleft'"/></xsl:call-template></xsl:variable>
    262271<xsl:variable name="css-tright"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'tright'"/></xsl:call-template></xsl:variable>
    263272<xsl:variable name="css-tt"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'tt'"/></xsl:call-template></xsl:variable>
     273
    264274
    265275<!-- RFC-Editor site linking -->
     
    12671277    </xsl:variable>
    12681278    <!-- insert the collected information -->
    1269     <table class="header" id="{$anchor-prefix}.headerblock">
     1279    <table class="{$css-header}" id="{$anchor-prefix}.headerblock">
    12701280      <xsl:choose>
    12711281        <xsl:when test="function-available('exslt:node-set')">
     
    13631373  <!-- insert notice about update -->
    13641374  <xsl:if test="$published-as-rfc">
    1365     <p class="publishedasrfc">
     1375    <p class="{$css-publishedasrfc}">
    13661376      <b>Note:</b> a later version of this document has been published as <a href="{$published-as-rfc/@href}"><xsl:value-of select="$published-as-rfc/@title"/></a>.
    13671377    </p>
     
    20262036  <xsl:param name="ref"/>
    20272037
     2038  <xsl:variable name="bibtarget">
     2039    <xsl:choose>
     2040      <xsl:when test="starts-with($bib/@target,'http://www.rfc-editor.org/info/rfc') or starts-with($bib/@target,'https://www.rfc-editor.org/info/rfc') and $ref and ($ref/@x:sec or $ref/@x:rel or $ref/@section or $ref/@relative)">
     2041        <xsl:call-template name="warning">
     2042          <xsl:with-param name="msg">Ignoring @target <xsl:value-of select="$bib/@target"/> in link calculation</xsl:with-param>
     2043        </xsl:call-template>
     2044      </xsl:when>
     2045      <xsl:otherwise>
     2046        <xsl:value-of select="$bib/@target"/>
     2047      </xsl:otherwise>
     2048    </xsl:choose>
     2049  </xsl:variable>
     2050 
    20282051  <xsl:choose>
    2029     <xsl:when test="$bib/@target">
    2030       <xsl:if test="$ref and $ref/@x:sec and $ref/@x:rel">
    2031         <xsl:value-of select="concat($bib/@target,$ref/@x:rel)"/>
     2052    <xsl:when test="$bibtarget!=''">
     2053      <xsl:if test="$ref and $ref/@x:sec">
     2054        <xsl:choose>
     2055          <xsl:when test="$ref/@x:rel">
     2056            <xsl:value-of select="concat($bib/@target,$ref/@x:rel)"/>
     2057          </xsl:when>
     2058          <xsl:otherwise>
     2059            <xsl:call-template name="warning">
     2060              <xsl:with-param name="msg">Can't generate section link for to <xsl:value-of select="$bib/@anchor"/>; no @x:rel specified</xsl:with-param>
     2061            </xsl:call-template>
     2062          </xsl:otherwise>
     2063        </xsl:choose>
    20322064      </xsl:if>
    2033       <xsl:if test="$ref and $ref/@section and $ref/@relative">
    2034         <xsl:value-of select="concat($bib/@target,$ref/@relative)"/>
     2065      <xsl:if test="$ref and $ref/@section">
     2066        <xsl:choose>
     2067          <xsl:when test="$ref/@relative">
     2068            <xsl:value-of select="concat($bib/@target,$ref/@relative)"/>
     2069          </xsl:when>
     2070          <xsl:otherwise>
     2071            <xsl:call-template name="warning">
     2072              <xsl:with-param name="msg">Can't generate section link for to <xsl:value-of select="$bib/@anchor"/>; no @relative specified</xsl:with-param>
     2073            </xsl:call-template>
     2074          </xsl:otherwise>
     2075        </xsl:choose>
    20352076      </xsl:if>
    20362077    </xsl:when>
     
    21172158  </xsl:variable>
    21182159
    2119   <tr>
    2120     <td class="reference">
    2121       <xsl:call-template name="insertInsDelClass"/>
    2122       <xsl:variable name="del-node" select="ancestor::ed:del"/>
    2123       <xsl:variable name="rep-node" select="ancestor::ed:replace"/>
    2124       <xsl:variable name="deleted" select="$del-node and ($rep-node/ed:ins)"/>
    2125       <xsl:for-each select="../..">
    2126         <xsl:call-template name="insert-issue-pointer">
    2127           <xsl:with-param name="deleted-anchor" select="$deleted"/>
     2160  <dt id="{@anchor}">
     2161    <xsl:call-template name="insertInsDelClass"/>
     2162    <xsl:variable name="del-node" select="ancestor::ed:del"/>
     2163    <xsl:variable name="rep-node" select="ancestor::ed:replace"/>
     2164    <xsl:variable name="deleted" select="$del-node and ($rep-node/ed:ins)"/>
     2165    <xsl:for-each select="../..">
     2166      <xsl:call-template name="insert-issue-pointer">
     2167        <xsl:with-param name="deleted-anchor" select="$deleted"/>
     2168      </xsl:call-template>
     2169    </xsl:for-each>
     2170    <xsl:call-template name="reference-name"/>
     2171  </dt>
     2172
     2173  <dd>
     2174    <xsl:call-template name="insertInsDelClass"/>
     2175    <xsl:for-each select="front/author">
     2176      <xsl:variable name="initials">
     2177        <xsl:call-template name="format-initials"/>
     2178      </xsl:variable>
     2179      <xsl:variable name="truncated-initials">
     2180        <xsl:call-template name="truncate-initials">
     2181          <xsl:with-param name="initials" select="$initials"/>
    21282182        </xsl:call-template>
    2129       </xsl:for-each>
    2130       <b id="{@anchor}">
    2131         <xsl:call-template name="reference-name"/>
    2132       </b>
    2133     </td>
    2134 
    2135     <td class="top">
    2136       <xsl:call-template name="insertInsDelClass"/>
    2137       <xsl:for-each select="front/author">
    2138         <xsl:variable name="initials">
    2139           <xsl:call-template name="format-initials"/>
    2140         </xsl:variable>
    2141         <xsl:variable name="truncated-initials">
    2142           <xsl:call-template name="truncate-initials">
    2143             <xsl:with-param name="initials" select="$initials"/>
    2144           </xsl:call-template>
    2145         </xsl:variable>
    2146 
    2147         <xsl:choose>
    2148           <xsl:when test="@surname and @surname!=''">
    2149             <xsl:variable name="displayname">
    2150               <!-- surname/initials is reversed for last author except when it's the only one -->
    2151               <xsl:choose>
    2152                 <xsl:when test="$truncated-initials='' and @surname">
    2153                   <xsl:value-of select="@surname"/>
    2154                 </xsl:when>
    2155                 <xsl:when test="position()=last() and position()!=1">
    2156                   <xsl:value-of select="concat($truncated-initials,' ',@surname)" />
    2157                 </xsl:when>
    2158                 <xsl:otherwise>
    2159                   <xsl:value-of select="concat(@surname,', ',$truncated-initials)" />
    2160                 </xsl:otherwise>
    2161               </xsl:choose>
    2162               <xsl:if test="@role='editor'">
    2163                 <xsl:text>, Ed.</xsl:text>
    2164               </xsl:if>
    2165             </xsl:variable>
     2183      </xsl:variable>
     2184
     2185      <xsl:choose>
     2186        <xsl:when test="@surname and @surname!=''">
     2187          <xsl:variable name="displayname">
     2188            <!-- surname/initials is reversed for last author except when it's the only one -->
    21662189            <xsl:choose>
    2167               <xsl:when test="address/email and $xml2rfc-linkmailto!='no'">
    2168                 <a href="mailto:{address/email}"><xsl:value-of select="$displayname" /></a>
     2190              <xsl:when test="$truncated-initials='' and @surname">
     2191                <xsl:value-of select="@surname"/>
     2192              </xsl:when>
     2193              <xsl:when test="position()=last() and position()!=1">
     2194                <xsl:value-of select="concat($truncated-initials,' ',@surname)" />
    21692195              </xsl:when>
    21702196              <xsl:otherwise>
    2171                 <xsl:value-of select="$displayname" />
     2197                <xsl:value-of select="concat(@surname,', ',$truncated-initials)" />
    21722198              </xsl:otherwise>
    21732199            </xsl:choose>
    2174 
    2175             <xsl:choose>
    2176               <xsl:when test="position()=last() - 1">
    2177                 <xsl:if test="last() &gt; 2">,</xsl:if>
    2178                 <xsl:text> and </xsl:text>
    2179               </xsl:when>
    2180               <xsl:otherwise>
    2181                 <xsl:text>, </xsl:text>
    2182               </xsl:otherwise>
    2183             </xsl:choose>
    2184           </xsl:when>
    2185           <xsl:when test="organization/text()">
    2186             <xsl:choose>
    2187               <xsl:when test="address/uri">
    2188                 <a href="{address/uri}"><xsl:value-of select="organization" /></a>
    2189               </xsl:when>
    2190               <xsl:otherwise>
    2191                 <xsl:value-of select="organization" />
    2192               </xsl:otherwise>
    2193             </xsl:choose>
    2194 
    2195             <xsl:choose>
    2196               <xsl:when test="position()=last() - 1">
    2197                 <xsl:if test="last() &gt; 2">,</xsl:if>
    2198                 <xsl:text> and </xsl:text>
    2199               </xsl:when>
    2200               <xsl:otherwise>
    2201                 <xsl:text>, </xsl:text>
    2202               </xsl:otherwise>
    2203             </xsl:choose>
    2204           </xsl:when>
    2205           <xsl:otherwise />
    2206         </xsl:choose>
    2207       </xsl:for-each>
    2208 
    2209       <xsl:variable name="quoted" select="not(front/title/@x:quotes='false') and not(@quoteTitle='false')"/>
    2210       <xsl:if test="$quoted">&#8220;</xsl:if>
     2200            <xsl:if test="@role='editor'">
     2201              <xsl:text>, Ed.</xsl:text>
     2202            </xsl:if>
     2203          </xsl:variable>
     2204          <xsl:choose>
     2205            <xsl:when test="address/email and $xml2rfc-linkmailto!='no'">
     2206              <a href="mailto:{address/email}"><xsl:value-of select="$displayname" /></a>
     2207            </xsl:when>
     2208            <xsl:otherwise>
     2209              <xsl:value-of select="$displayname" />
     2210            </xsl:otherwise>
     2211          </xsl:choose>
     2212
     2213          <xsl:choose>
     2214            <xsl:when test="position()=last() - 1">
     2215              <xsl:if test="last() &gt; 2">,</xsl:if>
     2216              <xsl:text> and </xsl:text>
     2217            </xsl:when>
     2218            <xsl:otherwise>
     2219              <xsl:text>, </xsl:text>
     2220            </xsl:otherwise>
     2221          </xsl:choose>
     2222        </xsl:when>
     2223        <xsl:when test="organization/text()">
     2224          <xsl:choose>
     2225            <xsl:when test="address/uri">
     2226              <a href="{address/uri}"><xsl:value-of select="organization" /></a>
     2227            </xsl:when>
     2228            <xsl:otherwise>
     2229              <xsl:value-of select="organization" />
     2230            </xsl:otherwise>
     2231          </xsl:choose>
     2232
     2233          <xsl:choose>
     2234            <xsl:when test="position()=last() - 1">
     2235              <xsl:if test="last() &gt; 2">,</xsl:if>
     2236              <xsl:text> and </xsl:text>
     2237            </xsl:when>
     2238            <xsl:otherwise>
     2239              <xsl:text>, </xsl:text>
     2240            </xsl:otherwise>
     2241          </xsl:choose>
     2242        </xsl:when>
     2243        <xsl:otherwise />
     2244      </xsl:choose>
     2245    </xsl:for-each>
     2246
     2247    <xsl:variable name="quoted" select="not(front/title/@x:quotes='false') and not(@quoteTitle='false')"/>
     2248    <xsl:if test="$quoted">&#8220;</xsl:if>
     2249    <xsl:choose>
     2250      <xsl:when test="string-length($target) &gt; 0">
     2251        <a href="{$target}"><xsl:value-of select="normalize-space(front/title)" /></a>
     2252      </xsl:when>
     2253      <xsl:otherwise>
     2254        <xsl:value-of select="normalize-space(front/title)" />
     2255      </xsl:otherwise>
     2256    </xsl:choose>
     2257    <xsl:if test="$quoted">&#8221;</xsl:if>
     2258
     2259    <xsl:variable name="rfcs" select="count(seriesInfo[@name='RFC'])"/>
     2260
     2261    <xsl:variable name="doi">
     2262      <xsl:call-template name="compute-doi"/>
     2263    </xsl:variable>
     2264
     2265    <xsl:for-each select="seriesInfo">
     2266      <xsl:text>, </xsl:text>
    22112267      <xsl:choose>
    2212         <xsl:when test="string-length($target) &gt; 0">
    2213           <a href="{$target}"><xsl:value-of select="normalize-space(front/title)" /></a>
     2268        <xsl:when test="not(@name) and not(@value) and ./text()"><xsl:value-of select="." /></xsl:when>
     2269        <xsl:when test="@name='RFC' and $rfcs > 1">
     2270          <a href="{concat($rfcUrlPrefix,@value,$rfcUrlPostfix)}">
     2271            <xsl:value-of select="@name" />
     2272            <xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if>
     2273          </a>
     2274        </xsl:when>
     2275        <xsl:when test="@name='DOI'">
     2276          <a href="http://dx.doi.org/{@value}">
     2277            <xsl:value-of select="@name" />
     2278            <xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if>
     2279          </a>
     2280          <xsl:if test="$doi!='' and $doi!=@value">
     2281            <xsl:call-template name="warning">
     2282              <xsl:with-param name="msg">Unexpected DOI for RFC, found <xsl:value-of select="@value"/>, expected <xsl:value-of select="$doi"/></xsl:with-param>
     2283            </xsl:call-template>
     2284          </xsl:if>
     2285        </xsl:when>
     2286        <xsl:when test="@name='Internet-Draft' and $rfcno > 7375">
     2287          <!-- special case in RFC formatting since 2015 -->           
     2288          <xsl:text>Work in Progress, </xsl:text>
     2289          <xsl:value-of select="@value" />
    22142290        </xsl:when>
    22152291        <xsl:otherwise>
    2216           <xsl:value-of select="normalize-space(front/title)" />
     2292          <xsl:value-of select="@name" />
     2293          <xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if>
     2294          <xsl:if test="translate(@name,$ucase,$lcase)='internet-draft'"> (work in progress)</xsl:if>
    22172295        </xsl:otherwise>
    22182296      </xsl:choose>
    2219       <xsl:if test="$quoted">&#8221;</xsl:if>
    2220 
    2221       <xsl:variable name="rfcs" select="count(seriesInfo[@name='RFC'])"/>
    2222 
    2223       <xsl:variable name="doi">
    2224         <xsl:call-template name="compute-doi"/>
    2225       </xsl:variable>
    2226 
    2227       <xsl:for-each select="seriesInfo">
    2228         <xsl:text>, </xsl:text>
    2229         <xsl:choose>
    2230           <xsl:when test="not(@name) and not(@value) and ./text()"><xsl:value-of select="." /></xsl:when>
    2231           <xsl:when test="@name='RFC' and $rfcs > 1">
    2232             <a href="{concat($rfcUrlPrefix,@value,$rfcUrlPostfix)}">
    2233               <xsl:value-of select="@name" />
    2234               <xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if>
    2235             </a>
    2236           </xsl:when>
    2237           <xsl:when test="@name='DOI'">
    2238             <a href="http://dx.doi.org/{@value}">
    2239               <xsl:value-of select="@name" />
    2240               <xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if>
    2241             </a>
    2242             <xsl:if test="$doi!='' and $doi!=@value">
    2243               <xsl:call-template name="warning">
    2244                 <xsl:with-param name="msg">Unexpected DOI for RFC, found <xsl:value-of select="@value"/>, expected <xsl:value-of select="$doi"/></xsl:with-param>
    2245               </xsl:call-template>
    2246             </xsl:if>
    2247           </xsl:when>
    2248           <xsl:when test="@name='Internet-Draft' and $rfcno > 7375">
    2249             <!-- special case in RFC formatting since 2015 -->           
    2250             <xsl:text>Work in Progress, </xsl:text>
    2251             <xsl:value-of select="@value" />
    2252           </xsl:when>
    2253           <xsl:otherwise>
    2254             <xsl:value-of select="@name" />
    2255             <xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if>
    2256             <xsl:if test="translate(@name,$ucase,$lcase)='internet-draft'"> (work in progress)</xsl:if>
    2257           </xsl:otherwise>
    2258         </xsl:choose>
    2259 
    2260         <!-- check that BCP FYI STD RFC are in the right order -->
    2261         <xsl:if test="(@name='BCP' or @name='FYI' or @name='STD') and preceding-sibling::seriesInfo[@name='RFC']">
    2262           <xsl:call-template name="warning">
    2263             <xsl:with-param name="msg">RFC number preceding <xsl:value-of select="@name"/> number in reference '<xsl:value-of select="../@anchor"/>'</xsl:with-param>
    2264           </xsl:call-template>
    2265         </xsl:if>
    2266 
    2267       </xsl:for-each>
    2268 
    2269       <!-- Insert DOI for RFCs -->
    2270       <xsl:if test="$xml2rfc-ext-insert-doi='yes' and $doi!='' and not(seriesInfo[@name='DOI'])">
    2271         <xsl:text>, </xsl:text>
    2272         <a href="http://dx.doi.org/{$doi}">DOI&#160;<xsl:value-of select="$doi"/></a>
    2273       </xsl:if>
    2274 
    2275       <!-- avoid hacks using seriesInfo when it's not really series information -->
    2276       <xsl:for-each select="x:prose|refcontent">
    2277         <xsl:text>, </xsl:text>
    2278         <xsl:apply-templates/>
    2279       </xsl:for-each>
    2280 
    2281       <xsl:if test="not(front/date)">
     2297
     2298      <!-- check that BCP FYI STD RFC are in the right order -->
     2299      <xsl:if test="(@name='BCP' or @name='FYI' or @name='STD') and preceding-sibling::seriesInfo[@name='RFC']">
    22822300        <xsl:call-template name="warning">
    2283           <xsl:with-param name="msg">&lt;date&gt; missing in reference '<xsl:value-of select="@anchor"/>' (note that it can be empty)</xsl:with-param>
     2301          <xsl:with-param name="msg">RFC number preceding <xsl:value-of select="@name"/> number in reference '<xsl:value-of select="../@anchor"/>'</xsl:with-param>
    22842302        </xsl:call-template>
    22852303      </xsl:if>
    22862304
    2287       <xsl:if test="front/date/@year != ''">
    2288         <xsl:if test="string(number(front/date/@year)) = 'NaN'">
    2289           <xsl:call-template name="warning">
    2290             <xsl:with-param name="msg">date/@year should be a number: '<xsl:value-of select="front/date/@year"/>' in reference '<xsl:value-of select="@anchor"/>'</xsl:with-param>
    2291           </xsl:call-template>
    2292         </xsl:if>
    2293         <xsl:text>, </xsl:text>
    2294         <xsl:if test="front/date/@month!=''"><xsl:value-of select="front/date/@month" />&#0160;</xsl:if>
    2295         <xsl:value-of select="front/date/@year" />
     2305    </xsl:for-each>
     2306
     2307    <!-- Insert DOI for RFCs -->
     2308    <xsl:if test="$xml2rfc-ext-insert-doi='yes' and $doi!='' and not(seriesInfo[@name='DOI'])">
     2309      <xsl:text>, </xsl:text>
     2310      <a href="http://dx.doi.org/{$doi}">DOI&#160;<xsl:value-of select="$doi"/></a>
     2311    </xsl:if>
     2312
     2313    <!-- avoid hacks using seriesInfo when it's not really series information -->
     2314    <xsl:for-each select="x:prose|refcontent">
     2315      <xsl:text>, </xsl:text>
     2316      <xsl:apply-templates/>
     2317    </xsl:for-each>
     2318
     2319    <xsl:if test="not(front/date)">
     2320      <xsl:call-template name="warning">
     2321        <xsl:with-param name="msg">&lt;date&gt; missing in reference '<xsl:value-of select="@anchor"/>' (note that it can be empty)</xsl:with-param>
     2322      </xsl:call-template>
     2323    </xsl:if>
     2324
     2325    <xsl:if test="front/date/@year != ''">
     2326      <xsl:if test="string(number(front/date/@year)) = 'NaN'">
     2327        <xsl:call-template name="warning">
     2328          <xsl:with-param name="msg">date/@year should be a number: '<xsl:value-of select="front/date/@year"/>' in reference '<xsl:value-of select="@anchor"/>'</xsl:with-param>
     2329        </xsl:call-template>
    22962330      </xsl:if>
    2297 
    2298       <xsl:choose>
    2299         <xsl:when test="string-length(normalize-space(@target)) &gt; 0">
    2300           <xsl:text>, &lt;</xsl:text>
    2301           <a href="{normalize-space(@target)}"><xsl:value-of select="normalize-space(@target)"/></a>
    2302           <xsl:text>&gt;</xsl:text>
    2303         </xsl:when>
    2304         <xsl:when test="$xml2rfc-ext-link-rfc-to-info-page='yes' and seriesInfo[@name='BCP'] and starts-with(@anchor, 'BCP')">
    2305           <xsl:text>, &lt;</xsl:text>
    2306           <xsl:variable name="uri" select="concat('http://www.rfc-editor.org/info/bcp',seriesInfo[@name='BCP']/@value)"/>
    2307           <a href="{$uri}"><xsl:value-of select="$uri"/></a>
    2308           <xsl:text>&gt;</xsl:text>
    2309         </xsl:when>
    2310         <xsl:when test="$xml2rfc-ext-link-rfc-to-info-page='yes' and seriesInfo[@name='RFC']">
    2311           <xsl:text>, &lt;</xsl:text>
    2312           <xsl:variable name="uri" select="concat('http://www.rfc-editor.org/info/rfc',seriesInfo[@name='RFC']/@value)"/>
    2313           <a href="{$uri}"><xsl:value-of select="$uri"/></a>
    2314           <xsl:text>&gt;</xsl:text>
    2315         </xsl:when>
    2316         <xsl:otherwise/>
    2317       </xsl:choose>
    2318 
    2319       <xsl:text>.</xsl:text>
    2320 
    2321       <xsl:for-each select="annotation">
    2322         <br />
    2323         <xsl:apply-templates />
    2324       </xsl:for-each>
    2325 
    2326     </td>
    2327   </tr>
    2328 
     2331      <xsl:text>, </xsl:text>
     2332      <xsl:if test="front/date/@month!=''"><xsl:value-of select="front/date/@month" />&#0160;</xsl:if>
     2333      <xsl:value-of select="front/date/@year" />
     2334    </xsl:if>
     2335
     2336    <xsl:choose>
     2337      <xsl:when test="string-length(normalize-space(@target)) &gt; 0">
     2338        <xsl:text>, &lt;</xsl:text>
     2339        <a href="{normalize-space(@target)}"><xsl:value-of select="normalize-space(@target)"/></a>
     2340        <xsl:text>&gt;</xsl:text>
     2341      </xsl:when>
     2342      <xsl:when test="$xml2rfc-ext-link-rfc-to-info-page='yes' and seriesInfo[@name='BCP'] and starts-with(@anchor, 'BCP')">
     2343        <xsl:text>, &lt;</xsl:text>
     2344        <xsl:variable name="uri" select="concat('http://www.rfc-editor.org/info/bcp',seriesInfo[@name='BCP']/@value)"/>
     2345        <a href="{$uri}"><xsl:value-of select="$uri"/></a>
     2346        <xsl:text>&gt;</xsl:text>
     2347      </xsl:when>
     2348      <xsl:when test="$xml2rfc-ext-link-rfc-to-info-page='yes' and seriesInfo[@name='RFC']">
     2349        <xsl:text>, &lt;</xsl:text>
     2350        <xsl:variable name="uri" select="concat('http://www.rfc-editor.org/info/rfc',seriesInfo[@name='RFC']/@value)"/>
     2351        <a href="{$uri}"><xsl:value-of select="$uri"/></a>
     2352        <xsl:text>&gt;</xsl:text>
     2353      </xsl:when>
     2354      <xsl:otherwise/>
     2355    </xsl:choose>
     2356
     2357    <xsl:text>.</xsl:text>
     2358
     2359    <xsl:for-each select="annotation">
     2360      <br />
     2361      <xsl:apply-templates />
     2362    </xsl:for-each>
     2363
     2364  </dd>
    23292365
    23302366</xsl:template>
     
    23952431    <xsl:variable name="anchorpref">
    23962432      <xsl:choose>
    2397         <xsl:when test="$elemtype='h1'"></xsl:when>
     2433        <xsl:when test="$elemtype='h2'"></xsl:when>
    23982434        <xsl:otherwise>.<xsl:value-of select="$name"/></xsl:otherwise>
    23992435      </xsl:choose>
     
    24092445  </xsl:element>
    24102446
    2411   <table>
     2447  <dl class="{$css-reference}">
    24122448    <xsl:choose>
    24132449      <xsl:when test="$xml2rfc-sortrefs='yes' and $xml2rfc-symrefs!='no'">
     
    24202456      </xsl:otherwise>
    24212457    </xsl:choose>
    2422   </table>
     2458  </dl>
    24232459
    24242460</xsl:template>
     
    28142850
    28152851  <xsl:if test="$xml2rfc-ext-insert-metadata='yes' and $rfcno!='' and @anchor='rfc.status'">
    2816     <div id="{$anchor-prefix}.meta" class="docstatus"></div>
     2852    <div id="{$anchor-prefix}.meta" class="{$css-docstatus}"></div>
    28172853  </xsl:if>
    28182854  <div>
     
    38533889      <xsl:if test="$pos &lt; count($lc/myns:item) + 1 or $pos &lt; count($rc/myns:item) + 1">
    38543890        <tr>
    3855           <td class="left"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$lc/myns:item[$pos]/node()" /></xsl:call-template></td>
    3856           <td class="right"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$rc/myns:item[$pos]/node()" /></xsl:call-template></td>
     3891          <td class="{$css-left}"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$lc/myns:item[$pos]/node()" /></xsl:call-template></td>
     3892          <td class="{$css-right}"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$rc/myns:item[$pos]/node()" /></xsl:call-template></td>
    38573893        </tr>
    38583894      </xsl:if>
     
    44504486function initFeedback() {
    44514487  var fb = document.createElement("div");
    4452   fb.className = "feedback <xsl:value-of select="$css-noprint"/>";
     4488  fb.className = "<xsl:value-of select="concat($css-feedback,' ',$css-noprint)"/>";
    44534489  fb.setAttribute("onclick", "feedback();");
    44544490  fb.appendChild(document.createTextNode("feedback"));
     
    44584494
    44594495function feedback() {
    4460   toggleButtonsToElementsByName("h1");
    44614496  toggleButtonsToElementsByName("h2");
    44624497  toggleButtonsToElementsByName("h3");
    44634498  toggleButtonsToElementsByName("h4");
     4499  toggleButtonsToElementsByName("h5");
    44644500
    44654501  buttonsAdded = !buttonsAdded;
     
    45164552
    45174553    var button = document.createElement("a");
    4518     button.className = "fbbutton <xsl:value-of select="$css-noprint"/>";
     4554    button.className = "<xsl:value-of select="concat($css-fbbutton,' ',$css-noprint)"/>";
    45194555    button.setAttribute("href", uri);
    45204556    button.appendChild(document.createTextNode("send feedback"));
     
    45254561    for (var i = 0; i &lt; buttons.length; i++) {
    45264562      var b = buttons.item(i);
    4527       if (b.className == "fbbutton <xsl:value-of select="$css-noprint"/>") {
     4563      if (b.className == "<xsl:value-of select="concat($css-fbbutton,' ',$css-noprint)"/>") {
    45284564        node.removeChild(b);
    45294565      }
     
    45374573
    45384574  var xhr = new XMLHttpRequest();
    4539   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     4575  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     4576  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    45404577  xhr.onload = function (e) {
    45414578    if (xhr.readyState === 4) {
     
    46864723  font-style: normal;
    46874724}<xsl:if test="//x:note|//aside">
    4688 div.note {
     4725div.<xsl:value-of select="$css-note"/> {
    46894726  margin-left: 2em;
    46904727}</xsl:if>
     
    47164753dl p {
    47174754  margin-left: 0em;
     4755}
     4756dl.<xsl:value-of select="$css-reference"/> > dt {
     4757  font-weight: bold;
     4758}
     4759dl.<xsl:value-of select="$css-reference"/> > dd {
     4760  margin-left: 6em;
    47184761}
    47194762h1 {
     
    48884931}
    48894932</xsl:if>
    4890 table.header {
     4933table.<xsl:value-of select="$css-header"/> {
    48914934  border-spacing: 1px;
    48924935  width: 95%;
     
    49014944  white-space: nowrap;
    49024945}
    4903 table.header td {
     4946table.<xsl:value-of select="$css-header"/> td {
    49044947  background-color: gray;
    49054948  width: 50%;
    49064949}<xsl:if test="/rfc/@obsoletes | /rfc/@updates">
    4907 table.header a {
     4950table.<xsl:value-of select="$css-header"/> a {
    49084951  color: white;
    49094952}</xsl:if>
    4910 td.reference {
    4911   vertical-align: top;
    4912   white-space: nowrap;
    4913   padding-right: 1em;
    4914 }
    49154953thead {
    49164954  display:table-header-group;
     
    50015039  font-weight: bold;
    50025040}
    5003 .left {
     5041.<xsl:value-of select="$css-left"/> {
    50045042  text-align: left;
    50055043}
    5006 .right {
     5044.<xsl:value-of select="$css-right"/> {
    50075045  text-align: right;
    50085046}
     
    51005138  color: red;
    51015139  background: black;
    5102 }</xsl:if><xsl:if test="/rfc/x:feedback">.feedback {
     5140}</xsl:if><xsl:if test="/rfc/x:feedback">.<xsl:value-of select="$css-feedback"/> {
    51035141  position: fixed;
    51045142  bottom: 1%;
     
    51135151  -ms-user-select: none;
    51145152}
    5115 .fbbutton {
     5153.<xsl:value-of select="$css-fbbutton"/> {
    51165154  margin-left: 1em;
    51175155  color: #303030;
     
    51265164  text-align: justify;
    51275165}</xsl:if><xsl:if test="$xml2rfc-ext-insert-metadata='yes' and $rfcno!=''">
    5128 .docstatus {
     5166.<xsl:value-of select="$css-docstatus"/> {
    51295167  border: 1px solid black;
    51305168  display: none;
     
    51335171  padding: 1em;
    51345172}</xsl:if><xsl:if test="$published-as-rfc">
    5135 .publishedasrfc {
     5173.<xsl:value-of select="$css-publishedasrfc"/> {
    51365174  background-color: yellow;
    51375175  color: green;
     
    51565194  }
    51575195
    5158   table.header {
     5196  table.<xsl:value-of select="$css-header"/> {
    51595197    width: 90%;
    51605198  }
    51615199
    5162   td.header {
     5200  td.<xsl:value-of select="$css-header"/> {
    51635201    width: 50%;
    51645202    color: black;
     
    68006838  </xsl:variable>
    68016839
    6802   <div class="note">
     6840  <div class="{$css-note}">
    68036841    <xsl:call-template name="copy-anchor"/>
    68046842    <div>
     
    78047842                  </xsl:when>
    78057843                  <xsl:when test="$col/@align='left' or not($col/@align)">
    7806                     <xsl:attribute name="class">left</xsl:attribute>
     7844                    <xsl:attribute name="class"><xsl:value-of select="$css-left"/></xsl:attribute>
    78077845                  </xsl:when>
    78087846                  <xsl:otherwise>
     
    80758113    <xsl:text>http://greenbytes.de/tech/webdav/rfc2629.xslt, </xsl:text>
    80768114    <!-- when RCS keyword substitution in place, add version info -->
    8077     <xsl:if test="contains('$Revision: 1.743 $',':')">
    8078       <xsl:value-of select="concat('Revision ',normalize-space(translate(substring-after('$Revision: 1.743 $', 'Revision: '),'$','')),', ')" />
     8115    <xsl:if test="contains('$Revision: 1.754 $',':')">
     8116      <xsl:value-of select="concat('Revision ',normalize-space(translate(substring-after('$Revision: 1.754 $', 'Revision: '),'$','')),', ')" />
    80798117    </xsl:if>
    8080     <xsl:if test="contains('$Date: 2015/09/25 12:36:08 $',':')">
    8081       <xsl:value-of select="concat(normalize-space(translate(substring-after('$Date: 2015/09/25 12:36:08 $', 'Date: '),'$','')),', ')" />
     8118    <xsl:if test="contains('$Date: 2015/10/21 08:05:46 $',':')">
     8119      <xsl:value-of select="concat(normalize-space(translate(substring-after('$Date: 2015/10/21 08:05:46 $', 'Date: '),'$','')),', ')" />
    80828120    </xsl:if>
    80838121    <xsl:value-of select="concat('XSLT vendor: ',system-property('xsl:vendor'),' ',system-property('xsl:vendor-url'))" />
  • rfc2629xslt/rfc2629toXHTML.xslt

    r2740 r2743  
    212212
    213213<!-- WORK IN PROGRESS; ONLY A FEW CLASSES SUPPORTED FOR NOW -->
     214<xsl:variable name="css-docstatus"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'docstatus'"/></xsl:call-template></xsl:variable>
    214215<xsl:variable name="css-error"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'error'"/></xsl:call-template></xsl:variable>
     216<xsl:variable name="css-fbbutton"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'fbbutton'"/></xsl:call-template></xsl:variable>
     217<xsl:variable name="css-feedback"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'feedback'"/></xsl:call-template></xsl:variable>
     218<xsl:variable name="css-header"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'header'"/></xsl:call-template></xsl:variable>
     219<xsl:variable name="css-left"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'left'"/></xsl:call-template></xsl:variable>
    215220<xsl:variable name="css-noprint"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'noprint'"/></xsl:call-template></xsl:variable>
     221<xsl:variable name="css-note"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'note'"/></xsl:call-template></xsl:variable>
     222<xsl:variable name="css-publishedasrfc"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'publishedasrfc'"/></xsl:call-template></xsl:variable>
     223<xsl:variable name="css-reference"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'reference'"/></xsl:call-template></xsl:variable>
     224<xsl:variable name="css-right"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'right'"/></xsl:call-template></xsl:variable>
    216225<xsl:variable name="css-tcenter"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'tcenter'"/></xsl:call-template></xsl:variable>
    217226<xsl:variable name="css-tleft"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'tleft'"/></xsl:call-template></xsl:variable>
    218227<xsl:variable name="css-tright"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'tright'"/></xsl:call-template></xsl:variable>
    219228<xsl:variable name="css-tt"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'tt'"/></xsl:call-template></xsl:variable>
     229
    220230
    221231<!-- RFC-Editor site linking -->
     
    11351145    </xsl:variable>
    11361146    <!-- insert the collected information -->
    1137     <table xmlns="http://www.w3.org/1999/xhtml" class="header" id="{$anchor-prefix}.headerblock">
     1147    <table xmlns="http://www.w3.org/1999/xhtml" class="{$css-header}" id="{$anchor-prefix}.headerblock">
    11381148      <xsl:choose>
    11391149        <xsl:when test="function-available('exslt:node-set')">
     
    12311241  <!-- insert notice about update -->
    12321242  <xsl:if test="$published-as-rfc">
    1233     <p xmlns="http://www.w3.org/1999/xhtml" class="publishedasrfc">
     1243    <p xmlns="http://www.w3.org/1999/xhtml" class="{$css-publishedasrfc}">
    12341244      <b>Note:</b> a later version of this document has been published as <a href="{$published-as-rfc/@href}"><xsl:value-of select="$published-as-rfc/@title"/></a>.
    12351245    </p>
     
    18941904  <xsl:param name="ref"/>
    18951905
     1906  <xsl:variable name="bibtarget">
     1907    <xsl:choose>
     1908      <xsl:when test="starts-with($bib/@target,'http://www.rfc-editor.org/info/rfc') or starts-with($bib/@target,'https://www.rfc-editor.org/info/rfc') and $ref and ($ref/@x:sec or $ref/@x:rel or $ref/@section or $ref/@relative)">
     1909        <xsl:call-template name="warning">
     1910          <xsl:with-param name="msg">Ignoring @target <xsl:value-of select="$bib/@target"/> in link calculation</xsl:with-param>
     1911        </xsl:call-template>
     1912      </xsl:when>
     1913      <xsl:otherwise>
     1914        <xsl:value-of select="$bib/@target"/>
     1915      </xsl:otherwise>
     1916    </xsl:choose>
     1917  </xsl:variable>
     1918 
    18961919  <xsl:choose>
    1897     <xsl:when test="$bib/@target">
    1898       <xsl:if test="$ref and $ref/@x:sec and $ref/@x:rel">
    1899         <xsl:value-of select="concat($bib/@target,$ref/@x:rel)"/>
     1920    <xsl:when test="$bibtarget!=''">
     1921      <xsl:if test="$ref and $ref/@x:sec">
     1922        <xsl:choose>
     1923          <xsl:when test="$ref/@x:rel">
     1924            <xsl:value-of select="concat($bib/@target,$ref/@x:rel)"/>
     1925          </xsl:when>
     1926          <xsl:otherwise>
     1927            <xsl:call-template name="warning">
     1928              <xsl:with-param name="msg">Can't generate section link for to <xsl:value-of select="$bib/@anchor"/>; no @x:rel specified</xsl:with-param>
     1929            </xsl:call-template>
     1930          </xsl:otherwise>
     1931        </xsl:choose>
    19001932      </xsl:if>
    1901       <xsl:if test="$ref and $ref/@section and $ref/@relative">
    1902         <xsl:value-of select="concat($bib/@target,$ref/@relative)"/>
     1933      <xsl:if test="$ref and $ref/@section">
     1934        <xsl:choose>
     1935          <xsl:when test="$ref/@relative">
     1936            <xsl:value-of select="concat($bib/@target,$ref/@relative)"/>
     1937          </xsl:when>
     1938          <xsl:otherwise>
     1939            <xsl:call-template name="warning">
     1940              <xsl:with-param name="msg">Can't generate section link for to <xsl:value-of select="$bib/@anchor"/>; no @relative specified</xsl:with-param>
     1941            </xsl:call-template>
     1942          </xsl:otherwise>
     1943        </xsl:choose>
    19031944      </xsl:if>
    19041945    </xsl:when>
     
    19852026  </xsl:variable>
    19862027
    1987   <tr xmlns="http://www.w3.org/1999/xhtml">
    1988     <td class="reference">
    1989       <xsl:call-template name="insertInsDelClass"/>
    1990       <xsl:variable name="del-node" select="ancestor::ed:del"/>
    1991       <xsl:variable name="rep-node" select="ancestor::ed:replace"/>
    1992       <xsl:variable name="deleted" select="$del-node and ($rep-node/ed:ins)"/>
    1993       <xsl:for-each select="../..">
    1994         <xsl:call-template name="insert-issue-pointer">
    1995           <xsl:with-param name="deleted-anchor" select="$deleted"/>
     2028  <dt xmlns="http://www.w3.org/1999/xhtml" id="{@anchor}">
     2029    <xsl:call-template name="insertInsDelClass"/>
     2030    <xsl:variable name="del-node" select="ancestor::ed:del"/>
     2031    <xsl:variable name="rep-node" select="ancestor::ed:replace"/>
     2032    <xsl:variable name="deleted" select="$del-node and ($rep-node/ed:ins)"/>
     2033    <xsl:for-each select="../..">
     2034      <xsl:call-template name="insert-issue-pointer">
     2035        <xsl:with-param name="deleted-anchor" select="$deleted"/>
     2036      </xsl:call-template>
     2037    </xsl:for-each>
     2038    <xsl:call-template name="reference-name"/>
     2039  </dt>
     2040
     2041  <dd xmlns="http://www.w3.org/1999/xhtml">
     2042    <xsl:call-template name="insertInsDelClass"/>
     2043    <xsl:for-each select="front/author">
     2044      <xsl:variable name="initials">
     2045        <xsl:call-template name="format-initials"/>
     2046      </xsl:variable>
     2047      <xsl:variable name="truncated-initials">
     2048        <xsl:call-template name="truncate-initials">
     2049          <xsl:with-param name="initials" select="$initials"/>
    19962050        </xsl:call-template>
    1997       </xsl:for-each>
    1998       <b id="{@anchor}">
    1999         <xsl:call-template name="reference-name"/>
    2000       </b>
    2001     </td>
    2002 
    2003     <td class="top">
    2004       <xsl:call-template name="insertInsDelClass"/>
    2005       <xsl:for-each select="front/author">
    2006         <xsl:variable name="initials">
    2007           <xsl:call-template name="format-initials"/>
    2008         </xsl:variable>
    2009         <xsl:variable name="truncated-initials">
    2010           <xsl:call-template name="truncate-initials">
    2011             <xsl:with-param name="initials" select="$initials"/>
    2012           </xsl:call-template>
    2013         </xsl:variable>
    2014 
    2015         <xsl:choose>
    2016           <xsl:when test="@surname and @surname!=''">
    2017             <xsl:variable name="displayname">
    2018               <!-- surname/initials is reversed for last author except when it's the only one -->
    2019               <xsl:choose>
    2020                 <xsl:when test="$truncated-initials='' and @surname">
    2021                   <xsl:value-of select="@surname"/>
    2022                 </xsl:when>
    2023                 <xsl:when test="position()=last() and position()!=1">
    2024                   <xsl:value-of select="concat($truncated-initials,' ',@surname)"/>
    2025                 </xsl:when>
    2026                 <xsl:otherwise>
    2027                   <xsl:value-of select="concat(@surname,', ',$truncated-initials)"/>
    2028                 </xsl:otherwise>
    2029               </xsl:choose>
    2030               <xsl:if test="@role='editor'">
    2031                 <xsl:text>, Ed.</xsl:text>
    2032               </xsl:if>
    2033             </xsl:variable>
     2051      </xsl:variable>
     2052
     2053      <xsl:choose>
     2054        <xsl:when test="@surname and @surname!=''">
     2055          <xsl:variable name="displayname">
     2056            <!-- surname/initials is reversed for last author except when it's the only one -->
    20342057            <xsl:choose>
    2035               <xsl:when test="address/email and $xml2rfc-linkmailto!='no'">
    2036                 <a href="mailto:{address/email}"><xsl:value-of select="$displayname"/></a>
     2058              <xsl:when test="$truncated-initials='' and @surname">
     2059                <xsl:value-of select="@surname"/>
     2060              </xsl:when>
     2061              <xsl:when test="position()=last() and position()!=1">
     2062                <xsl:value-of select="concat($truncated-initials,' ',@surname)"/>
    20372063              </xsl:when>
    20382064              <xsl:otherwise>
    2039                 <xsl:value-of select="$displayname"/>
     2065                <xsl:value-of select="concat(@surname,', ',$truncated-initials)"/>
    20402066              </xsl:otherwise>
    20412067            </xsl:choose>
    2042 
    2043             <xsl:choose>
    2044               <xsl:when test="position()=last() - 1">
    2045                 <xsl:if test="last() &gt; 2">,</xsl:if>
    2046                 <xsl:text> and </xsl:text>
    2047               </xsl:when>
    2048               <xsl:otherwise>
    2049                 <xsl:text>, </xsl:text>
    2050               </xsl:otherwise>
    2051             </xsl:choose>
    2052           </xsl:when>
    2053           <xsl:when test="organization/text()">
    2054             <xsl:choose>
    2055               <xsl:when test="address/uri">
    2056                 <a href="{address/uri}"><xsl:value-of select="organization"/></a>
    2057               </xsl:when>
    2058               <xsl:otherwise>
    2059                 <xsl:value-of select="organization"/>
    2060               </xsl:otherwise>
    2061             </xsl:choose>
    2062 
    2063             <xsl:choose>
    2064               <xsl:when test="position()=last() - 1">
    2065                 <xsl:if test="last() &gt; 2">,</xsl:if>
    2066                 <xsl:text> and </xsl:text>
    2067               </xsl:when>
    2068               <xsl:otherwise>
    2069                 <xsl:text>, </xsl:text>
    2070               </xsl:otherwise>
    2071             </xsl:choose>
    2072           </xsl:when>
    2073           <xsl:otherwise/>
    2074         </xsl:choose>
    2075       </xsl:for-each>
    2076 
    2077       <xsl:variable name="quoted" select="not(front/title/@x:quotes='false') and not(@quoteTitle='false')"/>
    2078       <xsl:if test="$quoted">&#8220;</xsl:if>
    2079       <xsl:choose>
    2080         <xsl:when test="string-length($target) &gt; 0">
    2081           <a href="{$target}"><xsl:value-of select="normalize-space(front/title)"/></a>
     2068            <xsl:if test="@role='editor'">
     2069              <xsl:text>, Ed.</xsl:text>
     2070            </xsl:if>
     2071          </xsl:variable>
     2072          <xsl:choose>
     2073            <xsl:when test="address/email and $xml2rfc-linkmailto!='no'">
     2074              <a href="mailto:{address/email}"><xsl:value-of select="$displayname"/></a>
     2075            </xsl:when>
     2076            <xsl:otherwise>
     2077              <xsl:value-of select="$displayname"/>
     2078            </xsl:otherwise>
     2079          </xsl:choose>
     2080
     2081          <xsl:choose>
     2082            <xsl:when test="position()=last() - 1">
     2083              <xsl:if test="last() &gt; 2">,</xsl:if>
     2084              <xsl:text> and </xsl:text>
     2085            </xsl:when>
     2086            <xsl:otherwise>
     2087              <xsl:text>, </xsl:text>
     2088            </xsl:otherwise>
     2089          </xsl:choose>
    20822090        </xsl:when>
    2083         <xsl:otherwise>
    2084           <xsl:value-of select="normalize-space(front/title)"/>
    2085         </xsl:otherwise>
    2086       </xsl:choose>
    2087       <xsl:if test="$quoted">&#8221;</xsl:if>
    2088 
    2089       <xsl:variable name="rfcs" select="count(seriesInfo[@name='RFC'])"/>
    2090 
    2091       <xsl:variable name="doi">
    2092         <xsl:call-template name="compute-doi"/>
    2093       </xsl:variable>
    2094 
    2095       <xsl:for-each select="seriesInfo">
    2096         <xsl:text>, </xsl:text>
    2097         <xsl:choose>
    2098           <xsl:when test="not(@name) and not(@value) and ./text()"><xsl:value-of select="."/></xsl:when>
    2099           <xsl:when test="@name='RFC' and $rfcs &gt; 1">
    2100             <a href="{concat($rfcUrlPrefix,@value,$rfcUrlPostfix)}">
    2101               <xsl:value-of select="@name"/>
    2102               <xsl:if test="@value!=''"> <xsl:value-of select="@value"/></xsl:if>
    2103             </a>
    2104           </xsl:when>
    2105           <xsl:when test="@name='DOI'">
    2106             <a href="http://dx.doi.org/{@value}">
    2107               <xsl:value-of select="@name"/>
    2108               <xsl:if test="@value!=''"> <xsl:value-of select="@value"/></xsl:if>
    2109             </a>
    2110             <xsl:if test="$doi!='' and $doi!=@value">
    2111               <xsl:call-template name="warning">
    2112                 <xsl:with-param name="msg">Unexpected DOI for RFC, found <xsl:value-of select="@value"/>, expected <xsl:value-of select="$doi"/></xsl:with-param>
    2113               </xsl:call-template>
    2114             </xsl:if>
    2115           </xsl:when>
    2116           <xsl:when test="@name='Internet-Draft' and $rfcno &gt; 7375">
    2117             <!-- special case in RFC formatting since 2015 -->           
    2118             <xsl:text>Work in Progress, </xsl:text>
    2119             <xsl:value-of select="@value"/>
    2120           </xsl:when>
    2121           <xsl:otherwise>
    2122             <xsl:value-of select="@name"/>
    2123             <xsl:if test="@value!=''"> <xsl:value-of select="@value"/></xsl:if>
    2124             <xsl:if test="translate(@name,$ucase,$lcase)='internet-draft'"> (work in progress)</xsl:if>
    2125           </xsl:otherwise>
    2126         </xsl:choose>
    2127 
    2128         <!-- check that BCP FYI STD RFC are in the right order -->
    2129         <xsl:if test="(@name='BCP' or @name='FYI' or @name='STD') and preceding-sibling::seriesInfo[@name='RFC']">
    2130           <xsl:call-template name="warning">
    2131             <xsl:with-param name="msg">RFC number preceding <xsl:value-of select="@name"/> number in reference '<xsl:value-of select="../@anchor"/>'</xsl:with-param>
    2132           </xsl:call-template>
    2133         </xsl:if>
    2134 
    2135       </xsl:for-each>
    2136 
    2137       <!-- Insert DOI for RFCs -->
    2138       <xsl:if test="$xml2rfc-ext-insert-doi='yes' and $doi!='' and not(seriesInfo[@name='DOI'])">
    2139         <xsl:text>, </xsl:text>
    2140         <a href="http://dx.doi.org/{$doi}">DOI <xsl:value-of select="$doi"/></a>
    2141       </xsl:if>
    2142 
    2143       <!-- avoid hacks using seriesInfo when it's not really series information -->
    2144       <xsl:for-each select="x:prose|refcontent">
    2145         <xsl:text>, </xsl:text>
    2146         <xsl:apply-templates/>
    2147       </xsl:for-each>
    2148 
    2149       <xsl:if test="not(front/date)">
    2150         <xsl:call-template name="warning">
    2151           <xsl:with-param name="msg">&lt;date&gt; missing in reference '<xsl:value-of select="@anchor"/>' (note that it can be empty)</xsl:with-param>
    2152         </xsl:call-template>
    2153       </xsl:if>
    2154 
    2155       <xsl:if test="front/date/@year != ''">
    2156         <xsl:if test="string(number(front/date/@year)) = 'NaN'">
    2157           <xsl:call-template name="warning">
    2158             <xsl:with-param name="msg">date/@year should be a number: '<xsl:value-of select="front/date/@year"/>' in reference '<xsl:value-of select="@anchor"/>'</xsl:with-param>
    2159           </xsl:call-template>
    2160         </xsl:if>
    2161         <xsl:text>, </xsl:text>
    2162         <xsl:if test="front/date/@month!=''"><xsl:value-of select="front/date/@month"/> </xsl:if>
    2163         <xsl:value-of select="front/date/@year"/>
    2164       </xsl:if>
    2165 
    2166       <xsl:choose>
    2167         <xsl:when test="string-length(normalize-space(@target)) &gt; 0">
    2168           <xsl:text>, &lt;</xsl:text>
    2169           <a href="{normalize-space(@target)}"><xsl:value-of select="normalize-space(@target)"/></a>
    2170           <xsl:text>&gt;</xsl:text>
    2171         </xsl:when>
    2172         <xsl:when test="$xml2rfc-ext-link-rfc-to-info-page='yes' and seriesInfo[@name='BCP'] and starts-with(@anchor, 'BCP')">
    2173           <xsl:text>, &lt;</xsl:text>
    2174           <xsl:variable name="uri" select="concat('http://www.rfc-editor.org/info/bcp',seriesInfo[@name='BCP']/@value)"/>
    2175           <a href="{$uri}"><xsl:value-of select="$uri"/></a>
    2176           <xsl:text>&gt;</xsl:text>
    2177         </xsl:when>
    2178         <xsl:when test="$xml2rfc-ext-link-rfc-to-info-page='yes' and seriesInfo[@name='RFC']">
    2179           <xsl:text>, &lt;</xsl:text>
    2180           <xsl:variable name="uri" select="concat('http://www.rfc-editor.org/info/rfc',seriesInfo[@name='RFC']/@value)"/>
    2181           <a href="{$uri}"><xsl:value-of select="$uri"/></a>
    2182           <xsl:text>&gt;</xsl:text>
     2091        <xsl:when test="organization/text()">
     2092          <xsl:choose>
     2093            <xsl:when test="address/uri">
     2094              <a href="{address/uri}"><xsl:value-of select="organization"/></a>
     2095            </xsl:when>
     2096            <xsl:otherwise>
     2097              <xsl:value-of select="organization"/>
     2098            </xsl:otherwise>
     2099          </xsl:choose>
     2100
     2101          <xsl:choose>
     2102            <xsl:when test="position()=last() - 1">
     2103              <xsl:if test="last() &gt; 2">,</xsl:if>
     2104              <xsl:text> and </xsl:text>
     2105            </xsl:when>
     2106            <xsl:otherwise>
     2107              <xsl:text>, </xsl:text>
     2108            </xsl:otherwise>
     2109          </xsl:choose>
    21832110        </xsl:when>
    21842111        <xsl:otherwise/>
    21852112      </xsl:choose>
    2186 
    2187       <xsl:text>.</xsl:text>
    2188 
    2189       <xsl:for-each select="annotation">
    2190         <br/>
    2191         <xsl:apply-templates/>
    2192       </xsl:for-each>
    2193 
    2194     </td>
    2195   </tr>
    2196 
     2113    </xsl:for-each>
     2114
     2115    <xsl:variable name="quoted" select="not(front/title/@x:quotes='false') and not(@quoteTitle='false')"/>
     2116    <xsl:if test="$quoted">&#8220;</xsl:if>
     2117    <xsl:choose>
     2118      <xsl:when test="string-length($target) &gt; 0">
     2119        <a href="{$target}"><xsl:value-of select="normalize-space(front/title)"/></a>
     2120      </xsl:when>
     2121      <xsl:otherwise>
     2122        <xsl:value-of select="normalize-space(front/title)"/>
     2123      </xsl:otherwise>
     2124    </xsl:choose>
     2125    <xsl:if test="$quoted">&#8221;</xsl:if>
     2126
     2127    <xsl:variable name="rfcs" select="count(seriesInfo[@name='RFC'])"/>
     2128
     2129    <xsl:variable name="doi">
     2130      <xsl:call-template name="compute-doi"/>
     2131    </xsl:variable>
     2132
     2133    <xsl:for-each select="seriesInfo">
     2134      <xsl:text>, </xsl:text>
     2135      <xsl:choose>
     2136        <xsl:when test="not(@name) and not(@value) and ./text()"><xsl:value-of select="."/></xsl:when>
     2137        <xsl:when test="@name='RFC' and $rfcs &gt; 1">
     2138          <a href="{concat($rfcUrlPrefix,@value,$rfcUrlPostfix)}">
     2139            <xsl:value-of select="@name"/>
     2140            <xsl:if test="@value!=''"> <xsl:value-of select="@value"/></xsl:if>
     2141          </a>
     2142        </xsl:when>
     2143        <xsl:when test="@name='DOI'">
     2144          <a href="http://dx.doi.org/{@value}">
     2145            <xsl:value-of select="@name"/>
     2146            <xsl:if test="@value!=''"> <xsl:value-of select="@value"/></xsl:if>
     2147          </a>
     2148          <xsl:if test="$doi!='' and $doi!=@value">
     2149            <xsl:call-template name="warning">
     2150              <xsl:with-param name="msg">Unexpected DOI for RFC, found <xsl:value-of select="@value"/>, expected <xsl:value-of select="$doi"/></xsl:with-param>
     2151            </xsl:call-template>
     2152          </xsl:if>
     2153        </xsl:when>
     2154        <xsl:when test="@name='Internet-Draft' and $rfcno &gt; 7375">
     2155          <!-- special case in RFC formatting since 2015 -->           
     2156          <xsl:text>Work in Progress, </xsl:text>
     2157          <xsl:value-of select="@value"/>
     2158        </xsl:when>
     2159        <xsl:otherwise>
     2160          <xsl:value-of select="@name"/>
     2161          <xsl:if test="@value!=''"> <xsl:value-of select="@value"/></xsl:if>
     2162          <xsl:if test="translate(@name,$ucase,$lcase)='internet-draft'"> (work in progress)</xsl:if>
     2163        </xsl:otherwise>
     2164      </xsl:choose>
     2165
     2166      <!-- check that BCP FYI STD RFC are in the right order -->
     2167      <xsl:if test="(@name='BCP' or @name='FYI' or @name='STD') and preceding-sibling::seriesInfo[@name='RFC']">
     2168        <xsl:call-template name="warning">
     2169          <xsl:with-param name="msg">RFC number preceding <xsl:value-of select="@name"/> number in reference '<xsl:value-of select="../@anchor"/>'</xsl:with-param>
     2170        </xsl:call-template>
     2171      </xsl:if>
     2172
     2173    </xsl:for-each>
     2174
     2175    <!-- Insert DOI for RFCs -->
     2176    <xsl:if test="$xml2rfc-ext-insert-doi='yes' and $doi!='' and not(seriesInfo[@name='DOI'])">
     2177      <xsl:text>, </xsl:text>
     2178      <a href="http://dx.doi.org/{$doi}">DOI <xsl:value-of select="$doi"/></a>
     2179    </xsl:if>
     2180
     2181    <!-- avoid hacks using seriesInfo when it's not really series information -->
     2182    <xsl:for-each select="x:prose|refcontent">
     2183      <xsl:text>, </xsl:text>
     2184      <xsl:apply-templates/>
     2185    </xsl:for-each>
     2186
     2187    <xsl:if test="not(front/date)">
     2188      <xsl:call-template name="warning">
     2189        <xsl:with-param name="msg">&lt;date&gt; missing in reference '<xsl:value-of select="@anchor"/>' (note that it can be empty)</xsl:with-param>
     2190      </xsl:call-template>
     2191    </xsl:if>
     2192
     2193    <xsl:if test="front/date/@year != ''">
     2194      <xsl:if test="string(number(front/date/@year)) = 'NaN'">
     2195        <xsl:call-template name="warning">
     2196          <xsl:with-param name="msg">date/@year should be a number: '<xsl:value-of select="front/date/@year"/>' in reference '<xsl:value-of select="@anchor"/>'</xsl:with-param>
     2197        </xsl:call-template>
     2198      </xsl:if>
     2199      <xsl:text>, </xsl:text>
     2200      <xsl:if test="front/date/@month!=''"><xsl:value-of select="front/date/@month"/> </xsl:if>
     2201      <xsl:value-of select="front/date/@year"/>
     2202    </xsl:if>
     2203
     2204    <xsl:choose>
     2205      <xsl:when test="string-length(normalize-space(@target)) &gt; 0">
     2206        <xsl:text>, &lt;</xsl:text>
     2207        <a href="{normalize-space(@target)}"><xsl:value-of select="normalize-space(@target)"/></a>
     2208        <xsl:text>&gt;</xsl:text>
     2209      </xsl:when>
     2210      <xsl:when test="$xml2rfc-ext-link-rfc-to-info-page='yes' and seriesInfo[@name='BCP'] and starts-with(@anchor, 'BCP')">
     2211        <xsl:text>, &lt;</xsl:text>
     2212        <xsl:variable name="uri" select="concat('http://www.rfc-editor.org/info/bcp',seriesInfo[@name='BCP']/@value)"/>
     2213        <a href="{$uri}"><xsl:value-of select="$uri"/></a>
     2214        <xsl:text>&gt;</xsl:text>
     2215      </xsl:when>
     2216      <xsl:when test="$xml2rfc-ext-link-rfc-to-info-page='yes' and seriesInfo[@name='RFC']">
     2217        <xsl:text>, &lt;</xsl:text>
     2218        <xsl:variable name="uri" select="concat('http://www.rfc-editor.org/info/rfc',seriesInfo[@name='RFC']/@value)"/>
     2219        <a href="{$uri}"><xsl:value-of select="$uri"/></a>
     2220        <xsl:text>&gt;</xsl:text>
     2221      </xsl:when>
     2222      <xsl:otherwise/>
     2223    </xsl:choose>
     2224
     2225    <xsl:text>.</xsl:text>
     2226
     2227    <xsl:for-each select="annotation">
     2228      <br/>
     2229      <xsl:apply-templates/>
     2230    </xsl:for-each>
     2231
     2232  </dd>
    21972233
    21982234</xsl:template>
     
    22632299    <xsl:variable name="anchorpref">
    22642300      <xsl:choose>
    2265         <xsl:when test="$elemtype='h1'"/>
     2301        <xsl:when test="$elemtype='h2'"/>
    22662302        <xsl:otherwise>.<xsl:value-of select="$name"/></xsl:otherwise>
    22672303      </xsl:choose>
     
    22772313  </xsl:element>
    22782314
    2279   <table xmlns="http://www.w3.org/1999/xhtml">
     2315  <dl xmlns="http://www.w3.org/1999/xhtml" class="{$css-reference}">
    22802316    <xsl:choose>
    22812317      <xsl:when test="$xml2rfc-sortrefs='yes' and $xml2rfc-symrefs!='no'">
     
    22882324      </xsl:otherwise>
    22892325    </xsl:choose>
    2290   </table>
     2326  </dl>
    22912327
    22922328</xsl:template>
     
    26822718
    26832719  <xsl:if test="$xml2rfc-ext-insert-metadata='yes' and $rfcno!='' and @anchor='rfc.status'">
    2684     <div xmlns="http://www.w3.org/1999/xhtml" id="{$anchor-prefix}.meta" class="docstatus"/>
     2720    <div xmlns="http://www.w3.org/1999/xhtml" id="{$anchor-prefix}.meta" class="{$css-docstatus}"/>
    26852721  </xsl:if>
    26862722  <div xmlns="http://www.w3.org/1999/xhtml">
     
    37213757      <xsl:if test="$pos &lt; count($lc/myns:item) + 1 or $pos &lt; count($rc/myns:item) + 1">
    37223758        <tr>
    3723           <td class="left"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$lc/myns:item[$pos]/node()"/></xsl:call-template></td>
    3724           <td class="right"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$rc/myns:item[$pos]/node()"/></xsl:call-template></td>
     3759          <td class="{$css-left}"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$lc/myns:item[$pos]/node()"/></xsl:call-template></td>
     3760          <td class="{$css-right}"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$rc/myns:item[$pos]/node()"/></xsl:call-template></td>
    37253761        </tr>
    37263762      </xsl:if>
     
    43184354function initFeedback() {
    43194355  var fb = document.createElement("div");
    4320   fb.className = "feedback <xsl:value-of select="$css-noprint"/>";
     4356  fb.className = "<xsl:value-of select="concat($css-feedback,' ',$css-noprint)"/>";
    43214357  fb.setAttribute("onclick", "feedback();");
    43224358  fb.appendChild(document.createTextNode("feedback"));
     
    43264362
    43274363function feedback() {
    4328   toggleButtonsToElementsByName("h1");
    43294364  toggleButtonsToElementsByName("h2");
    43304365  toggleButtonsToElementsByName("h3");
    43314366  toggleButtonsToElementsByName("h4");
     4367  toggleButtonsToElementsByName("h5");
    43324368
    43334369  buttonsAdded = !buttonsAdded;
     
    43844420
    43854421    var button = document.createElement("a");
    4386     button.className = "fbbutton <xsl:value-of select="$css-noprint"/>";
     4422    button.className = "<xsl:value-of select="concat($css-fbbutton,' ',$css-noprint)"/>";
    43874423    button.setAttribute("href", uri);
    43884424    button.appendChild(document.createTextNode("send feedback"));
     
    43934429    for (var i = 0; i &lt; buttons.length; i++) {
    43944430      var b = buttons.item(i);
    4395       if (b.className == "fbbutton <xsl:value-of select="$css-noprint"/>") {
     4431      if (b.className == "<xsl:value-of select="concat($css-fbbutton,' ',$css-noprint)"/>") {
    43964432        node.removeChild(b);
    43974433      }
     
    44054441
    44064442  var xhr = new XMLHttpRequest();
    4407   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     4443  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     4444  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    44084445  xhr.onload = function (e) {
    44094446    if (xhr.readyState === 4) {
     
    45544591  font-style: normal;
    45554592}<xsl:if test="//x:note|//aside">
    4556 div.note {
     4593div.<xsl:value-of select="$css-note"/> {
    45574594  margin-left: 2em;
    45584595}</xsl:if>
     
    45844621dl p {
    45854622  margin-left: 0em;
     4623}
     4624dl.<xsl:value-of select="$css-reference"/> &gt; dt {
     4625  font-weight: bold;
     4626}
     4627dl.<xsl:value-of select="$css-reference"/> &gt; dd {
     4628  margin-left: 6em;
    45864629}
    45874630h1 {
     
    47564799}
    47574800</xsl:if>
    4758 table.header {
     4801table.<xsl:value-of select="$css-header"/> {
    47594802  border-spacing: 1px;
    47604803  width: 95%;
     
    47694812  white-space: nowrap;
    47704813}
    4771 table.header td {
     4814table.<xsl:value-of select="$css-header"/> td {
    47724815  background-color: gray;
    47734816  width: 50%;
    47744817}<xsl:if test="/rfc/@obsoletes | /rfc/@updates">
    4775 table.header a {
     4818table.<xsl:value-of select="$css-header"/> a {
    47764819  color: white;
    47774820}</xsl:if>
    4778 td.reference {
    4779   vertical-align: top;
    4780   white-space: nowrap;
    4781   padding-right: 1em;
    4782 }
    47834821thead {
    47844822  display:table-header-group;
     
    48694907  font-weight: bold;
    48704908}
    4871 .left {
     4909.<xsl:value-of select="$css-left"/> {
    48724910  text-align: left;
    48734911}
    4874 .right {
     4912.<xsl:value-of select="$css-right"/> {
    48754913  text-align: right;
    48764914}
     
    49685006  color: red;
    49695007  background: black;
    4970 }</xsl:if><xsl:if test="/rfc/x:feedback">.feedback {
     5008}</xsl:if><xsl:if test="/rfc/x:feedback">.<xsl:value-of select="$css-feedback"/> {
    49715009  position: fixed;
    49725010  bottom: 1%;
     
    49815019  -ms-user-select: none;
    49825020}
    4983 .fbbutton {
     5021.<xsl:value-of select="$css-fbbutton"/> {
    49845022  margin-left: 1em;
    49855023  color: #303030;
     
    49945032  text-align: justify;
    49955033}</xsl:if><xsl:if test="$xml2rfc-ext-insert-metadata='yes' and $rfcno!=''">
    4996 .docstatus {
     5034.<xsl:value-of select="$css-docstatus"/> {
    49975035  border: 1px solid black;
    49985036  display: none;
     
    50015039  padding: 1em;
    50025040}</xsl:if><xsl:if test="$published-as-rfc">
    5003 .publishedasrfc {
     5041.<xsl:value-of select="$css-publishedasrfc"/> {
    50045042  background-color: yellow;
    50055043  color: green;
     
    50245062  }
    50255063
    5026   table.header {
     5064  table.<xsl:value-of select="$css-header"/> {
    50275065    width: 90%;
    50285066  }
    50295067
    5030   td.header {
     5068  td.<xsl:value-of select="$css-header"/> {
    50315069    width: 50%;
    50325070    color: black;
     
    66586696  </xsl:variable>
    66596697
    6660   <div xmlns="http://www.w3.org/1999/xhtml" class="note">
     6698  <div xmlns="http://www.w3.org/1999/xhtml" class="{$css-note}">
    66616699    <xsl:call-template name="copy-anchor"/>
    66626700    <div>
     
    76617699                  </xsl:when>
    76627700                  <xsl:when test="$col/@align='left' or not($col/@align)">
    7663                     <xsl:attribute name="class">left</xsl:attribute>
     7701                    <xsl:attribute name="class"><xsl:value-of select="$css-left"/></xsl:attribute>
    76647702                  </xsl:when>
    76657703                  <xsl:otherwise>
     
    79327970    <xsl:text>http://greenbytes.de/tech/webdav/rfc2629.xslt, </xsl:text>
    79337971    <!-- when RCS keyword substitution in place, add version info -->
    7934     <xsl:if test="contains('$Revision: 1.743 $',':')">
    7935       <xsl:value-of select="concat('Revision ',normalize-space(translate(substring-after('$Revision: 1.743 $', 'Revision: '),'$','')),', ')"/>
     7972    <xsl:if test="contains('$Revision: 1.754 $',':')">
     7973      <xsl:value-of select="concat('Revision ',normalize-space(translate(substring-after('$Revision: 1.754 $', 'Revision: '),'$','')),', ')"/>
    79367974    </xsl:if>
    7937     <xsl:if test="contains('$Date: 2015/09/25 12:36:08 $',':')">
    7938       <xsl:value-of select="concat(normalize-space(translate(substring-after('$Date: 2015/09/25 12:36:08 $', 'Date: '),'$','')),', ')"/>
     7975    <xsl:if test="contains('$Date: 2015/10/21 08:05:46 $',':')">
     7976      <xsl:value-of select="concat(normalize-space(translate(substring-after('$Date: 2015/10/21 08:05:46 $', 'Date: '),'$','')),', ')"/>
    79397977    </xsl:if>
    79407978    <xsl:value-of select="concat('XSLT vendor: ',system-property('xsl:vendor'),' ',system-property('xsl:vendor-url'))"/>
  • rfc2629xslt/samples/rfc2629.xslt

    r2740 r2743  
    256256
    257257<!-- WORK IN PROGRESS; ONLY A FEW CLASSES SUPPORTED FOR NOW -->
     258<xsl:variable name="css-docstatus"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'docstatus'"/></xsl:call-template></xsl:variable>
    258259<xsl:variable name="css-error"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'error'"/></xsl:call-template></xsl:variable>
     260<xsl:variable name="css-fbbutton"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'fbbutton'"/></xsl:call-template></xsl:variable>
     261<xsl:variable name="css-feedback"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'feedback'"/></xsl:call-template></xsl:variable>
     262<xsl:variable name="css-header"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'header'"/></xsl:call-template></xsl:variable>
     263<xsl:variable name="css-left"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'left'"/></xsl:call-template></xsl:variable>
    259264<xsl:variable name="css-noprint"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'noprint'"/></xsl:call-template></xsl:variable>
     265<xsl:variable name="css-note"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'note'"/></xsl:call-template></xsl:variable>
     266<xsl:variable name="css-publishedasrfc"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'publishedasrfc'"/></xsl:call-template></xsl:variable>
     267<xsl:variable name="css-reference"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'reference'"/></xsl:call-template></xsl:variable>
     268<xsl:variable name="css-right"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'right'"/></xsl:call-template></xsl:variable>
    260269<xsl:variable name="css-tcenter"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'tcenter'"/></xsl:call-template></xsl:variable>
    261270<xsl:variable name="css-tleft"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'tleft'"/></xsl:call-template></xsl:variable>
    262271<xsl:variable name="css-tright"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'tright'"/></xsl:call-template></xsl:variable>
    263272<xsl:variable name="css-tt"><xsl:call-template name="generate-css-class"><xsl:with-param name="name" select="'tt'"/></xsl:call-template></xsl:variable>
     273
    264274
    265275<!-- RFC-Editor site linking -->
     
    12671277    </xsl:variable>
    12681278    <!-- insert the collected information -->
    1269     <table class="header" id="{$anchor-prefix}.headerblock">
     1279    <table class="{$css-header}" id="{$anchor-prefix}.headerblock">
    12701280      <xsl:choose>
    12711281        <xsl:when test="function-available('exslt:node-set')">
     
    13631373  <!-- insert notice about update -->
    13641374  <xsl:if test="$published-as-rfc">
    1365     <p class="publishedasrfc">
     1375    <p class="{$css-publishedasrfc}">
    13661376      <b>Note:</b> a later version of this document has been published as <a href="{$published-as-rfc/@href}"><xsl:value-of select="$published-as-rfc/@title"/></a>.
    13671377    </p>
     
    20262036  <xsl:param name="ref"/>
    20272037
     2038  <xsl:variable name="bibtarget">
     2039    <xsl:choose>
     2040      <xsl:when test="starts-with($bib/@target,'http://www.rfc-editor.org/info/rfc') or starts-with($bib/@target,'https://www.rfc-editor.org/info/rfc') and $ref and ($ref/@x:sec or $ref/@x:rel or $ref/@section or $ref/@relative)">
     2041        <xsl:call-template name="warning">
     2042          <xsl:with-param name="msg">Ignoring @target <xsl:value-of select="$bib/@target"/> in link calculation</xsl:with-param>
     2043        </xsl:call-template>
     2044      </xsl:when>
     2045      <xsl:otherwise>
     2046        <xsl:value-of select="$bib/@target"/>
     2047      </xsl:otherwise>
     2048    </xsl:choose>
     2049  </xsl:variable>
     2050 
    20282051  <xsl:choose>
    2029     <xsl:when test="$bib/@target">
    2030       <xsl:if test="$ref and $ref/@x:sec and $ref/@x:rel">
    2031         <xsl:value-of select="concat($bib/@target,$ref/@x:rel)"/>
     2052    <xsl:when test="$bibtarget!=''">
     2053      <xsl:if test="$ref and $ref/@x:sec">
     2054        <xsl:choose>
     2055          <xsl:when test="$ref/@x:rel">
     2056            <xsl:value-of select="concat($bib/@target,$ref/@x:rel)"/>
     2057          </xsl:when>
     2058          <xsl:otherwise>
     2059            <xsl:call-template name="warning">
     2060              <xsl:with-param name="msg">Can't generate section link for to <xsl:value-of select="$bib/@anchor"/>; no @x:rel specified</xsl:with-param>
     2061            </xsl:call-template>
     2062          </xsl:otherwise>
     2063        </xsl:choose>
    20322064      </xsl:if>
    2033       <xsl:if test="$ref and $ref/@section and $ref/@relative">
    2034         <xsl:value-of select="concat($bib/@target,$ref/@relative)"/>
     2065      <xsl:if test="$ref and $ref/@section">
     2066        <xsl:choose>
     2067          <xsl:when test="$ref/@relative">
     2068            <xsl:value-of select="concat($bib/@target,$ref/@relative)"/>
     2069          </xsl:when>
     2070          <xsl:otherwise>
     2071            <xsl:call-template name="warning">
     2072              <xsl:with-param name="msg">Can't generate section link for to <xsl:value-of select="$bib/@anchor"/>; no @relative specified</xsl:with-param>
     2073            </xsl:call-template>
     2074          </xsl:otherwise>
     2075        </xsl:choose>
    20352076      </xsl:if>
    20362077    </xsl:when>
     
    21172158  </xsl:variable>
    21182159
    2119   <tr>
    2120     <td class="reference">
    2121       <xsl:call-template name="insertInsDelClass"/>
    2122       <xsl:variable name="del-node" select="ancestor::ed:del"/>
    2123       <xsl:variable name="rep-node" select="ancestor::ed:replace"/>
    2124       <xsl:variable name="deleted" select="$del-node and ($rep-node/ed:ins)"/>
    2125       <xsl:for-each select="../..">
    2126         <xsl:call-template name="insert-issue-pointer">
    2127           <xsl:with-param name="deleted-anchor" select="$deleted"/>
     2160  <dt id="{@anchor}">
     2161    <xsl:call-template name="insertInsDelClass"/>
     2162    <xsl:variable name="del-node" select="ancestor::ed:del"/>
     2163    <xsl:variable name="rep-node" select="ancestor::ed:replace"/>
     2164    <xsl:variable name="deleted" select="$del-node and ($rep-node/ed:ins)"/>
     2165    <xsl:for-each select="../..">
     2166      <xsl:call-template name="insert-issue-pointer">
     2167        <xsl:with-param name="deleted-anchor" select="$deleted"/>
     2168      </xsl:call-template>
     2169    </xsl:for-each>
     2170    <xsl:call-template name="reference-name"/>
     2171  </dt>
     2172
     2173  <dd>
     2174    <xsl:call-template name="insertInsDelClass"/>
     2175    <xsl:for-each select="front/author">
     2176      <xsl:variable name="initials">
     2177        <xsl:call-template name="format-initials"/>
     2178      </xsl:variable>
     2179      <xsl:variable name="truncated-initials">
     2180        <xsl:call-template name="truncate-initials">
     2181          <xsl:with-param name="initials" select="$initials"/>
    21282182        </xsl:call-template>
    2129       </xsl:for-each>
    2130       <b id="{@anchor}">
    2131         <xsl:call-template name="reference-name"/>
    2132       </b>
    2133     </td>
    2134 
    2135     <td class="top">
    2136       <xsl:call-template name="insertInsDelClass"/>
    2137       <xsl:for-each select="front/author">
    2138         <xsl:variable name="initials">
    2139           <xsl:call-template name="format-initials"/>
    2140         </xsl:variable>
    2141         <xsl:variable name="truncated-initials">
    2142           <xsl:call-template name="truncate-initials">
    2143             <xsl:with-param name="initials" select="$initials"/>
    2144           </xsl:call-template>
    2145         </xsl:variable>
    2146 
    2147         <xsl:choose>
    2148           <xsl:when test="@surname and @surname!=''">
    2149             <xsl:variable name="displayname">
    2150               <!-- surname/initials is reversed for last author except when it's the only one -->
    2151               <xsl:choose>
    2152                 <xsl:when test="$truncated-initials='' and @surname">
    2153                   <xsl:value-of select="@surname"/>
    2154                 </xsl:when>
    2155                 <xsl:when test="position()=last() and position()!=1">
    2156                   <xsl:value-of select="concat($truncated-initials,' ',@surname)" />
    2157                 </xsl:when>
    2158                 <xsl:otherwise>
    2159                   <xsl:value-of select="concat(@surname,', ',$truncated-initials)" />
    2160                 </xsl:otherwise>
    2161               </xsl:choose>
    2162               <xsl:if test="@role='editor'">
    2163                 <xsl:text>, Ed.</xsl:text>
    2164               </xsl:if>
    2165             </xsl:variable>
     2183      </xsl:variable>
     2184
     2185      <xsl:choose>
     2186        <xsl:when test="@surname and @surname!=''">
     2187          <xsl:variable name="displayname">
     2188            <!-- surname/initials is reversed for last author except when it's the only one -->
    21662189            <xsl:choose>
    2167               <xsl:when test="address/email and $xml2rfc-linkmailto!='no'">
    2168                 <a href="mailto:{address/email}"><xsl:value-of select="$displayname" /></a>
     2190              <xsl:when test="$truncated-initials='' and @surname">
     2191                <xsl:value-of select="@surname"/>
     2192              </xsl:when>
     2193              <xsl:when test="position()=last() and position()!=1">
     2194                <xsl:value-of select="concat($truncated-initials,' ',@surname)" />
    21692195              </xsl:when>
    21702196              <xsl:otherwise>
    2171                 <xsl:value-of select="$displayname" />
     2197                <xsl:value-of select="concat(@surname,', ',$truncated-initials)" />
    21722198              </xsl:otherwise>
    21732199            </xsl:choose>
    2174 
    2175             <xsl:choose>
    2176               <xsl:when test="position()=last() - 1">
    2177                 <xsl:if test="last() &gt; 2">,</xsl:if>
    2178                 <xsl:text> and </xsl:text>
    2179               </xsl:when>
    2180               <xsl:otherwise>
    2181                 <xsl:text>, </xsl:text>
    2182               </xsl:otherwise>
    2183             </xsl:choose>
    2184           </xsl:when>
    2185           <xsl:when test="organization/text()">
    2186             <xsl:choose>
    2187               <xsl:when test="address/uri">
    2188                 <a href="{address/uri}"><xsl:value-of select="organization" /></a>
    2189               </xsl:when>
    2190               <xsl:otherwise>
    2191                 <xsl:value-of select="organization" />
    2192               </xsl:otherwise>
    2193             </xsl:choose>
    2194 
    2195             <xsl:choose>
    2196               <xsl:when test="position()=last() - 1">
    2197                 <xsl:if test="last() &gt; 2">,</xsl:if>
    2198                 <xsl:text> and </xsl:text>
    2199               </xsl:when>
    2200               <xsl:otherwise>
    2201                 <xsl:text>, </xsl:text>
    2202               </xsl:otherwise>
    2203             </xsl:choose>
    2204           </xsl:when>
    2205           <xsl:otherwise />
    2206         </xsl:choose>
    2207       </xsl:for-each>
    2208 
    2209       <xsl:variable name="quoted" select="not(front/title/@x:quotes='false') and not(@quoteTitle='false')"/>
    2210       <xsl:if test="$quoted">&#8220;</xsl:if>
     2200            <xsl:if test="@role='editor'">
     2201              <xsl:text>, Ed.</xsl:text>
     2202            </xsl:if>
     2203          </xsl:variable>
     2204          <xsl:choose>
     2205            <xsl:when test="address/email and $xml2rfc-linkmailto!='no'">
     2206              <a href="mailto:{address/email}"><xsl:value-of select="$displayname" /></a>
     2207            </xsl:when>
     2208            <xsl:otherwise>
     2209              <xsl:value-of select="$displayname" />
     2210            </xsl:otherwise>
     2211          </xsl:choose>
     2212
     2213          <xsl:choose>
     2214            <xsl:when test="position()=last() - 1">
     2215              <xsl:if test="last() &gt; 2">,</xsl:if>
     2216              <xsl:text> and </xsl:text>
     2217            </xsl:when>
     2218            <xsl:otherwise>
     2219              <xsl:text>, </xsl:text>
     2220            </xsl:otherwise>
     2221          </xsl:choose>
     2222        </xsl:when>
     2223        <xsl:when test="organization/text()">
     2224          <xsl:choose>
     2225            <xsl:when test="address/uri">
     2226              <a href="{address/uri}"><xsl:value-of select="organization" /></a>
     2227            </xsl:when>
     2228            <xsl:otherwise>
     2229              <xsl:value-of select="organization" />
     2230            </xsl:otherwise>
     2231          </xsl:choose>
     2232
     2233          <xsl:choose>
     2234            <xsl:when test="position()=last() - 1">
     2235              <xsl:if test="last() &gt; 2">,</xsl:if>
     2236              <xsl:text> and </xsl:text>
     2237            </xsl:when>
     2238            <xsl:otherwise>
     2239              <xsl:text>, </xsl:text>
     2240            </xsl:otherwise>
     2241          </xsl:choose>
     2242        </xsl:when>
     2243        <xsl:otherwise />
     2244      </xsl:choose>
     2245    </xsl:for-each>
     2246
     2247    <xsl:variable name="quoted" select="not(front/title/@x:quotes='false') and not(@quoteTitle='false')"/>
     2248    <xsl:if test="$quoted">&#8220;</xsl:if>
     2249    <xsl:choose>
     2250      <xsl:when test="string-length($target) &gt; 0">
     2251        <a href="{$target}"><xsl:value-of select="normalize-space(front/title)" /></a>
     2252      </xsl:when>
     2253      <xsl:otherwise>
     2254        <xsl:value-of select="normalize-space(front/title)" />
     2255      </xsl:otherwise>
     2256    </xsl:choose>
     2257    <xsl:if test="$quoted">&#8221;</xsl:if>
     2258
     2259    <xsl:variable name="rfcs" select="count(seriesInfo[@name='RFC'])"/>
     2260
     2261    <xsl:variable name="doi">
     2262      <xsl:call-template name="compute-doi"/>
     2263    </xsl:variable>
     2264
     2265    <xsl:for-each select="seriesInfo">
     2266      <xsl:text>, </xsl:text>
    22112267      <xsl:choose>
    2212         <xsl:when test="string-length($target) &gt; 0">
    2213           <a href="{$target}"><xsl:value-of select="normalize-space(front/title)" /></a>
     2268        <xsl:when test="not(@name) and not(@value) and ./text()"><xsl:value-of select="." /></xsl:when>
     2269        <xsl:when test="@name='RFC' and $rfcs > 1">
     2270          <a href="{concat($rfcUrlPrefix,@value,$rfcUrlPostfix)}">
     2271            <xsl:value-of select="@name" />
     2272            <xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if>
     2273          </a>
     2274        </xsl:when>
     2275        <xsl:when test="@name='DOI'">
     2276          <a href="http://dx.doi.org/{@value}">
     2277            <xsl:value-of select="@name" />
     2278            <xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if>
     2279          </a>
     2280          <xsl:if test="$doi!='' and $doi!=@value">
     2281            <xsl:call-template name="warning">
     2282              <xsl:with-param name="msg">Unexpected DOI for RFC, found <xsl:value-of select="@value"/>, expected <xsl:value-of select="$doi"/></xsl:with-param>
     2283            </xsl:call-template>
     2284          </xsl:if>
     2285        </xsl:when>
     2286        <xsl:when test="@name='Internet-Draft' and $rfcno > 7375">
     2287          <!-- special case in RFC formatting since 2015 -->           
     2288          <xsl:text>Work in Progress, </xsl:text>
     2289          <xsl:value-of select="@value" />
    22142290        </xsl:when>
    22152291        <xsl:otherwise>
    2216           <xsl:value-of select="normalize-space(front/title)" />
     2292          <xsl:value-of select="@name" />
     2293          <xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if>
     2294          <xsl:if test="translate(@name,$ucase,$lcase)='internet-draft'"> (work in progress)</xsl:if>
    22172295        </xsl:otherwise>
    22182296      </xsl:choose>
    2219       <xsl:if test="$quoted">&#8221;</xsl:if>
    2220 
    2221       <xsl:variable name="rfcs" select="count(seriesInfo[@name='RFC'])"/>
    2222 
    2223       <xsl:variable name="doi">
    2224         <xsl:call-template name="compute-doi"/>
    2225       </xsl:variable>
    2226 
    2227       <xsl:for-each select="seriesInfo">
    2228         <xsl:text>, </xsl:text>
    2229         <xsl:choose>
    2230           <xsl:when test="not(@name) and not(@value) and ./text()"><xsl:value-of select="." /></xsl:when>
    2231           <xsl:when test="@name='RFC' and $rfcs > 1">
    2232             <a href="{concat($rfcUrlPrefix,@value,$rfcUrlPostfix)}">
    2233               <xsl:value-of select="@name" />
    2234               <xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if>
    2235             </a>
    2236           </xsl:when>
    2237           <xsl:when test="@name='DOI'">
    2238             <a href="http://dx.doi.org/{@value}">
    2239               <xsl:value-of select="@name" />
    2240               <xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if>
    2241             </a>
    2242             <xsl:if test="$doi!='' and $doi!=@value">
    2243               <xsl:call-template name="warning">
    2244                 <xsl:with-param name="msg">Unexpected DOI for RFC, found <xsl:value-of select="@value"/>, expected <xsl:value-of select="$doi"/></xsl:with-param>
    2245               </xsl:call-template>
    2246             </xsl:if>
    2247           </xsl:when>
    2248           <xsl:when test="@name='Internet-Draft' and $rfcno > 7375">
    2249             <!-- special case in RFC formatting since 2015 -->           
    2250             <xsl:text>Work in Progress, </xsl:text>
    2251             <xsl:value-of select="@value" />
    2252           </xsl:when>
    2253           <xsl:otherwise>
    2254             <xsl:value-of select="@name" />
    2255             <xsl:if test="@value!=''">&#0160;<xsl:value-of select="@value" /></xsl:if>
    2256             <xsl:if test="translate(@name,$ucase,$lcase)='internet-draft'"> (work in progress)</xsl:if>
    2257           </xsl:otherwise>
    2258         </xsl:choose>
    2259 
    2260         <!-- check that BCP FYI STD RFC are in the right order -->
    2261         <xsl:if test="(@name='BCP' or @name='FYI' or @name='STD') and preceding-sibling::seriesInfo[@name='RFC']">
    2262           <xsl:call-template name="warning">
    2263             <xsl:with-param name="msg">RFC number preceding <xsl:value-of select="@name"/> number in reference '<xsl:value-of select="../@anchor"/>'</xsl:with-param>
    2264           </xsl:call-template>
    2265         </xsl:if>
    2266 
    2267       </xsl:for-each>
    2268 
    2269       <!-- Insert DOI for RFCs -->
    2270       <xsl:if test="$xml2rfc-ext-insert-doi='yes' and $doi!='' and not(seriesInfo[@name='DOI'])">
    2271         <xsl:text>, </xsl:text>
    2272         <a href="http://dx.doi.org/{$doi}">DOI&#160;<xsl:value-of select="$doi"/></a>
    2273       </xsl:if>
    2274 
    2275       <!-- avoid hacks using seriesInfo when it's not really series information -->
    2276       <xsl:for-each select="x:prose|refcontent">
    2277         <xsl:text>, </xsl:text>
    2278         <xsl:apply-templates/>
    2279       </xsl:for-each>
    2280 
    2281       <xsl:if test="not(front/date)">
     2297
     2298      <!-- check that BCP FYI STD RFC are in the right order -->
     2299      <xsl:if test="(@name='BCP' or @name='FYI' or @name='STD') and preceding-sibling::seriesInfo[@name='RFC']">
    22822300        <xsl:call-template name="warning">
    2283           <xsl:with-param name="msg">&lt;date&gt; missing in reference '<xsl:value-of select="@anchor"/>' (note that it can be empty)</xsl:with-param>
     2301          <xsl:with-param name="msg">RFC number preceding <xsl:value-of select="@name"/> number in reference '<xsl:value-of select="../@anchor"/>'</xsl:with-param>
    22842302        </xsl:call-template>
    22852303      </xsl:if>
    22862304
    2287       <xsl:if test="front/date/@year != ''">
    2288         <xsl:if test="string(number(front/date/@year)) = 'NaN'">
    2289           <xsl:call-template name="warning">
    2290             <xsl:with-param name="msg">date/@year should be a number: '<xsl:value-of select="front/date/@year"/>' in reference '<xsl:value-of select="@anchor"/>'</xsl:with-param>
    2291           </xsl:call-template>
    2292         </xsl:if>
    2293         <xsl:text>, </xsl:text>
    2294         <xsl:if test="front/date/@month!=''"><xsl:value-of select="front/date/@month" />&#0160;</xsl:if>
    2295         <xsl:value-of select="front/date/@year" />
     2305    </xsl:for-each>
     2306
     2307    <!-- Insert DOI for RFCs -->
     2308    <xsl:if test="$xml2rfc-ext-insert-doi='yes' and $doi!='' and not(seriesInfo[@name='DOI'])">
     2309      <xsl:text>, </xsl:text>
     2310      <a href="http://dx.doi.org/{$doi}">DOI&#160;<xsl:value-of select="$doi"/></a>
     2311    </xsl:if>
     2312
     2313    <!-- avoid hacks using seriesInfo when it's not really series information -->
     2314    <xsl:for-each select="x:prose|refcontent">
     2315      <xsl:text>, </xsl:text>
     2316      <xsl:apply-templates/>
     2317    </xsl:for-each>
     2318
     2319    <xsl:if test="not(front/date)">
     2320      <xsl:call-template name="warning">
     2321        <xsl:with-param name="msg">&lt;date&gt; missing in reference '<xsl:value-of select="@anchor"/>' (note that it can be empty)</xsl:with-param>
     2322      </xsl:call-template>
     2323    </xsl:if>
     2324
     2325    <xsl:if test="front/date/@year != ''">
     2326      <xsl:if test="string(number(front/date/@year)) = 'NaN'">
     2327        <xsl:call-template name="warning">
     2328          <xsl:with-param name="msg">date/@year should be a number: '<xsl:value-of select="front/date/@year"/>' in reference '<xsl:value-of select="@anchor"/>'</xsl:with-param>
     2329        </xsl:call-template>
    22962330      </xsl:if>
    2297 
    2298       <xsl:choose>
    2299         <xsl:when test="string-length(normalize-space(@target)) &gt; 0">
    2300           <xsl:text>, &lt;</xsl:text>
    2301           <a href="{normalize-space(@target)}"><xsl:value-of select="normalize-space(@target)"/></a>
    2302           <xsl:text>&gt;</xsl:text>
    2303         </xsl:when>
    2304         <xsl:when test="$xml2rfc-ext-link-rfc-to-info-page='yes' and seriesInfo[@name='BCP'] and starts-with(@anchor, 'BCP')">
    2305           <xsl:text>, &lt;</xsl:text>
    2306           <xsl:variable name="uri" select="concat('http://www.rfc-editor.org/info/bcp',seriesInfo[@name='BCP']/@value)"/>
    2307           <a href="{$uri}"><xsl:value-of select="$uri"/></a>
    2308           <xsl:text>&gt;</xsl:text>
    2309         </xsl:when>
    2310         <xsl:when test="$xml2rfc-ext-link-rfc-to-info-page='yes' and seriesInfo[@name='RFC']">
    2311           <xsl:text>, &lt;</xsl:text>
    2312           <xsl:variable name="uri" select="concat('http://www.rfc-editor.org/info/rfc',seriesInfo[@name='RFC']/@value)"/>
    2313           <a href="{$uri}"><xsl:value-of select="$uri"/></a>
    2314           <xsl:text>&gt;</xsl:text>
    2315         </xsl:when>
    2316         <xsl:otherwise/>
    2317       </xsl:choose>
    2318 
    2319       <xsl:text>.</xsl:text>
    2320 
    2321       <xsl:for-each select="annotation">
    2322         <br />
    2323         <xsl:apply-templates />
    2324       </xsl:for-each>
    2325 
    2326     </td>
    2327   </tr>
    2328 
     2331      <xsl:text>, </xsl:text>
     2332      <xsl:if test="front/date/@month!=''"><xsl:value-of select="front/date/@month" />&#0160;</xsl:if>
     2333      <xsl:value-of select="front/date/@year" />
     2334    </xsl:if>
     2335
     2336    <xsl:choose>
     2337      <xsl:when test="string-length(normalize-space(@target)) &gt; 0">
     2338        <xsl:text>, &lt;</xsl:text>
     2339        <a href="{normalize-space(@target)}"><xsl:value-of select="normalize-space(@target)"/></a>
     2340        <xsl:text>&gt;</xsl:text>
     2341      </xsl:when>
     2342      <xsl:when test="$xml2rfc-ext-link-rfc-to-info-page='yes' and seriesInfo[@name='BCP'] and starts-with(@anchor, 'BCP')">
     2343        <xsl:text>, &lt;</xsl:text>
     2344        <xsl:variable name="uri" select="concat('http://www.rfc-editor.org/info/bcp',seriesInfo[@name='BCP']/@value)"/>
     2345        <a href="{$uri}"><xsl:value-of select="$uri"/></a>
     2346        <xsl:text>&gt;</xsl:text>
     2347      </xsl:when>
     2348      <xsl:when test="$xml2rfc-ext-link-rfc-to-info-page='yes' and seriesInfo[@name='RFC']">
     2349        <xsl:text>, &lt;</xsl:text>
     2350        <xsl:variable name="uri" select="concat('http://www.rfc-editor.org/info/rfc',seriesInfo[@name='RFC']/@value)"/>
     2351        <a href="{$uri}"><xsl:value-of select="$uri"/></a>
     2352        <xsl:text>&gt;</xsl:text>
     2353      </xsl:when>
     2354      <xsl:otherwise/>
     2355    </xsl:choose>
     2356
     2357    <xsl:text>.</xsl:text>
     2358
     2359    <xsl:for-each select="annotation">
     2360      <br />
     2361      <xsl:apply-templates />
     2362    </xsl:for-each>
     2363
     2364  </dd>
    23292365
    23302366</xsl:template>
     
    23952431    <xsl:variable name="anchorpref">
    23962432      <xsl:choose>
    2397         <xsl:when test="$elemtype='h1'"></xsl:when>
     2433        <xsl:when test="$elemtype='h2'"></xsl:when>
    23982434        <xsl:otherwise>.<xsl:value-of select="$name"/></xsl:otherwise>
    23992435      </xsl:choose>
     
    24092445  </xsl:element>
    24102446
    2411   <table>
     2447  <dl class="{$css-reference}">
    24122448    <xsl:choose>
    24132449      <xsl:when test="$xml2rfc-sortrefs='yes' and $xml2rfc-symrefs!='no'">
     
    24202456      </xsl:otherwise>
    24212457    </xsl:choose>
    2422   </table>
     2458  </dl>
    24232459
    24242460</xsl:template>
     
    28142850
    28152851  <xsl:if test="$xml2rfc-ext-insert-metadata='yes' and $rfcno!='' and @anchor='rfc.status'">
    2816     <div id="{$anchor-prefix}.meta" class="docstatus"></div>
     2852    <div id="{$anchor-prefix}.meta" class="{$css-docstatus}"></div>
    28172853  </xsl:if>
    28182854  <div>
     
    38533889      <xsl:if test="$pos &lt; count($lc/myns:item) + 1 or $pos &lt; count($rc/myns:item) + 1">
    38543890        <tr>
    3855           <td class="left"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$lc/myns:item[$pos]/node()" /></xsl:call-template></td>
    3856           <td class="right"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$rc/myns:item[$pos]/node()" /></xsl:call-template></td>
     3891          <td class="{$css-left}"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$lc/myns:item[$pos]/node()" /></xsl:call-template></td>
     3892          <td class="{$css-right}"><xsl:call-template name="copynodes"><xsl:with-param name="nodes" select="$rc/myns:item[$pos]/node()" /></xsl:call-template></td>
    38573893        </tr>
    38583894      </xsl:if>
     
    44504486function initFeedback() {
    44514487  var fb = document.createElement("div");
    4452   fb.className = "feedback <xsl:value-of select="$css-noprint"/>";
     4488  fb.className = "<xsl:value-of select="concat($css-feedback,' ',$css-noprint)"/>";
    44534489  fb.setAttribute("onclick", "feedback();");
    44544490  fb.appendChild(document.createTextNode("feedback"));
     
    44584494
    44594495function feedback() {
    4460   toggleButtonsToElementsByName("h1");
    44614496  toggleButtonsToElementsByName("h2");
    44624497  toggleButtonsToElementsByName("h3");
    44634498  toggleButtonsToElementsByName("h4");
     4499  toggleButtonsToElementsByName("h5");
    44644500
    44654501  buttonsAdded = !buttonsAdded;
     
    45164552
    45174553    var button = document.createElement("a");
    4518     button.className = "fbbutton <xsl:value-of select="$css-noprint"/>";
     4554    button.className = "<xsl:value-of select="concat($css-fbbutton,' ',$css-noprint)"/>";
    45194555    button.setAttribute("href", uri);
    45204556    button.appendChild(document.createTextNode("send feedback"));
     
    45254561    for (var i = 0; i &lt; buttons.length; i++) {
    45264562      var b = buttons.item(i);
    4527       if (b.className == "fbbutton <xsl:value-of select="$css-noprint"/>") {
     4563      if (b.className == "<xsl:value-of select="concat($css-fbbutton,' ',$css-noprint)"/>") {
    45284564        node.removeChild(b);
    45294565      }
     
    45374573
    45384574  var xhr = new XMLHttpRequest();
    4539   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     4575  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     4576  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    45404577  xhr.onload = function (e) {
    45414578    if (xhr.readyState === 4) {
     
    46864723  font-style: normal;
    46874724}<xsl:if test="//x:note|//aside">
    4688 div.note {
     4725div.<xsl:value-of select="$css-note"/> {
    46894726  margin-left: 2em;
    46904727}</xsl:if>
     
    47164753dl p {
    47174754  margin-left: 0em;
     4755}
     4756dl.<xsl:value-of select="$css-reference"/> > dt {
     4757  font-weight: bold;
     4758}
     4759dl.<xsl:value-of select="$css-reference"/> > dd {
     4760  margin-left: 6em;
    47184761}
    47194762h1 {
     
    48884931}
    48894932</xsl:if>
    4890 table.header {
     4933table.<xsl:value-of select="$css-header"/> {
    48914934  border-spacing: 1px;
    48924935  width: 95%;
     
    49014944  white-space: nowrap;
    49024945}
    4903 table.header td {
     4946table.<xsl:value-of select="$css-header"/> td {
    49044947  background-color: gray;
    49054948  width: 50%;
    49064949}<xsl:if test="/rfc/@obsoletes | /rfc/@updates">
    4907 table.header a {
     4950table.<xsl:value-of select="$css-header"/> a {
    49084951  color: white;
    49094952}</xsl:if>
    4910 td.reference {
    4911   vertical-align: top;
    4912   white-space: nowrap;
    4913   padding-right: 1em;
    4914 }
    49154953thead {
    49164954  display:table-header-group;
     
    50015039  font-weight: bold;
    50025040}
    5003 .left {
     5041.<xsl:value-of select="$css-left"/> {
    50045042  text-align: left;
    50055043}
    5006 .right {
     5044.<xsl:value-of select="$css-right"/> {
    50075045  text-align: right;
    50085046}
     
    51005138  color: red;
    51015139  background: black;
    5102 }</xsl:if><xsl:if test="/rfc/x:feedback">.feedback {
     5140}</xsl:if><xsl:if test="/rfc/x:feedback">.<xsl:value-of select="$css-feedback"/> {
    51035141  position: fixed;
    51045142  bottom: 1%;
     
    51135151  -ms-user-select: none;
    51145152}
    5115 .fbbutton {
     5153.<xsl:value-of select="$css-fbbutton"/> {
    51165154  margin-left: 1em;
    51175155  color: #303030;
     
    51265164  text-align: justify;
    51275165}</xsl:if><xsl:if test="$xml2rfc-ext-insert-metadata='yes' and $rfcno!=''">
    5128 .docstatus {
     5166.<xsl:value-of select="$css-docstatus"/> {
    51295167  border: 1px solid black;
    51305168  display: none;
     
    51335171  padding: 1em;
    51345172}</xsl:if><xsl:if test="$published-as-rfc">
    5135 .publishedasrfc {
     5173.<xsl:value-of select="$css-publishedasrfc"/> {
    51365174  background-color: yellow;
    51375175  color: green;
     
    51565194  }
    51575195
    5158   table.header {
     5196  table.<xsl:value-of select="$css-header"/> {
    51595197    width: 90%;
    51605198  }
    51615199
    5162   td.header {
     5200  td.<xsl:value-of select="$css-header"/> {
    51635201    width: 50%;
    51645202    color: black;
     
    68006838  </xsl:variable>
    68016839
    6802   <div class="note">
     6840  <div class="{$css-note}">
    68036841    <xsl:call-template name="copy-anchor"/>
    68046842    <div>
     
    78047842                  </xsl:when>
    78057843                  <xsl:when test="$col/@align='left' or not($col/@align)">
    7806                     <xsl:attribute name="class">left</xsl:attribute>
     7844                    <xsl:attribute name="class"><xsl:value-of select="$css-left"/></xsl:attribute>
    78077845                  </xsl:when>
    78087846                  <xsl:otherwise>
     
    80758113    <xsl:text>http://greenbytes.de/tech/webdav/rfc2629.xslt, </xsl:text>
    80768114    <!-- when RCS keyword substitution in place, add version info -->
    8077     <xsl:if test="contains('$Revision: 1.743 $',':')">
    8078       <xsl:value-of select="concat('Revision ',normalize-space(translate(substring-after('$Revision: 1.743 $', 'Revision: '),'$','')),', ')" />
     8115    <xsl:if test="contains('$Revision: 1.754 $',':')">
     8116      <xsl:value-of select="concat('Revision ',normalize-space(translate(substring-after('$Revision: 1.754 $', 'Revision: '),'$','')),', ')" />
    80798117    </xsl:if>
    8080     <xsl:if test="contains('$Date: 2015/09/25 12:36:08 $',':')">
    8081       <xsl:value-of select="concat(normalize-space(translate(substring-after('$Date: 2015/09/25 12:36:08 $', 'Date: '),'$','')),', ')" />
     8118    <xsl:if test="contains('$Date: 2015/10/21 08:05:46 $',':')">
     8119      <xsl:value-of select="concat(normalize-space(translate(substring-after('$Date: 2015/10/21 08:05:46 $', 'Date: '),'$','')),', ')" />
    80828120    </xsl:if>
    80838121    <xsl:value-of select="concat('XSLT vendor: ',system-property('xsl:vendor'),' ',system-property('xsl:vendor-url'))" />
  • rfc2629xslt/samples/sample.ipr.id.noDerivativesTrust200902.200909.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.id.noModification3978.200606.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.id.noModificationTrust200902.200909.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.id.pre5378Trust200902.200909.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.id.pre5378Trust200902.200912.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.id.pre5378Trust200902.201011.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.id.trust200902.200909.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.id.trust200902.200911.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.id.trust200902.201006.iab.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.id.trust200902.201006.ietf.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.id.trust200902.201006.ind.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.id.trust200902.201006.irtf.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.id.trust200902.201006.test.xhtml

    r2740 r2743  
    6565  margin-left: 0em;
    6666}
     67dl.reference &gt; dt {
     68  font-weight: bold;
     69}
     70dl.reference &gt; dd {
     71  margin-left: 6em;
     72}
    6773h1 {
    6874  color: green;
     
    165171  background-color: gray;
    166172  width: 50%;
    167 }
    168 td.reference {
    169   vertical-align: top;
    170   white-space: nowrap;
    171   padding-right: 1em;
    172173}
    173174thead {
  • rfc2629xslt/samples/sample.ipr.rfc.200201.iprnotified.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.200201.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.200609.ind.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.200609.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.200808.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.200812.nomod.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.200812.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.200906.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.200907.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.200909.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.200912.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.ietf.bcp.c.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.ietf.exp.c.nomod.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.ietf.exp.c.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.ietf.exp.nc.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.ietf.hist.c.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.ietf.hist.nc.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.ietf.inf.c.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.ietf.inf.nc.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.ietf.std.c.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.ind.exp.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.ind.hist.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.ind.inf.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.irtf.exp.c.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.irtf.exp.nc.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.irtf.exp.norg.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.irtf.hist.c.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.irtf.hist.nc.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.irtf.hist.norg.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.irtf.inf.c.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.irtf.inf.nc.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.201001.irtf.inf.norg.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/samples/sample.ipr.rfc.pre5378Trust200902.200912.test.xhtml

    r2740 r2743  
    1010
    1111  var xhr = new XMLHttpRequest();
    12   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     12  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     13  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1314  xhr.onload = function (e) {
    1415    if (xhr.readyState === 4) {
     
    170171  margin-left: 0em;
    171172}
     173dl.reference &gt; dt {
     174  font-weight: bold;
     175}
     176dl.reference &gt; dd {
     177  margin-left: 6em;
     178}
    172179h1 {
    173180  color: green;
     
    270277  background-color: gray;
    271278  width: 50%;
    272 }
    273 td.reference {
    274   vertical-align: top;
    275   white-space: nowrap;
    276   padding-right: 1em;
    277279}
    278280thead {
  • rfc2629xslt/testcase.html

    r2740 r2743  
    7070  margin-left: 0em;
    7171}
     72dl.reference > dt {
     73  font-weight: bold;
     74}
     75dl.reference > dd {
     76  margin-left: 6em;
     77}
    7278h1 {
    7379  color: green;
     
    250256table.header a {
    251257  color: white;
    252 }
    253 td.reference {
    254   vertical-align: top;
    255   white-space: nowrap;
    256   padding-right: 1em;
    257258}
    258259thead {
     
    415416  }
    416417  @top-right {
    417        content: "September 2015";
     418       content: "October 2015";
    418419  }
    419420  @top-center {
     
    442443    }
    443444}
    444 </style><link rel="Contents" href="#rfc.toc"><link rel="Author" href="#rfc.authors"><link rel="Index" href="#rfc.index"><link rel="Chapter" title="1 Lists" href="#rfc.section.1"><link rel="Chapter" title="2 spanx" href="#rfc.section.2"><link rel="Chapter" title="3 Tables" href="#rfc.section.3"><link rel="Chapter" title="4 Figures" href="#rfc.section.4"><link rel="Chapter" title="5 xrefs" href="#rfc.section.5"><link rel="Chapter" title="6 More References" href="#rfc.section.6"><link rel="Chapter" title="7 Paragraph formatting" href="#rfc.section.7"><link rel="Chapter" title="8 Sections" href="#rfc.section.8"><link rel="Chapter" title="9 Comments" href="#rfc.section.9"><link rel="Chapter" title="10 Artwork Width" href="#rfc.section.10"><link rel="Chapter" title="11 Extensions" href="#rfc.section.11"><link rel="Chapter" title="12 Blank Lines" href="#rfc.section.12"><link rel="Chapter" title="13 Other" href="#rfc.section.13"><link rel="Chapter" href="#rfc.section.14" title="14 References"><meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.742, 2015/09/24 15:44:12, XSLT vendor: SAXON 6.5.5 from Michael Kay http://saxon.sf.net/"><meta name="keywords" content="RFC2629, test case, xml2rfc"><link rel="schema.dct" href="http://purl.org/dc/terms/"><meta name="dct.creator" content="Reschke, J. F."></head><body><table class="header" id="rfc.headerblock"><tbody><tr><td class="left">XML2RFC Test Cases</td><td class="right">J. F. Reschke</td></tr><tr><td class="left"></td><td class="right">greenbytes</td></tr><tr><td class="left"></td><td class="right">September 2015</td></tr></tbody></table><div id="rfc.title"><h1>Test cases for XML2RFC formatting</h1></div><hr class="noprint"><div id="rfc.toc"><h2 class="np"><a href="#rfc.toc">Table of Contents</a></h2><ul class="toc"><li><a href="#rfc.section.1">1.</a>&nbsp;&nbsp;&nbsp;<a href="#lists">Lists</a><ul><li><a href="#rfc.section.1.1">1.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.1">hanging list</a><ul><li><a href="#rfc.section.1.1.1">1.1.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.1.1">default</a></li><li><a href="#rfc.section.1.1.2">1.1.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.1.2">hanging list with hangIndent 7</a></li><li><a href="#rfc.section.1.1.3">1.1.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.1.3">hanging list with hangIndent 0</a></li></ul></li><li><a href="#rfc.section.1.2">1.2</a>&nbsp;&nbsp;&nbsp;<a href="#ordered.list.numbers">numbered list</a></li><li><a href="#rfc.section.1.3">1.3</a>&nbsp;&nbsp;&nbsp;<a href="#ordered.list.letters">ordered list (letters)</a></li><li><a href="#rfc.section.1.4">1.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.4">no explicit counters</a></li><li><a href="#rfc.section.1.5">1.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.5">with explicit counters</a></li><li><a href="#rfc.section.1.6">1.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6">Nested lists</a><ul><li><a href="#rfc.section.1.6.1">1.6.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6.1">numbers/letters</a></li><li><a href="#rfc.section.1.6.2">1.6.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6.2">numbers/numbers</a></li><li><a href="#rfc.section.1.6.3">1.6.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6.3">letters/letters</a></li><li><a href="#rfc.section.1.6.4">1.6.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6.4">letters/letters/letters</a></li><li><a href="#rfc.section.1.6.5">1.6.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6.5">symbols/symbols/symbols</a></li><li><a href="#rfc.section.1.6.6">1.6.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6.6">hanging/hanging</a></li></ul></li><li><a href="#rfc.section.1.7">1.7</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.7">list without style</a></li><li><a href="#rfc.section.1.8">1.8</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.8">list with multiple paragraphs in a single list item</a></li><li><a href="#rfc.section.1.9">1.9</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9">style=format...</a><ul><li><a href="#rfc.section.1.9.1">1.9.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.1">lists with fancy formats: %c</a></li><li><a href="#rfc.section.1.9.2">1.9.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.2">lists with fancy formats: %C</a></li><li><a href="#rfc.section.1.9.3">1.9.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.3">lists with fancy formats: %d</a></li><li><a href="#rfc.section.1.9.4">1.9.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.4">lists with fancy formats: %i</a></li><li><a href="#rfc.section.1.9.5">1.9.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.5">lists with fancy formats: %I</a></li><li><a href="#rfc.section.1.9.6">1.9.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.6">lists with fancy formats: %o</a></li><li><a href="#rfc.section.1.9.7">1.9.7</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.7">lists with fancy formats: %x</a></li><li><a href="#rfc.section.1.9.8">1.9.8</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.8">lists with fancy formats: %X</a></li><li><a href="#rfc.section.1.9.9">1.9.9</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.9">lists with fancy formats: %% %d</a></li><li><a href="#rfc.section.1.9.10">1.9.10</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.10">lists with fancy formats: REQUIREMENT-%i plus hangIndent=20</a></li></ul></li><li><a href="#rfc.section.1.10">1.10</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.10">style inheritance</a></li></ul></li><li><a href="#rfc.section.2">2.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.2">spanx</a></li><li><a href="#rfc.section.3">3.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3">Tables</a><ul><li><a href="#rfc.section.3.1">3.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.1">no borders</a></li><li><a href="#rfc.section.3.2">3.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.2">borders around headers</a></li><li><a href="#rfc.section.3.3">3.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.3">example from xml2rc README</a></li><li><a href="#rfc.section.3.4">3.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.4">no column titles</a></li><li><a href="#rfc.section.3.5">3.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.5">referencing tables</a></li><li><a href="#rfc.section.3.6">3.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.6">table captions</a></li><li><a href="#rfc.section.3.7">3.7</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.7">single column</a></li><li><a href="#rfc.section.3.8">3.8</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.8">empty body</a></li><li><a href="#rfc.section.3.9">3.9</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.9">table alignment</a></li></ul></li><li><a href="#rfc.section.4">4.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4">Figures</a><ul><li><a href="#rfc.section.4.1">4.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.1">with preamble, no title...</a></li><li><a href="#rfc.section.4.2">4.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.2">with postamble and title...</a></li><li><a href="#rfc.section.4.3">4.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.3">Whitespace handling</a></li><li><a href="#rfc.section.4.4">4.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.4">Whitespace around figures</a></li><li><a href="#rfc.section.4.5">4.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.5">data URIs</a><ul><li><a href="#rfc.section.4.5.1">4.5.1</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.src.data.uri.alt.text">data URI as source (both @alt and text content)</a></li><li><a href="#rfc.section.4.5.2">4.5.2</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.src.data.uri.text">data URI as source (only text content, no @alt)</a></li><li><a href="#rfc.section.4.5.3">4.5.3</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.src.data.uri.alt">data URI as source (only @alt attribute)</a></li></ul></li><li><a href="#rfc.section.4.6">4.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.6">alignment</a><ul><li><a href="#rfc.section.4.6.1">4.6.1</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.align.left">left</a></li><li><a href="#rfc.section.4.6.2">4.6.2</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.align.right">right</a></li><li><a href="#rfc.section.4.6.3">4.6.3</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.align.center">center</a></li><li><a href="#rfc.section.4.6.4">4.6.4</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.align.default">default</a></li></ul></li><li><a href="#rfc.section.4.7">4.7</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.7">artwork width/height</a><ul><li><a href="#rfc.section.4.7.1">4.7.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.7.1">width50%</a></li><li><a href="#rfc.section.4.7.2">4.7.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.7.2">width50</a></li><li><a href="#rfc.section.4.7.3">4.7.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.7.3">height50</a></li><li><a href="#rfc.section.4.7.4">4.7.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.7.4">height30width60</a></li></ul></li><li><a href="#rfc.section.4.8">4.8</a>&nbsp;&nbsp;&nbsp;<a href="#figure.artwork.attribute.overlap">figure/artwork attribute overlap</a><ul><li><a href="#rfc.section.4.8.1">4.8.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.8.1">src overlap</a></li><li><a href="#rfc.section.4.8.2">4.8.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.8.2">align overlap</a></li><li><a href="#rfc.section.4.8.3">4.8.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.8.3">align inheritance</a></li></ul></li><li><a href="#rfc.section.4.9">4.9</a>&nbsp;&nbsp;&nbsp;<a href="#titles.numbering">titles/numbering</a><ul><li><a href="#rfc.section.4.9.1">4.9.1</a>&nbsp;&nbsp;&nbsp;<a href="#titles.numbering.just.anchor">just anchor</a></li><li><a href="#rfc.section.4.9.2">4.9.2</a>&nbsp;&nbsp;&nbsp;<a href="#titles.numbering.just.anchor.with.suppress">just anchor (with suppress)</a></li><li><a href="#rfc.section.4.9.3">4.9.3</a>&nbsp;&nbsp;&nbsp;<a href="#titles.numbering.just.title">just title</a></li><li><a href="#rfc.section.4.9.4">4.9.4</a>&nbsp;&nbsp;&nbsp;<a href="#titles.numbering.just.title.with.suppress">just title (with suppress)</a></li></ul></li><li><a href="#rfc.section.4.10">4.10</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.10">SVG</a></li><li><a href="#rfc.section.4.11">4.11</a>&nbsp;&nbsp;&nbsp;<a href="#code.components">Code Components</a></li></ul></li><li><a href="#rfc.section.5">5.</a>&nbsp;&nbsp;&nbsp;<a href="#xrefs">xrefs</a><ul><li><a href="#rfc.section.5.1">5.1</a>&nbsp;&nbsp;&nbsp;<a href="#section-anchor-tests">Tests for section-anchor</a></li><li><a href="#rfc.section.5.2">5.2</a>&nbsp;&nbsp;&nbsp;<a href="#t-anchor-tests">Tests for t-anchor</a></li><li><a href="#rfc.section.5.3">5.3</a>&nbsp;&nbsp;&nbsp;<a href="#list-t-anchor-empty-tests">Tests for list-t-anchor-empty</a></li><li><a href="#rfc.section.5.4">5.4</a>&nbsp;&nbsp;&nbsp;<a href="#list-t-anchor-numbers-tests">Tests for list-t-anchor-numbers</a></li><li><a href="#rfc.section.5.5">5.5</a>&nbsp;&nbsp;&nbsp;<a href="#list-t-anchor-letters-tests">Tests for list-t-anchor-letters</a></li><li><a href="#rfc.section.5.6">5.6</a>&nbsp;&nbsp;&nbsp;<a href="#list-t-anchor-hanging-tests">Tests for list-t-anchor-hanging</a></li><li><a href="#rfc.section.5.7">5.7</a>&nbsp;&nbsp;&nbsp;<a href="#texttable-anchor-tests">Tests for texttable-anchor</a></li><li><a href="#rfc.section.5.8">5.8</a>&nbsp;&nbsp;&nbsp;<a href="#figure-anchor-tests">Tests for figure-anchor</a></li><li><a href="#rfc.section.5.9">5.9</a>&nbsp;&nbsp;&nbsp;<a href="#reference-anchor-tests">Tests for reference-anchor</a></li><li><a href="#rfc.section.5.10">5.10</a>&nbsp;&nbsp;&nbsp;<a href="#cref-anchor-tests">Tests for cref-anchor</a></li><li><a href="#rfc.section.5.11">5.11</a>&nbsp;&nbsp;&nbsp;<a href="#section-anchor">Test Targets</a></li></ul></li><li><a href="#rfc.section.6">6.</a>&nbsp;&nbsp;&nbsp;<a href="#refs">More References</a><ul><li><a href="#rfc.section.6.1">6.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.1">xref to named &lt;spanx&gt; element</a></li><li><a href="#rfc.section.6.2">6.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.2">xref with no content and counter formatting</a></li><li><a href="#rfc.section.6.3">6.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.3">eref with no content</a></li><li><a href="#rfc.section.6.4">6.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.4">eref with content</a></li><li><a href="#rfc.section.6.5">6.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.5">iref inside paragraph</a></li><li><a href="#rfc.section.6.6">6.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.6">iref before paragraph</a></li><li><a href="#rfc.section.6.7">6.7</a>&nbsp;&nbsp;&nbsp;<a href="#xref.pageno">xref with pageno attribute</a></li></ul></li><li><a href="#rfc.section.7">7.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.7">Paragraph formatting</a></li><li><a href="#rfc.section.8">8.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.8">Sections</a><ul><li><a href="#rfc.section.8.1">8.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.8.1">Subsection with TOC entry</a></li><li class="excluded"><ul><li><a href="#rfc.section.8.2.1">8.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.8.2.1">Sub-subsection with TOC entry</a></li></ul></li><li><a href="#rfc.section.8.3">8.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.8.3">x.x</a><ul><li><a href="#rfc.section.8.3.1">8.3.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.8.3.1">x.x.x</a></li></ul></li></ul></li><li><a href="#rfc.section.9">9.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.9">Comments</a></li><li><a href="#rfc.section.10">10.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.10">Artwork Width</a></li><li><a href="#rfc.section.11">11.</a>&nbsp;&nbsp;&nbsp;<a href="#extensions">Extensions</a><ul><li><a href="#rfc.section.11.1">11.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.1">Markup in figure/artwork</a></li><li><a href="#rfc.section.11.2">11.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.2">Measuring Lengths</a></li><li><a href="#rfc.section.11.3">11.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.3">Quotations</a></li><li><a href="#rfc.section.11.4">11.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.4">Subsections</a></li><li><a href="#rfc.section.11.5">11.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.5">Box Drawing</a></li><li><a href="#rfc.section.11.6">11.6</a>&nbsp;&nbsp;&nbsp;<a href="#computed.reference.targets">Computed Reference Targets</a></li><li><a href="#rfc.section.11.7">11.7</a>&nbsp;&nbsp;&nbsp;<a href="#abnf.support">ABNF Support</a></li></ul></li><li><a href="#rfc.section.12">12.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.12">Blank Lines</a></li><li><a href="#rfc.section.13">13.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.13">Other</a><ul><li><a href="#rfc.section.13.1">13.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.13.1">Comments in Text</a></li><li><a href="#rfc.section.13.2">13.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.13.2">Special Characters</a><ul><li><a href="#rfc.section.13.2.1">13.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#nbsp">Non-Breaking Space</a></li><li><a href="#rfc.section.13.2.2">13.2.2</a>&nbsp;&nbsp;&nbsp;<a href="#nbhy">Non-Breaking Hyphen</a></li><li><a href="#rfc.section.13.2.3">13.2.3</a>&nbsp;&nbsp;&nbsp;<a href="#dashes">Dashes</a></li></ul></li></ul></li><li><a href="#rfc.section.14">14.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references">References</a></li><li><a href="#rfc.comments">Editorial Comments</a></li><li><a href="#rfc.index">Index</a></li><li><a href="#rfc.authors">Author's Address</a></li></ul></div><ul class="toc"><li>Figures
     445</style><link rel="Contents" href="#rfc.toc"><link rel="Author" href="#rfc.authors"><link rel="Index" href="#rfc.index"><link rel="Chapter" title="1 Lists" href="#rfc.section.1"><link rel="Chapter" title="2 spanx" href="#rfc.section.2"><link rel="Chapter" title="3 Tables" href="#rfc.section.3"><link rel="Chapter" title="4 Figures" href="#rfc.section.4"><link rel="Chapter" title="5 xrefs" href="#rfc.section.5"><link rel="Chapter" title="6 More References" href="#rfc.section.6"><link rel="Chapter" title="7 Paragraph formatting" href="#rfc.section.7"><link rel="Chapter" title="8 Sections" href="#rfc.section.8"><link rel="Chapter" title="9 Comments" href="#rfc.section.9"><link rel="Chapter" title="10 Artwork Width" href="#rfc.section.10"><link rel="Chapter" title="11 Extensions" href="#rfc.section.11"><link rel="Chapter" title="12 Blank Lines" href="#rfc.section.12"><link rel="Chapter" title="13 Other" href="#rfc.section.13"><link rel="Chapter" href="#rfc.section.14" title="14 References"><meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.752, 2015/10/05 16:24:03, XSLT vendor: SAXON 6.5.5 from Michael Kay http://saxon.sf.net/"><meta name="keywords" content="RFC2629, test case, xml2rfc"><link rel="schema.dct" href="http://purl.org/dc/terms/"><meta name="dct.creator" content="Reschke, J. F."></head><body><table class="header" id="rfc.headerblock"><tbody><tr><td class="left">XML2RFC Test Cases</td><td class="right">J. F. Reschke</td></tr><tr><td class="left"></td><td class="right">greenbytes</td></tr><tr><td class="left"></td><td class="right">October 2015</td></tr></tbody></table><div id="rfc.title"><h1>Test cases for XML2RFC formatting</h1></div><hr class="noprint"><div id="rfc.toc"><h2 class="np"><a href="#rfc.toc">Table of Contents</a></h2><ul class="toc"><li><a href="#rfc.section.1">1.</a>&nbsp;&nbsp;&nbsp;<a href="#lists">Lists</a><ul><li><a href="#rfc.section.1.1">1.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.1">hanging list</a><ul><li><a href="#rfc.section.1.1.1">1.1.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.1.1">default</a></li><li><a href="#rfc.section.1.1.2">1.1.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.1.2">hanging list with hangIndent 7</a></li><li><a href="#rfc.section.1.1.3">1.1.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.1.3">hanging list with hangIndent 0</a></li></ul></li><li><a href="#rfc.section.1.2">1.2</a>&nbsp;&nbsp;&nbsp;<a href="#ordered.list.numbers">numbered list</a></li><li><a href="#rfc.section.1.3">1.3</a>&nbsp;&nbsp;&nbsp;<a href="#ordered.list.letters">ordered list (letters)</a></li><li><a href="#rfc.section.1.4">1.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.4">no explicit counters</a></li><li><a href="#rfc.section.1.5">1.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.5">with explicit counters</a></li><li><a href="#rfc.section.1.6">1.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6">Nested lists</a><ul><li><a href="#rfc.section.1.6.1">1.6.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6.1">numbers/letters</a></li><li><a href="#rfc.section.1.6.2">1.6.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6.2">numbers/numbers</a></li><li><a href="#rfc.section.1.6.3">1.6.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6.3">letters/letters</a></li><li><a href="#rfc.section.1.6.4">1.6.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6.4">letters/letters/letters</a></li><li><a href="#rfc.section.1.6.5">1.6.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6.5">symbols/symbols/symbols</a></li><li><a href="#rfc.section.1.6.6">1.6.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.6.6">hanging/hanging</a></li></ul></li><li><a href="#rfc.section.1.7">1.7</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.7">list without style</a></li><li><a href="#rfc.section.1.8">1.8</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.8">list with multiple paragraphs in a single list item</a></li><li><a href="#rfc.section.1.9">1.9</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9">style=format...</a><ul><li><a href="#rfc.section.1.9.1">1.9.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.1">lists with fancy formats: %c</a></li><li><a href="#rfc.section.1.9.2">1.9.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.2">lists with fancy formats: %C</a></li><li><a href="#rfc.section.1.9.3">1.9.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.3">lists with fancy formats: %d</a></li><li><a href="#rfc.section.1.9.4">1.9.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.4">lists with fancy formats: %i</a></li><li><a href="#rfc.section.1.9.5">1.9.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.5">lists with fancy formats: %I</a></li><li><a href="#rfc.section.1.9.6">1.9.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.6">lists with fancy formats: %o</a></li><li><a href="#rfc.section.1.9.7">1.9.7</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.7">lists with fancy formats: %x</a></li><li><a href="#rfc.section.1.9.8">1.9.8</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.8">lists with fancy formats: %X</a></li><li><a href="#rfc.section.1.9.9">1.9.9</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.9">lists with fancy formats: %% %d</a></li><li><a href="#rfc.section.1.9.10">1.9.10</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.9.10">lists with fancy formats: REQUIREMENT-%i plus hangIndent=20</a></li></ul></li><li><a href="#rfc.section.1.10">1.10</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.10">style inheritance</a></li></ul></li><li><a href="#rfc.section.2">2.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.2">spanx</a></li><li><a href="#rfc.section.3">3.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3">Tables</a><ul><li><a href="#rfc.section.3.1">3.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.1">no borders</a></li><li><a href="#rfc.section.3.2">3.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.2">borders around headers</a></li><li><a href="#rfc.section.3.3">3.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.3">example from xml2rc README</a></li><li><a href="#rfc.section.3.4">3.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.4">no column titles</a></li><li><a href="#rfc.section.3.5">3.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.5">referencing tables</a></li><li><a href="#rfc.section.3.6">3.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.6">table captions</a></li><li><a href="#rfc.section.3.7">3.7</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.7">single column</a></li><li><a href="#rfc.section.3.8">3.8</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.8">empty body</a></li><li><a href="#rfc.section.3.9">3.9</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.9">table alignment</a></li></ul></li><li><a href="#rfc.section.4">4.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4">Figures</a><ul><li><a href="#rfc.section.4.1">4.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.1">with preamble, no title...</a></li><li><a href="#rfc.section.4.2">4.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.2">with postamble and title...</a></li><li><a href="#rfc.section.4.3">4.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.3">Whitespace handling</a></li><li><a href="#rfc.section.4.4">4.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.4">Whitespace around figures</a></li><li><a href="#rfc.section.4.5">4.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.5">data URIs</a><ul><li><a href="#rfc.section.4.5.1">4.5.1</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.src.data.uri.alt.text">data URI as source (both @alt and text content)</a></li><li><a href="#rfc.section.4.5.2">4.5.2</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.src.data.uri.text">data URI as source (only text content, no @alt)</a></li><li><a href="#rfc.section.4.5.3">4.5.3</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.src.data.uri.alt">data URI as source (only @alt attribute)</a></li></ul></li><li><a href="#rfc.section.4.6">4.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.6">alignment</a><ul><li><a href="#rfc.section.4.6.1">4.6.1</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.align.left">left</a></li><li><a href="#rfc.section.4.6.2">4.6.2</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.align.right">right</a></li><li><a href="#rfc.section.4.6.3">4.6.3</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.align.center">center</a></li><li><a href="#rfc.section.4.6.4">4.6.4</a>&nbsp;&nbsp;&nbsp;<a href="#artwork.align.default">default</a></li></ul></li><li><a href="#rfc.section.4.7">4.7</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.7">artwork width/height</a><ul><li><a href="#rfc.section.4.7.1">4.7.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.7.1">width50%</a></li><li><a href="#rfc.section.4.7.2">4.7.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.7.2">width50</a></li><li><a href="#rfc.section.4.7.3">4.7.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.7.3">height50</a></li><li><a href="#rfc.section.4.7.4">4.7.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.7.4">height30width60</a></li></ul></li><li><a href="#rfc.section.4.8">4.8</a>&nbsp;&nbsp;&nbsp;<a href="#figure.artwork.attribute.overlap">figure/artwork attribute overlap</a><ul><li><a href="#rfc.section.4.8.1">4.8.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.8.1">src overlap</a></li><li><a href="#rfc.section.4.8.2">4.8.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.8.2">align overlap</a></li><li><a href="#rfc.section.4.8.3">4.8.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.8.3">align inheritance</a></li></ul></li><li><a href="#rfc.section.4.9">4.9</a>&nbsp;&nbsp;&nbsp;<a href="#titles.numbering">titles/numbering</a><ul><li><a href="#rfc.section.4.9.1">4.9.1</a>&nbsp;&nbsp;&nbsp;<a href="#titles.numbering.just.anchor">just anchor</a></li><li><a href="#rfc.section.4.9.2">4.9.2</a>&nbsp;&nbsp;&nbsp;<a href="#titles.numbering.just.anchor.with.suppress">just anchor (with suppress)</a></li><li><a href="#rfc.section.4.9.3">4.9.3</a>&nbsp;&nbsp;&nbsp;<a href="#titles.numbering.just.title">just title</a></li><li><a href="#rfc.section.4.9.4">4.9.4</a>&nbsp;&nbsp;&nbsp;<a href="#titles.numbering.just.title.with.suppress">just title (with suppress)</a></li></ul></li><li><a href="#rfc.section.4.10">4.10</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4.10">SVG</a></li><li><a href="#rfc.section.4.11">4.11</a>&nbsp;&nbsp;&nbsp;<a href="#code.components">Code Components</a></li></ul></li><li><a href="#rfc.section.5">5.</a>&nbsp;&nbsp;&nbsp;<a href="#xrefs">xrefs</a><ul><li><a href="#rfc.section.5.1">5.1</a>&nbsp;&nbsp;&nbsp;<a href="#section-anchor-tests">Tests for section-anchor</a></li><li><a href="#rfc.section.5.2">5.2</a>&nbsp;&nbsp;&nbsp;<a href="#t-anchor-tests">Tests for t-anchor</a></li><li><a href="#rfc.section.5.3">5.3</a>&nbsp;&nbsp;&nbsp;<a href="#list-t-anchor-empty-tests">Tests for list-t-anchor-empty</a></li><li><a href="#rfc.section.5.4">5.4</a>&nbsp;&nbsp;&nbsp;<a href="#list-t-anchor-numbers-tests">Tests for list-t-anchor-numbers</a></li><li><a href="#rfc.section.5.5">5.5</a>&nbsp;&nbsp;&nbsp;<a href="#list-t-anchor-letters-tests">Tests for list-t-anchor-letters</a></li><li><a href="#rfc.section.5.6">5.6</a>&nbsp;&nbsp;&nbsp;<a href="#list-t-anchor-hanging-tests">Tests for list-t-anchor-hanging</a></li><li><a href="#rfc.section.5.7">5.7</a>&nbsp;&nbsp;&nbsp;<a href="#texttable-anchor-tests">Tests for texttable-anchor</a></li><li><a href="#rfc.section.5.8">5.8</a>&nbsp;&nbsp;&nbsp;<a href="#figure-anchor-tests">Tests for figure-anchor</a></li><li><a href="#rfc.section.5.9">5.9</a>&nbsp;&nbsp;&nbsp;<a href="#reference-anchor-tests">Tests for reference-anchor</a></li><li><a href="#rfc.section.5.10">5.10</a>&nbsp;&nbsp;&nbsp;<a href="#cref-anchor-tests">Tests for cref-anchor</a></li><li><a href="#rfc.section.5.11">5.11</a>&nbsp;&nbsp;&nbsp;<a href="#section-anchor">Test Targets</a></li></ul></li><li><a href="#rfc.section.6">6.</a>&nbsp;&nbsp;&nbsp;<a href="#refs">More References</a><ul><li><a href="#rfc.section.6.1">6.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.1">xref to named &lt;spanx&gt; element</a></li><li><a href="#rfc.section.6.2">6.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.2">xref with no content and counter formatting</a></li><li><a href="#rfc.section.6.3">6.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.3">eref with no content</a></li><li><a href="#rfc.section.6.4">6.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.4">eref with content</a></li><li><a href="#rfc.section.6.5">6.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.5">iref inside paragraph</a></li><li><a href="#rfc.section.6.6">6.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.6">iref before paragraph</a></li><li><a href="#rfc.section.6.7">6.7</a>&nbsp;&nbsp;&nbsp;<a href="#xref.pageno">xref with pageno attribute</a></li></ul></li><li><a href="#rfc.section.7">7.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.7">Paragraph formatting</a></li><li><a href="#rfc.section.8">8.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.8">Sections</a><ul><li><a href="#rfc.section.8.1">8.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.8.1">Subsection with TOC entry</a></li><li class="excluded"><ul><li><a href="#rfc.section.8.2.1">8.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.8.2.1">Sub-subsection with TOC entry</a></li></ul></li><li><a href="#rfc.section.8.3">8.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.8.3">x.x</a><ul><li><a href="#rfc.section.8.3.1">8.3.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.8.3.1">x.x.x</a></li></ul></li></ul></li><li><a href="#rfc.section.9">9.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.9">Comments</a></li><li><a href="#rfc.section.10">10.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.10">Artwork Width</a></li><li><a href="#rfc.section.11">11.</a>&nbsp;&nbsp;&nbsp;<a href="#extensions">Extensions</a><ul><li><a href="#rfc.section.11.1">11.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.1">Markup in figure/artwork</a></li><li><a href="#rfc.section.11.2">11.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.2">Measuring Lengths</a></li><li><a href="#rfc.section.11.3">11.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.3">Quotations</a></li><li><a href="#rfc.section.11.4">11.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.4">Subsections</a></li><li><a href="#rfc.section.11.5">11.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.5">Box Drawing</a></li><li><a href="#rfc.section.11.6">11.6</a>&nbsp;&nbsp;&nbsp;<a href="#computed.reference.targets">Computed Reference Targets</a></li><li><a href="#rfc.section.11.7">11.7</a>&nbsp;&nbsp;&nbsp;<a href="#abnf.support">ABNF Support</a></li></ul></li><li><a href="#rfc.section.12">12.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.12">Blank Lines</a></li><li><a href="#rfc.section.13">13.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.13">Other</a><ul><li><a href="#rfc.section.13.1">13.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.13.1">Comments in Text</a></li><li><a href="#rfc.section.13.2">13.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.13.2">Special Characters</a><ul><li><a href="#rfc.section.13.2.1">13.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#nbsp">Non-Breaking Space</a></li><li><a href="#rfc.section.13.2.2">13.2.2</a>&nbsp;&nbsp;&nbsp;<a href="#nbhy">Non-Breaking Hyphen</a></li><li><a href="#rfc.section.13.2.3">13.2.3</a>&nbsp;&nbsp;&nbsp;<a href="#dashes">Dashes</a></li></ul></li></ul></li><li><a href="#rfc.section.14">14.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references">References</a></li><li><a href="#rfc.comments">Editorial Comments</a></li><li><a href="#rfc.index">Index</a></li><li><a href="#rfc.authors">Author's Address</a></li></ul></div><ul class="toc"><li>Figures
    445446        <ul><li><a href="#rfc.figure.1">Figure 1: another figure</a></li><li><a href="#rfc.figure.u.24">title</a></li><li><a href="#rfc.figure.u.25">title</a></li><li><a href="#rfc.figure.2">Figure 2</a></li><li><a href="#rfc.figure.3">Figure 3</a></li><li><a href="#rfc.figure.u.26">figure title</a></li><li><a href="#rfc.figure.u.27">figure title</a></li><li><a href="#rfc.figure.4">Figure 4: FIGURE-TITLE</a></li></ul></li></ul><hr class="noprint"><div id="lists"><h2 id="rfc.section.1" class="np"><a href="#rfc.section.1">1.</a>&nbsp;<a href="#lists">Lists</a></h2><div><h3 id="rfc.section.1.1"><a href="#rfc.section.1.1">1.1</a>&nbsp;hanging list</h3><div><h4 id="rfc.section.1.1.1"><a href="#rfc.section.1.1.1">1.1.1</a>&nbsp;default</h4><div id="rfc.section.1.1.1.p.1"><p>default <a class="self" href="#rfc.section.1.1.1.p.1">&para;</a></p><dl><dt>A:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>AB:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABC:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCD:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCDE:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCDEF:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd></dl></div><div id="rfc.section.1.1.1.p.2"><p>compact="yes" <a class="self" href="#rfc.section.1.1.1.p.2">&para;</a></p><dl class="compact"><dt>A:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>AB:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABC:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCD:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCDE:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCDEF:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd></dl></div><div id="rfc.section.1.1.1.p.3"><p>compact="yes" subcompact="yes" <a class="self" href="#rfc.section.1.1.1.p.3">&para;</a></p><dl class="compact"><dt>A:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>AB:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABC:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCD:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCDE:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCDEF:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd></dl></div><div id="rfc.section.1.1.1.p.4"><p>compact="yes" subcompact="no" <a class="self" href="#rfc.section.1.1.1.p.4">&para;</a></p><dl><dt>A:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>AB:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABC:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCD:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCDE:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCDEF:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd></dl></div><div id="rfc.section.1.1.1.p.5"><p>compact="no" subcompact="yes" <a class="self" href="#rfc.section.1.1.1.p.5">&para;</a></p><dl class="compact"><dt>A:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>AB:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABC:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCD:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCDE:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCDEF:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd></dl></div><div id="rfc.section.1.1.1.p.6"><p>compact="no" subcompact="no" <a class="self" href="#rfc.section.1.1.1.p.6">&para;</a></p><dl><dt>A:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>AB:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABC:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCD:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCDE:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd><dt>ABCDEF:</dt><dd>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</dd></dl></div></div><div><h4 id="rfc.section.1.1.2"><a href="#rfc.section.1.1.2">1.1.2</a>&nbsp;hanging list with hangIndent 7</h4><div id="rfc.section.1.1.2.p.1"><dl><dt>0</dt><dd style="margin-left: 4.9em">0</dd><dt>01</dt><dd style="margin-left: 4.9em">01</dd><dt>012</dt><dd style="margin-left: 4.9em">012</dd><dt>0123</dt><dd style="margin-left: 4.9em">0123</dd><dt>01234</dt><dd style="margin-left: 4.9em">01234</dd><dt>012345</dt><dd style="margin-left: 4.9em">012345</dd><dt>0123456</dt><dd style="margin-left: 4.9em">0123456</dd><dt>01234567</dt><dd style="margin-left: 4.9em">01234567</dd><dt>012345678</dt><dd style="margin-left: 4.9em">012345678</dd><dt>0123456789</dt><dd style="margin-left: 4.9em">0123456789</dd></dl></div></div><div><h4 id="rfc.section.1.1.3"><a href="#rfc.section.1.1.3">1.1.3</a>&nbsp;hanging list with hangIndent 0</h4><div id="rfc.section.1.1.3.p.1"><dl><dt>0</dt><dd style="margin-left: 0em">0</dd><dt>01</dt><dd style="margin-left: 0em">01</dd><dt>012</dt><dd style="margin-left: 0em">012</dd><dt>0123</dt><dd style="margin-left: 0em">0123</dd><dt>01234</dt><dd style="margin-left: 0em">01234</dd><dt>012345</dt><dd style="margin-left: 0em">012345</dd><dt>0123456</dt><dd style="margin-left: 0em">0123456</dd><dt>01234567</dt><dd style="margin-left: 0em">01234567</dd><dt>012345678</dt><dd style="margin-left: 0em">012345678</dd><dt>0123456789</dt><dd style="margin-left: 0em">0123456789</dd></dl></div></div></div><div id="ordered.list.numbers"><h3 id="rfc.section.1.2"><a href="#rfc.section.1.2">1.2</a>&nbsp;<a href="#ordered.list.numbers">numbered list</a></h3><div id="rfc.section.1.2.p.1"><p>A numbered list: <a class="self" href="#rfc.section.1.2.p.1">&para;</a></p><ol><li>one</li><li>two</li><li id="ordered.list.numbers.last">three</li></ol></div></div><div id="ordered.list.letters"><h3 id="rfc.section.1.3"><a href="#rfc.section.1.3">1.3</a>&nbsp;<a href="#ordered.list.letters">ordered list (letters)</a></h3><div id="rfc.section.1.3.p.1"><p>An ordered list using letters: <a class="self" href="#rfc.section.1.3.p.1">&para;</a></p><ol class="la"><li>one</li><li>two</li><li>three</li><li>one</li><li>two</li><li>three</li><li>one</li><li>two</li><li>three</li><li>one</li><li>two</li><li>three</li><li>one</li><li>two</li><li>three</li><li>one</li><li>two</li><li>three</li><li>one</li><li>two</li><li>three</li><li>one</li><li>two</li><li>three</li><li>one</li><li>two</li><li>three</li><li>one</li><li>two</li><li id="ordered.list.letters.last">three</li></ol></div></div><div><h3 id="rfc.section.1.4"><a href="#rfc.section.1.4">1.4</a>&nbsp;no explicit counters</h3><div id="rfc.section.1.4.p.1"><p>Example for numbered list with user-defined-format: <a class="self" href="#rfc.section.1.4.p.1">&para;</a></p><dl><dt>R1:</dt><dd>R1</dd><dt>R2:</dt><dd>R2</dd></dl></div><div id="rfc.section.1.4.p.2"><p>Another list: <a class="self" href="#rfc.section.1.4.p.2">&para;</a></p><dl><dt>S1:</dt><dd>S1</dd><dt>S2:</dt><dd>S2</dd></dl></div><div id="rfc.section.1.4.p.3"><p>Next list should continue counting R's: <a class="self" href="#rfc.section.1.4.p.3">&para;</a></p><dl><dt>R3:</dt><dd>R3</dd><dt>R4:</dt><dd>R4</dd></dl></div><div id="rfc.section.1.4.p.4"><p>Same with character-based numbering: <a class="self" href="#rfc.section.1.4.p.4">&para;</a></p><dl><dt>c-a:</dt><dd>c-a</dd><dt>c-b:</dt><dd>c-b</dd></dl></div></div><div><h3 id="rfc.section.1.5"><a href="#rfc.section.1.5">1.5</a>&nbsp;with explicit counters</h3><div id="rfc.section.1.5.p.1"><p>A few requirements: <a class="self" href="#rfc.section.1.5.p.1">&para;</a></p><dl><dt>R1:</dt><dd>req R1</dd><dt>R2:</dt><dd>req R2</dd></dl></div><div id="rfc.section.1.5.p.2"><p>More requirements: <a class="self" href="#rfc.section.1.5.p.2">&para;</a></p><dl><dt>R3:</dt><dd>req R3</dd><dt>R4:</dt><dd>req R4</dd></dl></div><div id="rfc.section.1.5.p.3"><p>A few rules: <a class="self" href="#rfc.section.1.5.p.3">&para;</a></p><dl><dt>R1:</dt><dd>rule R1</dd><dt>R2:</dt><dd>rule R2</dd><dt>R3:</dt><dd>rule R3</dd></dl></div><div id="rfc.section.1.5.p.4"><p>Explicit counter with name matching it's format string: <a class="self" href="#rfc.section.1.5.p.4">&para;</a></p><dl><dt>c-c:</dt><dd>c-c</dd><dt>c-d:</dt><dd>c-d</dd></dl></div><div id="rfc.section.1.5.p.5"><p>Same, without counter: <a class="self" href="#rfc.section.1.5.p.5">&para;</a></p><dl><dt>c-e:</dt><dd>c-e</dd><dt>c-f:</dt><dd>c-f</dd></dl></div></div><div><h3 id="rfc.section.1.6"><a href="#rfc.section.1.6">1.6</a>&nbsp;Nested lists</h3><div><h4 id="rfc.section.1.6.1"><a href="#rfc.section.1.6.1">1.6.1</a>&nbsp;numbers/letters</h4><div id="rfc.section.1.6.1.p.1"><ol><li>One</li><li>Two <ol class="la"><li>17</li><li>42</li></ol> </li><li>Three</li></ol></div></div><div><h4 id="rfc.section.1.6.2"><a href="#rfc.section.1.6.2">1.6.2</a>&nbsp;numbers/numbers</h4><div id="rfc.section.1.6.2.p.1"><ol><li>One</li><li>Two <ol><li>17</li><li>42</li></ol> </li><li>Three</li><li><ol><li>17</li><li>42</li></ol> </li></ol></div></div><div><h4 id="rfc.section.1.6.3"><a href="#rfc.section.1.6.3">1.6.3</a>&nbsp;letters/letters</h4><div id="rfc.section.1.6.3.p.1"><ol class="la"><li>One</li><li>Two <ol class="ua"><li>17</li><li>42</li></ol> </li><li>Three</li></ol></div></div><div><h4 id="rfc.section.1.6.4"><a href="#rfc.section.1.6.4">1.6.4</a>&nbsp;letters/letters/letters</h4><div id="rfc.section.1.6.4.p.1"><ol class="la"><li>One</li><li>Two <ol class="ua"><li>17</li><li>42 <ol class="la"><li>X</li><li>Y</li></ol> </li></ol> </li><li>Three</li></ol></div></div><div><h4 id="rfc.section.1.6.5"><a href="#rfc.section.1.6.5">1.6.5</a>&nbsp;symbols/symbols/symbols</h4><div id="rfc.section.1.6.5.p.1"><ul><li>One</li><li>Two <ul><li>17</li><li>42 <ul><li>X</li><li>Y</li></ul> </li></ul> </li><li>Three</li></ul></div></div><div><h4 id="rfc.section.1.6.6"><a href="#rfc.section.1.6.6">1.6.6</a>&nbsp;hanging/hanging</h4><div id="rfc.section.1.6.6.p.1"><dl><dt>ABC</dt><dd>One <dl><dt>GHI</dt><dd>One</dd><dt>JKL</dt><dd>Two</dd></dl> </dd><dt>DEF</dt><dd>&nbsp;<dl><dt>MNO</dt><dd>Three</dd><dt>PQR</dt><dd>Four</dd></dl> </dd></dl></div></div></div><div><h3 id="rfc.section.1.7"><a href="#rfc.section.1.7">1.7</a>&nbsp;list without style</h3><div id="rfc.section.1.7.p.1"><p>No style attribute:<a class="self" href="#rfc.section.1.7.p.1">&para;</a></p><ul class="empty"><li>One</li><li>Two</li><li>Three</li></ul></div></div><div><h3 id="rfc.section.1.8"><a href="#rfc.section.1.8">1.8</a>&nbsp;list with multiple paragraphs in a single list item</h3><div id="rfc.section.1.8.p.1"><ol><li><p>Simple list item.</p></li><li><p>This one has two paragraphs. This is the first one.</p><p>This one has two paragraphs. This is the second one.</p></li><li><p>Another simple list item.</p></li></ol></div></div><div><h3 id="rfc.section.1.9"><a href="#rfc.section.1.9">1.9</a>&nbsp;style=format...</h3><div><h4 id="rfc.section.1.9.1"><a href="#rfc.section.1.9.1">1.9.1</a>&nbsp;lists with fancy formats: %c</h4><div id="rfc.section.1.9.1.p.1"><dl><dt>a</dt><dd>test</dd></dl></div></div><div><h4 id="rfc.section.1.9.2"><a href="#rfc.section.1.9.2">1.9.2</a>&nbsp;lists with fancy formats: %C</h4><div id="rfc.section.1.9.2.p.1"><dl><dt>A</dt><dd>test</dd></dl></div></div><div><h4 id="rfc.section.1.9.3"><a href="#rfc.section.1.9.3">1.9.3</a>&nbsp;lists with fancy formats: %d</h4><div id="rfc.section.1.9.3.p.1"><dl><dt>1</dt><dd>test</dd></dl></div></div><div><h4 id="rfc.section.1.9.4"><a href="#rfc.section.1.9.4">1.9.4</a>&nbsp;lists with fancy formats: %i</h4><div id="rfc.section.1.9.4.p.1"><dl><dt>i</dt><dd>test</dd></dl></div></div><div><h4 id="rfc.section.1.9.5"><a href="#rfc.section.1.9.5">1.9.5</a>&nbsp;lists with fancy formats: %I</h4><div id="rfc.section.1.9.5.p.1"><dl><dt>I</dt><dd>test</dd></dl></div></div><div><h4 id="rfc.section.1.9.6"><a href="#rfc.section.1.9.6">1.9.6</a>&nbsp;lists with fancy formats: %o</h4><div id="rfc.section.1.9.6.p.1"><dl><dt></dt><dd>test</dd></dl></div></div><div><h4 id="rfc.section.1.9.7"><a href="#rfc.section.1.9.7">1.9.7</a>&nbsp;lists with fancy formats: %x</h4><div id="rfc.section.1.9.7.p.1"><dl><dt></dt><dd>test</dd></dl></div></div><div><h4 id="rfc.section.1.9.8"><a href="#rfc.section.1.9.8">1.9.8</a>&nbsp;lists with fancy formats: %X</h4><div id="rfc.section.1.9.8.p.1"><dl><dt></dt><dd>test</dd></dl></div></div><div><h4 id="rfc.section.1.9.9"><a href="#rfc.section.1.9.9">1.9.9</a>&nbsp;lists with fancy formats: %% %d</h4><div id="rfc.section.1.9.9.p.1"><dl><dt>% 1</dt><dd>test</dd></dl></div></div><div><h4 id="rfc.section.1.9.10"><a href="#rfc.section.1.9.10">1.9.10</a>&nbsp;lists with fancy formats: REQUIREMENT-%i plus hangIndent=20</h4><div id="rfc.section.1.9.10.p.1"><dl><dt>REQUIREMENT-i</dt><dd>test</dd><dt>REQUIREMENT-ii</dt><dd>test</dd><dt>REQUIREMENT-iii</dt><dd>test</dd><dt>REQUIREMENT-iv</dt><dd>test</dd><dt>REQUIREMENT-v</dt><dd>test</dd><dt>REQUIREMENT-vi</dt><dd>test</dd><dt>REQUIREMENT-vii</dt><dd>test</dd><dt>REQUIREMENT-viii</dt><dd>test</dd><dt>REQUIREMENT-ix</dt><dd>test</dd><dt>REQUIREMENT-x</dt><dd>test</dd><dt>REQUIREMENT-xi</dt><dd>test</dd></dl></div></div></div><div><h3 id="rfc.section.1.10"><a href="#rfc.section.1.10">1.10</a>&nbsp;style inheritance</h3><div id="rfc.section.1.10.p.1"><p>Numbers:<a class="self" href="#rfc.section.1.10.p.1">&para;</a></p><ol><li>test</li><li>test</li><li>test</li><li>Nested, without style:<ol><li>test</li><li>test</li><li>test</li></ol> </li></ol></div><div id="rfc.section.1.10.p.2"><p>Symbols:<a class="self" href="#rfc.section.1.10.p.2">&para;</a></p><ul><li>test</li><li>test</li><li>test</li><li>Nested, without style:<ul><li>test</li><li>test</li><li>test</li></ul> </li></ul></div><div id="rfc.section.1.10.p.3"><p>Letters:<a class="self" href="#rfc.section.1.10.p.3">&para;</a></p><ol class="la"><li>test</li><li>test</li><li>test</li><li>Nested, without style:<ol class="ua"><li>test</li><li>test</li><li>test</li></ol> </li></ol></div><div id="rfc.section.1.10.p.4"><p>Empty:<a class="self" href="#rfc.section.1.10.p.4">&para;</a></p><ul class="empty"><li>test</li><li>test</li><li>test</li><li>Nested, without style:<ul class="empty"><li>test</li><li>test</li><li>test</li></ul> </li></ul></div></div></div><hr class="noprint"><div><h2 id="rfc.section.2" class="np"><a href="#rfc.section.2">2.</a>&nbsp;spanx</h2><div id="rfc.section.2.p.1"><p>This is <em>default</em>.<a class="self" href="#rfc.section.2.p.1">&para;</a></p></div><div id="rfc.section.2.p.2"><p>This is <em>emph(asized)</em>.<a class="self" href="#rfc.section.2.p.2">&para;</a></p></div><div id="rfc.section.2.p.3"><p>This is <strong>strong</strong>.<a class="self" href="#rfc.section.2.p.3">&para;</a></p></div><div id="rfc.section.2.p.4"><p>This is <tt>verb(atim)</tt>.<a class="self" href="#rfc.section.2.p.4">&para;</a></p></div><div id="rfc.section.2.p.5"><p>Here is <tt>a carriage return inside</tt> a spanx element.<a class="self" href="#rfc.section.2.p.5">&para;</a></p></div></div><hr class="noprint"><div><h2 id="rfc.section.3" class="np"><a href="#rfc.section.3">3.</a>&nbsp;Tables</h2><div id="rfc.table.u.1"><p>The list of valid keywords are:</p><table class="tt full tcenter" cellpadding="3" cellspacing="0"><thead><tr><th class="right" style="width: 20%;">keyword</th><th class="center" style="width: 20%;">default</th><th class="left">meaning</th><th class="left">not aligned</th></tr></thead><tbody><tr><td class="right">strict</td><td class="center">no</td><td class="left">try to enforce the ID-nits conventions and DTD validity</td><td class="left">a</td></tr><tr><td class="right">iprnotified</td><td class="center">no</td><td class="left">include boilerplate from Section 10.4(d) of <a href="#RFC2026" id="rfc.xref.RFC2026.1"><cite title="The Internet Standards Process -- Revision 3">[RFC2026]</cite></a></td><td class="left">bb bb</td></tr><tr><td class="right">compact</td><td class="center">no</td><td class="left">when producing a txt/nroff file, try to conserve vertical whitespace</td><td class="left">ccc ccc ccc</td></tr><tr><td class="right">subcompact</td><td class="center">compact</td><td class="left">if compact is "yes", then setting this to "no" will make things a little less compact</td><td class="left">dddd dddd dddd dddd</td></tr><tr><td class="right">needLines</td><td class="center">n/a</td><td class="left">an integer hint indicating how many contiguous lines are needed at this point in the output</td><td class="left">eeeee eeeee eeeee eeeee eeeee</td></tr><tr><td class="right">here come empty cells</td><td class="center"></td><td class="left"></td><td class="left"></td></tr></tbody></table><p>Remember, that as with everything else in XML, keywords and values are case-sensitive.</p></div><div><h3 id="rfc.section.3.1"><a href="#rfc.section.3.1">3.1</a>&nbsp;no borders</h3><div id="rfc.table.1"><div id="tablenoborder"></div><p>The table below should appear with no borders.</p><table class="tt none tcenter" cellpadding="3" cellspacing="0"><caption>Table 1: a table with no borders</caption><thead><tr><th class="left">C1</th><th class="left">C2</th></tr></thead><tbody><tr><td class="left">11</td><td class="left">12</td></tr><tr><td class="left">21</td><td class="left">22</td></tr></tbody></table></div></div><div><h3 id="rfc.section.3.2"><a href="#rfc.section.3.2">3.2</a>&nbsp;borders around headers</h3><div id="rfc.table.u.2"><p>The table below should appear with borders just around the headers.</p><table class="tt headers tcenter" cellpadding="3" cellspacing="0"><thead><tr><th class="left">C1</th><th class="left">C2</th></tr></thead><tbody><tr><td class="left">11</td><td class="left">12</td></tr><tr><td class="left">21</td><td class="left">22</td></tr></tbody></table></div></div><div><h3 id="rfc.section.3.3"><a href="#rfc.section.3.3">3.3</a>&nbsp;example from xml2rc README</h3><div id="rfc.table.2"><div id="table_example"></div><p>So, putting it all together, we have, e.g.,</p><table class="tt full tcenter" cellpadding="3" cellspacing="0"><caption>Table 2</caption><thead><tr><th class="center">ttcol #1</th><th class="center">ttcol #2</th></tr></thead><tbody><tr><td class="center">c #1</td><td class="center">c #2</td></tr><tr><td class="center">c #3</td><td class="center">c #4</td></tr><tr><td class="center">c #5</td><td class="center">c #6</td></tr></tbody></table><p>which is a very simple example.</p></div></div><div><h3 id="rfc.section.3.4"><a href="#rfc.section.3.4">3.4</a>&nbsp;no column titles</h3><div id="rfc.table.3"><div id="tablenotitles"></div><p>The table below should appear with no titles.</p><table class="tt full tcenter" cellpadding="3" cellspacing="0"><caption>Table 3: a table with no column titles</caption><tbody><tr><td class="left">11</td><td class="left">12</td></tr><tr><td class="left">21</td><td class="left">22</td></tr></tbody></table></div><div id="rfc.table.4"><div id="tableonetitle"></div><p>The table below should appear with column titles (one being non-empty).</p><table class="tt full tcenter" cellpadding="3" cellspacing="0"><caption>Table 4: a table with a single column title</caption><thead><tr><th class="left">FOO</th><th class="left"></th></tr></thead><tbody><tr><td class="left">11</td><td class="left">12</td></tr><tr><td class="left">21</td><td class="left">22</td></tr></tbody></table></div></div><div><h3 id="rfc.section.3.5"><a href="#rfc.section.3.5">3.5</a>&nbsp;referencing tables</h3><div id="rfc.section.3.5.p.1"><p><a href="#tablenoborder">Table&nbsp;1</a> shows a table with no borders.<a class="self" href="#rfc.section.3.5.p.1">&para;</a></p></div><div id="rfc.section.3.5.p.2"><p><a href="#tablenoborder">The table above</a> shows a table with no borders.<a class="self" href="#rfc.section.3.5.p.2">&para;</a></p></div></div><div><h3 id="rfc.section.3.6"><a href="#rfc.section.3.6">3.6</a>&nbsp;table captions</h3><div id="rfc.table.u.3"><p>No anchor, no title</p><table class="tt full tcenter" cellpadding="3" cellspacing="0"><thead><tr><th class="left">Anchor</th><th class="left">Title</th></tr></thead><tbody><tr><td class="left">-</td><td class="left">-</td></tr></tbody></table></div><div id="rfc.table.5"><div id="texttable1"></div><p>Anchor (not being referenced), no title</p><table class="tt full tcenter" cellpadding="3" cellspacing="0"><caption>Table 5</caption><thead><tr><th class="left">Anchor</th><th class="left">Title</th></tr></thead><tbody><tr><td class="left">yes</td><td class="left">-</td></tr></tbody></table></div><div id="rfc.table.u.4"><p>No anchor, with title</p><table class="tt full tcenter" cellpadding="3" cellspacing="0"><caption>title</caption><thead><tr><th class="left">Anchor</th><th class="left">Title</th></tr></thead><tbody><tr><td class="left">-</td><td class="left">"title"</td></tr></tbody></table></div><div id="rfc.table.6"><div id="texttable2"></div><p>Both anchor and title</p><table class="tt full tcenter" cellpadding="3" cellspacing="0"><caption>Table 6: title</caption><thead><tr><th class="left">Anchor</th><th class="left">Title</th></tr></thead><tbody><tr><td class="left">yes</td><td class="left">"title"</td></tr></tbody></table></div><div id="rfc.table.7"><div id="texttable3"></div><p>anchor, suppress-title, and in use</p><table class="tt full tcenter" cellpadding="3" cellspacing="0"><thead><tr><th class="left">Anchor</th><th class="left">Title</th></tr></thead><tbody><tr><td class="left">yes</td><td class="left">-</td></tr></tbody></table></div><div id="rfc.section.3.6.p.1"><p>Table above is: <a href="#texttable3">Table&nbsp;7</a>.<a class="self" href="#rfc.section.3.6.p.1">&para;</a></p></div></div><div><h3 id="rfc.section.3.7"><a href="#rfc.section.3.7">3.7</a>&nbsp;single column</h3><div id="rfc.table.u.5"><table class="tt full tcenter" cellpadding="3" cellspacing="0"><thead><tr><th class="left">title</th></tr></thead><tbody><tr><td class="left">1</td></tr><tr><td class="left">2</td></tr></tbody></table></div></div><div><h3 id="rfc.section.3.8"><a href="#rfc.section.3.8">3.8</a>&nbsp;empty body</h3><div id="rfc.table.u.6"><table class="tt full tcenter" cellpadding="3" cellspacing="0"><thead><tr><th class="left">title</th></tr></thead><tbody></tbody></table></div></div><div><h3 id="rfc.section.3.9"><a href="#rfc.section.3.9">3.9</a>&nbsp;table alignment</h3><div id="rfc.table.u.7"><table class="tt full tleft" cellpadding="3" cellspacing="0"><thead><tr><th class="left">left</th></tr></thead><tbody><tr><td class="left">1</td></tr></tbody></table></div><div id="rfc.table.u.8"><table class="tt full tcenter" cellpadding="3" cellspacing="0"><thead><tr><th class="left">center</th></tr></thead><tbody><tr><td class="left">1</td></tr></tbody></table></div><div id="rfc.table.u.9"><table class="tt full tright" cellpadding="3" cellspacing="0"><thead><tr><th class="left">right</th></tr></thead><tbody><tr><td class="left">1</td></tr></tbody></table></div><div id="rfc.table.u.10"><table class="tt full tcenter" cellpadding="3" cellspacing="0"><thead><tr><th class="left">default</th></tr></thead><tbody><tr><td class="left">1</td></tr></tbody></table></div></div></div><hr class="noprint"><div><h2 id="rfc.section.4" class="np"><a href="#rfc.section.4">4.</a>&nbsp;Figures</h2><div><h3 id="rfc.section.4.1"><a href="#rfc.section.4.1">4.1</a>&nbsp;with preamble, no title...</h3><div id="rfc.figure.u.1"><p>with preamble, no title...</p><pre>  +--+
    446447  |  |
     
    494495case-sensitive1 = %x61.62.63.64.65.66.67.68.69.6A.6C.6B.6D.6E.6F.70.71.72.73.74.75.76.77.78.79.7A
    495496case-sensitive2 = %x41.42.43.44.45.46.47.48.49.4A.4B.4C.4D.4E.4F.50.51.52.53.54.55.56.57.58.59.5A
    496 </pre></div></div></div><hr class="noprint"><div><h2 id="rfc.section.12" class="np"><a href="#rfc.section.12">12.</a>&nbsp;Blank Lines</h2><div id="rfc.section.12.p.1"><p>Just a forced <br> line break.<a class="self" href="#rfc.section.12.p.1">&para;</a></p></div><div id="rfc.section.12.p.2"><p>One <br><br> blank line.<a class="self" href="#rfc.section.12.p.2">&para;</a></p></div><div id="rfc.section.12.p.3"><p>Seven <br><br><br><br><br><br><br><br> blank lines.<a class="self" href="#rfc.section.12.p.3">&para;</a></p></div><div id="rfc.section.12.p.4"><p>999 <br> blank lines (this is likely an attempt to force a pagebreak, thus the generated HTML should <em>not</em> contain the blank lines, but only one).<a class="self" href="#rfc.section.12.p.4">&para;</a></p></div></div><hr class="noprint"><div><h2 id="rfc.section.13" class="np"><a href="#rfc.section.13">13.</a>&nbsp;Other</h2><div><h3 id="rfc.section.13.1"><a href="#rfc.section.13.1">13.1</a>&nbsp;Comments in Text</h3><div id="rfc.section.13.1.p.1"><p>First sentence (before XML comment, invisible here).  Second sentence.<a class="self" href="#rfc.section.13.1.p.1">&para;</a></p></div></div><div><h3 id="rfc.section.13.2"><a href="#rfc.section.13.2">13.2</a>&nbsp;Special Characters</h3><div id="nbsp"><h4 id="rfc.section.13.2.1"><a href="#rfc.section.13.2.1">13.2.1</a>&nbsp;<a href="#nbsp">Non-Breaking Space</a></h4><div id="rfc.section.13.2.1.p.1"><p>Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space.<a class="self" href="#rfc.section.13.2.1.p.1">&para;</a></p></div></div><div id="nbhy"><h4 id="rfc.section.13.2.2"><a href="#rfc.section.13.2.2">13.2.2</a>&nbsp;<a href="#nbhy">Non-Breaking Hyphen</a></h4><div id="rfc.section.13.2.2.p.1"><p>Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. (wrt Apache FOP, see &lt;<a href="http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-users/200905.mbox/%3C4A035745.10601@freemail.gr%3E">http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-users/200905.mbox/%3C4A035745.10601@freemail.gr%3E</a>&gt;)<a class="self" href="#rfc.section.13.2.2.p.1">&para;</a></p></div></div><div id="dashes"><h4 id="rfc.section.13.2.3"><a href="#rfc.section.13.2.3">13.2.3</a>&nbsp;<a href="#dashes">Dashes</a></h4><div id="rfc.section.13.2.3.p.1"><p>mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces.<a class="self" href="#rfc.section.13.2.3.p.1">&para;</a></p></div><div id="rfc.section.13.2.3.p.2"><p>mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces.<a class="self" href="#rfc.section.13.2.3.p.2">&para;</a></p></div><div id="rfc.section.13.2.3.p.3"><p>mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces.<a class="self" href="#rfc.section.13.2.3.p.3">&para;</a></p></div></div></div></div><h2 class="np" id="rfc.references.1"><a href="#rfc.section.14" id="rfc.section.14">14.</a> References</h2><table><tr><td class="reference"><b id="RFC2026">[RFC2026]</b></td><td class="top"><a href="mailto:sob@harvard.edu">Bradner, S.</a>, &#8220;<a href="https://tools.ietf.org/html/rfc2026">The Internet Standards Process -- Revision 3</a>&#8221;, BCP&nbsp;9, RFC&nbsp;2026, <a href="http://dx.doi.org/10.17487/RFC2026">DOI&nbsp;10.17487/RFC2026</a>, October&nbsp;1996, &lt;<a href="http://www.rfc-editor.org/info/rfc2026">http://www.rfc-editor.org/info/rfc2026</a>&gt;.</td></tr><tr><td class="reference"><b id="RFC10000">[RFC10000]</b></td><td class="top">Doe, J., &#8220;<a href="https://tools.ietf.org/html/rfc10000">FUTURERFC</a>&#8221;, RFC&nbsp;10000, <a href="http://dx.doi.org/10.17487/RFC10000">DOI&nbsp;10.17487/RFC10000</a>, October&nbsp;2018, &lt;<a href="http://www.rfc-editor.org/info/rfc10000">http://www.rfc-editor.org/info/rfc10000</a>&gt;.</td></tr><tr><td class="reference"><b id="RFC2396">[RFC2396]</b></td><td class="top"><a href="mailto:timbl@w3.org">Berners-Lee, T.</a>, <a href="mailto:fielding@ics.uci.edu">Fielding, R.T.</a>, and <a href="mailto:masinter@parc.xerox.com">L. Masinter</a>, &#8220;<a href="https://tools.ietf.org/html/rfc2396">Uniform Resource Identifiers (URI): Generic Syntax</a>&#8221;, RFC&nbsp;2396, <a href="http://dx.doi.org/10.17487/RFC2396">DOI&nbsp;10.17487/RFC2396</a>, August&nbsp;1998, &lt;<a href="http://www.rfc-editor.org/info/rfc2396">http://www.rfc-editor.org/info/rfc2396</a>&gt;.<br>This RFC will soon be updated, check &lt;<a href="http://cvs.apache.org/viewcvs.cgi/*checkout*/ietf-uri/rev-2002/rfc2396bis.html">http://cvs.apache.org/viewcvs.cgi/*checkout*/ietf-uri/rev-2002/rfc2396bis.html</a>&gt; for the latest draft.<br>The issues list is at &lt;<a href="http://cvs.apache.org/viewcvs.cgi/*checkout*/ietf-uri/rev-2002/issues.html">http://cvs.apache.org/viewcvs.cgi/*checkout*/ietf-uri/rev-2002/issues.html</a>&gt;.</td></tr><tr><td class="reference"><b id="TSTCS">[TSTCS]</b></td><td class="top"><a href="mailto:julian.reschke@greenbytes.de">Reschke, J. F.</a>, &#8220;Test cases for RFC2629 formatting&#8221;, March&nbsp;2008.</td></tr><tr><td class="reference"><b id="reference-anchor">[reference-anchor]</b></td><td class="top"><a href="mailto:julian.reschke@greenbytes.de">Reschke, J. F.</a>, &#8220;Test cases for RFC2629 formatting&#8221;, March&nbsp;2008.</td></tr></table><hr class="noprint"><h2 class="np"><a id="rfc.comments" href="#rfc.comments">Editorial Comments</a></h2><dl><dt id="cref-anchor">
     497</pre></div></div></div><hr class="noprint"><div><h2 id="rfc.section.12" class="np"><a href="#rfc.section.12">12.</a>&nbsp;Blank Lines</h2><div id="rfc.section.12.p.1"><p>Just a forced <br> line break.<a class="self" href="#rfc.section.12.p.1">&para;</a></p></div><div id="rfc.section.12.p.2"><p>One <br><br> blank line.<a class="self" href="#rfc.section.12.p.2">&para;</a></p></div><div id="rfc.section.12.p.3"><p>Seven <br><br><br><br><br><br><br><br> blank lines.<a class="self" href="#rfc.section.12.p.3">&para;</a></p></div><div id="rfc.section.12.p.4"><p>999 <br> blank lines (this is likely an attempt to force a pagebreak, thus the generated HTML should <em>not</em> contain the blank lines, but only one).<a class="self" href="#rfc.section.12.p.4">&para;</a></p></div></div><hr class="noprint"><div><h2 id="rfc.section.13" class="np"><a href="#rfc.section.13">13.</a>&nbsp;Other</h2><div><h3 id="rfc.section.13.1"><a href="#rfc.section.13.1">13.1</a>&nbsp;Comments in Text</h3><div id="rfc.section.13.1.p.1"><p>First sentence (before XML comment, invisible here).  Second sentence.<a class="self" href="#rfc.section.13.1.p.1">&para;</a></p></div></div><div><h3 id="rfc.section.13.2"><a href="#rfc.section.13.2">13.2</a>&nbsp;Special Characters</h3><div id="nbsp"><h4 id="rfc.section.13.2.1"><a href="#rfc.section.13.2.1">13.2.1</a>&nbsp;<a href="#nbsp">Non-Breaking Space</a></h4><div id="rfc.section.13.2.1.p.1"><p>Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space. Non&nbsp;breaking&nbsp;space.<a class="self" href="#rfc.section.13.2.1.p.1">&para;</a></p></div></div><div id="nbhy"><h4 id="rfc.section.13.2.2"><a href="#rfc.section.13.2.2">13.2.2</a>&nbsp;<a href="#nbhy">Non-Breaking Hyphen</a></h4><div id="rfc.section.13.2.2.p.1"><p>Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. Non&#8209;breaking&#8209;hyphen. (wrt Apache FOP, see &lt;<a href="http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-users/200905.mbox/%3C4A035745.10601@freemail.gr%3E">http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-users/200905.mbox/%3C4A035745.10601@freemail.gr%3E</a>&gt;)<a class="self" href="#rfc.section.13.2.2.p.1">&para;</a></p></div></div><div id="dashes"><h4 id="rfc.section.13.2.3"><a href="#rfc.section.13.2.3">13.2.3</a>&nbsp;<a href="#dashes">Dashes</a></h4><div id="rfc.section.13.2.3.p.1"><p>mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces. mdash &#8212; with regular spaces.<a class="self" href="#rfc.section.13.2.3.p.1">&para;</a></p></div><div id="rfc.section.13.2.3.p.2"><p>mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces. mdash&#8212;with no spaces.<a class="self" href="#rfc.section.13.2.3.p.2">&para;</a></p></div><div id="rfc.section.13.2.3.p.3"><p>mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces. mdash&#8202;&#8212;&#8202;with thin spaces.<a class="self" href="#rfc.section.13.2.3.p.3">&para;</a></p></div></div></div></div><h2 class="np" id="rfc.references"><a href="#rfc.section.14" id="rfc.section.14">14.</a> References</h2><dl class="reference"><dt id="RFC2026">[RFC2026]</dt><dd><a href="mailto:sob@harvard.edu">Bradner, S.</a>, &#8220;<a href="https://tools.ietf.org/html/rfc2026">The Internet Standards Process -- Revision 3</a>&#8221;, BCP&nbsp;9, RFC&nbsp;2026, <a href="http://dx.doi.org/10.17487/RFC2026">DOI&nbsp;10.17487/RFC2026</a>, October&nbsp;1996, &lt;<a href="http://www.rfc-editor.org/info/rfc2026">http://www.rfc-editor.org/info/rfc2026</a>&gt;.</dd><dt id="RFC10000">[RFC10000]</dt><dd>Doe, J., &#8220;<a href="https://tools.ietf.org/html/rfc10000">FUTURERFC</a>&#8221;, RFC&nbsp;10000, <a href="http://dx.doi.org/10.17487/RFC10000">DOI&nbsp;10.17487/RFC10000</a>, October&nbsp;2018, &lt;<a href="http://www.rfc-editor.org/info/rfc10000">http://www.rfc-editor.org/info/rfc10000</a>&gt;.</dd><dt id="RFC2396">[RFC2396]</dt><dd><a href="mailto:timbl@w3.org">Berners-Lee, T.</a>, <a href="mailto:fielding@ics.uci.edu">Fielding, R.T.</a>, and <a href="mailto:masinter@parc.xerox.com">L. Masinter</a>, &#8220;<a href="https://tools.ietf.org/html/rfc2396">Uniform Resource Identifiers (URI): Generic Syntax</a>&#8221;, RFC&nbsp;2396, <a href="http://dx.doi.org/10.17487/RFC2396">DOI&nbsp;10.17487/RFC2396</a>, August&nbsp;1998, &lt;<a href="http://www.rfc-editor.org/info/rfc2396">http://www.rfc-editor.org/info/rfc2396</a>&gt;.<br>This RFC will soon be updated, check &lt;<a href="http://cvs.apache.org/viewcvs.cgi/*checkout*/ietf-uri/rev-2002/rfc2396bis.html">http://cvs.apache.org/viewcvs.cgi/*checkout*/ietf-uri/rev-2002/rfc2396bis.html</a>&gt; for the latest draft.<br>The issues list is at &lt;<a href="http://cvs.apache.org/viewcvs.cgi/*checkout*/ietf-uri/rev-2002/issues.html">http://cvs.apache.org/viewcvs.cgi/*checkout*/ietf-uri/rev-2002/issues.html</a>&gt;.</dd><dt id="TSTCS">[TSTCS]</dt><dd><a href="mailto:julian.reschke@greenbytes.de">Reschke, J. F.</a>, &#8220;Test cases for RFC2629 formatting&#8221;, March&nbsp;2008.</dd><dt id="reference-anchor">[reference-anchor]</dt><dd><a href="mailto:julian.reschke@greenbytes.de">Reschke, J. F.</a>, &#8220;Test cases for RFC2629 formatting&#8221;, March&nbsp;2008.</dd></dl><hr class="noprint"><h2 class="np"><a id="rfc.comments" href="#rfc.comments">Editorial Comments</a></h2><dl><dt id="cref-anchor">
    497498        [cref-anchor]
    498499      </dt><dd>A comment.</dd><dt id="comment-test">
  • specs/rfc7540.html

    r2740 r2743  
    508508    }
    509509}
    510 </style><link rel="Contents" href="#rfc.toc"><link rel="Author" href="#rfc.authors"><link rel="Copyright" href="#rfc.copyrightnotice"><link rel="Chapter" title="1 Introduction" href="#rfc.section.1"><link rel="Chapter" title="2 HTTP/2 Protocol Overview" href="#rfc.section.2"><link rel="Chapter" title="3 Starting HTTP/2" href="#rfc.section.3"><link rel="Chapter" title="4 HTTP Frames" href="#rfc.section.4"><link rel="Chapter" title="5 Streams and Multiplexing" href="#rfc.section.5"><link rel="Chapter" title="6 Frame Definitions" href="#rfc.section.6"><link rel="Chapter" title="7 Error Codes" href="#rfc.section.7"><link rel="Chapter" title="8 HTTP Message Exchanges" href="#rfc.section.8"><link rel="Chapter" title="9 Additional HTTP Requirements/Considerations" href="#rfc.section.9"><link rel="Chapter" title="10 Security Considerations" href="#rfc.section.10"><link rel="Chapter" title="11 IANA Considerations" href="#rfc.section.11"><link rel="Chapter" href="#rfc.section.12" title="12 References"><link rel="Appendix" title="A TLS 1.2 Cipher Suite Black List" href="#rfc.section.A"><link rel="Appendix" title="Acknowledgements" href="#rfc.section.unnumbered-1"><link rel="Alternate" title="Authoritative ASCII Version" href="http://www.ietf.org/rfc/rfc7540.txt"><link rel="Help" title="RFC-Editor's Status Page" href="http://www.rfc-editor.org/info/rfc7540"><link rel="Help" title="Additional Information on tools.ietf.org" href="http://tools.ietf.org/html/rfc7540"><meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.742, 2015/09/24 15:44:12, XSLT vendor: SAXON 6.5.5 from Michael Kay http://saxon.sf.net/"><meta name="keywords" content="HTTP, SPDY, Web"><link rel="schema.dct" href="http://purl.org/dc/terms/"><meta name="dct.creator" content="Belshe, M."><meta name="dct.creator" content="Peon, R."><meta name="dct.creator" content="Thomson, M."><meta name="dct.identifier" content="urn:ietf:rfc:7540"><meta name="dct.issued" scheme="ISO8601" content="2015-05"><meta name="dct.abstract" content="This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients. This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged."><meta name="dct.isPartOf" content="urn:issn:2070-1721"><meta name="description" content="This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients. This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged."></head><body onload="getMeta(7540,&#34;rfc.meta&#34;);"><table class="header" id="rfc.headerblock"><tbody><tr><td class="left">Internet Engineering Task Force (IETF)</td><td class="right">M. Belshe</td></tr><tr><td class="left">Request for Comments: 7540</td><td class="right">BitGo</td></tr><tr><td class="left">Category: Standards Track</td><td class="right">R. Peon</td></tr><tr><td class="left">ISSN: 2070-1721</td><td class="right">Google, Inc</td></tr><tr><td class="left"></td><td class="right">M. Thomson, Editor</td></tr><tr><td class="left"></td><td class="right">Mozilla</td></tr><tr><td class="left"></td><td class="right">May 2015</td></tr></tbody></table><div id="rfc.title"><h1>Hypertext Transfer Protocol Version 2 (HTTP/2)</h1></div><h2 id="rfc.abstract"><a href="#rfc.abstract">Abstract</a></h2><p>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients.</p><p>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged.</p><div id="rfc.meta" class="docstatus"></div><div id="rfc.status"><h2><a href="#rfc.status">Status of This Memo</a></h2><p>This is an Internet Standards Track document.</p><p>This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.</p><p>Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at <a href="http://www.rfc-editor.org/info/rfc7540">http://www.rfc-editor.org/info/rfc7540</a>.</p></div><div id="rfc.copyrightnotice"><h2><a href="#rfc.copyrightnotice">Copyright Notice</a></h2><p>Copyright &copy; 2015 IETF Trust and the persons identified as the document authors. All rights reserved.</p><p>This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.</p></div><hr class="noprint"><div id="rfc.toc"><h2 class="np"><a href="#rfc.toc">Table of Contents</a></h2><ul class="toc"><li><a href="#rfc.section.1">1.</a>&nbsp;&nbsp;&nbsp;<a href="#intro">Introduction</a></li><li><a href="#rfc.section.2">2.</a>&nbsp;&nbsp;&nbsp;<a href="#Overview">HTTP/2 Protocol Overview</a><ul><li><a href="#rfc.section.2.1">2.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.2.1">Document Organization</a></li><li><a href="#rfc.section.2.2">2.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.2.2">Conventions and Terminology</a></li></ul></li><li><a href="#rfc.section.3">3.</a>&nbsp;&nbsp;&nbsp;<a href="#starting">Starting HTTP/2</a><ul><li><a href="#rfc.section.3.1">3.1</a>&nbsp;&nbsp;&nbsp;<a href="#versioning">HTTP/2 Version Identification</a></li><li><a href="#rfc.section.3.2">3.2</a>&nbsp;&nbsp;&nbsp;<a href="#discover-http">Starting HTTP/2 for "http" URIs</a><ul><li><a href="#rfc.section.3.2.1">3.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#Http2SettingsHeader">HTTP2-Settings Header Field</a></li></ul></li><li><a href="#rfc.section.3.3">3.3</a>&nbsp;&nbsp;&nbsp;<a href="#discover-https">Starting HTTP/2 for "https" URIs</a></li><li><a href="#rfc.section.3.4">3.4</a>&nbsp;&nbsp;&nbsp;<a href="#known-http">Starting HTTP/2 with Prior Knowledge</a></li><li><a href="#rfc.section.3.5">3.5</a>&nbsp;&nbsp;&nbsp;<a href="#ConnectionHeader">HTTP/2 Connection Preface</a></li></ul></li><li><a href="#rfc.section.4">4.</a>&nbsp;&nbsp;&nbsp;<a href="#FramingLayer">HTTP Frames</a><ul><li><a href="#rfc.section.4.1">4.1</a>&nbsp;&nbsp;&nbsp;<a href="#FrameHeader">Frame Format</a></li><li><a href="#rfc.section.4.2">4.2</a>&nbsp;&nbsp;&nbsp;<a href="#FrameSize">Frame Size</a></li><li><a href="#rfc.section.4.3">4.3</a>&nbsp;&nbsp;&nbsp;<a href="#HeaderBlock">Header Compression and Decompression</a></li></ul></li><li><a href="#rfc.section.5">5.</a>&nbsp;&nbsp;&nbsp;<a href="#StreamsLayer">Streams and Multiplexing</a><ul><li><a href="#rfc.section.5.1">5.1</a>&nbsp;&nbsp;&nbsp;<a href="#StreamStates">Stream States</a><ul><li><a href="#rfc.section.5.1.1">5.1.1</a>&nbsp;&nbsp;&nbsp;<a href="#StreamIdentifiers">Stream Identifiers</a></li><li><a href="#rfc.section.5.1.2">5.1.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.1.2">Stream Concurrency</a></li></ul></li><li><a href="#rfc.section.5.2">5.2</a>&nbsp;&nbsp;&nbsp;<a href="#FlowControl">Flow Control</a><ul><li><a href="#rfc.section.5.2.1">5.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#fc-principles">Flow-Control Principles</a></li><li><a href="#rfc.section.5.2.2">5.2.2</a>&nbsp;&nbsp;&nbsp;<a href="#DisableFlowControl">Appropriate Use of Flow Control</a></li></ul></li><li><a href="#rfc.section.5.3">5.3</a>&nbsp;&nbsp;&nbsp;<a href="#StreamPriority">Stream Priority</a><ul><li><a href="#rfc.section.5.3.1">5.3.1</a>&nbsp;&nbsp;&nbsp;<a href="#pri-depend">Stream Dependencies</a></li><li><a href="#rfc.section.5.3.2">5.3.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.3.2">Dependency Weighting</a></li><li><a href="#rfc.section.5.3.3">5.3.3</a>&nbsp;&nbsp;&nbsp;<a href="#reprioritize">Reprioritization</a></li><li><a href="#rfc.section.5.3.4">5.3.4</a>&nbsp;&nbsp;&nbsp;<a href="#priority-gc">Prioritization State Management</a></li><li><a href="#rfc.section.5.3.5">5.3.5</a>&nbsp;&nbsp;&nbsp;<a href="#pri-default">Default Priorities</a></li></ul></li><li><a href="#rfc.section.5.4">5.4</a>&nbsp;&nbsp;&nbsp;<a href="#ErrorHandler">Error Handling</a><ul><li><a href="#rfc.section.5.4.1">5.4.1</a>&nbsp;&nbsp;&nbsp;<a href="#ConnectionErrorHandler">Connection Error Handling</a></li><li><a href="#rfc.section.5.4.2">5.4.2</a>&nbsp;&nbsp;&nbsp;<a href="#StreamErrorHandler">Stream Error Handling</a></li><li><a href="#rfc.section.5.4.3">5.4.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.4.3">Connection Termination</a></li></ul></li><li><a href="#rfc.section.5.5">5.5</a>&nbsp;&nbsp;&nbsp;<a href="#extensibility">Extending HTTP/2</a></li></ul></li><li><a href="#rfc.section.6">6.</a>&nbsp;&nbsp;&nbsp;<a href="#FrameTypes">Frame Definitions</a><ul><li><a href="#rfc.section.6.1">6.1</a>&nbsp;&nbsp;&nbsp;<a href="#DATA">DATA</a></li><li><a href="#rfc.section.6.2">6.2</a>&nbsp;&nbsp;&nbsp;<a href="#HEADERS">HEADERS</a></li><li><a href="#rfc.section.6.3">6.3</a>&nbsp;&nbsp;&nbsp;<a href="#PRIORITY">PRIORITY</a></li><li><a href="#rfc.section.6.4">6.4</a>&nbsp;&nbsp;&nbsp;<a href="#RST_STREAM">RST_STREAM</a></li><li><a href="#rfc.section.6.5">6.5</a>&nbsp;&nbsp;&nbsp;<a href="#SETTINGS">SETTINGS</a><ul><li><a href="#rfc.section.6.5.1">6.5.1</a>&nbsp;&nbsp;&nbsp;<a href="#SettingFormat">SETTINGS Format</a></li><li><a href="#rfc.section.6.5.2">6.5.2</a>&nbsp;&nbsp;&nbsp;<a href="#SettingValues">Defined SETTINGS Parameters</a></li><li><a href="#rfc.section.6.5.3">6.5.3</a>&nbsp;&nbsp;&nbsp;<a href="#SettingsSync">Settings Synchronization</a></li></ul></li><li><a href="#rfc.section.6.6">6.6</a>&nbsp;&nbsp;&nbsp;<a href="#PUSH_PROMISE">PUSH_PROMISE</a></li><li><a href="#rfc.section.6.7">6.7</a>&nbsp;&nbsp;&nbsp;<a href="#PING">PING</a></li><li><a href="#rfc.section.6.8">6.8</a>&nbsp;&nbsp;&nbsp;<a href="#GOAWAY">GOAWAY</a></li><li><a href="#rfc.section.6.9">6.9</a>&nbsp;&nbsp;&nbsp;<a href="#WINDOW_UPDATE">WINDOW_UPDATE</a><ul><li><a href="#rfc.section.6.9.1">6.9.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.9.1">The Flow-Control Window</a></li><li><a href="#rfc.section.6.9.2">6.9.2</a>&nbsp;&nbsp;&nbsp;<a href="#InitialWindowSize">Initial Flow-Control Window Size</a></li><li><a href="#rfc.section.6.9.3">6.9.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.9.3">Reducing the Stream Window Size</a></li></ul></li><li><a href="#rfc.section.6.10">6.10</a>&nbsp;&nbsp;&nbsp;<a href="#CONTINUATION">CONTINUATION</a></li></ul></li><li><a href="#rfc.section.7">7.</a>&nbsp;&nbsp;&nbsp;<a href="#ErrorCodes">Error Codes</a></li><li><a href="#rfc.section.8">8.</a>&nbsp;&nbsp;&nbsp;<a href="#HTTPLayer">HTTP Message Exchanges</a><ul><li><a href="#rfc.section.8.1">8.1</a>&nbsp;&nbsp;&nbsp;<a href="#HttpSequence">HTTP Request/Response Exchange</a><ul><li><a href="#rfc.section.8.1.1">8.1.1</a>&nbsp;&nbsp;&nbsp;<a href="#informational-responses">Upgrading from HTTP/2</a></li><li><a href="#rfc.section.8.1.2">8.1.2</a>&nbsp;&nbsp;&nbsp;<a href="#HttpHeaders">HTTP Header Fields</a></li><li><a href="#rfc.section.8.1.3">8.1.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.8.1.3">Examples</a></li><li><a href="#rfc.section.8.1.4">8.1.4</a>&nbsp;&nbsp;&nbsp;<a href="#Reliability">Request Reliability Mechanisms in HTTP/2</a></li></ul></li><li><a href="#rfc.section.8.2">8.2</a>&nbsp;&nbsp;&nbsp;<a href="#PushResources">Server Push</a><ul><li><a href="#rfc.section.8.2.1">8.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#PushRequests">Push Requests</a></li><li><a href="#rfc.section.8.2.2">8.2.2</a>&nbsp;&nbsp;&nbsp;<a href="#PushResponses">Push Responses</a></li></ul></li><li><a href="#rfc.section.8.3">8.3</a>&nbsp;&nbsp;&nbsp;<a href="#CONNECT">The CONNECT Method</a></li></ul></li><li><a href="#rfc.section.9">9.</a>&nbsp;&nbsp;&nbsp;<a href="#HttpExtra">Additional HTTP Requirements/Considerations</a><ul><li><a href="#rfc.section.9.1">9.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.9.1">Connection Management</a><ul><li><a href="#rfc.section.9.1.1">9.1.1</a>&nbsp;&nbsp;&nbsp;<a href="#reuse">Connection Reuse</a></li><li><a href="#rfc.section.9.1.2">9.1.2</a>&nbsp;&nbsp;&nbsp;<a href="#MisdirectedRequest">The 421 (Misdirected Request) Status Code</a></li></ul></li><li><a href="#rfc.section.9.2">9.2</a>&nbsp;&nbsp;&nbsp;<a href="#TLSUsage">Use of TLS Features</a><ul><li><a href="#rfc.section.9.2.1">9.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.9.2.1">TLS 1.2 Features</a></li><li><a href="#rfc.section.9.2.2">9.2.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.9.2.2">TLS 1.2 Cipher Suites</a></li></ul></li></ul></li><li><a href="#rfc.section.10">10.</a>&nbsp;&nbsp;&nbsp;<a href="#security">Security Considerations</a><ul><li><a href="#rfc.section.10.1">10.1</a>&nbsp;&nbsp;&nbsp;<a href="#authority">Server Authority</a></li><li><a href="#rfc.section.10.2">10.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.10.2">Cross-Protocol Attacks</a></li><li><a href="#rfc.section.10.3">10.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.10.3">Intermediary Encapsulation Attacks</a></li><li><a href="#rfc.section.10.4">10.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.10.4">Cacheability of Pushed Responses</a></li><li><a href="#rfc.section.10.5">10.5</a>&nbsp;&nbsp;&nbsp;<a href="#dos">Denial-of-Service Considerations</a><ul><li><a href="#rfc.section.10.5.1">10.5.1</a>&nbsp;&nbsp;&nbsp;<a href="#MaxHeaderBlock">Limits on Header Block Size</a></li><li><a href="#rfc.section.10.5.2">10.5.2</a>&nbsp;&nbsp;&nbsp;<a href="#connectDos">CONNECT Issues</a></li></ul></li><li><a href="#rfc.section.10.6">10.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.10.6">Use of Compression</a></li><li><a href="#rfc.section.10.7">10.7</a>&nbsp;&nbsp;&nbsp;<a href="#padding">Use of Padding</a></li><li><a href="#rfc.section.10.8">10.8</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.10.8">Privacy Considerations</a></li></ul></li><li><a href="#rfc.section.11">11.</a>&nbsp;&nbsp;&nbsp;<a href="#iana">IANA Considerations</a><ul><li><a href="#rfc.section.11.1">11.1</a>&nbsp;&nbsp;&nbsp;<a href="#iana-alpn">Registration of HTTP/2 Identification Strings</a></li><li><a href="#rfc.section.11.2">11.2</a>&nbsp;&nbsp;&nbsp;<a href="#iana-frames">Frame Type Registry</a></li><li><a href="#rfc.section.11.3">11.3</a>&nbsp;&nbsp;&nbsp;<a href="#iana-settings">Settings Registry</a></li><li><a href="#rfc.section.11.4">11.4</a>&nbsp;&nbsp;&nbsp;<a href="#iana-errors">Error Code Registry</a></li><li><a href="#rfc.section.11.5">11.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.5">HTTP2-Settings Header Field Registration</a></li><li><a href="#rfc.section.11.6">11.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.6">PRI Method Registration</a></li><li><a href="#rfc.section.11.7">11.7</a>&nbsp;&nbsp;&nbsp;<a href="#iana-MisdirectedRequest">The 421 (Misdirected Request) HTTP Status Code</a></li><li><a href="#rfc.section.11.8">11.8</a>&nbsp;&nbsp;&nbsp;<a href="#iana-h2c">The h2c Upgrade Token</a></li></ul></li><li><a href="#rfc.section.12">12.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references">References</a><ul><li><a href="#rfc.section.12.1">12.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.1">Normative References</a></li><li><a href="#rfc.section.12.2">12.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.2">Informative References</a></li></ul></li><li><a href="#rfc.section.A">A.</a>&nbsp;&nbsp;&nbsp;<a href="#BadCipherSuites">TLS 1.2 Cipher Suite Black List</a></li><li><a href="#rfc.section.unnumbered-1">Acknowledgements</a></li><li><a href="#rfc.authors">Authors' Addresses</a></li></ul></div><ul class="toc"><li>Figures
     510</style><link rel="Contents" href="#rfc.toc"><link rel="Author" href="#rfc.authors"><link rel="Copyright" href="#rfc.copyrightnotice"><link rel="Chapter" title="1 Introduction" href="#rfc.section.1"><link rel="Chapter" title="2 HTTP/2 Protocol Overview" href="#rfc.section.2"><link rel="Chapter" title="3 Starting HTTP/2" href="#rfc.section.3"><link rel="Chapter" title="4 HTTP Frames" href="#rfc.section.4"><link rel="Chapter" title="5 Streams and Multiplexing" href="#rfc.section.5"><link rel="Chapter" title="6 Frame Definitions" href="#rfc.section.6"><link rel="Chapter" title="7 Error Codes" href="#rfc.section.7"><link rel="Chapter" title="8 HTTP Message Exchanges" href="#rfc.section.8"><link rel="Chapter" title="9 Additional HTTP Requirements/Considerations" href="#rfc.section.9"><link rel="Chapter" title="10 Security Considerations" href="#rfc.section.10"><link rel="Chapter" title="11 IANA Considerations" href="#rfc.section.11"><link rel="Chapter" href="#rfc.section.12" title="12 References"><link rel="Appendix" title="A TLS 1.2 Cipher Suite Black List" href="#rfc.section.A"><link rel="Appendix" title="Acknowledgements" href="#rfc.section.unnumbered-1"><link rel="Alternate" title="Authoritative ASCII Version" href="http://www.ietf.org/rfc/rfc7540.txt"><link rel="Help" title="RFC-Editor's Status Page" href="http://www.rfc-editor.org/info/rfc7540"><link rel="Help" title="Additional Information on tools.ietf.org" href="http://tools.ietf.org/html/rfc7540"><meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.743, 2015/09/25 12:36:08, XSLT vendor: SAXON 6.5.5 from Michael Kay http://saxon.sf.net/"><meta name="keywords" content="HTTP, SPDY, Web"><link rel="schema.dct" href="http://purl.org/dc/terms/"><meta name="dct.creator" content="Belshe, M."><meta name="dct.creator" content="Peon, R."><meta name="dct.creator" content="Thomson, M."><meta name="dct.identifier" content="urn:ietf:rfc:7540"><meta name="dct.issued" scheme="ISO8601" content="2015-05"><meta name="dct.abstract" content="This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients. This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged."><meta name="dct.isPartOf" content="urn:issn:2070-1721"><meta name="description" content="This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients. This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged."></head><body onload="getMeta(7540,&#34;rfc.meta&#34;);"><table class="header" id="rfc.headerblock"><tbody><tr><td class="left">Internet Engineering Task Force (IETF)</td><td class="right">M. Belshe</td></tr><tr><td class="left">Request for Comments: 7540</td><td class="right">BitGo</td></tr><tr><td class="left">Category: Standards Track</td><td class="right">R. Peon</td></tr><tr><td class="left">ISSN: 2070-1721</td><td class="right">Google, Inc</td></tr><tr><td class="left"></td><td class="right">M. Thomson, Editor</td></tr><tr><td class="left"></td><td class="right">Mozilla</td></tr><tr><td class="left"></td><td class="right">May 2015</td></tr></tbody></table><div id="rfc.title"><h1>Hypertext Transfer Protocol Version 2 (HTTP/2)</h1></div><h2 id="rfc.abstract"><a href="#rfc.abstract">Abstract</a></h2><p>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients.</p><p>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged.</p><div id="rfc.meta" class="docstatus"></div><div id="rfc.status"><h2><a href="#rfc.status">Status of This Memo</a></h2><p>This is an Internet Standards Track document.</p><p>This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.</p><p>Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at <a href="http://www.rfc-editor.org/info/rfc7540">http://www.rfc-editor.org/info/rfc7540</a>.</p></div><div id="rfc.copyrightnotice"><h2><a href="#rfc.copyrightnotice">Copyright Notice</a></h2><p>Copyright &copy; 2015 IETF Trust and the persons identified as the document authors. All rights reserved.</p><p>This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.</p></div><hr class="noprint"><div id="rfc.toc"><h2 class="np"><a href="#rfc.toc">Table of Contents</a></h2><ul class="toc"><li><a href="#rfc.section.1">1.</a>&nbsp;&nbsp;&nbsp;<a href="#intro">Introduction</a></li><li><a href="#rfc.section.2">2.</a>&nbsp;&nbsp;&nbsp;<a href="#Overview">HTTP/2 Protocol Overview</a><ul><li><a href="#rfc.section.2.1">2.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.2.1">Document Organization</a></li><li><a href="#rfc.section.2.2">2.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.2.2">Conventions and Terminology</a></li></ul></li><li><a href="#rfc.section.3">3.</a>&nbsp;&nbsp;&nbsp;<a href="#starting">Starting HTTP/2</a><ul><li><a href="#rfc.section.3.1">3.1</a>&nbsp;&nbsp;&nbsp;<a href="#versioning">HTTP/2 Version Identification</a></li><li><a href="#rfc.section.3.2">3.2</a>&nbsp;&nbsp;&nbsp;<a href="#discover-http">Starting HTTP/2 for "http" URIs</a><ul><li><a href="#rfc.section.3.2.1">3.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#Http2SettingsHeader">HTTP2-Settings Header Field</a></li></ul></li><li><a href="#rfc.section.3.3">3.3</a>&nbsp;&nbsp;&nbsp;<a href="#discover-https">Starting HTTP/2 for "https" URIs</a></li><li><a href="#rfc.section.3.4">3.4</a>&nbsp;&nbsp;&nbsp;<a href="#known-http">Starting HTTP/2 with Prior Knowledge</a></li><li><a href="#rfc.section.3.5">3.5</a>&nbsp;&nbsp;&nbsp;<a href="#ConnectionHeader">HTTP/2 Connection Preface</a></li></ul></li><li><a href="#rfc.section.4">4.</a>&nbsp;&nbsp;&nbsp;<a href="#FramingLayer">HTTP Frames</a><ul><li><a href="#rfc.section.4.1">4.1</a>&nbsp;&nbsp;&nbsp;<a href="#FrameHeader">Frame Format</a></li><li><a href="#rfc.section.4.2">4.2</a>&nbsp;&nbsp;&nbsp;<a href="#FrameSize">Frame Size</a></li><li><a href="#rfc.section.4.3">4.3</a>&nbsp;&nbsp;&nbsp;<a href="#HeaderBlock">Header Compression and Decompression</a></li></ul></li><li><a href="#rfc.section.5">5.</a>&nbsp;&nbsp;&nbsp;<a href="#StreamsLayer">Streams and Multiplexing</a><ul><li><a href="#rfc.section.5.1">5.1</a>&nbsp;&nbsp;&nbsp;<a href="#StreamStates">Stream States</a><ul><li><a href="#rfc.section.5.1.1">5.1.1</a>&nbsp;&nbsp;&nbsp;<a href="#StreamIdentifiers">Stream Identifiers</a></li><li><a href="#rfc.section.5.1.2">5.1.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.1.2">Stream Concurrency</a></li></ul></li><li><a href="#rfc.section.5.2">5.2</a>&nbsp;&nbsp;&nbsp;<a href="#FlowControl">Flow Control</a><ul><li><a href="#rfc.section.5.2.1">5.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#fc-principles">Flow-Control Principles</a></li><li><a href="#rfc.section.5.2.2">5.2.2</a>&nbsp;&nbsp;&nbsp;<a href="#DisableFlowControl">Appropriate Use of Flow Control</a></li></ul></li><li><a href="#rfc.section.5.3">5.3</a>&nbsp;&nbsp;&nbsp;<a href="#StreamPriority">Stream Priority</a><ul><li><a href="#rfc.section.5.3.1">5.3.1</a>&nbsp;&nbsp;&nbsp;<a href="#pri-depend">Stream Dependencies</a></li><li><a href="#rfc.section.5.3.2">5.3.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.3.2">Dependency Weighting</a></li><li><a href="#rfc.section.5.3.3">5.3.3</a>&nbsp;&nbsp;&nbsp;<a href="#reprioritize">Reprioritization</a></li><li><a href="#rfc.section.5.3.4">5.3.4</a>&nbsp;&nbsp;&nbsp;<a href="#priority-gc">Prioritization State Management</a></li><li><a href="#rfc.section.5.3.5">5.3.5</a>&nbsp;&nbsp;&nbsp;<a href="#pri-default">Default Priorities</a></li></ul></li><li><a href="#rfc.section.5.4">5.4</a>&nbsp;&nbsp;&nbsp;<a href="#ErrorHandler">Error Handling</a><ul><li><a href="#rfc.section.5.4.1">5.4.1</a>&nbsp;&nbsp;&nbsp;<a href="#ConnectionErrorHandler">Connection Error Handling</a></li><li><a href="#rfc.section.5.4.2">5.4.2</a>&nbsp;&nbsp;&nbsp;<a href="#StreamErrorHandler">Stream Error Handling</a></li><li><a href="#rfc.section.5.4.3">5.4.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.4.3">Connection Termination</a></li></ul></li><li><a href="#rfc.section.5.5">5.5</a>&nbsp;&nbsp;&nbsp;<a href="#extensibility">Extending HTTP/2</a></li></ul></li><li><a href="#rfc.section.6">6.</a>&nbsp;&nbsp;&nbsp;<a href="#FrameTypes">Frame Definitions</a><ul><li><a href="#rfc.section.6.1">6.1</a>&nbsp;&nbsp;&nbsp;<a href="#DATA">DATA</a></li><li><a href="#rfc.section.6.2">6.2</a>&nbsp;&nbsp;&nbsp;<a href="#HEADERS">HEADERS</a></li><li><a href="#rfc.section.6.3">6.3</a>&nbsp;&nbsp;&nbsp;<a href="#PRIORITY">PRIORITY</a></li><li><a href="#rfc.section.6.4">6.4</a>&nbsp;&nbsp;&nbsp;<a href="#RST_STREAM">RST_STREAM</a></li><li><a href="#rfc.section.6.5">6.5</a>&nbsp;&nbsp;&nbsp;<a href="#SETTINGS">SETTINGS</a><ul><li><a href="#rfc.section.6.5.1">6.5.1</a>&nbsp;&nbsp;&nbsp;<a href="#SettingFormat">SETTINGS Format</a></li><li><a href="#rfc.section.6.5.2">6.5.2</a>&nbsp;&nbsp;&nbsp;<a href="#SettingValues">Defined SETTINGS Parameters</a></li><li><a href="#rfc.section.6.5.3">6.5.3</a>&nbsp;&nbsp;&nbsp;<a href="#SettingsSync">Settings Synchronization</a></li></ul></li><li><a href="#rfc.section.6.6">6.6</a>&nbsp;&nbsp;&nbsp;<a href="#PUSH_PROMISE">PUSH_PROMISE</a></li><li><a href="#rfc.section.6.7">6.7</a>&nbsp;&nbsp;&nbsp;<a href="#PING">PING</a></li><li><a href="#rfc.section.6.8">6.8</a>&nbsp;&nbsp;&nbsp;<a href="#GOAWAY">GOAWAY</a></li><li><a href="#rfc.section.6.9">6.9</a>&nbsp;&nbsp;&nbsp;<a href="#WINDOW_UPDATE">WINDOW_UPDATE</a><ul><li><a href="#rfc.section.6.9.1">6.9.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.9.1">The Flow-Control Window</a></li><li><a href="#rfc.section.6.9.2">6.9.2</a>&nbsp;&nbsp;&nbsp;<a href="#InitialWindowSize">Initial Flow-Control Window Size</a></li><li><a href="#rfc.section.6.9.3">6.9.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.9.3">Reducing the Stream Window Size</a></li></ul></li><li><a href="#rfc.section.6.10">6.10</a>&nbsp;&nbsp;&nbsp;<a href="#CONTINUATION">CONTINUATION</a></li></ul></li><li><a href="#rfc.section.7">7.</a>&nbsp;&nbsp;&nbsp;<a href="#ErrorCodes">Error Codes</a></li><li><a href="#rfc.section.8">8.</a>&nbsp;&nbsp;&nbsp;<a href="#HTTPLayer">HTTP Message Exchanges</a><ul><li><a href="#rfc.section.8.1">8.1</a>&nbsp;&nbsp;&nbsp;<a href="#HttpSequence">HTTP Request/Response Exchange</a><ul><li><a href="#rfc.section.8.1.1">8.1.1</a>&nbsp;&nbsp;&nbsp;<a href="#informational-responses">Upgrading from HTTP/2</a></li><li><a href="#rfc.section.8.1.2">8.1.2</a>&nbsp;&nbsp;&nbsp;<a href="#HttpHeaders">HTTP Header Fields</a></li><li><a href="#rfc.section.8.1.3">8.1.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.8.1.3">Examples</a></li><li><a href="#rfc.section.8.1.4">8.1.4</a>&nbsp;&nbsp;&nbsp;<a href="#Reliability">Request Reliability Mechanisms in HTTP/2</a></li></ul></li><li><a href="#rfc.section.8.2">8.2</a>&nbsp;&nbsp;&nbsp;<a href="#PushResources">Server Push</a><ul><li><a href="#rfc.section.8.2.1">8.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#PushRequests">Push Requests</a></li><li><a href="#rfc.section.8.2.2">8.2.2</a>&nbsp;&nbsp;&nbsp;<a href="#PushResponses">Push Responses</a></li></ul></li><li><a href="#rfc.section.8.3">8.3</a>&nbsp;&nbsp;&nbsp;<a href="#CONNECT">The CONNECT Method</a></li></ul></li><li><a href="#rfc.section.9">9.</a>&nbsp;&nbsp;&nbsp;<a href="#HttpExtra">Additional HTTP Requirements/Considerations</a><ul><li><a href="#rfc.section.9.1">9.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.9.1">Connection Management</a><ul><li><a href="#rfc.section.9.1.1">9.1.1</a>&nbsp;&nbsp;&nbsp;<a href="#reuse">Connection Reuse</a></li><li><a href="#rfc.section.9.1.2">9.1.2</a>&nbsp;&nbsp;&nbsp;<a href="#MisdirectedRequest">The 421 (Misdirected Request) Status Code</a></li></ul></li><li><a href="#rfc.section.9.2">9.2</a>&nbsp;&nbsp;&nbsp;<a href="#TLSUsage">Use of TLS Features</a><ul><li><a href="#rfc.section.9.2.1">9.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.9.2.1">TLS 1.2 Features</a></li><li><a href="#rfc.section.9.2.2">9.2.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.9.2.2">TLS 1.2 Cipher Suites</a></li></ul></li></ul></li><li><a href="#rfc.section.10">10.</a>&nbsp;&nbsp;&nbsp;<a href="#security">Security Considerations</a><ul><li><a href="#rfc.section.10.1">10.1</a>&nbsp;&nbsp;&nbsp;<a href="#authority">Server Authority</a></li><li><a href="#rfc.section.10.2">10.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.10.2">Cross-Protocol Attacks</a></li><li><a href="#rfc.section.10.3">10.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.10.3">Intermediary Encapsulation Attacks</a></li><li><a href="#rfc.section.10.4">10.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.10.4">Cacheability of Pushed Responses</a></li><li><a href="#rfc.section.10.5">10.5</a>&nbsp;&nbsp;&nbsp;<a href="#dos">Denial-of-Service Considerations</a><ul><li><a href="#rfc.section.10.5.1">10.5.1</a>&nbsp;&nbsp;&nbsp;<a href="#MaxHeaderBlock">Limits on Header Block Size</a></li><li><a href="#rfc.section.10.5.2">10.5.2</a>&nbsp;&nbsp;&nbsp;<a href="#connectDos">CONNECT Issues</a></li></ul></li><li><a href="#rfc.section.10.6">10.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.10.6">Use of Compression</a></li><li><a href="#rfc.section.10.7">10.7</a>&nbsp;&nbsp;&nbsp;<a href="#padding">Use of Padding</a></li><li><a href="#rfc.section.10.8">10.8</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.10.8">Privacy Considerations</a></li></ul></li><li><a href="#rfc.section.11">11.</a>&nbsp;&nbsp;&nbsp;<a href="#iana">IANA Considerations</a><ul><li><a href="#rfc.section.11.1">11.1</a>&nbsp;&nbsp;&nbsp;<a href="#iana-alpn">Registration of HTTP/2 Identification Strings</a></li><li><a href="#rfc.section.11.2">11.2</a>&nbsp;&nbsp;&nbsp;<a href="#iana-frames">Frame Type Registry</a></li><li><a href="#rfc.section.11.3">11.3</a>&nbsp;&nbsp;&nbsp;<a href="#iana-settings">Settings Registry</a></li><li><a href="#rfc.section.11.4">11.4</a>&nbsp;&nbsp;&nbsp;<a href="#iana-errors">Error Code Registry</a></li><li><a href="#rfc.section.11.5">11.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.5">HTTP2-Settings Header Field Registration</a></li><li><a href="#rfc.section.11.6">11.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.11.6">PRI Method Registration</a></li><li><a href="#rfc.section.11.7">11.7</a>&nbsp;&nbsp;&nbsp;<a href="#iana-MisdirectedRequest">The 421 (Misdirected Request) HTTP Status Code</a></li><li><a href="#rfc.section.11.8">11.8</a>&nbsp;&nbsp;&nbsp;<a href="#iana-h2c">The h2c Upgrade Token</a></li></ul></li><li><a href="#rfc.section.12">12.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references">References</a><ul><li><a href="#rfc.section.12.1">12.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.1">Normative References</a></li><li><a href="#rfc.section.12.2">12.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.2">Informative References</a></li></ul></li><li><a href="#rfc.section.A">A.</a>&nbsp;&nbsp;&nbsp;<a href="#BadCipherSuites">TLS 1.2 Cipher Suite Black List</a></li><li><a href="#rfc.section.unnumbered-1">Acknowledgements</a></li><li><a href="#rfc.authors">Authors' Addresses</a></li></ul></div><ul class="toc"><li>Figures
    511511        <ul><li><a href="#rfc.figure.1">Figure 1: Frame Layout</a></li><li><a href="#rfc.figure.2">Figure 2: Stream States</a></li><li><a href="#rfc.figure.3">Figure 3: Example of Default Dependency Creation</a></li><li><a href="#rfc.figure.4">Figure 4: Example of Exclusive Dependency Creation</a></li><li><a href="#rfc.figure.5">Figure 5: Example of Dependency Reordering</a></li><li><a href="#rfc.figure.6">Figure 6: DATA Frame Payload</a></li><li><a href="#rfc.figure.7">Figure 7: HEADERS Frame Payload</a></li><li><a href="#rfc.figure.8">Figure 8: PRIORITY Frame Payload</a></li><li><a href="#rfc.figure.9">Figure 9: RST_STREAM Frame Payload</a></li><li><a href="#rfc.figure.10">Figure 10: Setting Format</a></li><li><a href="#rfc.figure.11">Figure 11: PUSH_PROMISE Payload Format</a></li><li><a href="#rfc.figure.12">Figure 12: PING Payload Format</a></li><li><a href="#rfc.figure.13">Figure 13: GOAWAY Payload Format</a></li><li><a href="#rfc.figure.14">Figure 14: WINDOW_UPDATE Payload Format</a></li><li><a href="#rfc.figure.15">Figure 15: CONTINUATION Frame Payload</a></li></ul></li></ul><div id="intro"><h2 id="rfc.section.1" class="np"><a href="#rfc.section.1">1.</a>&nbsp;<a href="#intro">Introduction</a></h2><div id="rfc.section.1.p.1"><p>The Hypertext Transfer Protocol (HTTP) is a wildly successful protocol. However, the way HTTP/1.1 uses the underlying transport (<a href="#RFC7230"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[RFC7230]</cite></a>, <a href="https://svn.tools.ietf.org/svn/wg/httpbis/specs/rfc7230.html#connection.management" title="Connection Management">Section 6</a>) has several characteristics that have a negative overall effect on application performance today.<a class="self" href="#rfc.section.1.p.1">&para;</a></p></div><div id="rfc.section.1.p.2"><p>In particular, HTTP/1.0 allowed only one request to be outstanding at a time on a given TCP connection. HTTP/1.1 added request pipelining, but this only partially addressed request concurrency and still suffers from head-of-line blocking. Therefore, HTTP/1.0 and HTTP/1.1 clients that need to make many requests use multiple connections to a server in order to achieve concurrency and thereby reduce latency.<a class="self" href="#rfc.section.1.p.2">&para;</a></p></div><div id="rfc.section.1.p.3"><p>Furthermore, HTTP header fields are often repetitive and verbose, causing unnecessary network traffic as well as causing the initial <a href="#TCP">TCP</a> <cite title="Transmission Control Protocol">[TCP]</cite> congestion window to quickly fill. This can result in excessive latency when multiple requests are made on a new TCP connection.<a class="self" href="#rfc.section.1.p.3">&para;</a></p></div><div id="rfc.section.1.p.4"><p>HTTP/2 addresses these issues by defining an optimized mapping of HTTP's semantics to an underlying connection. Specifically, it allows interleaving of request and response messages on the same connection and uses an efficient coding for HTTP header fields. It also allows prioritization of requests, letting more important requests complete more quickly, further improving performance.<a class="self" href="#rfc.section.1.p.4">&para;</a></p></div><div id="rfc.section.1.p.5"><p>The resulting protocol is more friendly to the network because fewer TCP connections can be used in comparison to HTTP/1.x. This means less competition with other flows and longer-lived connections, which in turn lead to better utilization of available network capacity.<a class="self" href="#rfc.section.1.p.5">&para;</a></p></div><div id="rfc.section.1.p.6"><p>Finally, HTTP/2 also enables more efficient processing of messages through use of binary message framing.<a class="self" href="#rfc.section.1.p.6">&para;</a></p></div></div><div id="Overview"><h2 id="rfc.section.2"><a href="#rfc.section.2">2.</a>&nbsp;<a href="#Overview">HTTP/2 Protocol Overview</a></h2><div id="rfc.section.2.p.1"><p>HTTP/2 provides an optimized transport for HTTP semantics. HTTP/2 supports all of the core features of HTTP/1.1 but aims to be more efficient in several ways.<a class="self" href="#rfc.section.2.p.1">&para;</a></p></div><div id="rfc.section.2.p.2"><p>The basic protocol unit in HTTP/2 is a frame (<a href="#FrameHeader" title="Frame Format">Section&nbsp;4.1</a>). Each frame type serves a different purpose. For example, <a href="#HEADERS" class="smpl">HEADERS</a> and <a href="#DATA" class="smpl">DATA</a> frames form the basis of HTTP requests and responses (<a href="#HttpSequence" title="HTTP Request/Response Exchange">Section&nbsp;8.1</a>); other frame types like <a href="#SETTINGS" class="smpl">SETTINGS</a>, <a href="#WINDOW_UPDATE" class="smpl">WINDOW_UPDATE</a>, and <a href="#PUSH_PROMISE" class="smpl">PUSH_PROMISE</a> are used in support of other HTTP/2 features.<a class="self" href="#rfc.section.2.p.2">&para;</a></p></div><div id="rfc.section.2.p.3"><p>Multiplexing of requests is achieved by having each HTTP request/response exchange associated with its own stream (<a href="#StreamsLayer" title="Streams and Multiplexing">Section&nbsp;5</a>). Streams are largely independent of each other, so a blocked or stalled request or response does not prevent progress on other streams.<a class="self" href="#rfc.section.2.p.3">&para;</a></p></div><div id="rfc.section.2.p.4"><p>Flow control and prioritization ensure that it is possible to efficiently use multiplexed streams. Flow control (<a href="#FlowControl" title="Flow Control">Section&nbsp;5.2</a>) helps to ensure that only data that can be used by a receiver is transmitted. Prioritization (<a href="#StreamPriority" title="Stream Priority">Section&nbsp;5.3</a>) ensures that limited resources can be directed to the most important streams first.<a class="self" href="#rfc.section.2.p.4">&para;</a></p></div><div id="rfc.section.2.p.5"><p>HTTP/2 adds a new interaction mode whereby a server can push responses to a client (<a href="#PushResources" title="Server Push">Section&nbsp;8.2</a>). Server push allows a server to speculatively send data to a client that the server anticipates the client will need, trading off some network usage against a potential latency gain. The server does this by synthesizing a request, which it sends as a <a href="#PUSH_PROMISE" class="smpl">PUSH_PROMISE</a> frame. The server is then able to send a response to the synthetic request on a separate stream.<a class="self" href="#rfc.section.2.p.5">&para;</a></p></div><div id="rfc.section.2.p.6"><p>Because HTTP header fields used in a connection can contain large amounts of redundant data, frames that contain them are compressed (<a href="#HeaderBlock" title="Header Compression and Decompression">Section&nbsp;4.3</a>). This has especially advantageous impact upon request sizes in the common case, allowing many requests to be compressed into one packet.<a class="self" href="#rfc.section.2.p.6">&para;</a></p></div><div><h3 id="rfc.section.2.1"><a href="#rfc.section.2.1">2.1</a>&nbsp;Document Organization</h3><div id="rfc.section.2.1.p.1"><p>The HTTP/2 specification is split into four parts: <a class="self" href="#rfc.section.2.1.p.1">&para;</a></p><ul><li>Starting HTTP/2 (<a href="#starting" title="Starting HTTP/2">Section&nbsp;3</a>) covers how an HTTP/2 connection is initiated.</li><li>The frame (<a href="#FramingLayer" title="HTTP Frames">Section&nbsp;4</a>) and stream (<a href="#StreamsLayer" title="Streams and Multiplexing">Section&nbsp;5</a>) layers describe the way HTTP/2 frames are structured and formed into multiplexed streams.</li><li>Frame (<a href="#FrameTypes" title="Frame Definitions">Section&nbsp;6</a>) and error (<a href="#ErrorCodes" title="Error Codes">Section&nbsp;7</a>) definitions include details of the frame and error types used in HTTP/2.</li><li>HTTP mappings (<a href="#HTTPLayer" title="HTTP Message Exchanges">Section&nbsp;8</a>) and additional requirements (<a href="#HttpExtra" title="Additional HTTP Requirements/Considerations">Section&nbsp;9</a>) describe how HTTP semantics are expressed using frames and streams.</li></ul></div><div id="rfc.section.2.1.p.2"><p>While some of the frame and stream layer concepts are isolated from HTTP, this specification does not define a completely generic frame layer. The frame and stream layers are tailored to the needs of the HTTP protocol and server push.<a class="self" href="#rfc.section.2.1.p.2">&para;</a></p></div></div><div><h3 id="rfc.section.2.2"><a href="#rfc.section.2.2">2.2</a>&nbsp;Conventions and Terminology</h3><div id="rfc.section.2.2.p.1"><p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <a href="#RFC2119">RFC 2119</a> <cite title="Key words for use in RFCs to Indicate Requirement Levels">[RFC2119]</cite>.<a class="self" href="#rfc.section.2.2.p.1">&para;</a></p></div><div id="rfc.section.2.2.p.2"><p>All numeric values are in network byte order. Values are unsigned unless otherwise indicated. Literal values are provided in decimal or hexadecimal as appropriate. Hexadecimal literals are prefixed with <tt>0x</tt> to distinguish them from decimal literals.<a class="self" href="#rfc.section.2.2.p.2">&para;</a></p></div><div id="rfc.section.2.2.p.3"><p>The following terms are used: <a class="self" href="#rfc.section.2.2.p.3">&para;</a></p><dl><dt>client:</dt><dd>The endpoint that initiates an HTTP/2 connection. Clients send HTTP requests and receive HTTP responses.</dd><dt>connection:</dt><dd>A transport-layer connection between two endpoints.</dd><dt>connection error:</dt><dd>An error that affects the entire HTTP/2 connection.</dd><dt>endpoint:</dt><dd>Either the client or server of the connection.</dd><dt>frame:</dt><dd>The smallest unit of communication within an HTTP/2 connection, consisting of a header and a variable-length sequence of octets structured according to the frame type.</dd><dt>peer:</dt><dd>An endpoint. When discussing a particular endpoint, "peer" refers to the endpoint that is remote to the primary subject of discussion.</dd><dt>receiver:</dt><dd>An endpoint that is receiving frames.</dd><dt>sender:</dt><dd>An endpoint that is transmitting frames.</dd><dt>server:</dt><dd>The endpoint that accepts an HTTP/2 connection. Servers receive HTTP requests and send HTTP responses.</dd><dt>stream:</dt><dd>A bidirectional flow of frames within the HTTP/2 connection.</dd><dt>stream error:</dt><dd>An error on the individual HTTP/2 stream.</dd></dl></div><div id="rfc.section.2.2.p.4"><p>Finally, the terms "gateway", "intermediary", "proxy", and "tunnel" are defined in <a href="https://svn.tools.ietf.org/svn/wg/httpbis/specs/rfc7230.html#intermediaries" title="Intermediaries">Section 2.3</a> of <a href="#RFC7230"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[RFC7230]</cite></a>. Intermediaries act as both client and server at different times.<a class="self" href="#rfc.section.2.2.p.4">&para;</a></p></div><div id="rfc.section.2.2.p.5"><p>The term "payload body" is defined in <a href="https://svn.tools.ietf.org/svn/wg/httpbis/specs/rfc7230.html#message.body" title="Message Body">Section 3.3</a> of <a href="#RFC7230"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[RFC7230]</cite></a>.<a class="self" href="#rfc.section.2.2.p.5">&para;</a></p></div></div></div><div id="starting"><h2 id="rfc.section.3"><a href="#rfc.section.3">3.</a>&nbsp;<a href="#starting">Starting HTTP/2</a></h2><div id="rfc.section.3.p.1"><p>An HTTP/2 connection is an application-layer protocol running on top of a TCP connection (<a href="#TCP"><cite title="Transmission Control Protocol">[TCP]</cite></a>). The client is the TCP connection initiator.<a class="self" href="#rfc.section.3.p.1">&para;</a></p></div><div id="rfc.section.3.p.2"><p>HTTP/2 uses the same "http" and "https" URI schemes used by HTTP/1.1. HTTP/2 shares the same default port numbers: 80 for "http" URIs and 443 for "https" URIs. As a result, implementations processing requests for target resource URIs like <tt>http://example.org/foo</tt> or <tt>https://example.com/bar</tt> are required to first discover whether the upstream server (the immediate peer to which the client wishes to establish a connection) supports HTTP/2.<a class="self" href="#rfc.section.3.p.2">&para;</a></p></div><div id="rfc.section.3.p.3"><p>The means by which support for HTTP/2 is determined is different for "http" and "https" URIs. Discovery for "http" URIs is described in <a href="#discover-http" title="Starting HTTP/2 for &#34;http&#34; URIs">Section&nbsp;3.2</a>. Discovery for "https" URIs is described in <a href="#discover-https" title="Starting HTTP/2 for &#34;https&#34; URIs">Section&nbsp;3.3</a>.<a class="self" href="#rfc.section.3.p.3">&para;</a></p></div><div id="versioning"><h3 id="rfc.section.3.1"><a href="#rfc.section.3.1">3.1</a>&nbsp;<a href="#versioning">HTTP/2 Version Identification</a></h3><div id="rfc.section.3.1.p.1"><p>The protocol defined in this document has two identifiers. <a class="self" href="#rfc.section.3.1.p.1">&para;</a></p><ul><li><p>The string "h2" identifies the protocol where HTTP/2 uses <a href="#TLS12">Transport Layer Security (TLS)</a> <cite title="The Transport Layer Security (TLS) Protocol Version 1.2">[TLS12]</cite>. This identifier is used in the <a href="#TLS-ALPN">TLS application-layer protocol negotiation (ALPN) extension</a> <cite title="Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension">[TLS-ALPN]</cite> field and in any place where HTTP/2 over TLS is identified.</p><p>The "h2" string is serialized into an ALPN protocol identifier as the two-octet sequence: 0x68, 0x32.</p></li><li><p>The string "h2c" identifies the protocol where HTTP/2 is run over cleartext TCP. This identifier is used in the HTTP/1.1 Upgrade header field and in any place where HTTP/2 over TCP is identified.</p><p>The "h2c" string is reserved from the ALPN identifier space but describes a protocol that does not use TLS.</p></li></ul></div><div id="rfc.section.3.1.p.2"><p>Negotiating "h2" or "h2c" implies the use of the transport, security, framing, and message semantics described in this document.<a class="self" href="#rfc.section.3.1.p.2">&para;</a></p></div></div><div id="discover-http"><h3 id="rfc.section.3.2"><a href="#rfc.section.3.2">3.2</a>&nbsp;<a href="#discover-http">Starting HTTP/2 for "http" URIs</a></h3><div id="rfc.section.3.2.p.1"><p>A client that makes a request for an "http" URI without prior knowledge about support for HTTP/2 on the next hop uses the HTTP Upgrade mechanism (<a href="https://svn.tools.ietf.org/svn/wg/httpbis/specs/rfc7230.html#header.upgrade" title="Upgrade">Section 6.7</a> of <a href="#RFC7230"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[RFC7230]</cite></a>). The client does so by making an HTTP/1.1 request that includes an Upgrade header field with the "h2c" token. Such an HTTP/1.1 request MUST include exactly one HTTP2-Settings (<a href="#Http2SettingsHeader" title="HTTP2-Settings Header Field">Section&nbsp;3.2.1</a>) header field.<a class="self" href="#rfc.section.3.2.p.1">&para;</a></p></div><div id="rfc.figure.u.1"><p>For example:</p><pre class="text2">GET / HTTP/1.1
    512512Host: server.example.com
  • specs/rfc7541.html

    r2740 r2743  
    481481  }
    482482  @top-right {
    483        content: "September 2015";
     483       content: "May 2015";
    484484  }
    485485  @top-center {
     
    508508    }
    509509}
    510 </style><link rel="Contents" href="#rfc.toc"><link rel="Author" href="#rfc.authors"><link rel="Copyright" href="#rfc.copyrightnotice"><link rel="Chapter" title="1 Introduction" href="#rfc.section.1"><link rel="Chapter" title="2 Compression Process Overview" href="#rfc.section.2"><link rel="Chapter" title="3 Header Block Decoding" href="#rfc.section.3"><link rel="Chapter" title="4 Dynamic Table Management" href="#rfc.section.4"><link rel="Chapter" title="5 Primitive Type Representations" href="#rfc.section.5"><link rel="Chapter" title="6 Binary Format" href="#rfc.section.6"><link rel="Chapter" title="7 Security Considerations" href="#rfc.section.7"><link rel="Chapter" href="#rfc.section.8" title="8 References"><link rel="Appendix" title="A Static Table Definition" href="#rfc.section.A"><link rel="Appendix" title="B Huffman Code" href="#rfc.section.B"><link rel="Appendix" title="C Examples" href="#rfc.section.C"><link rel="Appendix" title="Acknowledgments" href="#rfc.section.unnumbered-1"><link rel="Alternate" title="Authoritative ASCII Version" href="http://www.ietf.org/rfc/rfc7541.txt"><link rel="Help" title="RFC-Editor's Status Page" href="http://www.rfc-editor.org/info/rfc7541"><link rel="Help" title="Additional Information on tools.ietf.org" href="http://tools.ietf.org/html/rfc7541"><meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.742, 2015/09/24 15:44:12, XSLT vendor: SAXON 6.5.5 from Michael Kay http://saxon.sf.net/"><meta name="keywords" content="HTTP, Header"><link rel="schema.dct" href="http://purl.org/dc/terms/"><meta name="dct.creator" content="Peon, R."><meta name="dct.creator" content="Ruellan, H."><meta name="dct.identifier" content="urn:ietf:rfc:7541"><meta name="dct.issued" scheme="ISO8601" content="2015-09"><meta name="dct.abstract" content="This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2."><meta name="dct.isPartOf" content="urn:issn:2070-1721"><meta name="description" content="This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2."></head><body onload="getMeta(7541,&#34;rfc.meta&#34;);"><table class="header" id="rfc.headerblock"><tbody><tr><td class="left">Internet Engineering Task Force (IETF)</td><td class="right">R. Peon</td></tr><tr><td class="left">Request for Comments: 7541</td><td class="right">Google, Inc</td></tr><tr><td class="left">Category: Standards Track</td><td class="right">H. Ruellan</td></tr><tr><td class="left">ISSN: 2070-1721</td><td class="right">Canon CRF</td></tr><tr><td class="left"></td><td class="right">September 2015</td></tr></tbody></table><div id="rfc.title"><h1>HPACK: Header Compression for HTTP/2</h1></div><h2 id="rfc.abstract"><a href="#rfc.abstract">Abstract</a></h2><p>This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2.</p><h2 id="rfc.note.1"><a href="#rfc.note.1">Editorial Note (To be removed by RFC Editor)</a></h2><p>Discussion of this draft takes place on the HTTPBIS working group mailing list (ietf-http-wg@w3.org), which is archived at &lt;<a href="https://lists.w3.org/Archives/Public/ietf-http-wg/">https://lists.w3.org/Archives/Public/ietf-http-wg/</a>&gt;.</p><p>Working Group information can be found at &lt;<a href="http://tools.ietf.org/wg/httpbis/">http://tools.ietf.org/wg/httpbis/</a>&gt;; that specific to HTTP/2 are at &lt;<a href="http://http2.github.io/">http://http2.github.io/</a>&gt;.</p><div id="rfc.meta" class="docstatus"></div><div id="rfc.status"><h2><a href="#rfc.status">Status of This Memo</a></h2><p>This is an Internet Standards Track document.</p><p>This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.</p><p>Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at <a href="http://www.rfc-editor.org/info/rfc7541">http://www.rfc-editor.org/info/rfc7541</a>.</p></div><div id="rfc.copyrightnotice"><h2><a href="#rfc.copyrightnotice">Copyright Notice</a></h2><p>Copyright &copy; 2015 IETF Trust and the persons identified as the document authors. All rights reserved.</p><p>This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.</p></div><hr class="noprint"><div id="rfc.toc"><h2 class="np"><a href="#rfc.toc">Table of Contents</a></h2><ul class="toc"><li><a href="#rfc.section.1">1.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1">Introduction</a><ul><li><a href="#rfc.section.1.1">1.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.1">Overview</a></li><li><a href="#rfc.section.1.2">1.2</a>&nbsp;&nbsp;&nbsp;<a href="#conventions">Conventions</a></li><li><a href="#rfc.section.1.3">1.3</a>&nbsp;&nbsp;&nbsp;<a href="#encoding.concepts">Terminology</a></li></ul></li><li><a href="#rfc.section.2">2.</a>&nbsp;&nbsp;&nbsp;<a href="#header.encoding">Compression Process Overview</a><ul><li><a href="#rfc.section.2.1">2.1</a>&nbsp;&nbsp;&nbsp;<a href="#header.list.ordering">Header List Ordering</a></li><li><a href="#rfc.section.2.2">2.2</a>&nbsp;&nbsp;&nbsp;<a href="#encoding.context">Encoding and Decoding Contexts</a></li><li><a href="#rfc.section.2.3">2.3</a>&nbsp;&nbsp;&nbsp;<a href="#indexing.tables">Indexing Tables</a><ul><li><a href="#rfc.section.2.3.1">2.3.1</a>&nbsp;&nbsp;&nbsp;<a href="#static.table">Static Table</a></li><li><a href="#rfc.section.2.3.2">2.3.2</a>&nbsp;&nbsp;&nbsp;<a href="#dynamic.table">Dynamic Table</a></li><li><a href="#rfc.section.2.3.3">2.3.3</a>&nbsp;&nbsp;&nbsp;<a href="#index.address.space">Index Address Space</a></li></ul></li><li><a href="#rfc.section.2.4">2.4</a>&nbsp;&nbsp;&nbsp;<a href="#header.representation">Header Field Representation</a></li></ul></li><li><a href="#rfc.section.3">3.</a>&nbsp;&nbsp;&nbsp;<a href="#header.block.decoding">Header Block Decoding</a><ul><li><a href="#rfc.section.3.1">3.1</a>&nbsp;&nbsp;&nbsp;<a href="#header.block.processing">Header Block Processing</a></li><li><a href="#rfc.section.3.2">3.2</a>&nbsp;&nbsp;&nbsp;<a href="#header.representation.processing">Header Field Representation Processing</a></li></ul></li><li><a href="#rfc.section.4">4.</a>&nbsp;&nbsp;&nbsp;<a href="#dynamic.table.management">Dynamic Table Management</a><ul><li><a href="#rfc.section.4.1">4.1</a>&nbsp;&nbsp;&nbsp;<a href="#calculating.table.size">Calculating Table Size</a></li><li><a href="#rfc.section.4.2">4.2</a>&nbsp;&nbsp;&nbsp;<a href="#maximum.table.size">Maximum Table Size</a></li><li><a href="#rfc.section.4.3">4.3</a>&nbsp;&nbsp;&nbsp;<a href="#entry.eviction">Entry Eviction When Dynamic Table Size Changes</a></li><li><a href="#rfc.section.4.4">4.4</a>&nbsp;&nbsp;&nbsp;<a href="#entry.addition">Entry Eviction When Adding New Entries</a></li></ul></li><li><a href="#rfc.section.5">5.</a>&nbsp;&nbsp;&nbsp;<a href="#low-level.representation">Primitive Type Representations</a><ul><li><a href="#rfc.section.5.1">5.1</a>&nbsp;&nbsp;&nbsp;<a href="#integer.representation">Integer Representation</a></li><li><a href="#rfc.section.5.2">5.2</a>&nbsp;&nbsp;&nbsp;<a href="#string.literal.representation">String Literal Representation</a></li></ul></li><li><a href="#rfc.section.6">6.</a>&nbsp;&nbsp;&nbsp;<a href="#detailed.format">Binary Format</a><ul><li><a href="#rfc.section.6.1">6.1</a>&nbsp;&nbsp;&nbsp;<a href="#indexed.header.representation">Indexed Header Field Representation</a></li><li><a href="#rfc.section.6.2">6.2</a>&nbsp;&nbsp;&nbsp;<a href="#literal.header.representation">Literal Header Field Representation</a><ul><li><a href="#rfc.section.6.2.1">6.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#literal.header.with.incremental.indexing">Literal Header Field with Incremental Indexing</a></li><li><a href="#rfc.section.6.2.2">6.2.2</a>&nbsp;&nbsp;&nbsp;<a href="#literal.header.without.indexing">Literal Header Field without Indexing</a></li><li><a href="#rfc.section.6.2.3">6.2.3</a>&nbsp;&nbsp;&nbsp;<a href="#literal.header.never.indexed">Literal Header Field Never Indexed</a></li></ul></li><li><a href="#rfc.section.6.3">6.3</a>&nbsp;&nbsp;&nbsp;<a href="#encoding.context.update">Dynamic Table Size Update</a></li></ul></li><li><a href="#rfc.section.7">7.</a>&nbsp;&nbsp;&nbsp;<a href="#Security">Security Considerations</a><ul><li><a href="#rfc.section.7.1">7.1</a>&nbsp;&nbsp;&nbsp;<a href="#compression.based.attacks">Probing Dynamic Table State</a><ul><li><a href="#rfc.section.7.1.1">7.1.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.7.1.1">Applicability to HPACK and HTTP</a></li><li><a href="#rfc.section.7.1.2">7.1.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.7.1.2">Mitigation</a></li><li><a href="#rfc.section.7.1.3">7.1.3</a>&nbsp;&nbsp;&nbsp;<a href="#never.indexed.literals">Never-Indexed Literals</a></li></ul></li><li><a href="#rfc.section.7.2">7.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.7.2">Static Huffman Encoding</a></li><li><a href="#rfc.section.7.3">7.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.7.3">Memory Consumption</a></li><li><a href="#rfc.section.7.4">7.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.7.4">Implementation Limits</a></li></ul></li><li><a href="#rfc.section.8">8.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references">References</a><ul><li><a href="#rfc.section.8.1">8.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.1">Normative References</a></li><li><a href="#rfc.section.8.2">8.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.2">Informative References</a></li></ul></li><li><a href="#rfc.section.A">A.</a>&nbsp;&nbsp;&nbsp;<a href="#static.table.definition">Static Table Definition</a></li><li><a href="#rfc.section.B">B.</a>&nbsp;&nbsp;&nbsp;<a href="#huffman.code">Huffman Code</a></li><li><a href="#rfc.section.C">C.</a>&nbsp;&nbsp;&nbsp;<a href="#examples">Examples</a><ul><li><a href="#rfc.section.C.1">C.1</a>&nbsp;&nbsp;&nbsp;<a href="#integer.representation.examples">Integer Representation Examples</a><ul><li><a href="#rfc.section.C.1.1">C.1.1</a>&nbsp;&nbsp;&nbsp;<a href="#integer.representation.example1">Example 1: Encoding 10 Using a 5-Bit Prefix</a></li><li><a href="#rfc.section.C.1.2">C.1.2</a>&nbsp;&nbsp;&nbsp;<a href="#integer.representation.example2">Example 2: Encoding 1337 Using a 5-Bit Prefix</a></li><li><a href="#rfc.section.C.1.3">C.1.3</a>&nbsp;&nbsp;&nbsp;<a href="#integer.representation.example3">Example 3: Encoding 42 Starting at an Octet Boundary</a></li></ul></li><li><a href="#rfc.section.C.2">C.2</a>&nbsp;&nbsp;&nbsp;<a href="#header.field.representation.examples">Header Field Representation Examples</a><ul><li><a href="#rfc.section.C.2.1">C.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.2.1">Literal Header Field with Indexing</a></li><li><a href="#rfc.section.C.2.2">C.2.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.2.2">Literal Header Field without Indexing</a></li><li><a href="#rfc.section.C.2.3">C.2.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.2.3">Literal Header Field Never Indexed</a></li><li><a href="#rfc.section.C.2.4">C.2.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.2.4">Indexed Header Field</a></li></ul></li><li><a href="#rfc.section.C.3">C.3</a>&nbsp;&nbsp;&nbsp;<a href="#request.examples.without.huffman.coding">Request Examples without Huffman Coding</a><ul><li><a href="#rfc.section.C.3.1">C.3.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.3.1">First Request</a></li><li><a href="#rfc.section.C.3.2">C.3.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.3.2">Second Request</a></li><li><a href="#rfc.section.C.3.3">C.3.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.3.3">Third Request</a></li></ul></li><li><a href="#rfc.section.C.4">C.4</a>&nbsp;&nbsp;&nbsp;<a href="#request.examples.with.huffman.coding">Request Examples with Huffman Coding</a><ul><li><a href="#rfc.section.C.4.1">C.4.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.4.1">First Request</a></li><li><a href="#rfc.section.C.4.2">C.4.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.4.2">Second Request</a></li><li><a href="#rfc.section.C.4.3">C.4.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.4.3">Third Request</a></li></ul></li><li><a href="#rfc.section.C.5">C.5</a>&nbsp;&nbsp;&nbsp;<a href="#response.examples.without.huffman.coding">Response Examples without Huffman Coding</a><ul><li><a href="#rfc.section.C.5.1">C.5.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.5.1">First Response</a></li><li><a href="#rfc.section.C.5.2">C.5.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.5.2">Second Response</a></li><li><a href="#rfc.section.C.5.3">C.5.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.5.3">Third Response</a></li></ul></li><li><a href="#rfc.section.C.6">C.6</a>&nbsp;&nbsp;&nbsp;<a href="#response.examples.with.huffman.coding">Response Examples with Huffman Coding</a><ul><li><a href="#rfc.section.C.6.1">C.6.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.6.1">First Response</a></li><li><a href="#rfc.section.C.6.2">C.6.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.6.2">Second Response</a></li><li><a href="#rfc.section.C.6.3">C.6.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.6.3">Third Response</a></li></ul></li></ul></li><li><a href="#rfc.section.unnumbered-1">Acknowledgments</a></li><li><a href="#rfc.authors">Authors' Addresses</a></li></ul></div><ul class="toc"><li>Figures
     510</style><link rel="Contents" href="#rfc.toc"><link rel="Author" href="#rfc.authors"><link rel="Copyright" href="#rfc.copyrightnotice"><link rel="Chapter" title="1 Introduction" href="#rfc.section.1"><link rel="Chapter" title="2 Compression Process Overview" href="#rfc.section.2"><link rel="Chapter" title="3 Header Block Decoding" href="#rfc.section.3"><link rel="Chapter" title="4 Dynamic Table Management" href="#rfc.section.4"><link rel="Chapter" title="5 Primitive Type Representations" href="#rfc.section.5"><link rel="Chapter" title="6 Binary Format" href="#rfc.section.6"><link rel="Chapter" title="7 Security Considerations" href="#rfc.section.7"><link rel="Chapter" href="#rfc.section.8" title="8 References"><link rel="Appendix" title="A Static Table Definition" href="#rfc.section.A"><link rel="Appendix" title="B Huffman Code" href="#rfc.section.B"><link rel="Appendix" title="C Examples" href="#rfc.section.C"><link rel="Appendix" title="Acknowledgments" href="#rfc.section.unnumbered-1"><link rel="Alternate" title="Authoritative ASCII Version" href="http://www.ietf.org/rfc/rfc7541.txt"><link rel="Help" title="RFC-Editor's Status Page" href="http://www.rfc-editor.org/info/rfc7541"><link rel="Help" title="Additional Information on tools.ietf.org" href="http://tools.ietf.org/html/rfc7541"><meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.743, 2015/09/25 12:36:08, XSLT vendor: SAXON 6.5.5 from Michael Kay http://saxon.sf.net/"><meta name="keywords" content="HTTP, Header"><link rel="schema.dct" href="http://purl.org/dc/terms/"><meta name="dct.creator" content="Peon, R."><meta name="dct.creator" content="Ruellan, H."><meta name="dct.identifier" content="urn:ietf:rfc:7541"><meta name="dct.issued" scheme="ISO8601" content="2015-05"><meta name="dct.abstract" content="This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2."><meta name="dct.isPartOf" content="urn:issn:2070-1721"><meta name="description" content="This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2."></head><body onload="getMeta(7541,&#34;rfc.meta&#34;);"><table class="header" id="rfc.headerblock"><tbody><tr><td class="left">Internet Engineering Task Force (IETF)</td><td class="right">R. Peon</td></tr><tr><td class="left">Request for Comments: 7541</td><td class="right">Google, Inc</td></tr><tr><td class="left">Category: Standards Track</td><td class="right">H. Ruellan</td></tr><tr><td class="left">ISSN: 2070-1721</td><td class="right">Canon CRF</td></tr><tr><td class="left"></td><td class="right">May 2015</td></tr></tbody></table><div id="rfc.title"><h1>HPACK: Header Compression for HTTP/2</h1></div><h2 id="rfc.abstract"><a href="#rfc.abstract">Abstract</a></h2><p>This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2.</p><h2 id="rfc.note.1"><a href="#rfc.note.1">Editorial Note (To be removed by RFC Editor)</a></h2><p>Discussion of this draft takes place on the HTTPBIS working group mailing list (ietf-http-wg@w3.org), which is archived at &lt;<a href="https://lists.w3.org/Archives/Public/ietf-http-wg/">https://lists.w3.org/Archives/Public/ietf-http-wg/</a>&gt;.</p><p>Working Group information can be found at &lt;<a href="http://tools.ietf.org/wg/httpbis/">http://tools.ietf.org/wg/httpbis/</a>&gt;; that specific to HTTP/2 are at &lt;<a href="http://http2.github.io/">http://http2.github.io/</a>&gt;.</p><div id="rfc.meta" class="docstatus"></div><div id="rfc.status"><h2><a href="#rfc.status">Status of This Memo</a></h2><p>This is an Internet Standards Track document.</p><p>This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.</p><p>Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at <a href="http://www.rfc-editor.org/info/rfc7541">http://www.rfc-editor.org/info/rfc7541</a>.</p></div><div id="rfc.copyrightnotice"><h2><a href="#rfc.copyrightnotice">Copyright Notice</a></h2><p>Copyright &copy; 2015 IETF Trust and the persons identified as the document authors. All rights reserved.</p><p>This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.</p></div><hr class="noprint"><div id="rfc.toc"><h2 class="np"><a href="#rfc.toc">Table of Contents</a></h2><ul class="toc"><li><a href="#rfc.section.1">1.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1">Introduction</a><ul><li><a href="#rfc.section.1.1">1.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.1.1">Overview</a></li><li><a href="#rfc.section.1.2">1.2</a>&nbsp;&nbsp;&nbsp;<a href="#conventions">Conventions</a></li><li><a href="#rfc.section.1.3">1.3</a>&nbsp;&nbsp;&nbsp;<a href="#encoding.concepts">Terminology</a></li></ul></li><li><a href="#rfc.section.2">2.</a>&nbsp;&nbsp;&nbsp;<a href="#header.encoding">Compression Process Overview</a><ul><li><a href="#rfc.section.2.1">2.1</a>&nbsp;&nbsp;&nbsp;<a href="#header.list.ordering">Header List Ordering</a></li><li><a href="#rfc.section.2.2">2.2</a>&nbsp;&nbsp;&nbsp;<a href="#encoding.context">Encoding and Decoding Contexts</a></li><li><a href="#rfc.section.2.3">2.3</a>&nbsp;&nbsp;&nbsp;<a href="#indexing.tables">Indexing Tables</a><ul><li><a href="#rfc.section.2.3.1">2.3.1</a>&nbsp;&nbsp;&nbsp;<a href="#static.table">Static Table</a></li><li><a href="#rfc.section.2.3.2">2.3.2</a>&nbsp;&nbsp;&nbsp;<a href="#dynamic.table">Dynamic Table</a></li><li><a href="#rfc.section.2.3.3">2.3.3</a>&nbsp;&nbsp;&nbsp;<a href="#index.address.space">Index Address Space</a></li></ul></li><li><a href="#rfc.section.2.4">2.4</a>&nbsp;&nbsp;&nbsp;<a href="#header.representation">Header Field Representation</a></li></ul></li><li><a href="#rfc.section.3">3.</a>&nbsp;&nbsp;&nbsp;<a href="#header.block.decoding">Header Block Decoding</a><ul><li><a href="#rfc.section.3.1">3.1</a>&nbsp;&nbsp;&nbsp;<a href="#header.block.processing">Header Block Processing</a></li><li><a href="#rfc.section.3.2">3.2</a>&nbsp;&nbsp;&nbsp;<a href="#header.representation.processing">Header Field Representation Processing</a></li></ul></li><li><a href="#rfc.section.4">4.</a>&nbsp;&nbsp;&nbsp;<a href="#dynamic.table.management">Dynamic Table Management</a><ul><li><a href="#rfc.section.4.1">4.1</a>&nbsp;&nbsp;&nbsp;<a href="#calculating.table.size">Calculating Table Size</a></li><li><a href="#rfc.section.4.2">4.2</a>&nbsp;&nbsp;&nbsp;<a href="#maximum.table.size">Maximum Table Size</a></li><li><a href="#rfc.section.4.3">4.3</a>&nbsp;&nbsp;&nbsp;<a href="#entry.eviction">Entry Eviction When Dynamic Table Size Changes</a></li><li><a href="#rfc.section.4.4">4.4</a>&nbsp;&nbsp;&nbsp;<a href="#entry.addition">Entry Eviction When Adding New Entries</a></li></ul></li><li><a href="#rfc.section.5">5.</a>&nbsp;&nbsp;&nbsp;<a href="#low-level.representation">Primitive Type Representations</a><ul><li><a href="#rfc.section.5.1">5.1</a>&nbsp;&nbsp;&nbsp;<a href="#integer.representation">Integer Representation</a></li><li><a href="#rfc.section.5.2">5.2</a>&nbsp;&nbsp;&nbsp;<a href="#string.literal.representation">String Literal Representation</a></li></ul></li><li><a href="#rfc.section.6">6.</a>&nbsp;&nbsp;&nbsp;<a href="#detailed.format">Binary Format</a><ul><li><a href="#rfc.section.6.1">6.1</a>&nbsp;&nbsp;&nbsp;<a href="#indexed.header.representation">Indexed Header Field Representation</a></li><li><a href="#rfc.section.6.2">6.2</a>&nbsp;&nbsp;&nbsp;<a href="#literal.header.representation">Literal Header Field Representation</a><ul><li><a href="#rfc.section.6.2.1">6.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#literal.header.with.incremental.indexing">Literal Header Field with Incremental Indexing</a></li><li><a href="#rfc.section.6.2.2">6.2.2</a>&nbsp;&nbsp;&nbsp;<a href="#literal.header.without.indexing">Literal Header Field without Indexing</a></li><li><a href="#rfc.section.6.2.3">6.2.3</a>&nbsp;&nbsp;&nbsp;<a href="#literal.header.never.indexed">Literal Header Field Never Indexed</a></li></ul></li><li><a href="#rfc.section.6.3">6.3</a>&nbsp;&nbsp;&nbsp;<a href="#encoding.context.update">Dynamic Table Size Update</a></li></ul></li><li><a href="#rfc.section.7">7.</a>&nbsp;&nbsp;&nbsp;<a href="#Security">Security Considerations</a><ul><li><a href="#rfc.section.7.1">7.1</a>&nbsp;&nbsp;&nbsp;<a href="#compression.based.attacks">Probing Dynamic Table State</a><ul><li><a href="#rfc.section.7.1.1">7.1.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.7.1.1">Applicability to HPACK and HTTP</a></li><li><a href="#rfc.section.7.1.2">7.1.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.7.1.2">Mitigation</a></li><li><a href="#rfc.section.7.1.3">7.1.3</a>&nbsp;&nbsp;&nbsp;<a href="#never.indexed.literals">Never-Indexed Literals</a></li></ul></li><li><a href="#rfc.section.7.2">7.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.7.2">Static Huffman Encoding</a></li><li><a href="#rfc.section.7.3">7.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.7.3">Memory Consumption</a></li><li><a href="#rfc.section.7.4">7.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.7.4">Implementation Limits</a></li></ul></li><li><a href="#rfc.section.8">8.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references">References</a><ul><li><a href="#rfc.section.8.1">8.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.1">Normative References</a></li><li><a href="#rfc.section.8.2">8.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.2">Informative References</a></li></ul></li><li><a href="#rfc.section.A">A.</a>&nbsp;&nbsp;&nbsp;<a href="#static.table.definition">Static Table Definition</a></li><li><a href="#rfc.section.B">B.</a>&nbsp;&nbsp;&nbsp;<a href="#huffman.code">Huffman Code</a></li><li><a href="#rfc.section.C">C.</a>&nbsp;&nbsp;&nbsp;<a href="#examples">Examples</a><ul><li><a href="#rfc.section.C.1">C.1</a>&nbsp;&nbsp;&nbsp;<a href="#integer.representation.examples">Integer Representation Examples</a><ul><li><a href="#rfc.section.C.1.1">C.1.1</a>&nbsp;&nbsp;&nbsp;<a href="#integer.representation.example1">Example 1: Encoding 10 Using a 5-Bit Prefix</a></li><li><a href="#rfc.section.C.1.2">C.1.2</a>&nbsp;&nbsp;&nbsp;<a href="#integer.representation.example2">Example 2: Encoding 1337 Using a 5-Bit Prefix</a></li><li><a href="#rfc.section.C.1.3">C.1.3</a>&nbsp;&nbsp;&nbsp;<a href="#integer.representation.example3">Example 3: Encoding 42 Starting at an Octet Boundary</a></li></ul></li><li><a href="#rfc.section.C.2">C.2</a>&nbsp;&nbsp;&nbsp;<a href="#header.field.representation.examples">Header Field Representation Examples</a><ul><li><a href="#rfc.section.C.2.1">C.2.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.2.1">Literal Header Field with Indexing</a></li><li><a href="#rfc.section.C.2.2">C.2.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.2.2">Literal Header Field without Indexing</a></li><li><a href="#rfc.section.C.2.3">C.2.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.2.3">Literal Header Field Never Indexed</a></li><li><a href="#rfc.section.C.2.4">C.2.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.2.4">Indexed Header Field</a></li></ul></li><li><a href="#rfc.section.C.3">C.3</a>&nbsp;&nbsp;&nbsp;<a href="#request.examples.without.huffman.coding">Request Examples without Huffman Coding</a><ul><li><a href="#rfc.section.C.3.1">C.3.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.3.1">First Request</a></li><li><a href="#rfc.section.C.3.2">C.3.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.3.2">Second Request</a></li><li><a href="#rfc.section.C.3.3">C.3.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.3.3">Third Request</a></li></ul></li><li><a href="#rfc.section.C.4">C.4</a>&nbsp;&nbsp;&nbsp;<a href="#request.examples.with.huffman.coding">Request Examples with Huffman Coding</a><ul><li><a href="#rfc.section.C.4.1">C.4.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.4.1">First Request</a></li><li><a href="#rfc.section.C.4.2">C.4.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.4.2">Second Request</a></li><li><a href="#rfc.section.C.4.3">C.4.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.4.3">Third Request</a></li></ul></li><li><a href="#rfc.section.C.5">C.5</a>&nbsp;&nbsp;&nbsp;<a href="#response.examples.without.huffman.coding">Response Examples without Huffman Coding</a><ul><li><a href="#rfc.section.C.5.1">C.5.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.5.1">First Response</a></li><li><a href="#rfc.section.C.5.2">C.5.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.5.2">Second Response</a></li><li><a href="#rfc.section.C.5.3">C.5.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.5.3">Third Response</a></li></ul></li><li><a href="#rfc.section.C.6">C.6</a>&nbsp;&nbsp;&nbsp;<a href="#response.examples.with.huffman.coding">Response Examples with Huffman Coding</a><ul><li><a href="#rfc.section.C.6.1">C.6.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.6.1">First Response</a></li><li><a href="#rfc.section.C.6.2">C.6.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.6.2">Second Response</a></li><li><a href="#rfc.section.C.6.3">C.6.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.C.6.3">Third Response</a></li></ul></li></ul></li><li><a href="#rfc.section.unnumbered-1">Acknowledgments</a></li><li><a href="#rfc.authors">Authors' Addresses</a></li></ul></div><ul class="toc"><li>Figures
    511511        <ul><li><a href="#rfc.figure.1">Figure 1: Index Address Space</a></li><li><a href="#rfc.figure.2">Figure 2: Integer Value Encoded within the Prefix (Shown for N = 5)</a></li><li><a href="#rfc.figure.3">Figure 3: Integer Value Encoded after the Prefix (Shown for N = 5)</a></li><li><a href="#rfc.figure.4">Figure 4: String Literal Representation</a></li><li><a href="#rfc.figure.5">Figure 5: Indexed Header Field</a></li><li><a href="#rfc.figure.6">Figure 6: Literal Header Field with Incremental Indexing &#8212; Indexed Name</a></li><li><a href="#rfc.figure.7">Figure 7: Literal Header Field with Incremental Indexing &#8212; New Name</a></li><li><a href="#rfc.figure.8">Figure 8: Literal Header Field without Indexing &#8212; Indexed Name</a></li><li><a href="#rfc.figure.9">Figure 9: Literal Header Field without Indexing &#8212; New Name</a></li><li><a href="#rfc.figure.10">Figure 10: Literal Header Field Never Indexed &#8212; Indexed Name</a></li><li><a href="#rfc.figure.11">Figure 11: Literal Header Field Never Indexed &#8212; New Name</a></li><li><a href="#rfc.figure.12">Figure 12: Maximum Dynamic Table Size Change</a></li></ul></li></ul><div><h2 id="rfc.section.1" class="np"><a href="#rfc.section.1">1.</a>&nbsp;Introduction</h2><div id="rfc.section.1.p.1"><p>In HTTP/1.1 (see <a href="#RFC7230"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[RFC7230]</cite></a>), header fields are not compressed. As web pages have grown to require dozens to hundreds of requests, the redundant header fields in these requests unnecessarily consume bandwidth, measurably increasing latency.<a class="self" href="#rfc.section.1.p.1">&para;</a></p></div><div id="rfc.section.1.p.2"><p><a href="#SPDY">SPDY</a> <cite title="SPDY Protocol">[SPDY]</cite> initially addressed this redundancy by compressing header fields using the <a href="#DEFLATE">DEFLATE</a> <cite title="DEFLATE Compressed Data Format Specification version 1.3">[DEFLATE]</cite> format, which proved very effective at efficiently representing the redundant header fields. However, that approach exposed a security risk as demonstrated by the CRIME (Compression Ratio Info-leak Made Easy) attack (see <a href="#CRIME"><cite title="CRIME">[CRIME]</cite></a>).<a class="self" href="#rfc.section.1.p.2">&para;</a></p></div><div id="rfc.section.1.p.3"><p>This specification defines HPACK, a new compressor that eliminates redundant header fields, limits vulnerability to known security attacks, and has a bounded memory requirement for use in constrained environments. Potential security concerns for HPACK are described in <a href="#Security" title="Security Considerations">Section&nbsp;7</a>.<a class="self" href="#rfc.section.1.p.3">&para;</a></p></div><div id="rfc.section.1.p.4"><p>The HPACK format is intentionally simple and inflexible. Both characteristics reduce the risk of interoperability or security issues due to implementation error. No extensibility mechanisms are defined; changes to the format are only possible by defining a complete replacement.<a class="self" href="#rfc.section.1.p.4">&para;</a></p></div><div><h3 id="rfc.section.1.1"><a href="#rfc.section.1.1">1.1</a>&nbsp;Overview</h3><div id="rfc.section.1.1.p.1"><p>The format defined in this specification treats a list of header fields as an ordered collection of name-value pairs that can include duplicate pairs. Names and values are considered to be opaque sequences of octets, and the order of header fields is preserved after being compressed and decompressed.<a class="self" href="#rfc.section.1.1.p.1">&para;</a></p></div><div id="rfc.section.1.1.p.2"><p>Encoding is informed by header field tables that map header fields to indexed values. These header field tables can be incrementally updated as new header fields are encoded or decoded.<a class="self" href="#rfc.section.1.1.p.2">&para;</a></p></div><div id="rfc.section.1.1.p.3"><p>In the encoded form, a header field is represented either literally or as a reference to a header field in one of the header field tables. Therefore, a list of header fields can be encoded using a mixture of references and literal values.<a class="self" href="#rfc.section.1.1.p.3">&para;</a></p></div><div id="rfc.section.1.1.p.4"><p>Literal values are either encoded directly or use a static Huffman code.<a class="self" href="#rfc.section.1.1.p.4">&para;</a></p></div><div id="rfc.section.1.1.p.5"><p>The encoder is responsible for deciding which header fields to insert as new entries in the header field tables. The decoder executes the modifications to the header field tables prescribed by the encoder, reconstructing the list of header fields in the process. This enables decoders to remain simple and interoperate with a wide variety of encoders.<a class="self" href="#rfc.section.1.1.p.5">&para;</a></p></div><div id="rfc.section.1.1.p.6"><p>Examples illustrating the use of these different mechanisms to represent header fields are available in <a href="#examples" title="Examples">Appendix&nbsp;C</a>.<a class="self" href="#rfc.section.1.1.p.6">&para;</a></p></div></div><div id="conventions"><h3 id="rfc.section.1.2"><a href="#rfc.section.1.2">1.2</a>&nbsp;<a href="#conventions">Conventions</a></h3><div id="rfc.section.1.2.p.1"><p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <a href="#RFC2119">RFC 2119</a> <cite title="Key words for use in RFCs to Indicate Requirement Levels">[RFC2119]</cite>.<a class="self" href="#rfc.section.1.2.p.1">&para;</a></p></div><div id="rfc.section.1.2.p.2"><p>All numeric values are in network byte order. Values are unsigned unless otherwise indicated. Literal values are provided in decimal or hexadecimal as appropriate.<a class="self" href="#rfc.section.1.2.p.2">&para;</a></p></div></div><div id="encoding.concepts"><h3 id="rfc.section.1.3"><a href="#rfc.section.1.3">1.3</a>&nbsp;<a href="#encoding.concepts">Terminology</a></h3><div id="rfc.section.1.3.p.1"><p>This specification uses the following terms: <a class="self" href="#rfc.section.1.3.p.1">&para;</a></p><dl><dt>Header Field:</dt><dd>A name-value pair. Both the name and value are treated as opaque sequences of octets.</dd><dt>Dynamic Table:</dt><dd>The dynamic table (see <a href="#dynamic.table" title="Dynamic Table">Section&nbsp;2.3.2</a>) is a table that associates stored header fields with index values. This table is dynamic and specific to an encoding or decoding context.</dd><dt>Static Table:</dt><dd>The static table (see <a href="#static.table" title="Static Table">Section&nbsp;2.3.1</a>) is a table that statically associates header fields that occur frequently with index values. This table is ordered, read-only, always accessible, and it may be shared amongst all encoding or decoding contexts.</dd><dt>Header List:</dt><dd>A header list is an ordered collection of header fields that are encoded jointly and can contain duplicate header fields. A complete list of header fields contained in an HTTP/2 header block is a header list.</dd><dt>Header Field Representation:</dt><dd>A header field can be represented in encoded form either as a literal or as an index (see <a href="#header.representation" title="Header Field Representation">Section&nbsp;2.4</a>).</dd><dt>Header Block:</dt><dd>An ordered list of header field representations, which, when decoded, yields a complete header list.</dd></dl></div></div></div><div id="header.encoding"><h2 id="rfc.section.2"><a href="#rfc.section.2">2.</a>&nbsp;<a href="#header.encoding">Compression Process Overview</a></h2><div id="rfc.section.2.p.1"><p>This specification does not describe a specific algorithm for an encoder. Instead, it defines precisely how a decoder is expected to operate, allowing encoders to produce any encoding that this definition permits.<a class="self" href="#rfc.section.2.p.1">&para;</a></p></div><div id="header.list.ordering"><h3 id="rfc.section.2.1"><a href="#rfc.section.2.1">2.1</a>&nbsp;<a href="#header.list.ordering">Header List Ordering</a></h3><div id="rfc.section.2.1.p.1"><p>HPACK preserves the ordering of header fields inside the header list. An encoder MUST order header field representations in the header block according to their ordering in the original header list. A decoder MUST order header fields in the decoded header list according to their ordering in the header block.<a class="self" href="#rfc.section.2.1.p.1">&para;</a></p></div></div><div id="encoding.context"><h3 id="rfc.section.2.2"><a href="#rfc.section.2.2">2.2</a>&nbsp;<a href="#encoding.context">Encoding and Decoding Contexts</a></h3><div id="rfc.section.2.2.p.1"><p>To decompress header blocks, a decoder only needs to maintain a dynamic table (see <a href="#dynamic.table" title="Dynamic Table">Section&nbsp;2.3.2</a>) as a decoding context. No other dynamic state is needed.<a class="self" href="#rfc.section.2.2.p.1">&para;</a></p></div><div id="rfc.section.2.2.p.2"><p>When used for bidirectional communication, such as in HTTP, the encoding and decoding dynamic tables maintained by an endpoint are completely independent, i.e., the request and response dynamic tables are separate.<a class="self" href="#rfc.section.2.2.p.2">&para;</a></p></div></div><div id="indexing.tables"><h3 id="rfc.section.2.3"><a href="#rfc.section.2.3">2.3</a>&nbsp;<a href="#indexing.tables">Indexing Tables</a></h3><div id="rfc.section.2.3.p.1"><p>HPACK uses two tables for associating header fields to indexes. The static table (see <a href="#static.table" title="Static Table">Section&nbsp;2.3.1</a>) is predefined and contains common header fields (most of them with an empty value). The dynamic table (see <a href="#dynamic.table" title="Dynamic Table">Section&nbsp;2.3.2</a>) is dynamic and can be used by the encoder to index header fields repeated in the encoded header lists.<a class="self" href="#rfc.section.2.3.p.1">&para;</a></p></div><div id="rfc.section.2.3.p.2"><p>These two tables are combined into a single address space for defining index values (see <a href="#index.address.space" title="Index Address Space">Section&nbsp;2.3.3</a>).<a class="self" href="#rfc.section.2.3.p.2">&para;</a></p></div><div id="static.table"><h4 id="rfc.section.2.3.1"><a href="#rfc.section.2.3.1">2.3.1</a>&nbsp;<a href="#static.table">Static Table</a></h4><div id="rfc.section.2.3.1.p.1"><p>The static table consists of a predefined static list of header fields. Its entries are defined in <a href="#static.table.definition" title="Static Table Definition">Appendix&nbsp;A</a>.<a class="self" href="#rfc.section.2.3.1.p.1">&para;</a></p></div></div><div id="dynamic.table"><h4 id="rfc.section.2.3.2"><a href="#rfc.section.2.3.2">2.3.2</a>&nbsp;<a href="#dynamic.table">Dynamic Table</a></h4><div id="rfc.section.2.3.2.p.1"><p>The dynamic table consists of a list of header fields maintained in first-in, first-out order. The first and newest entry in a dynamic table is at the lowest index, and the oldest entry of a dynamic table is at the highest index.<a class="self" href="#rfc.section.2.3.2.p.1">&para;</a></p></div><div id="rfc.section.2.3.2.p.2"><p>The dynamic table is initially empty. Entries are added as each header block is decompressed.<a class="self" href="#rfc.section.2.3.2.p.2">&para;</a></p></div><div id="rfc.section.2.3.2.p.3"><p>The dynamic table can contain duplicate entries (i.e., entries with the same name and same value). Therefore, duplicate entries MUST NOT be treated as an error by a decoder.<a class="self" href="#rfc.section.2.3.2.p.3">&para;</a></p></div><div id="rfc.section.2.3.2.p.4"><p>The encoder decides how to update the dynamic table and as such can control how much memory is used by the dynamic table. To limit the memory requirements of the decoder, the dynamic table size is strictly bounded (see <a href="#maximum.table.size" title="Maximum Table Size">Section&nbsp;4.2</a>).<a class="self" href="#rfc.section.2.3.2.p.4">&para;</a></p></div><div id="rfc.section.2.3.2.p.5"><p>The decoder updates the dynamic table during the processing of a list of header field representations (see <a href="#header.representation.processing" title="Header Field Representation Processing">Section&nbsp;3.2</a>).<a class="self" href="#rfc.section.2.3.2.p.5">&para;</a></p></div></div><div id="index.address.space"><h4 id="rfc.section.2.3.3"><a href="#rfc.section.2.3.3">2.3.3</a>&nbsp;<a href="#index.address.space">Index Address Space</a></h4><div id="rfc.section.2.3.3.p.1"><p>The static table and the dynamic table are combined into a single index address space.<a class="self" href="#rfc.section.2.3.3.p.1">&para;</a></p></div><div id="rfc.section.2.3.3.p.2"><p>Indices between 1 and the length of the static table (inclusive) refer to elements in the static table (see <a href="#static.table" title="Static Table">Section&nbsp;2.3.1</a>).<a class="self" href="#rfc.section.2.3.3.p.2">&para;</a></p></div><div id="rfc.section.2.3.3.p.3"><p>Indices strictly greater than the length of the static table refer to elements in the dynamic table (see <a href="#dynamic.table" title="Dynamic Table">Section&nbsp;2.3.2</a>). The length of the static table is subtracted to find the index into the dynamic table.<a class="self" href="#rfc.section.2.3.3.p.3">&para;</a></p></div><div id="rfc.section.2.3.3.p.4"><p>Indices strictly greater than the sum of the lengths of both tables MUST be treated as a decoding error.<a class="self" href="#rfc.section.2.3.3.p.4">&para;</a></p></div><div id="Index.Address.Space"></div><div id="rfc.figure.1"><p>For a static table size of s and a dynamic table size of k, the following diagram shows the entire valid index address space.</p><pre class="drawing">        &lt;----------  Index Address Space ----------&gt;
    512512        &lt;-- Static  Table --&gt;  &lt;-- Dynamic Table --&gt;
  • specs/rfc7541.xml

    r2739 r2743  
    4040        </author>
    4141
    42         <date year="2015"/>
     42        <date year="2015" month="May"/>
    4343        <area>Applications</area>
    4444        <workgroup>HTTPbis</workgroup>
  • specs/rfc7615.html

    r2742 r2743  
    88
    99  var xhr = new XMLHttpRequest();
    10   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     10  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     11  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1112  xhr.onload = function (e) {
    1213    if (xhr.readyState === 4) {
     
    505506    }
    506507}
    507 </style><link rel="Contents" href="#rfc.toc"><link rel="Author" href="#rfc.authors"><link rel="Copyright" href="#rfc.copyrightnotice"><link rel="Chapter" title="1 Introduction" href="#rfc.section.1"><link rel="Chapter" title="2 Notational Conventions" href="#rfc.section.2"><link rel="Chapter" title="3 The Authentication-Info Response Header Field" href="#rfc.section.3"><link rel="Chapter" title="4 The Proxy-Authentication-Info Response Header Field" href="#rfc.section.4"><link rel="Chapter" title="5 Security Considerations" href="#rfc.section.5"><link rel="Chapter" title="6 IANA Considerations" href="#rfc.section.6"><link rel="Chapter" href="#rfc.section.7" title="7 References"><link rel="Appendix" title="Acknowledgements" href="#rfc.section.unnumbered-1"><link rel="Alternate" title="Authoritative ASCII Version" href="http://www.ietf.org/rfc/rfc7615.txt"><link rel="Help" title="RFC-Editor's Status Page" href="http://www.rfc-editor.org/info/rfc7615"><link rel="Help" title="Additional Information on tools.ietf.org" href="http://tools.ietf.org/html/rfc7615"><meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.743, 2015/09/25 12:36:08, XSLT vendor: SAXON 6.5.5 from Michael Kay http://saxon.sf.net/"><meta name="keywords" content="HTTP, authentication"><link rel="schema.dct" href="http://purl.org/dc/terms/"><meta name="dct.creator" content="Reschke, J. F."><meta name="dct.identifier" content="urn:ietf:rfc:7615"><meta name="dct.issued" scheme="ISO8601" content="2015-09"><meta name="dct.replaces" content="urn:ietf:rfc:2617"><meta name="dct.abstract" content="This specification defines the &#34;Authentication-Info&#34; and &#34;Proxy-Authentication-Info&#34; response header fields for use in Hypertext Transfer Protocol (HTTP) authentication schemes that need to return information once the client's authentication credentials have been accepted."><meta name="dct.isPartOf" content="urn:issn:2070-1721"><meta name="description" content="This specification defines the &#34;Authentication-Info&#34; and &#34;Proxy-Authentication-Info&#34; response header fields for use in Hypertext Transfer Protocol (HTTP) authentication schemes that need to return information once the client's authentication credentials have been accepted."></head><body onload="getMeta(7615,&#34;rfc.meta&#34;);"><table class="header" id="rfc.headerblock"><tbody><tr><td class="left">Internet Engineering Task Force (IETF)</td><td class="right">J. Reschke</td></tr><tr><td class="left">Request for Comments: 7615</td><td class="right">greenbytes</td></tr><tr><td class="left">Obsoletes: <a href="https://tools.ietf.org/html/rfc2617">2617</a></td><td class="right">September 2015</td></tr><tr><td class="left">Category: Standards Track</td><td class="right"></td></tr><tr><td class="left">ISSN: 2070-1721</td><td class="right"></td></tr></tbody></table><div id="rfc.title"><h1>HTTP Authentication-Info and Proxy-Authentication-Info Response&nbsp;Header Fields</h1></div><h2 id="rfc.abstract"><a href="#rfc.abstract">Abstract</a></h2><p>This specification defines the "Authentication-Info" and "Proxy-Authentication-Info" response header fields for use in Hypertext Transfer Protocol (HTTP) authentication schemes that need to return information once the client's authentication credentials have been accepted.</p><div id="rfc.meta" class="docstatus"></div><div id="rfc.status"><h2><a href="#rfc.status">Status of This Memo</a></h2><p>This is an Internet Standards Track document.</p><p>This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.</p><p>Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at <a href="http://www.rfc-editor.org/info/rfc7615">http://www.rfc-editor.org/info/rfc7615</a>.</p></div><div id="rfc.copyrightnotice"><h2><a href="#rfc.copyrightnotice">Copyright Notice</a></h2><p>Copyright &copy; 2015 IETF Trust and the persons identified as the document authors. All rights reserved.</p><p>This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.</p><p>This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.</p></div><hr class="noprint"><div id="rfc.toc"><h2 class="np"><a href="#rfc.toc">Table of Contents</a></h2><ul class="toc"><li><a href="#rfc.section.1">1.</a>&nbsp;&nbsp;&nbsp;<a href="#introduction">Introduction</a></li><li><a href="#rfc.section.2">2.</a>&nbsp;&nbsp;&nbsp;<a href="#notational.conventions">Notational Conventions</a></li><li><a href="#rfc.section.3">3.</a>&nbsp;&nbsp;&nbsp;<a href="#authentication-info">The Authentication-Info Response Header Field</a><ul><li><a href="#rfc.section.3.1">3.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.1">Parameter Value Format</a></li></ul></li><li><a href="#rfc.section.4">4.</a>&nbsp;&nbsp;&nbsp;<a href="#proxy-authentication-info">The Proxy-Authentication-Info Response Header Field</a></li><li><a href="#rfc.section.5">5.</a>&nbsp;&nbsp;&nbsp;<a href="#security.considerations">Security Considerations</a></li><li><a href="#rfc.section.6">6.</a>&nbsp;&nbsp;&nbsp;<a href="#iana.considerations">IANA Considerations</a></li><li><a href="#rfc.section.7">7.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references">References</a><ul><li><a href="#rfc.section.7.1">7.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.1">Normative References</a></li><li><a href="#rfc.section.7.2">7.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.2">Informative References</a></li></ul></li><li><a href="#rfc.section.unnumbered-1">Acknowledgements</a></li><li><a href="#rfc.authors">Author's Address</a></li></ul></div><div id="introduction"><h2 id="rfc.section.1" class="np"><a href="#rfc.section.1">1.</a>&nbsp;<a href="#introduction">Introduction</a></h2><div id="rfc.section.1.p.1"><p>This specification defines the "Authentication-Info" and "Proxy-Authentication-Info" response header fields for use in HTTP authentication schemes (<a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a>) that need to return information once the client's authentication credentials have been accepted.<a class="self" href="#rfc.section.1.p.1">&para;</a></p></div><div id="rfc.section.1.p.2"><p>Both were previously defined in <a href="https://tools.ietf.org/html/rfc2617#section-3">Section 3</a> of <a href="#RFC2617"><cite title="HTTP Authentication: Basic and Digest Access Authentication">[RFC2617]</cite></a>, defining the HTTP "Digest" authentication scheme. This document generalizes the description for use not only in "Digest" (<a href="#RFC7616"><cite title="HTTP Digest Access Authentication">[RFC7616]</cite></a>), but also in other future schemes that might have the same requirements for carrying additional information during authentication.<a class="self" href="#rfc.section.1.p.2">&para;</a></p></div></div><div id="notational.conventions"><h2 id="rfc.section.2"><a href="#rfc.section.2">2.</a>&nbsp;<a href="#notational.conventions">Notational Conventions</a></h2><div id="rfc.section.2.p.1"><p>This specification uses the Augmented Backus-Naur Form (ABNF) notation of <a href="#RFC5234"><cite title="Augmented BNF for Syntax Specifications: ABNF">[RFC5234]</cite></a> with a list extension, defined in <a href="rfc7230.html#abnf.extension" title="ABNF List Extension: #rule">Section 7</a> of <a href="#RFC7230"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[RFC7230]</cite></a>, that allows for compact definition of comma-separated lists using a '#' operator (similar to how the '*' operator indicates repetition). The ABNF production for "auth-param" is defined in <a href="rfc7235.html#challenge.and.response" title="Challenge and Response">Section 2.1</a> of <a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a>.<a class="self" href="#rfc.section.2.p.1">&para;</a></p></div></div><div id="authentication-info"><h2 id="rfc.section.3"><a href="#rfc.section.3">3.</a>&nbsp;<a href="#authentication-info">The Authentication-Info Response Header Field</a></h2><div id="rfc.section.3.p.1"><p>HTTP authentication schemes can use the Authentication-Info response header field to communicate information after the client's authentication credentials have been accepted. This information can include a finalization message from the server (e.g., it can contain the server authentication).<a class="self" href="#rfc.section.3.p.1">&para;</a></p></div><div id="rfc.section.3.p.2"><p>The field value is a list of parameters (name/value pairs), using the "auth-param" syntax defined in <a href="rfc7235.html#challenge.and.response" title="Challenge and Response">Section 2.1</a> of <a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a>. This specification only describes the generic format; authentication schemes using Authentication-Info will define the individual parameters. The "Digest" Authentication Scheme, for instance, defines multiple parameters in <a href="https://tools.ietf.org/html/rfc7616#section-3.5">Section 3.5</a> of <a href="#RFC7616"><cite title="HTTP Digest Access Authentication">[RFC7616]</cite></a>.<a class="self" href="#rfc.section.3.p.2">&para;</a></p></div><div id="rfc.figure.u.1"><pre class="inline">  <a href="#authentication-info" class="smpl">Authentication-Info</a> = #<a href="#notational.conventions" class="smpl">auth-param</a>
     508</style><link rel="Contents" href="#rfc.toc"><link rel="Author" href="#rfc.authors"><link rel="Copyright" href="#rfc.copyrightnotice"><link rel="Chapter" title="1 Introduction" href="#rfc.section.1"><link rel="Chapter" title="2 Notational Conventions" href="#rfc.section.2"><link rel="Chapter" title="3 The Authentication-Info Response Header Field" href="#rfc.section.3"><link rel="Chapter" title="4 The Proxy-Authentication-Info Response Header Field" href="#rfc.section.4"><link rel="Chapter" title="5 Security Considerations" href="#rfc.section.5"><link rel="Chapter" title="6 IANA Considerations" href="#rfc.section.6"><link rel="Chapter" href="#rfc.section.7" title="7 References"><link rel="Appendix" title="Acknowledgements" href="#rfc.section.unnumbered-1"><link rel="Alternate" title="Authoritative ASCII Version" href="http://www.ietf.org/rfc/rfc7615.txt"><link rel="Help" title="RFC-Editor's Status Page" href="http://www.rfc-editor.org/info/rfc7615"><link rel="Help" title="Additional Information on tools.ietf.org" href="http://tools.ietf.org/html/rfc7615"><meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.750, 2015/10/05 09:10:12, XSLT vendor: SAXON 6.5.5 from Michael Kay http://saxon.sf.net/"><meta name="keywords" content="HTTP, authentication"><link rel="schema.dct" href="http://purl.org/dc/terms/"><meta name="dct.creator" content="Reschke, J. F."><meta name="dct.identifier" content="urn:ietf:rfc:7615"><meta name="dct.issued" scheme="ISO8601" content="2015-09"><meta name="dct.replaces" content="urn:ietf:rfc:2617"><meta name="dct.abstract" content="This specification defines the &#34;Authentication-Info&#34; and &#34;Proxy-Authentication-Info&#34; response header fields for use in Hypertext Transfer Protocol (HTTP) authentication schemes that need to return information once the client's authentication credentials have been accepted."><meta name="dct.isPartOf" content="urn:issn:2070-1721"><meta name="description" content="This specification defines the &#34;Authentication-Info&#34; and &#34;Proxy-Authentication-Info&#34; response header fields for use in Hypertext Transfer Protocol (HTTP) authentication schemes that need to return information once the client's authentication credentials have been accepted."></head><body onload="getMeta(7615,&#34;rfc.meta&#34;);"><table class="header" id="rfc.headerblock"><tbody><tr><td class="left">Internet Engineering Task Force (IETF)</td><td class="right">J. Reschke</td></tr><tr><td class="left">Request for Comments: 7615</td><td class="right">greenbytes</td></tr><tr><td class="left">Obsoletes: <a href="https://tools.ietf.org/html/rfc2617">2617</a></td><td class="right">September 2015</td></tr><tr><td class="left">Category: Standards Track</td><td class="right"></td></tr><tr><td class="left">ISSN: 2070-1721</td><td class="right"></td></tr></tbody></table><div id="rfc.title"><h1>HTTP Authentication-Info and Proxy-Authentication-Info Response&nbsp;Header Fields</h1></div><h2 id="rfc.abstract"><a href="#rfc.abstract">Abstract</a></h2><p>This specification defines the "Authentication-Info" and "Proxy-Authentication-Info" response header fields for use in Hypertext Transfer Protocol (HTTP) authentication schemes that need to return information once the client's authentication credentials have been accepted.</p><div id="rfc.meta" class="docstatus"></div><div id="rfc.status"><h2><a href="#rfc.status">Status of This Memo</a></h2><p>This is an Internet Standards Track document.</p><p>This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.</p><p>Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at <a href="http://www.rfc-editor.org/info/rfc7615">http://www.rfc-editor.org/info/rfc7615</a>.</p></div><div id="rfc.copyrightnotice"><h2><a href="#rfc.copyrightnotice">Copyright Notice</a></h2><p>Copyright &copy; 2015 IETF Trust and the persons identified as the document authors. All rights reserved.</p><p>This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.</p><p>This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.</p></div><hr class="noprint"><div id="rfc.toc"><h2 class="np"><a href="#rfc.toc">Table of Contents</a></h2><ul class="toc"><li><a href="#rfc.section.1">1.</a>&nbsp;&nbsp;&nbsp;<a href="#introduction">Introduction</a></li><li><a href="#rfc.section.2">2.</a>&nbsp;&nbsp;&nbsp;<a href="#notational.conventions">Notational Conventions</a></li><li><a href="#rfc.section.3">3.</a>&nbsp;&nbsp;&nbsp;<a href="#authentication-info">The Authentication-Info Response Header Field</a><ul><li><a href="#rfc.section.3.1">3.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.1">Parameter Value Format</a></li></ul></li><li><a href="#rfc.section.4">4.</a>&nbsp;&nbsp;&nbsp;<a href="#proxy-authentication-info">The Proxy-Authentication-Info Response Header Field</a></li><li><a href="#rfc.section.5">5.</a>&nbsp;&nbsp;&nbsp;<a href="#security.considerations">Security Considerations</a></li><li><a href="#rfc.section.6">6.</a>&nbsp;&nbsp;&nbsp;<a href="#iana.considerations">IANA Considerations</a></li><li><a href="#rfc.section.7">7.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references">References</a><ul><li><a href="#rfc.section.7.1">7.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.1">Normative References</a></li><li><a href="#rfc.section.7.2">7.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.2">Informative References</a></li></ul></li><li><a href="#rfc.section.unnumbered-1">Acknowledgements</a></li><li><a href="#rfc.authors">Author's Address</a></li></ul></div><div id="introduction"><h2 id="rfc.section.1" class="np"><a href="#rfc.section.1">1.</a>&nbsp;<a href="#introduction">Introduction</a></h2><div id="rfc.section.1.p.1"><p>This specification defines the "Authentication-Info" and "Proxy-Authentication-Info" response header fields for use in HTTP authentication schemes (<a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a>) that need to return information once the client's authentication credentials have been accepted.<a class="self" href="#rfc.section.1.p.1">&para;</a></p></div><div id="rfc.section.1.p.2"><p>Both were previously defined in <a href="https://tools.ietf.org/html/rfc2617#section-3">Section 3</a> of <a href="#RFC2617"><cite title="HTTP Authentication: Basic and Digest Access Authentication">[RFC2617]</cite></a>, defining the HTTP "Digest" authentication scheme. This document generalizes the description for use not only in "Digest" (<a href="#RFC7616"><cite title="HTTP Digest Access Authentication">[RFC7616]</cite></a>), but also in other future schemes that might have the same requirements for carrying additional information during authentication.<a class="self" href="#rfc.section.1.p.2">&para;</a></p></div></div><div id="notational.conventions"><h2 id="rfc.section.2"><a href="#rfc.section.2">2.</a>&nbsp;<a href="#notational.conventions">Notational Conventions</a></h2><div id="rfc.section.2.p.1"><p>This specification uses the Augmented Backus-Naur Form (ABNF) notation of <a href="#RFC5234"><cite title="Augmented BNF for Syntax Specifications: ABNF">[RFC5234]</cite></a> with a list extension, defined in <a href="rfc7230.html#abnf.extension" title="ABNF List Extension: #rule">Section 7</a> of <a href="#RFC7230"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[RFC7230]</cite></a>, that allows for compact definition of comma-separated lists using a '#' operator (similar to how the '*' operator indicates repetition). The ABNF production for "auth-param" is defined in <a href="rfc7235.html#challenge.and.response" title="Challenge and Response">Section 2.1</a> of <a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a>.<a class="self" href="#rfc.section.2.p.1">&para;</a></p></div></div><div id="authentication-info"><h2 id="rfc.section.3"><a href="#rfc.section.3">3.</a>&nbsp;<a href="#authentication-info">The Authentication-Info Response Header Field</a></h2><div id="rfc.section.3.p.1"><p>HTTP authentication schemes can use the Authentication-Info response header field to communicate information after the client's authentication credentials have been accepted. This information can include a finalization message from the server (e.g., it can contain the server authentication).<a class="self" href="#rfc.section.3.p.1">&para;</a></p></div><div id="rfc.section.3.p.2"><p>The field value is a list of parameters (name/value pairs), using the "auth-param" syntax defined in <a href="rfc7235.html#challenge.and.response" title="Challenge and Response">Section 2.1</a> of <a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a>. This specification only describes the generic format; authentication schemes using Authentication-Info will define the individual parameters. The "Digest" Authentication Scheme, for instance, defines multiple parameters in <a href="https://tools.ietf.org/html/rfc7616#section-3.5">Section 3.5</a> of <a href="#RFC7616"><cite title="HTTP Digest Access Authentication">[RFC7616]</cite></a>.<a class="self" href="#rfc.section.3.p.2">&para;</a></p></div><div id="rfc.figure.u.1"><pre class="inline">  <a href="#authentication-info" class="smpl">Authentication-Info</a> = #<a href="#notational.conventions" class="smpl">auth-param</a>
    508509</pre></div><div id="rfc.section.3.p.3"><p>The Authentication-Info header field can be used in any HTTP response, independently of request method and status code. Its semantics are defined by the authentication scheme indicated by the Authorization header field (<a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a>, <a href="rfc7235.html#header.authorization" title="Authorization">Section 4.2</a>) of the corresponding request.<a class="self" href="#rfc.section.3.p.3">&para;</a></p></div><div id="rfc.section.3.p.4"><p>A proxy forwarding a response is not allowed to modify the field value in any way.<a class="self" href="#rfc.section.3.p.4">&para;</a></p></div><div id="rfc.section.3.p.5"><p>Authentication-Info can be used inside trailers (<a href="#RFC7230"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[RFC7230]</cite></a>, <a href="rfc7230.html#chunked.trailer.part" title="Chunked Trailer Part">Section 4.1.2</a>) when the authentication scheme explicitly allows this.<a class="self" href="#rfc.section.3.p.5">&para;</a></p></div><div><h3 id="rfc.section.3.1"><a href="#rfc.section.3.1">3.1</a>&nbsp;Parameter Value Format</h3><div id="rfc.section.3.1.p.1"><p>Parameter values can be expressed either as "token" or as "quoted-string" (<a href="rfc7230.html#field.components" title="Field Value Components">Section 3.2.6</a> of <a href="#RFC7230"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[RFC7230]</cite></a>).<a class="self" href="#rfc.section.3.1.p.1">&para;</a></p></div><div id="rfc.section.3.1.p.2"><p>Authentication scheme definitions need to allow both notations, both for senders and recipients. This allows recipients to use generic parsing components, independent of the authentication scheme in use.<a class="self" href="#rfc.section.3.1.p.2">&para;</a></p></div><div id="rfc.section.3.1.p.3"><p>For backwards compatibility, authentication scheme definitions can restrict the format for senders to one of the two variants. This can be important when it is known that deployed implementations will fail when encountering one of the two formats.<a class="self" href="#rfc.section.3.1.p.3">&para;</a></p></div></div></div><div id="proxy-authentication-info"><h2 id="rfc.section.4"><a href="#rfc.section.4">4.</a>&nbsp;<a href="#proxy-authentication-info">The Proxy-Authentication-Info Response Header Field</a></h2><div id="rfc.section.4.p.1" class="avoidbreakafter"><p>The Proxy-Authentication-Info response header field is equivalent to Authentication-Info, except that it applies to proxy authentication (<a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a>, <a href="https://tools.ietf.org/html/rfc7235#section-2">Section 2</a>) and its semantics are defined by the authentication scheme indicated by the Proxy-Authorization header field (<a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a>, <a href="rfc7235.html#header.proxy-authorization" title="Proxy-Authorization">Section 4.4</a>) of the corresponding request:<a class="self" href="#rfc.section.4.p.1">&para;</a></p></div><div id="rfc.section.4.p.2"><span id="rfc.figure.u.2"><pre class="inline">  <a href="#proxy-authentication-info" class="smpl">Proxy-Authentication-Info</a> = #<a href="#notational.conventions" class="smpl">auth-param</a>
    509510</pre></span></div><div id="rfc.section.4.p.3"><p>However, unlike Authentication-Info, the Proxy-Authentication-Info header field applies only to the next outbound client on the response chain. This is because only the client that chose a given proxy is likely to have the credentials necessary for authentication. However, when multiple proxies are used within the same administrative domain, such as office and regional caching proxies within a large corporate network, it is common for credentials to be generated by the user agent and passed through the hierarchy until consumed. Hence, in such a configuration, it will appear as if Proxy-Authentication-Info is being forwarded because each proxy will send the same field value.<a class="self" href="#rfc.section.4.p.3">&para;</a></p></div></div><div id="security.considerations"><h2 id="rfc.section.5"><a href="#rfc.section.5">5.</a>&nbsp;<a href="#security.considerations">Security Considerations</a></h2><div id="rfc.section.5.p.1"><p>Adding information to HTTP responses that are sent over an unencrypted channel can affect security and privacy. The presence of the header fields alone indicates that HTTP authentication is in use. Additional information could be exposed by the contents of the authentication-scheme specific parameters; this will have to be considered in the definitions of these schemes.<a class="self" href="#rfc.section.5.p.1">&para;</a></p></div></div><div id="iana.considerations"><h2 id="rfc.section.6"><a href="#rfc.section.6">6.</a>&nbsp;<a href="#iana.considerations">IANA Considerations</a></h2><div id="rfc.section.6.p.1"><p>HTTP header fields are registered within the "Message Headers" registry located at &lt;<a href="http://www.iana.org/assignments/message-headers">http://www.iana.org/assignments/message-headers</a>&gt;, as defined by <a href="#BCP90"><cite title="Registration Procedures for Message Header Fields">[BCP90]</cite></a>.<a class="self" href="#rfc.section.6.p.1">&para;</a></p></div><div id="rfc.section.6.p.2" class="avoidbreakafter"><p>This document updates the definitions of the "Authentication-Info" and "Proxy-Authentication-Info" header fields, so the "Permanent Message Header Field Names" registry has been updated accordingly:<a class="self" href="#rfc.section.6.p.2">&para;</a></p></div><div id="rfc.table.1"><div id="iana.header.registration.table"></div><table class="tt full tleft" cellpadding="3" cellspacing="0"><thead><tr><th>Header Field Name</th><th>Protocol</th><th>Status</th><th>Reference</th></tr></thead><tbody><tr><td class="left">Authentication-Info</td><td class="left">http</td><td class="left">standard</td><td class="left"><a href="#authentication-info" title="The Authentication-Info Response Header Field">Section&nbsp;3</a> of this document</td></tr><tr><td class="left">Proxy-Authentication-Info</td><td class="left">http</td><td class="left">standard</td><td class="left"><a href="#proxy-authentication-info" title="The Proxy-Authentication-Info Response Header Field">Section&nbsp;4</a> of this document</td></tr></tbody></table></div></div><h2 id="rfc.references"><a id="rfc.section.7" href="#rfc.section.7">7.</a> References</h2><h3 id="rfc.references.1"><a href="#rfc.section.7.1" id="rfc.section.7.1">7.1</a> Normative References</h3><table><tr><td class="reference"><b id="RFC5234">[RFC5234]</b></td><td class="top">Crocker, D., Ed. and P. Overell, &#8220;<a href="https://tools.ietf.org/html/rfc5234">Augmented BNF for Syntax Specifications: ABNF</a>&#8221;, STD&nbsp;68, RFC&nbsp;5234, <a href="http://dx.doi.org/10.17487/RFC5234">DOI&nbsp;10.17487/RFC5234</a>, January&nbsp;2008, &lt;<a href="http://www.rfc-editor.org/info/rfc5234">http://www.rfc-editor.org/info/rfc5234</a>&gt;.</td></tr><tr><td class="reference"><b id="RFC7230">[RFC7230]</b></td><td class="top">Fielding, R., Ed. and J. Reschke, Ed., &#8220;<a href="https://tools.ietf.org/html/rfc7230">Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</a>&#8221;, RFC&nbsp;7230, <a href="http://dx.doi.org/10.17487/RFC7230">DOI&nbsp;10.17487/RFC7230</a>, June&nbsp;2014, &lt;<a href="http://www.rfc-editor.org/info/rfc7230">http://www.rfc-editor.org/info/rfc7230</a>&gt;.</td></tr><tr><td class="reference"><b id="RFC7235">[RFC7235]</b></td><td class="top">Fielding, R., Ed. and J. Reschke, Ed., &#8220;<a href="https://tools.ietf.org/html/rfc7235">Hypertext Transfer Protocol (HTTP/1.1): Authentication</a>&#8221;, RFC&nbsp;7235, <a href="http://dx.doi.org/10.17487/RFC7235">DOI&nbsp;10.17487/RFC7235</a>, June&nbsp;2014, &lt;<a href="http://www.rfc-editor.org/info/rfc7235">http://www.rfc-editor.org/info/rfc7235</a>&gt;.</td></tr></table><h3 id="rfc.references.2"><a href="#rfc.section.7.2" id="rfc.section.7.2">7.2</a> Informative References</h3><table><tr><td class="reference"><b id="BCP90">[BCP90]</b></td><td class="top">Klyne, G., Nottingham, M., and J. Mogul, &#8220;<a href="https://tools.ietf.org/html/rfc3864">Registration Procedures for Message Header Fields</a>&#8221;, BCP&nbsp;90, RFC&nbsp;3864, September&nbsp;2004, &lt;<a href="http://www.rfc-editor.org/info/bcp90">http://www.rfc-editor.org/info/bcp90</a>&gt;.</td></tr><tr><td class="reference"><b id="RFC2617">[RFC2617]</b></td><td class="top">Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A., and L. Stewart, &#8220;<a href="https://tools.ietf.org/html/rfc2617">HTTP Authentication: Basic and Digest Access Authentication</a>&#8221;, RFC&nbsp;2617, <a href="http://dx.doi.org/10.17487/RFC2617">DOI&nbsp;10.17487/RFC2617</a>, June&nbsp;1999, &lt;<a href="http://www.rfc-editor.org/info/rfc2617">http://www.rfc-editor.org/info/rfc2617</a>&gt;.</td></tr><tr><td class="reference"><b id="RFC7616">[RFC7616]</b></td><td class="top">Shekh-Yusef, R., Ed., Ahrens, D., and S. Bremer, &#8220;<a href="https://tools.ietf.org/html/rfc7616">HTTP Digest Access Authentication</a>&#8221;, RFC&nbsp;7616, <a href="http://dx.doi.org/10.17487/RFC7616">DOI&nbsp;10.17487/RFC7616</a>, September&nbsp;2015, &lt;<a href="http://www.rfc-editor.org/info/rfc7616">http://www.rfc-editor.org/info/rfc7616</a>&gt;.</td></tr></table><div><h2 id="rfc.section.unnumbered-1">Acknowledgements</h2><div id="rfc.section.unnumbered-1.p.1"><p>This document is based on the header field definitions in RFCs 2069 and 2617, whose authors are: John Franks, Phillip M. Hallam-Baker, Jeffery L. Hostetler, Scott D. Lawrence, Paul J. Leach, Ari Luotonen, Eric W. Sink, and Lawrence C. Stewart.<a class="self" href="#rfc.section.unnumbered-1.p.1">&para;</a></p></div><div id="rfc.section.unnumbered-1.p.2"><p>Additional thanks go to the members of the HTTPAUTH and HTTPBIS Working Groups, namely, Amos Jeffries, Benjamin Kaduk, Alexey Melnikov, Mark Nottingham, Yutaka Oiwa, Rifaat Shekh-Yusef, and Martin Thomson.<a class="self" href="#rfc.section.unnumbered-1.p.2">&para;</a></p></div></div><div class="avoidbreakinside"><h2 id="rfc.authors"><a href="#rfc.authors">Author's Address</a></h2><p><b>Julian F. Reschke</b><br>greenbytes GmbH<br>Hafenweg 16<br>Muenster, NW&nbsp;48155<br>Germany<br>Email: <a href="mailto:julian.reschke@greenbytes.de">julian.reschke@greenbytes.de</a><br>URI: <a href="http://greenbytes.de/tech/webdav/">http://greenbytes.de/tech/webdav/</a></p></div></body></html>
  • specs/rfc7616.html

    r2742 r2743  
    88
    99  var xhr = new XMLHttpRequest();
    10   xhr.open("GET", "http://tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
     10  var protocol = document.baseURI.toLowerCase().startsWith("https:") ? "https:" : "http:";
     11  xhr.open("GET", protocol + "//tools.ietf.org/draft/rfc" + rfcno + "/state.xml", true);
    1112  xhr.onload = function (e) {
    1213    if (xhr.readyState === 4) {
     
    509510    }
    510511}
    511 </style><link rel="Contents" href="#rfc.toc"><link rel="Author" href="#rfc.authors"><link rel="Copyright" href="#rfc.copyrightnotice"><link rel="Chapter" title="1 Introduction" href="#rfc.section.1"><link rel="Chapter" title="2 Syntax Convention" href="#rfc.section.2"><link rel="Chapter" title="3 Digest Access Authentication Scheme" href="#rfc.section.3"><link rel="Chapter" title="4 Internationalization Considerations" href="#rfc.section.4"><link rel="Chapter" title="5 Security Considerations" href="#rfc.section.5"><link rel="Chapter" title="6 IANA Considerations" href="#rfc.section.6"><link rel="Chapter" href="#rfc.section.7" title="7 References"><link rel="Appendix" title="A Changes from RFC 2617" href="#rfc.section.A"><link rel="Appendix" title="B Acknowledgments" href="#rfc.section.B"><link rel="Alternate" title="Authoritative ASCII Version" href="http://www.ietf.org/rfc/rfc7616.txt"><link rel="Help" title="RFC-Editor's Status Page" href="http://www.rfc-editor.org/info/rfc7616"><link rel="Help" title="Additional Information on tools.ietf.org" href="http://tools.ietf.org/html/rfc7616"><meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.743, 2015/09/25 12:36:08, XSLT vendor: SAXON 6.5.5 from Michael Kay http://saxon.sf.net/"><meta name="keywords" content="HTTP, authentication scheme"><link rel="schema.dct" href="http://purl.org/dc/terms/"><meta name="dct.creator" content="Shekh-Yusef, R."><meta name="dct.creator" content="Ahrens, D."><meta name="dct.creator" content="Bremer, S."><meta name="dct.identifier" content="urn:ietf:rfc:7616"><meta name="dct.issued" scheme="ISO8601" content="2015-09"><meta name="dct.replaces" content="urn:ietf:rfc:2617"><meta name="dct.abstract" content="The Hypertext Transfer Protocol (HTTP) provides a simple challenge-response authentication mechanism that may be used by a server to challenge a client request and by a client to provide authentication information. This document defines the HTTP Digest Authentication scheme that can be used with the HTTP authentication mechanism."><meta name="dct.isPartOf" content="urn:issn:2070-1721"><meta name="description" content="The Hypertext Transfer Protocol (HTTP) provides a simple challenge-response authentication mechanism that may be used by a server to challenge a client request and by a client to provide authentication information. This document defines the HTTP Digest Authentication scheme that can be used with the HTTP authentication mechanism."></head><body onload="getMeta(7616,&#34;rfc.meta&#34;);"><table class="header" id="rfc.headerblock"><tbody><tr><td class="left">Internet Engineering Task Force (IETF)</td><td class="right">R. Shekh-Yusef, Editor</td></tr><tr><td class="left">Request for Comments: 7616</td><td class="right">Avaya</td></tr><tr><td class="left">Obsoletes: <a href="https://tools.ietf.org/html/rfc2617">2617</a></td><td class="right">D. Ahrens</td></tr><tr><td class="left">Category: Standards Track</td><td class="right">Independent</td></tr><tr><td class="left">ISSN: 2070-1721</td><td class="right">S. Bremer</td></tr><tr><td class="left"></td><td class="right">Netzkonform</td></tr><tr><td class="left"></td><td class="right">September 2015</td></tr></tbody></table><div id="rfc.title"><h1>HTTP Digest Access Authentication</h1></div><h2 id="rfc.abstract"><a href="#rfc.abstract">Abstract</a></h2><p>The Hypertext Transfer Protocol (HTTP) provides a simple challenge-response authentication mechanism that may be used by a server to challenge a client request and by a client to provide authentication information. This document defines the HTTP Digest Authentication scheme that can be used with the HTTP authentication mechanism.</p><div id="rfc.meta" class="docstatus"></div><div id="rfc.status"><h2><a href="#rfc.status">Status of this Memo</a></h2><p>This is an Internet Standards Track document.</p><p>This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.</p><p>Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at <a href="http://www.rfc-editor.org/info/rfc7616">http://www.rfc-editor.org/info/rfc7616</a>.</p></div><div id="rfc.copyrightnotice"><h2><a href="#rfc.copyrightnotice">Copyright Notice</a></h2><p>Copyright &copy; 2015 IETF Trust and the persons identified as the document authors. All rights reserved.</p><p>This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.</p><p>This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.</p></div><hr class="noprint"><div id="rfc.toc"><h2 class="np"><a href="#rfc.toc">Table of Contents</a></h2><ul class="toc"><li><a href="#rfc.section.1">1.</a>&nbsp;&nbsp;&nbsp;<a href="#introduction">Introduction</a><ul><li><a href="#rfc.section.1.1">1.1</a>&nbsp;&nbsp;&nbsp;<a href="#terminology">Terminology</a></li></ul></li><li><a href="#rfc.section.2">2.</a>&nbsp;&nbsp;&nbsp;<a href="#syntax.convention">Syntax Convention</a><ul><li><a href="#rfc.section.2.1">2.1</a>&nbsp;&nbsp;&nbsp;<a href="#examples">Examples</a></li><li><a href="#rfc.section.2.2">2.2</a>&nbsp;&nbsp;&nbsp;<a href="#abnf">ABNF</a></li></ul></li><li><a href="#rfc.section.3">3.</a>&nbsp;&nbsp;&nbsp;<a href="#digest.access.authentication.scheme">Digest Access Authentication Scheme</a><ul><li><a href="#rfc.section.3.1">3.1</a>&nbsp;&nbsp;&nbsp;<a href="#overall.operation">Overall Operation</a></li><li><a href="#rfc.section.3.2">3.2</a>&nbsp;&nbsp;&nbsp;<a href="#representation.of.digest.values">Representation of Digest Values</a></li><li><a href="#rfc.section.3.3">3.3</a>&nbsp;&nbsp;&nbsp;<a href="#www-authenticate.response.header">The WWW-Authenticate Response Header Field</a></li><li><a href="#rfc.section.3.4">3.4</a>&nbsp;&nbsp;&nbsp;<a href="#authorization.request.header.field">The Authorization Header Field</a><ul><li><a href="#rfc.section.3.4.1">3.4.1</a>&nbsp;&nbsp;&nbsp;<a href="#response">Response</a></li><li><a href="#rfc.section.3.4.2">3.4.2</a>&nbsp;&nbsp;&nbsp;<a href="#a1">A1</a></li><li><a href="#rfc.section.3.4.3">3.4.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.4.3">A2</a></li><li><a href="#rfc.section.3.4.4">3.4.4</a>&nbsp;&nbsp;&nbsp;<a href="#username.hashing">Username Hashing</a></li><li><a href="#rfc.section.3.4.5">3.4.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.4.5">Parameter Values and Quoted-String</a></li><li><a href="#rfc.section.3.4.6">3.4.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.4.6">Various Considerations</a></li></ul></li><li><a href="#rfc.section.3.5">3.5</a>&nbsp;&nbsp;&nbsp;<a href="#authenticaion-info.header.field">The Authentication-Info and Proxy-Authentication-Info Header Fields</a></li><li><a href="#rfc.section.3.6">3.6</a>&nbsp;&nbsp;&nbsp;<a href="#digest.operation">Digest Operation</a></li><li><a href="#rfc.section.3.7">3.7</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.7">Security Protocol Negotiation</a></li><li><a href="#rfc.section.3.8">3.8</a>&nbsp;&nbsp;&nbsp;<a href="#proxy-auth">Proxy-Authenticate and Proxy-Authorization</a></li><li><a href="#rfc.section.3.9">3.9</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.9">Examples</a><ul><li><a href="#rfc.section.3.9.1">3.9.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.9.1">Example with SHA-256 and MD5</a></li><li><a href="#rfc.section.3.9.2">3.9.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.9.2">Example with SHA-512-256, Charset, and Userhash</a></li></ul></li></ul></li><li><a href="#rfc.section.4">4.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4">Internationalization Considerations</a></li><li><a href="#rfc.section.5">5.</a>&nbsp;&nbsp;&nbsp;<a href="#security.considerations">Security Considerations</a><ul><li><a href="#rfc.section.5.1">5.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.1">Limitations</a></li><li><a href="#rfc.section.5.2">5.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.2">Storing Passwords</a></li><li><a href="#rfc.section.5.3">5.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.3">Authentication of Clients Using Digest Authentication</a></li><li><a href="#rfc.section.5.4">5.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.4">Limited-Use Nonce Values</a></li><li><a href="#rfc.section.5.5">5.5</a>&nbsp;&nbsp;&nbsp;<a href="#replay_attacks">Replay Attacks</a></li><li><a href="#rfc.section.5.6">5.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.6">Weakness Created by Multiple Authentication Schemes</a></li><li><a href="#rfc.section.5.7">5.7</a>&nbsp;&nbsp;&nbsp;<a href="#online.dictionary.attacks">Online Dictionary Attacks</a></li><li><a href="#rfc.section.5.8">5.8</a>&nbsp;&nbsp;&nbsp;<a href="#mitm">Man-in-the-Middle Attacks</a></li><li><a href="#rfc.section.5.9">5.9</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.9">Chosen Plaintext Attacks</a></li><li><a href="#rfc.section.5.10">5.10</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.10">Precomputed Dictionary Attacks</a></li><li><a href="#rfc.section.5.11">5.11</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.11">Batch Brute-Force Attacks</a></li><li><a href="#rfc.section.5.12">5.12</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.12">Parameter Randomness</a></li><li><a href="#rfc.section.5.13">5.13</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.13">Summary</a></li></ul></li><li><a href="#rfc.section.6">6.</a>&nbsp;&nbsp;&nbsp;<a href="#iana.considerations">IANA Considerations</a><ul><li><a href="#rfc.section.6.1">6.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.1">Hash Algorithms for HTTP Digest Authentication </a></li><li><a href="#rfc.section.6.2">6.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.2">Digest Scheme Registration</a></li></ul></li><li><a href="#rfc.section.7">7.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references">References</a><ul><li><a href="#rfc.section.7.1">7.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.1">Normative References</a></li><li><a href="#rfc.section.7.2">7.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.2">Informative References</a></li></ul></li><li><a href="#rfc.section.A">A.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc2617.changes">Changes from RFC 2617</a></li><li><a href="#rfc.section.B">B.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.B">Acknowledgments</a></li><li><a href="#rfc.authors">Authors' Addresses</a></li></ul></div><div id="introduction"><h2 id="rfc.section.1" class="np"><a href="#rfc.section.1">1.</a>&nbsp;<a href="#introduction">Introduction</a></h2><div id="rfc.section.1.p.1"><p>HTTP provides a simple challenge-response authentication mechanism that may be used by a server to challenge a client request and by a client to provide authentication information. This document defines the HTTP Digest Authentication scheme that can be used with the HTTP authentication mechanism.<a class="self" href="#rfc.section.1.p.1">&para;</a></p></div><div id="rfc.section.1.p.2"><p>This document extends but is generally backward compatible with <a href="#RFC2617"><cite title="HTTP Authentication: Basic and Digest Access Authentication">[RFC2617]</cite></a>. See <a href="#rfc2617.changes" title="Changes from RFC 2617">Appendix&nbsp;A</a> for the new capabilities introduced by this specification.<a class="self" href="#rfc.section.1.p.2">&para;</a></p></div><div id="rfc.section.1.p.3"><p>The details of the challenge-response authentication mechanism are specified in the "Hypertext Transfer Protocol (HTTP/1.1): Authentication" <a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a>.<a class="self" href="#rfc.section.1.p.3">&para;</a></p></div><div id="rfc.section.1.p.4"><p>The combination of this document with the definition of the "Basic" authentication scheme <a href="#RFC7617"><cite title="The 'Basic' HTTP Authentication Scheme">[RFC7617]</cite></a>, "HTTP Authentication-Info and Proxy-Authentication-Info Response Header Fields" <a href="#RFC7615"><cite title="HTTP Authentication-Info and Proxy-Authentication-Info Response Header Fields">[RFC7615]</cite></a>, and "Hypertext Transfer Protocol (HTTP/1.1): Authentication" <a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a> obsolete <a href="#RFC2617"><cite title="HTTP Authentication: Basic and Digest Access Authentication">[RFC2617]</cite></a>.<a class="self" href="#rfc.section.1.p.4">&para;</a></p></div><div id="terminology"><h3 id="rfc.section.1.1"><a href="#rfc.section.1.1">1.1</a>&nbsp;<a href="#terminology">Terminology</a></h3><div id="rfc.section.1.1.p.1"><p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <a href="#RFC2119"><cite title="Key words for use in RFCs to Indicate Requirement Levels">[RFC2119]</cite></a>.<a class="self" href="#rfc.section.1.1.p.1">&para;</a></p></div></div></div><div id="syntax.convention"><h2 id="rfc.section.2"><a href="#rfc.section.2">2.</a>&nbsp;<a href="#syntax.convention">Syntax Convention</a></h2><div id="examples"><h3 id="rfc.section.2.1"><a href="#rfc.section.2.1">2.1</a>&nbsp;<a href="#examples">Examples</a></h3><div id="rfc.section.2.1.p.1"><p>In the interest of clarity and readability, the extended parameters or the header fields and parameters in the examples in this document might be broken into multiple lines. Any line that is indented in this document is a continuation of the preceding line.<a class="self" href="#rfc.section.2.1.p.1">&para;</a></p></div></div><div id="abnf"><h3 id="rfc.section.2.2"><a href="#rfc.section.2.2">2.2</a>&nbsp;<a href="#abnf">ABNF</a></h3><div id="rfc.section.2.2.p.1"><p>This specification uses the Augmented Backus-Naur Form (ABNF) notation of <a href="#RFC5234"><cite title="Augmented BNF for Syntax Specifications: ABNF">[RFC5234]</cite></a> and the ABNF List Extension of <a href="#RFC7230"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[RFC7230]</cite></a>.<a class="self" href="#rfc.section.2.2.p.1">&para;</a></p></div></div></div><div id="digest.access.authentication.scheme"><h2 id="rfc.section.3"><a href="#rfc.section.3">3.</a>&nbsp;<a href="#digest.access.authentication.scheme">Digest Access Authentication Scheme</a></h2><div id="overall.operation"><h3 id="rfc.section.3.1"><a href="#rfc.section.3.1">3.1</a>&nbsp;<a href="#overall.operation">Overall Operation</a></h3><div id="rfc.section.3.1.p.1"><p>The Digest scheme is based on a simple challenge-response paradigm. The Digest scheme challenges using a nonce value and might indicate that username hashing is supported. A valid response contains an unkeyed digest of the username, the password, the given nonce value, the HTTP method, and the requested URI. In this way, the password is never sent in the clear, and the username can be hashed, depending on the indication received from the server. The username and password must be prearranged in some fashion not addressed by this document.<a class="self" href="#rfc.section.3.1.p.1">&para;</a></p></div></div><div id="representation.of.digest.values"><h3 id="rfc.section.3.2"><a href="#rfc.section.3.2">3.2</a>&nbsp;<a href="#representation.of.digest.values">Representation of Digest Values</a></h3><div id="rfc.section.3.2.p.1"><p>An optional header field allows the server to specify the algorithm used to create the unkeyed digest or digest. This document adds SHA-256 and SHA-512/256 algorithms. To maintain backwards compatibility with <a href="#RFC2617"><cite title="HTTP Authentication: Basic and Digest Access Authentication">[RFC2617]</cite></a>, the MD5 algorithm is still supported but <em class="bcp14">NOT RECOMMENDED</em>.<a class="self" href="#rfc.section.3.2.p.1">&para;</a></p></div><div id="rfc.section.3.2.p.2"><p>The size of the digest depends on the algorithm used. The bits in the digest are converted from the most significant to the least significant bit, four bits at a time, to the ASCII representation as follows. Each sequence of four bits is represented by its familiar hexadecimal notation from the characters 0123456789abcdef; that is, binary 0000 is represented by the character '0', 0001 by '1' and so on up to the representation of 1111 as 'f'. If the MD5 algorithm is used to calculate the digest, then the MD5 digest will be represented as 32 hexadecimal characters, while SHA-256 and SHA-512/256 are represented as 64 hexadecimal characters.<a class="self" href="#rfc.section.3.2.p.2">&para;</a></p></div></div><div id="www-authenticate.response.header"><h3 id="rfc.section.3.3"><a href="#rfc.section.3.3">3.3</a>&nbsp;<a href="#www-authenticate.response.header">The WWW-Authenticate Response Header Field</a></h3><div id="rfc.section.3.3.p.1" class="avoidbreakafter"><p>If a server receives a request for an access-protected object, and an acceptable Authorization header field is not sent, the server responds with a "401 Unauthorized" status code and a WWW-Authenticate header field with Digest scheme as per the framework defined above. The value of the header field can include parameters from the following list:<a class="self" href="#rfc.section.3.3.p.1">&para;</a></p></div><div id="rfc.section.3.3.p.2"><p>realm <a class="self" href="#rfc.section.3.3.p.2">&para;</a></p><ul class="empty"><li>A string to be displayed to users so they know which username and password to use. This string should contain at least the name of the host performing the authentication and might additionally indicate the collection of users who might have access. An example is "registered_users@example.com". (See <a href="https://tools.ietf.org/html/rfc7235#section-2.2">Section 2.2</a> of <a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a> for more details.)</li></ul></div><div id="rfc.section.3.3.p.3"><p>domain <a class="self" href="#rfc.section.3.3.p.3">&para;</a></p><ul class="empty"><li>A quoted, space-separated list of URIs, as specified in <a href="#RFC3986"><cite title="Uniform Resource Identifier (URI): Generic Syntax">[RFC3986]</cite></a>, that define the protection space. If a URI is a path-absolute, it is relative to the canonical root URL. (See <a href="https://tools.ietf.org/html/rfc7235#section-2.2">Section 2.2</a> of <a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a>.) An absolute-URI in this list may refer to a different server than the web-origin <a href="#RFC6454"><cite title="The Web Origin Concept">[RFC6454]</cite></a>. The client can use this list to determine the set of URIs for which the same authentication information may be sent: any URI that has a URI in this list as a prefix (after both have been made absolute) <em class="bcp14">MAY</em> be assumed to be in the same protection space. If this parameter is omitted or its value is empty, the client <em class="bcp14">SHOULD</em> assume that the protection space consists of all URIs on the web-origin.</li><li>This parameter is not meaningful in Proxy-Authenticate header fields, for which the protection space is always the entire proxy; if present, it <em class="bcp14">MUST</em> be ignored.</li></ul></div><div id="rfc.section.3.3.p.4"><p>nonce <a class="self" href="#rfc.section.3.3.p.4">&para;</a></p><ul class="empty"><li>A server-specified string which should be uniquely generated each time a 401 response is made. It is advised that this string be Base64 or hexadecimal data. Specifically, since the string is passed in the header field lines as a quoted string, the double-quote character is not allowed, unless suitably escaped.</li><li>The contents of the nonce are implementation dependent. The quality of the implementation depends on a good choice. A nonce might, for example, be constructed as the Base64 encoding of <span id="rfc.figure.u.1"><pre class="text">
     512</style><link rel="Contents" href="#rfc.toc"><link rel="Author" href="#rfc.authors"><link rel="Copyright" href="#rfc.copyrightnotice"><link rel="Chapter" title="1 Introduction" href="#rfc.section.1"><link rel="Chapter" title="2 Syntax Convention" href="#rfc.section.2"><link rel="Chapter" title="3 Digest Access Authentication Scheme" href="#rfc.section.3"><link rel="Chapter" title="4 Internationalization Considerations" href="#rfc.section.4"><link rel="Chapter" title="5 Security Considerations" href="#rfc.section.5"><link rel="Chapter" title="6 IANA Considerations" href="#rfc.section.6"><link rel="Chapter" href="#rfc.section.7" title="7 References"><link rel="Appendix" title="A Changes from RFC 2617" href="#rfc.section.A"><link rel="Appendix" title="B Acknowledgments" href="#rfc.section.B"><link rel="Alternate" title="Authoritative ASCII Version" href="http://www.ietf.org/rfc/rfc7616.txt"><link rel="Help" title="RFC-Editor's Status Page" href="http://www.rfc-editor.org/info/rfc7616"><link rel="Help" title="Additional Information on tools.ietf.org" href="http://tools.ietf.org/html/rfc7616"><meta name="generator" content="http://greenbytes.de/tech/webdav/rfc2629.xslt, Revision 1.750, 2015/10/05 09:10:12, XSLT vendor: SAXON 6.5.5 from Michael Kay http://saxon.sf.net/"><meta name="keywords" content="HTTP, authentication scheme"><link rel="schema.dct" href="http://purl.org/dc/terms/"><meta name="dct.creator" content="Shekh-Yusef, R."><meta name="dct.creator" content="Ahrens, D."><meta name="dct.creator" content="Bremer, S."><meta name="dct.identifier" content="urn:ietf:rfc:7616"><meta name="dct.issued" scheme="ISO8601" content="2015-09"><meta name="dct.replaces" content="urn:ietf:rfc:2617"><meta name="dct.abstract" content="The Hypertext Transfer Protocol (HTTP) provides a simple challenge-response authentication mechanism that may be used by a server to challenge a client request and by a client to provide authentication information. This document defines the HTTP Digest Authentication scheme that can be used with the HTTP authentication mechanism."><meta name="dct.isPartOf" content="urn:issn:2070-1721"><meta name="description" content="The Hypertext Transfer Protocol (HTTP) provides a simple challenge-response authentication mechanism that may be used by a server to challenge a client request and by a client to provide authentication information. This document defines the HTTP Digest Authentication scheme that can be used with the HTTP authentication mechanism."></head><body onload="getMeta(7616,&#34;rfc.meta&#34;);"><table class="header" id="rfc.headerblock"><tbody><tr><td class="left">Internet Engineering Task Force (IETF)</td><td class="right">R. Shekh-Yusef, Editor</td></tr><tr><td class="left">Request for Comments: 7616</td><td class="right">Avaya</td></tr><tr><td class="left">Obsoletes: <a href="https://tools.ietf.org/html/rfc2617">2617</a></td><td class="right">D. Ahrens</td></tr><tr><td class="left">Category: Standards Track</td><td class="right">Independent</td></tr><tr><td class="left">ISSN: 2070-1721</td><td class="right">S. Bremer</td></tr><tr><td class="left"></td><td class="right">Netzkonform</td></tr><tr><td class="left"></td><td class="right">September 2015</td></tr></tbody></table><div id="rfc.title"><h1>HTTP Digest Access Authentication</h1></div><h2 id="rfc.abstract"><a href="#rfc.abstract">Abstract</a></h2><p>The Hypertext Transfer Protocol (HTTP) provides a simple challenge-response authentication mechanism that may be used by a server to challenge a client request and by a client to provide authentication information. This document defines the HTTP Digest Authentication scheme that can be used with the HTTP authentication mechanism.</p><div id="rfc.meta" class="docstatus"></div><div id="rfc.status"><h2><a href="#rfc.status">Status of this Memo</a></h2><p>This is an Internet Standards Track document.</p><p>This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.</p><p>Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at <a href="http://www.rfc-editor.org/info/rfc7616">http://www.rfc-editor.org/info/rfc7616</a>.</p></div><div id="rfc.copyrightnotice"><h2><a href="#rfc.copyrightnotice">Copyright Notice</a></h2><p>Copyright &copy; 2015 IETF Trust and the persons identified as the document authors. All rights reserved.</p><p>This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.</p><p>This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.</p></div><hr class="noprint"><div id="rfc.toc"><h2 class="np"><a href="#rfc.toc">Table of Contents</a></h2><ul class="toc"><li><a href="#rfc.section.1">1.</a>&nbsp;&nbsp;&nbsp;<a href="#introduction">Introduction</a><ul><li><a href="#rfc.section.1.1">1.1</a>&nbsp;&nbsp;&nbsp;<a href="#terminology">Terminology</a></li></ul></li><li><a href="#rfc.section.2">2.</a>&nbsp;&nbsp;&nbsp;<a href="#syntax.convention">Syntax Convention</a><ul><li><a href="#rfc.section.2.1">2.1</a>&nbsp;&nbsp;&nbsp;<a href="#examples">Examples</a></li><li><a href="#rfc.section.2.2">2.2</a>&nbsp;&nbsp;&nbsp;<a href="#abnf">ABNF</a></li></ul></li><li><a href="#rfc.section.3">3.</a>&nbsp;&nbsp;&nbsp;<a href="#digest.access.authentication.scheme">Digest Access Authentication Scheme</a><ul><li><a href="#rfc.section.3.1">3.1</a>&nbsp;&nbsp;&nbsp;<a href="#overall.operation">Overall Operation</a></li><li><a href="#rfc.section.3.2">3.2</a>&nbsp;&nbsp;&nbsp;<a href="#representation.of.digest.values">Representation of Digest Values</a></li><li><a href="#rfc.section.3.3">3.3</a>&nbsp;&nbsp;&nbsp;<a href="#www-authenticate.response.header">The WWW-Authenticate Response Header Field</a></li><li><a href="#rfc.section.3.4">3.4</a>&nbsp;&nbsp;&nbsp;<a href="#authorization.request.header.field">The Authorization Header Field</a><ul><li><a href="#rfc.section.3.4.1">3.4.1</a>&nbsp;&nbsp;&nbsp;<a href="#response">Response</a></li><li><a href="#rfc.section.3.4.2">3.4.2</a>&nbsp;&nbsp;&nbsp;<a href="#a1">A1</a></li><li><a href="#rfc.section.3.4.3">3.4.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.4.3">A2</a></li><li><a href="#rfc.section.3.4.4">3.4.4</a>&nbsp;&nbsp;&nbsp;<a href="#username.hashing">Username Hashing</a></li><li><a href="#rfc.section.3.4.5">3.4.5</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.4.5">Parameter Values and Quoted-String</a></li><li><a href="#rfc.section.3.4.6">3.4.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.4.6">Various Considerations</a></li></ul></li><li><a href="#rfc.section.3.5">3.5</a>&nbsp;&nbsp;&nbsp;<a href="#authenticaion-info.header.field">The Authentication-Info and Proxy-Authentication-Info Header Fields</a></li><li><a href="#rfc.section.3.6">3.6</a>&nbsp;&nbsp;&nbsp;<a href="#digest.operation">Digest Operation</a></li><li><a href="#rfc.section.3.7">3.7</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.7">Security Protocol Negotiation</a></li><li><a href="#rfc.section.3.8">3.8</a>&nbsp;&nbsp;&nbsp;<a href="#proxy-auth">Proxy-Authenticate and Proxy-Authorization</a></li><li><a href="#rfc.section.3.9">3.9</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.9">Examples</a><ul><li><a href="#rfc.section.3.9.1">3.9.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.9.1">Example with SHA-256 and MD5</a></li><li><a href="#rfc.section.3.9.2">3.9.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.3.9.2">Example with SHA-512-256, Charset, and Userhash</a></li></ul></li></ul></li><li><a href="#rfc.section.4">4.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.4">Internationalization Considerations</a></li><li><a href="#rfc.section.5">5.</a>&nbsp;&nbsp;&nbsp;<a href="#security.considerations">Security Considerations</a><ul><li><a href="#rfc.section.5.1">5.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.1">Limitations</a></li><li><a href="#rfc.section.5.2">5.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.2">Storing Passwords</a></li><li><a href="#rfc.section.5.3">5.3</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.3">Authentication of Clients Using Digest Authentication</a></li><li><a href="#rfc.section.5.4">5.4</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.4">Limited-Use Nonce Values</a></li><li><a href="#rfc.section.5.5">5.5</a>&nbsp;&nbsp;&nbsp;<a href="#replay_attacks">Replay Attacks</a></li><li><a href="#rfc.section.5.6">5.6</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.6">Weakness Created by Multiple Authentication Schemes</a></li><li><a href="#rfc.section.5.7">5.7</a>&nbsp;&nbsp;&nbsp;<a href="#online.dictionary.attacks">Online Dictionary Attacks</a></li><li><a href="#rfc.section.5.8">5.8</a>&nbsp;&nbsp;&nbsp;<a href="#mitm">Man-in-the-Middle Attacks</a></li><li><a href="#rfc.section.5.9">5.9</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.9">Chosen Plaintext Attacks</a></li><li><a href="#rfc.section.5.10">5.10</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.10">Precomputed Dictionary Attacks</a></li><li><a href="#rfc.section.5.11">5.11</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.11">Batch Brute-Force Attacks</a></li><li><a href="#rfc.section.5.12">5.12</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.12">Parameter Randomness</a></li><li><a href="#rfc.section.5.13">5.13</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.5.13">Summary</a></li></ul></li><li><a href="#rfc.section.6">6.</a>&nbsp;&nbsp;&nbsp;<a href="#iana.considerations">IANA Considerations</a><ul><li><a href="#rfc.section.6.1">6.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.1">Hash Algorithms for HTTP Digest Authentication </a></li><li><a href="#rfc.section.6.2">6.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.6.2">Digest Scheme Registration</a></li></ul></li><li><a href="#rfc.section.7">7.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references">References</a><ul><li><a href="#rfc.section.7.1">7.1</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.1">Normative References</a></li><li><a href="#rfc.section.7.2">7.2</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.references.2">Informative References</a></li></ul></li><li><a href="#rfc.section.A">A.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc2617.changes">Changes from RFC 2617</a></li><li><a href="#rfc.section.B">B.</a>&nbsp;&nbsp;&nbsp;<a href="#rfc.section.B">Acknowledgments</a></li><li><a href="#rfc.authors">Authors' Addresses</a></li></ul></div><div id="introduction"><h2 id="rfc.section.1" class="np"><a href="#rfc.section.1">1.</a>&nbsp;<a href="#introduction">Introduction</a></h2><div id="rfc.section.1.p.1"><p>HTTP provides a simple challenge-response authentication mechanism that may be used by a server to challenge a client request and by a client to provide authentication information. This document defines the HTTP Digest Authentication scheme that can be used with the HTTP authentication mechanism.<a class="self" href="#rfc.section.1.p.1">&para;</a></p></div><div id="rfc.section.1.p.2"><p>This document extends but is generally backward compatible with <a href="#RFC2617"><cite title="HTTP Authentication: Basic and Digest Access Authentication">[RFC2617]</cite></a>. See <a href="#rfc2617.changes" title="Changes from RFC 2617">Appendix&nbsp;A</a> for the new capabilities introduced by this specification.<a class="self" href="#rfc.section.1.p.2">&para;</a></p></div><div id="rfc.section.1.p.3"><p>The details of the challenge-response authentication mechanism are specified in the "Hypertext Transfer Protocol (HTTP/1.1): Authentication" <a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a>.<a class="self" href="#rfc.section.1.p.3">&para;</a></p></div><div id="rfc.section.1.p.4"><p>The combination of this document with the definition of the "Basic" authentication scheme <a href="#RFC7617"><cite title="The 'Basic' HTTP Authentication Scheme">[RFC7617]</cite></a>, "HTTP Authentication-Info and Proxy-Authentication-Info Response Header Fields" <a href="#RFC7615"><cite title="HTTP Authentication-Info and Proxy-Authentication-Info Response Header Fields">[RFC7615]</cite></a>, and "Hypertext Transfer Protocol (HTTP/1.1): Authentication" <a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a> obsolete <a href="#RFC2617"><cite title="HTTP Authentication: Basic and Digest Access Authentication">[RFC2617]</cite></a>.<a class="self" href="#rfc.section.1.p.4">&para;</a></p></div><div id="terminology"><h3 id="rfc.section.1.1"><a href="#rfc.section.1.1">1.1</a>&nbsp;<a href="#terminology">Terminology</a></h3><div id="rfc.section.1.1.p.1"><p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <a href="#RFC2119"><cite title="Key words for use in RFCs to Indicate Requirement Levels">[RFC2119]</cite></a>.<a class="self" href="#rfc.section.1.1.p.1">&para;</a></p></div></div></div><div id="syntax.convention"><h2 id="rfc.section.2"><a href="#rfc.section.2">2.</a>&nbsp;<a href="#syntax.convention">Syntax Convention</a></h2><div id="examples"><h3 id="rfc.section.2.1"><a href="#rfc.section.2.1">2.1</a>&nbsp;<a href="#examples">Examples</a></h3><div id="rfc.section.2.1.p.1"><p>In the interest of clarity and readability, the extended parameters or the header fields and parameters in the examples in this document might be broken into multiple lines. Any line that is indented in this document is a continuation of the preceding line.<a class="self" href="#rfc.section.2.1.p.1">&para;</a></p></div></div><div id="abnf"><h3 id="rfc.section.2.2"><a href="#rfc.section.2.2">2.2</a>&nbsp;<a href="#abnf">ABNF</a></h3><div id="rfc.section.2.2.p.1"><p>This specification uses the Augmented Backus-Naur Form (ABNF) notation of <a href="#RFC5234"><cite title="Augmented BNF for Syntax Specifications: ABNF">[RFC5234]</cite></a> and the ABNF List Extension of <a href="#RFC7230"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[RFC7230]</cite></a>.<a class="self" href="#rfc.section.2.2.p.1">&para;</a></p></div></div></div><div id="digest.access.authentication.scheme"><h2 id="rfc.section.3"><a href="#rfc.section.3">3.</a>&nbsp;<a href="#digest.access.authentication.scheme">Digest Access Authentication Scheme</a></h2><div id="overall.operation"><h3 id="rfc.section.3.1"><a href="#rfc.section.3.1">3.1</a>&nbsp;<a href="#overall.operation">Overall Operation</a></h3><div id="rfc.section.3.1.p.1"><p>The Digest scheme is based on a simple challenge-response paradigm. The Digest scheme challenges using a nonce value and might indicate that username hashing is supported. A valid response contains an unkeyed digest of the username, the password, the given nonce value, the HTTP method, and the requested URI. In this way, the password is never sent in the clear, and the username can be hashed, depending on the indication received from the server. The username and password must be prearranged in some fashion not addressed by this document.<a class="self" href="#rfc.section.3.1.p.1">&para;</a></p></div></div><div id="representation.of.digest.values"><h3 id="rfc.section.3.2"><a href="#rfc.section.3.2">3.2</a>&nbsp;<a href="#representation.of.digest.values">Representation of Digest Values</a></h3><div id="rfc.section.3.2.p.1"><p>An optional header field allows the server to specify the algorithm used to create the unkeyed digest or digest. This document adds SHA-256 and SHA-512/256 algorithms. To maintain backwards compatibility with <a href="#RFC2617"><cite title="HTTP Authentication: Basic and Digest Access Authentication">[RFC2617]</cite></a>, the MD5 algorithm is still supported but <em class="bcp14">NOT RECOMMENDED</em>.<a class="self" href="#rfc.section.3.2.p.1">&para;</a></p></div><div id="rfc.section.3.2.p.2"><p>The size of the digest depends on the algorithm used. The bits in the digest are converted from the most significant to the least significant bit, four bits at a time, to the ASCII representation as follows. Each sequence of four bits is represented by its familiar hexadecimal notation from the characters 0123456789abcdef; that is, binary 0000 is represented by the character '0', 0001 by '1' and so on up to the representation of 1111 as 'f'. If the MD5 algorithm is used to calculate the digest, then the MD5 digest will be represented as 32 hexadecimal characters, while SHA-256 and SHA-512/256 are represented as 64 hexadecimal characters.<a class="self" href="#rfc.section.3.2.p.2">&para;</a></p></div></div><div id="www-authenticate.response.header"><h3 id="rfc.section.3.3"><a href="#rfc.section.3.3">3.3</a>&nbsp;<a href="#www-authenticate.response.header">The WWW-Authenticate Response Header Field</a></h3><div id="rfc.section.3.3.p.1" class="avoidbreakafter"><p>If a server receives a request for an access-protected object, and an acceptable Authorization header field is not sent, the server responds with a "401 Unauthorized" status code and a WWW-Authenticate header field with Digest scheme as per the framework defined above. The value of the header field can include parameters from the following list:<a class="self" href="#rfc.section.3.3.p.1">&para;</a></p></div><div id="rfc.section.3.3.p.2"><p>realm <a class="self" href="#rfc.section.3.3.p.2">&para;</a></p><ul class="empty"><li>A string to be displayed to users so they know which username and password to use. This string should contain at least the name of the host performing the authentication and might additionally indicate the collection of users who might have access. An example is "registered_users@example.com". (See <a href="https://tools.ietf.org/html/rfc7235#section-2.2">Section 2.2</a> of <a href="#RFC7235"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Authentication">[RFC7235]</cite></a> for more details.)</li></ul><