Changeset 2174 for draft-ietf-httpbis-http2/latest
- Timestamp:
- 31/01/13 02:23:50 (10 years ago)
- Location:
- draft-ietf-httpbis-http2/latest
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
draft-ietf-httpbis-http2/latest/draft-ietf-httpbis-http2.html
r2148 r2174 406 406 } 407 407 @bottom-center { 408 content: "Expires July 25, 2013";408 content: "Expires August 4, 2013"; 409 409 } 410 410 @bottom-right { … … 447 447 <meta name="dct.creator" content="Melnikov, A."> 448 448 <meta name="dct.identifier" content="urn:ietf:id:draft-ietf-httpbis-http2-latest"> 449 <meta name="dct.issued" scheme="ISO8601" content="2013-01- 21">450 <meta name="dct.abstract" content="This document describes an optimised expression of the semantics of the HTTP protocol. The HTTP/2.0 encapsulation enables more efficient transfer of resources over HTTP by providing compressed headers, simultaneous requests, and unsolic ted push of resources from server to client. This document is an alternative to, but does not obsolete RFC{http-p1}. The HTTP protocol semantics described in RFC{http-p2..p7} are unmodified.">451 <meta name="description" content="This document describes an optimised expression of the semantics of the HTTP protocol. The HTTP/2.0 encapsulation enables more efficient transfer of resources over HTTP by providing compressed headers, simultaneous requests, and unsolic ted push of resources from server to client. This document is an alternative to, but does not obsolete RFC{http-p1}. The HTTP protocol semantics described in RFC{http-p2..p7} are unmodified.">449 <meta name="dct.issued" scheme="ISO8601" content="2013-01-31"> 450 <meta name="dct.abstract" content="This document describes an optimised expression of the semantics of the HTTP protocol. The HTTP/2.0 encapsulation enables more efficient transfer of resources over HTTP by providing compressed headers, simultaneous requests, and unsolicited push of resources from server to client. This document is an alternative to, but does not obsolete RFC{http-p1}. The HTTP protocol semantics described in RFC{http-p2..p7} are unmodified."> 451 <meta name="description" content="This document describes an optimised expression of the semantics of the HTTP protocol. The HTTP/2.0 encapsulation enables more efficient transfer of resources over HTTP by providing compressed headers, simultaneous requests, and unsolicited push of resources from server to client. This document is an alternative to, but does not obsolete RFC{http-p1}. The HTTP protocol semantics described in RFC{http-p2..p7} are unmodified."> 452 452 </head> 453 453 <body onload="init();"> … … 467 467 </tr> 468 468 <tr> 469 <td class="left">Expires: July 25, 2013</td>469 <td class="left">Expires: August 4, 2013</td> 470 470 <td class="right">Google, Inc</td> 471 471 </tr> … … 488 488 <tr> 489 489 <td class="left"></td> 490 <td class="right">January 21, 2013</td>490 <td class="right">January 31, 2013</td> 491 491 </tr> 492 492 </tbody> … … 495 495 <h1 id="rfc.abstract"><a href="#rfc.abstract">Abstract</a></h1> 496 496 <p>This document describes an optimised expression of the semantics of the HTTP protocol. The HTTP/2.0 encapsulation enables 497 more efficient transfer of resources over HTTP by providing compressed headers, simultaneous requests, and unsolic ted push497 more efficient transfer of resources over HTTP by providing compressed headers, simultaneous requests, and unsolicited push 498 498 of resources from server to client. 499 499 </p> … … 510 510 <p>The current issues list is at <<a href="http://tools.ietf.org/wg/httpbis/trac/report/21">http://tools.ietf.org/wg/httpbis/trac/report/21</a>> and related documents (including fancy diffs) can be found at <<a href="http://tools.ietf.org/wg/httpbis/">http://tools.ietf.org/wg/httpbis/</a>>. 511 511 </p> 512 <p>The changes in this draft are summarized in <a href="#changes.since.draft-ietf-httpbis-http2-0 0" title="Since draft-ietf-httpbis-http2-00">Appendix A.1</a>.512 <p>The changes in this draft are summarized in <a href="#changes.since.draft-ietf-httpbis-http2-01" title="Since draft-ietf-httpbis-http2-01">Appendix A.1</a>. 513 513 </p> 514 514 <h1><a id="rfc.status" href="#rfc.status">Status of This Memo</a></h1> … … 521 521 in progress”. 522 522 </p> 523 <p>This Internet-Draft will expire on July 25, 2013.</p>523 <p>This Internet-Draft will expire on August 4, 2013.</p> 524 524 <h1><a id="rfc.copyrightnotice" href="#rfc.copyrightnotice">Copyright Notice</a></h1> 525 525 <p>Copyright © 2013 IETF Trust and the persons identified as the document authors. All rights reserved.</p> … … 642 642 <li><a href="#rfc.authors">Authors' Addresses</a></li> 643 643 <li><a href="#rfc.section.A">A.</a> <a href="#change.log">Change Log (to be removed by RFC Editor before publication)</a><ul> 644 <li><a href="#rfc.section.A.1">A.1</a> <a href="#changes.since.draft-ietf-httpbis-http2-00">Since draft-ietf-httpbis-http2-00</a></li> 645 <li><a href="#rfc.section.A.2">A.2</a> <a href="#changes.since.draft-mbelshe-httpbis-spdy-00">Since draft-mbelshe-httpbis-spdy-00</a></li> 644 <li><a href="#rfc.section.A.1">A.1</a> <a href="#changes.since.draft-ietf-httpbis-http2-01">Since draft-ietf-httpbis-http2-01</a></li> 645 <li><a href="#rfc.section.A.2">A.2</a> <a href="#changes.since.draft-ietf-httpbis-http2-00">Since draft-ietf-httpbis-http2-00</a></li> 646 <li><a href="#rfc.section.A.3">A.3</a> <a href="#changes.since.draft-mbelshe-httpbis-spdy-00">Since draft-mbelshe-httpbis-spdy-00</a></li> 646 647 </ul> 647 648 </li> … … 698 699 </p> 699 700 <h2 id="rfc.section.2.1"><a href="#rfc.section.2.1">2.1</a> <a id="versioning" href="#versioning">HTTP/2.0 Version Identification</a></h2> 700 <p id="rfc.section.2.1.p.1">HTTP/2.0 is identified in using the string "HTTP/2.0". This identification is used in the HTTP/1.1 Upgrade header, in the <a href="#TLSNPN">TLS-NPN</a> <cite title="TLS Next Protocol Negotiation" id="rfc.xref.TLSNPN.1">[TLSNPN]</cite> [[TBD]] field and other places where protocol identification is required. 701 </p> 702 <p id="rfc.section.2.1.p.2">[[Editor's Note: please remove the following text prior to the publication of a final version of this document.]]</p> 703 <p id="rfc.section.2.1.p.3">Only implementations of the final, published RFC can identify themselves as "HTTP/2.0". Until such an RFC exists, implementations 701 <p id="rfc.section.2.1.p.1">HTTP/2.0 is identified using the string "HTTP/2.0". This identification is used in the HTTP/1.1 Upgrade header, in the <a href="#TLSNPN">TLS-NPN</a> <cite title="TLS Next Protocol Negotiation" id="rfc.xref.TLSNPN.1">[TLSNPN]</cite> [[TBD]] field and other places where protocol identification is required. 702 </p> 703 <p id="rfc.section.2.1.p.2">Negotiating "HTTP/2.0" implies the use of the transport, security, framing and message semantics described in this document.</p> 704 <p id="rfc.section.2.1.p.3">[[Editor's Note: please remove the following text prior to the publication of a final version of this document.]]</p> 705 <p id="rfc.section.2.1.p.4">Only implementations of the final, published RFC can identify themselves as "HTTP/2.0". Until such an RFC exists, implementations 704 706 MUST NOT identify themselves using "HTTP/2.0". 705 707 </p> 706 <p id="rfc.section.2.1.p. 4">Examples and text throughout the rest of this document use "HTTP/2.0" as a matter of editorial convenience only. Implementations708 <p id="rfc.section.2.1.p.5">Examples and text throughout the rest of this document use "HTTP/2.0" as a matter of editorial convenience only. Implementations 707 709 of draft versions MUST NOT identify using this string. 708 710 </p> 709 <p id="rfc.section.2.1.p. 5">Implementations of draft versions of the protocol MUST add the corresponding draft number to the identifier before the separator711 <p id="rfc.section.2.1.p.6">Implementations of draft versions of the protocol MUST add the corresponding draft number to the identifier before the separator 710 712 ('/'). For example, draft-ietf-httpbis-http2-03 is identified using the string "HTTP-03/2.0". 711 713 </p> 712 <p id="rfc.section.2.1.p. 6">Non-compatible experiments that are based on these draft versions MUST include a further identifier. For example, an experimental714 <p id="rfc.section.2.1.p.7">Non-compatible experiments that are based on these draft versions MUST include a further identifier. For example, an experimental 713 715 implementation of packet mood-based encoding based on draft-ietf-httpbis-http2-07 might identify itself as "HTTP-07-emo/2.0". 714 716 Note that any label MUST conform with the "token" syntax defined in Section 3.2.4 of <a href="#HTTP-p1" id="rfc.xref.HTTP-p1.2"><cite title="Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing">[HTTP-p1]</cite></a>. Experimenters are encouraged to coordinate their experiments on the ietf-http-wg@w3.org mailing list. … … 757 759 <p id="rfc.section.3.2.p.1">Once the connection is established, clients and servers exchange framed messages. There are two types of frames: control frames (<a href="#ControlFrames" title="Control frames">Section 3.2.1</a>) and data frames (<a href="#DataFrames" title="Data frames">Section 3.2.2</a>). Frames always have a common header which is 8 bytes in length. 758 760 </p> 759 <p id="rfc.section.3.2.p.2">The first bit is a control bit indicating whether a frame is a control frame or data frame. Control frames carry a version760 number, a frame type, flags, and a length. Data frames contain the stream ID, flags, and the length for the payload carried761 after the common header.The simple header is designed to make reading and writing of frames easy.762 </p> 763 <p id="rfc.section.3.2.p.3">All integer values, including length , version, and type, are in network byte order. HTTP/2.0 does not enforce alignment of764 types indynamically sized frames.761 <p id="rfc.section.3.2.p.2">The first bit is a control bit indicating whether a frame is a control frame or data frame. Control frames carry a frame type, 762 flags, and a length. Data frames contain the stream ID, flags, and the length for the payload carried after the common header. 763 The simple header is designed to make reading and writing of frames easy. 764 </p> 765 <p id="rfc.section.3.2.p.3">All integer values, including length and type, are in network byte order. HTTP/2.0 does not enforce alignment of types in 766 dynamically sized frames. 765 767 </p> 766 768 <h3 id="rfc.section.3.2.1"><a href="#rfc.section.3.2.1">3.2.1</a> <a id="ControlFrames" href="#ControlFrames">Control frames</a></h3> 767 769 <div id="rfc.figure.u.4"></div> <pre>+----------------------------------+ 768 |C| Version(15bits) | Type(16bits) |770 |C| Unused (15bits) | Type(16bits) | 769 771 +----------------------------------+ 770 772 | Flags (8) | Length (24 bits) | … … 775 777 1. 776 778 </p> 777 <p id="rfc.section.3.2.1.p.3"> Version: The version number of the HTTP/2.0 protocol. This document describes HTTP/2.0 version 3.</p>779 <p id="rfc.section.3.2.1.p.3">Unused: these 15 bits are unused.</p> 778 780 <p id="rfc.section.3.2.1.p.4">Type: The type of control frame. See Control Frames for the complete list of control frames.</p> 779 781 <p id="rfc.section.3.2.1.p.5">Flags: Flags related to this frame. Flags for control frames and data frames are different.</p> … … 949 951 </p> 950 952 <p id="rfc.section.3.5.1.p.2">HTTP/2.0 stream flow control aims to allow for future improvements to flow control algorithms without requiring protocol changes. 951 The following principles guide the HTTP/2.0 design:953 Flow control in HTTP/2.0 has the following characteristics: 952 954 </p> 953 955 <ol> … … 957 959 </li> 958 960 <li>Flow control is directional with overall control provided by the receiver. A receiver MAY choose to set any window size that 959 it desires for each stream [[TBD: ... and for the overall connection]]. A sender MUST respect flow control limits imposed 960 by a receiver. Clients, servers and intermediaries all independently advertise their flow control preferences as a receiver 961 and abide by the flow control limits set by their peer when sending. 962 </li> 963 <li>Flow control can be disabled by a receiver. A receiver can choose to either disable flow control, or to declare an infinite 964 flow control limit. [[TBD: determine whether just one mechanism is sufficient, and then which alternative]] 961 it desires for each stream and for the entire connection. A sender MUST respect flow control limits imposed by a receiver. 962 Clients, servers and intermediaries all independently advertise their flow control preferences as a receiver and abide by 963 the flow control limits set by their peer when sending. 964 </li> 965 <li>The initial value for the flow control window is 65536 bytes for both new streams and the overall connection.</li> 966 <li>Flow control only applies to data frames. Control frames do not consume space in the advertised flow control window.</li> 967 <li>Flow control can be disabled by a receiver. A receiver can choose to either disable flow control for a stream or connection 968 by declaring an infinite flow control limit. 965 969 </li> 966 970 <li>HTTP/2.0 standardizes only the format of the window update message (<a href="#WINDOW_UPDATE" title="WINDOW_UPDATE">Section 3.6.8</a>). This does not stipulate how a receiver decides when to send this message or the value that it sends. Nor does it specify … … 984 988 </p> 985 989 <div id="rfc.figure.u.6"></div> <pre>+------------------------------------+ 986 |1| version| 1 |990 |1| unused | 1 | 987 991 +------------------------------------+ 988 992 | Flags (8) | Length (24 bits) | … … 1033 1037 <p id="rfc.section.3.6.2.p.1">SYN_REPLY indicates the acceptance of a stream creation by the recipient of a SYN_STREAM frame.</p> 1034 1038 <div id="rfc.figure.u.7"></div> <pre>+------------------------------------+ 1035 |1| version| 2 |1039 |1| unused | 2 | 1036 1040 +------------------------------------+ 1037 1041 | Flags (8) | Length (24 bits) | … … 1072 1076 </p> 1073 1077 <div id="rfc.figure.u.8"></div> <pre>+----------------------------------+ 1074 |1| version| 3 |1078 |1| unused | 3 | 1075 1079 +----------------------------------+ 1076 1080 | Flags (8) | 8 | … … 1090 1094 <li>2 - INVALID_STREAM. This is returned when a frame is received for a stream which is not active.</li> 1091 1095 <li>3 - REFUSED_STREAM. Indicates that the stream was refused before any processing has been done on the stream.</li> 1092 <li>4 - UNSUPPORTED_VERSION. Indicates that the recipient of a stream does not support the HTTP/2.0 version requested.</li>1096 <li>4 - (UNUSED)</li> 1093 1097 <li>5 - CANCEL. Used by the creator of a stream to indicate that the stream is no longer needed.</li> 1094 1098 <li>6 - INTERNAL_ERROR. This is a generic error which can be used when the implementation has internally failed, not due to anything … … 1122 1126 </p> 1123 1127 <div id="rfc.figure.u.9"></div> <pre>+----------------------------------+ 1124 |1| version| 4 |1128 |1| unused | 4 | 1125 1129 +----------------------------------+ 1126 1130 | Flags (8) | Length (24 bits) | … … 1131 1135 | ... | 1132 1136 </pre> <p id="rfc.section.3.6.4.p.4">Control bit: The control bit is always 1 for this message.</p> 1133 <p id="rfc.section.3.6.4.p.5"> Version: The HTTP/2.0 version number.</p>1137 <p id="rfc.section.3.6.4.p.5">Unused</p> 1134 1138 <p id="rfc.section.3.6.4.p.6">Type: The message type for a SETTINGS message is 4.</p> 1135 1139 <p id="rfc.section.3.6.4.p.7">Flags: FLAG_SETTINGS_CLEAR_SETTINGS (0x1): When set, the client should clear any previously persisted SETTINGS ID/Value pairs. … … 1204 1208 </p> 1205 1209 <div id="rfc.figure.u.10"></div> <pre>+----------------------------------+ 1206 |1| version| 6 |1210 |1| unused | 6 | 1207 1211 +----------------------------------+ 1208 1212 | 0 (flags) | 4 (length) | … … 1211 1215 +----------------------------------+ 1212 1216 </pre> <p id="rfc.section.3.6.5.p.3">Control bit: The control bit is always 1 for this message.</p> 1213 <p id="rfc.section.3.6.5.p.4"> Version: The HTTP/2.0 version number.</p>1217 <p id="rfc.section.3.6.5.p.4">Unused</p> 1214 1218 <p id="rfc.section.3.6.5.p.5">Type: The message type for a PING message is 6.</p> 1215 1219 <p id="rfc.section.3.6.5.p.6">Length: This frame is always 4 bytes long.</p> … … 1242 1246 <p id="rfc.section.3.6.6.p.4">After sending a GOAWAY message, the sender must ignore all SYN_STREAM frames for new streams.</p> 1243 1247 <div id="rfc.figure.u.11"></div> <pre>+----------------------------------+ 1244 |1| version| 7 |1248 |1| unused | 7 | 1245 1249 +----------------------------------+ 1246 1250 | 0 (flags) | 8 (length) | … … 1251 1255 +----------------------------------+ 1252 1256 </pre> <p id="rfc.section.3.6.6.p.6">Control bit: The control bit is always 1 for this message.</p> 1253 <p id="rfc.section.3.6.6.p.7"> Version: The HTTP/2.0 version number.</p>1257 <p id="rfc.section.3.6.6.p.7">Unused</p> 1254 1258 <p id="rfc.section.3.6.6.p.8">Type: The message type for a GOAWAY message is 7.</p> 1255 1259 <p id="rfc.section.3.6.6.p.9">Length: This frame is always 8 bytes long.</p> … … 1271 1275 </p> 1272 1276 <div id="rfc.figure.u.12"></div> <pre>+------------------------------------+ 1273 |1| version| 8 |1277 |1| unused | 8 | 1274 1278 +------------------------------------+ 1275 1279 | Flags (8) | Length (24 bits) | … … 1317 1321 </p> 1318 1322 <div id="rfc.figure.u.13"></div> <pre>+----------------------------------+ 1319 |1| version| 9 |1323 |1| unused | 9 | 1320 1324 +----------------------------------+ 1321 1325 | 0 (flags) | 8 (length) | … … 1326 1330 +----------------------------------+ 1327 1331 </pre> <p id="rfc.section.3.6.8.p.4">Control bit: The control bit is always 1 for this message.</p> 1328 <p id="rfc.section.3.6.8.p.5"> Version: The HTTP/2.0 version number.</p>1332 <p id="rfc.section.3.6.8.p.5">Unused</p> 1329 1333 <p id="rfc.section.3.6.8.p.6">Type: The message type for a WINDOW_UPDATE message is 9.</p> 1330 1334 <p id="rfc.section.3.6.8.p.7">Length: The length field is always 8 for this frame (there are 8 bytes after the length field).</p> … … 1725 1729 <ul class="empty"> 1726 1730 <li>Although POSTs are inherently chunked, POST requests SHOULD also be accompanied by a Content-Length header. There are two 1727 reasons for this: First, it assists with upload progress meters for an improved user experience. But second, we know from1728 early versions of HTTP/2.0 that failure to send a content length header is incompatible with many existing HTTP server implementations.1729 Existing user-agents do notomit the Content-Length header, and server implementations have come to depend upon this.1731 reasons for this: First, it assists with upload progress meters for an improved user experience. More importantly, failure 1732 to send a Content-Length header is incompatible with many existing HTTP server implementations. Existing user agents do not 1733 omit the Content-Length header, and server implementations have come to depend upon this. 1730 1734 </li> 1731 1735 </ul> … … 2116 2120 </div> 2117 2121 <h1 id="rfc.section.A" class="np"><a href="#rfc.section.A">A.</a> <a id="change.log" href="#change.log">Change Log (to be removed by RFC Editor before publication)</a></h1> 2118 <h2 id="rfc.section.A.1"><a href="#rfc.section.A.1">A.1</a> <a id="changes.since.draft-ietf-httpbis-http2-00" href="#changes.since.draft-ietf-httpbis-http2-00">Since draft-ietf-httpbis-http2-00</a></h2> 2119 <p id="rfc.section.A.1.p.1">Changed title throughout.</p> 2120 <p id="rfc.section.A.1.p.2">Removed section on Incompatibilities with SPDY draft#2.</p> 2121 <p id="rfc.section.A.1.p.3">Changed INTERNAL_ERROR on GOAWAY to have a value of 2 <<a href="https://groups.google.com/forum/?fromgroups#!topic/spdy-dev/cfUef2gL3iU">https://groups.google.com/forum/?fromgroups#!topic/spdy-dev/cfUef2gL3iU</a>>. 2122 </p> 2123 <p id="rfc.section.A.1.p.4">Replaced abstract and introduction.</p> 2124 <p id="rfc.section.A.1.p.5">Added section on starting HTTP/2.0, including upgrade mechanism.</p> 2125 <p id="rfc.section.A.1.p.6">Removed unused references.</p> 2126 <p id="rfc.section.A.1.p.7">Added flow control principles (<a href="#fc-principles" title="Flow Control Principles">Section 3.5.1</a>) based on <<a href="http://tools.ietf.org/html/draft-montenegro-httpbis-http2-fc-principles-01">http://tools.ietf.org/html/draft-montenegro-httpbis-http2-fc-principles-01</a>>. 2127 </p> 2128 <h2 id="rfc.section.A.2"><a href="#rfc.section.A.2">A.2</a> <a id="changes.since.draft-mbelshe-httpbis-spdy-00" href="#changes.since.draft-mbelshe-httpbis-spdy-00">Since draft-mbelshe-httpbis-spdy-00</a></h2> 2129 <p id="rfc.section.A.2.p.1">Adopted as base for draft-ietf-httpbis-http2.</p> 2130 <p id="rfc.section.A.2.p.2">Updated authors/editors list.</p> 2131 <p id="rfc.section.A.2.p.3">Added status note.</p> 2122 <h2 id="rfc.section.A.1"><a href="#rfc.section.A.1">A.1</a> <a id="changes.since.draft-ietf-httpbis-http2-01" href="#changes.since.draft-ietf-httpbis-http2-01">Since draft-ietf-httpbis-http2-01</a></h2> 2123 <p id="rfc.section.A.1.p.1">None yet</p> 2124 <h2 id="rfc.section.A.2"><a href="#rfc.section.A.2">A.2</a> <a id="changes.since.draft-ietf-httpbis-http2-00" href="#changes.since.draft-ietf-httpbis-http2-00">Since draft-ietf-httpbis-http2-00</a></h2> 2125 <p id="rfc.section.A.2.p.1">Changed title throughout.</p> 2126 <p id="rfc.section.A.2.p.2">Removed section on Incompatibilities with SPDY draft#2.</p> 2127 <p id="rfc.section.A.2.p.3">Changed INTERNAL_ERROR on GOAWAY to have a value of 2 <<a href="https://groups.google.com/forum/?fromgroups#!topic/spdy-dev/cfUef2gL3iU">https://groups.google.com/forum/?fromgroups#!topic/spdy-dev/cfUef2gL3iU</a>>. 2128 </p> 2129 <p id="rfc.section.A.2.p.4">Replaced abstract and introduction.</p> 2130 <p id="rfc.section.A.2.p.5">Added section on starting HTTP/2.0, including upgrade mechanism.</p> 2131 <p id="rfc.section.A.2.p.6">Removed unused references.</p> 2132 <p id="rfc.section.A.2.p.7">Added flow control principles (<a href="#fc-principles" title="Flow Control Principles">Section 3.5.1</a>) based on <<a href="http://tools.ietf.org/html/draft-montenegro-httpbis-http2-fc-principles-01">http://tools.ietf.org/html/draft-montenegro-httpbis-http2-fc-principles-01</a>>. 2133 </p> 2134 <h2 id="rfc.section.A.3"><a href="#rfc.section.A.3">A.3</a> <a id="changes.since.draft-mbelshe-httpbis-spdy-00" href="#changes.since.draft-mbelshe-httpbis-spdy-00">Since draft-mbelshe-httpbis-spdy-00</a></h2> 2135 <p id="rfc.section.A.3.p.1">Adopted as base for draft-ietf-httpbis-http2.</p> 2136 <p id="rfc.section.A.3.p.2">Updated authors/editors list.</p> 2137 <p id="rfc.section.A.3.p.3">Added status note.</p> 2132 2138 <h1 id="rfc.index"><a href="#rfc.index">Index</a></h1> 2133 2139 <p class="noprint"><a href="#rfc.index.A">A</a> <a href="#rfc.index.H">H</a> <a href="#rfc.index.R">R</a> <a href="#rfc.index.T">T</a> <a href="#rfc.index.U">U</a> -
draft-ietf-httpbis-http2/latest/draft-ietf-httpbis-http2.xml
r2148 r2174 175 175 <section anchor="versioning" title="HTTP/2.0 Version Identification"> 176 176 <t> 177 HTTP/2.0 is identified inusing the string "HTTP/2.0". This identification is used in the177 HTTP/2.0 is identified using the string "HTTP/2.0". This identification is used in the 178 178 HTTP/1.1 Upgrade header, in the <xref target="TLSNPN">TLS-NPN</xref> [[TBD]] field and other 179 179 places where protocol identification is required. 180 </t> 181 <t> 182 Negotiating "HTTP/2.0" implies the use of the transport, security, framing and message semantics 183 described in this document. 180 184 </t> 181 185 <t> … … 267 271 <t>Once the connection is established, clients and servers exchange framed messages. There are two types of frames: <xref target="ControlFrames">control frames</xref> and <xref target="DataFrames">data frames</xref>. Frames always have a common header which is 8 bytes in length.</t> 268 272 269 <t>The first bit is a control bit indicating whether a frame is a control frame or data frame. Control frames carry a version number, aframe type, flags, and a length. Data frames contain the stream ID, flags, and the length for the payload carried after the common header. The simple header is designed to make reading and writing of frames easy.</t>270 271 <t>All integer values, including length , version,and type, are in network byte order. HTTP/2.0 does not enforce alignment of types in dynamically sized frames.</t>273 <t>The first bit is a control bit indicating whether a frame is a control frame or data frame. Control frames carry a frame type, flags, and a length. Data frames contain the stream ID, flags, and the length for the payload carried after the common header. The simple header is designed to make reading and writing of frames easy.</t> 274 275 <t>All integer values, including length and type, are in network byte order. HTTP/2.0 does not enforce alignment of types in dynamically sized frames.</t> 272 276 <section anchor="ControlFrames" title="Control frames"> 273 277 <figure> 274 278 <artwork> 275 279 +----------------------------------+ 276 |C| Version(15bits) | Type(16bits) |280 |C| Unused (15bits) | Type(16bits) | 277 281 +----------------------------------+ 278 282 | Flags (8) | Length (24 bits) | … … 284 288 <t>Control bit: The 'C' bit is a single bit indicating if this is a control message. For control frames this value is always 1.</t> 285 289 286 <t>Version: The version number of the HTTP/2.0 protocol. This document describes HTTP/2.0 version 3.</t> 290 <t> 291 Unused: these 15 bits are unused. 292 </t> 287 293 288 294 <t>Type: The type of control frame. See Control Frames for the complete list of control frames.</t> … … 447 453 <t> 448 454 HTTP/2.0 stream flow control aims to allow for future improvements to flow control algorithms 449 without requiring protocol changes. The following principles guide the HTTP/2.0 design:455 without requiring protocol changes. Flow control in HTTP/2.0 has the following characteristics: 450 456 <list style="numbers"> 451 457 <t> … … 453 459 </t> 454 460 <t> 455 Flow control is based on window update messages. Receivers advertise how many octets they are456 prepared to receive on a stream. This is a credit-based scheme.461 Flow control is based on window update messages. Receivers advertise how many octets they 462 are prepared to receive on a stream. This is a credit-based scheme. 457 463 </t> 458 464 <t> 459 465 Flow control is directional with overall control provided by the receiver. A receiver MAY 460 choose to set any window size that it desires for each stream [[TBD: ... and for the overall461 connection ]]. A sender MUST respect flow control limits imposed by a receiver. Clients,466 choose to set any window size that it desires for each stream and for the entire 467 connection. A sender MUST respect flow control limits imposed by a receiver. Clients, 462 468 servers and intermediaries all independently advertise their flow control preferences as a 463 469 receiver and abide by the flow control limits set by their peer when sending. 464 470 </t> 465 471 <t> 472 The initial value for the flow control window is 65536 bytes for both new streams and the 473 overall connection. 474 </t> 475 <t> 476 Flow control only applies to data frames. Control frames do not consume space in the 477 advertised flow control window. 478 </t> 479 <t> 466 480 Flow control can be disabled by a receiver. A receiver can choose to either disable flow 467 control, or to declare an infinite flow control limit. [[TBD: determine whether just one 468 mechanism is sufficient, and then which alternative]] 481 control for a stream or connection by declaring an infinite flow control limit. 469 482 </t> 470 483 <t> … … 501 514 <artwork> 502 515 +------------------------------------+ 503 |1| version| 1 |516 |1| unused | 1 | 504 517 +------------------------------------+ 505 518 | Flags (8) | Length (24 bits) | … … 555 568 <artwork> 556 569 +------------------------------------+ 557 |1| version| 2 |570 |1| unused | 2 | 558 571 +------------------------------------+ 559 572 | Flags (8) | Length (24 bits) | … … 597 610 <artwork> 598 611 +----------------------------------+ 599 |1| version| 3 |612 |1| unused | 3 | 600 613 +----------------------------------+ 601 614 | Flags (8) | 8 | … … 618 631 <t>2 - INVALID_STREAM. This is returned when a frame is received for a stream which is not active.</t> 619 632 <t>3 - REFUSED_STREAM. Indicates that the stream was refused before any processing has been done on the stream.</t> 620 <t>4 - UNSUPPORTED_VERSION. Indicates that the recipient of a stream does not support the HTTP/2.0 version requested.</t>633 <t>4 - (UNUSED)</t> 621 634 <t>5 - CANCEL. Used by the creator of a stream to indicate that the stream is no longer needed.</t> 622 635 <t>6 - INTERNAL_ERROR. This is a generic error which can be used when the implementation has internally failed, not due to anything in the protocol.</t> … … 640 653 <artwork> 641 654 +----------------------------------+ 642 |1| version| 4 |655 |1| unused | 4 | 643 656 +----------------------------------+ 644 657 | Flags (8) | Length (24 bits) | … … 652 665 <t>Control bit: The control bit is always 1 for this message.</t> 653 666 654 <t>Version: The HTTP/2.0 version number.</t> 667 <t> 668 Unused 669 </t> 655 670 656 671 <t>Type: The message type for a SETTINGS message is 4.</t> … … 698 713 <artwork> 699 714 +----------------------------------+ 700 |1| version| 6 |715 |1| unused | 6 | 701 716 +----------------------------------+ 702 717 | 0 (flags) | 4 (length) | … … 708 723 <t>Control bit: The control bit is always 1 for this message.</t> 709 724 710 <t>Version: The HTTP/2.0 version number.</t> 725 <t> 726 Unused 727 </t> 711 728 712 729 <t>Type: The message type for a PING message is 6.</t> … … 733 750 <artwork> 734 751 +----------------------------------+ 735 |1| version| 7 |752 |1| unused | 7 | 736 753 +----------------------------------+ 737 754 | 0 (flags) | 8 (length) | … … 745 762 <t>Control bit: The control bit is always 1 for this message.</t> 746 763 747 <t>Version: The HTTP/2.0 version number.</t> 764 <t> 765 Unused 766 </t> 748 767 749 768 <t>Type: The message type for a GOAWAY message is 7.</t> … … 767 786 <artwork> 768 787 +------------------------------------+ 769 |1| version| 8 |788 |1| unused | 8 | 770 789 +------------------------------------+ 771 790 | Flags (8) | Length (24 bits) | … … 807 826 <artwork> 808 827 +----------------------------------+ 809 |1| version| 9 |828 |1| unused | 9 | 810 829 +----------------------------------+ 811 830 | 0 (flags) | 8 (length) | … … 819 838 <t>Control bit: The control bit is always 1 for this message.</t> 820 839 821 <t>Version: The HTTP/2.0 version number.</t> 840 <t> 841 Unused 842 </t> 822 843 823 844 <t>Type: The message type for a WINDOW_UPDATE message is 9.</t> … … 1175 1196 <t>POST-specific changes: 1176 1197 <list> 1177 <t>Although POSTs are inherently chunked, POST requests SHOULD also be accompanied by a Content-Length header. There are two reasons for this: First, it assists with upload progress meters for an improved user experience. But second, we know from early versions of HTTP/2.0 that failure to send a content length header is incompatible with many existing HTTP server implementations. Existing user-agents do not omit the Content-Length header, and server implementations have come to depend upon this.</t>1198 <t>Although POSTs are inherently chunked, POST requests SHOULD also be accompanied by a Content-Length header. There are two reasons for this: First, it assists with upload progress meters for an improved user experience. More importantly, failure to send a Content-Length header is incompatible with many existing HTTP server implementations. Existing user agents do not omit the Content-Length header, and server implementations have come to depend upon this.</t> 1178 1199 </list> 1179 1200 </t>
Note: See TracChangeset
for help on using the changeset viewer.