1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669
|
<pre>Internet Engineering Task Force (IETF) M. Thomson
Request for Comments: 8470 Mozilla
Category: Standards Track M. Nottingham
ISSN: 2070-1721 Fastly
W. Tarreau
HAProxy Technologies
September 2018
<span class="h1">Using Early Data in HTTP</span>
Abstract
Using TLS early data creates an exposure to the possibility of a
replay attack. This document defines mechanisms that allow clients
to communicate with servers about HTTP requests that are sent in
early data. Techniques are described that use these mechanisms to
mitigate the risk of replay.
Status of This Memo
This is an Internet Standards Track document.
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 <a href="./rfc7841#section-2">Section 2 of RFC 7841</a>.
Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
<a href="https://www.rfc-editor.org/info/rfc8470">https://www.rfc-editor.org/info/rfc8470</a>.
Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to <a href="https://www.rfc-editor.org/bcp/bcp78">BCP 78</a> and the IETF Trust's Legal
Provisions Relating to IETF Documents
(<a href="https://trustee.ietf.org/license-info">https://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.
<span class="grey">Thomson, et al. Standards Track [Page 1]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-2" ></span>
<span class="grey"><a href="./rfc8470">RFC 8470</a> HTTP Early Data September 2018</span>
Table of Contents
<a href="#section-1">1</a>. Introduction . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-2">2</a>
<a href="#section-1.1">1.1</a>. Conventions and Definitions . . . . . . . . . . . . . . . <a href="#page-3">3</a>
<a href="#section-2">2</a>. Early Data in HTTP . . . . . . . . . . . . . . . . . . . . . <a href="#page-3">3</a>
<a href="#section-3">3</a>. Supporting Early Data in HTTP Servers . . . . . . . . . . . . <a href="#page-3">3</a>
<a href="#section-4">4</a>. Using Early Data in HTTP Clients . . . . . . . . . . . . . . <a href="#page-5">5</a>
<a href="#section-5">5</a>. Extensions for Early Data in HTTP . . . . . . . . . . . . . . <a href="#page-6">6</a>
<a href="#section-5.1">5.1</a>. The Early-Data Header Field . . . . . . . . . . . . . . . <a href="#page-7">7</a>
<a href="#section-5.2">5.2</a>. The 425 (Too Early) Status Code . . . . . . . . . . . . . <a href="#page-8">8</a>
<a href="#section-6">6</a>. Security Considerations . . . . . . . . . . . . . . . . . . . <a href="#page-8">8</a>
<a href="#section-6.1">6.1</a>. Gateways and Early Data . . . . . . . . . . . . . . . . . <a href="#page-8">8</a>
<a href="#section-6.2">6.2</a>. Consistent Handling of Early Data . . . . . . . . . . . . <a href="#page-9">9</a>
<a href="#section-6.3">6.3</a>. Denial of Service . . . . . . . . . . . . . . . . . . . . <a href="#page-9">9</a>
<a href="#section-6.4">6.4</a>. Out-of-Order Delivery . . . . . . . . . . . . . . . . . . <a href="#page-9">9</a>
<a href="#section-7">7</a>. IANA Considerations . . . . . . . . . . . . . . . . . . . . . <a href="#page-10">10</a>
<a href="#section-8">8</a>. References . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-10">10</a>
<a href="#section-8.1">8.1</a>. Normative References . . . . . . . . . . . . . . . . . . <a href="#page-10">10</a>
<a href="#section-8.2">8.2</a>. Informative References . . . . . . . . . . . . . . . . . <a href="#page-11">11</a>
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-11">11</a>
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-12">12</a>
<span class="h2"><a class="selflink" id="section-1" href="#section-1">1</a>. Introduction</span>
TLS 1.3 [<a href="#ref-TLS13" title=""The Transport Layer Security (TLS) Protocol Version 1.3"">TLS13</a>] introduces the concept of early data (also known as
zero round-trip time (0-RTT) data). If the client has spoken to the
same server recently, early data allows a client to send data to a
server in the first round trip of a connection, without waiting for
the TLS handshake to complete.
When used with HTTP [<a href="#ref-HTTP" title=""Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing"">HTTP</a>], early data allows clients to send
requests immediately, thus avoiding the one or two round-trip delays
needed for the TLS handshake. This is a significant performance
enhancement; however, it has significant limitations.
The primary risk of using early data is that an attacker might
capture and replay the request(s) it contains. TLS [<a href="#ref-TLS13" title=""The Transport Layer Security (TLS) Protocol Version 1.3"">TLS13</a>] describes
techniques that can be used to reduce the likelihood that an attacker
can successfully replay a request, but these techniques can be
difficult to deploy and still leave some possibility of a successful
attack.
Note that this is different from automated or user-initiated retries;
replays are initiated by an attacker without the awareness of the
client.
<span class="grey">Thomson, et al. Standards Track [Page 2]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-3" ></span>
<span class="grey"><a href="./rfc8470">RFC 8470</a> HTTP Early Data September 2018</span>
To help mitigate the risk of replays in HTTP, this document gives an
overview of techniques for controlling these risks in servers and
defines requirements for clients when sending requests in early data.
The advice in this document also applies to use of 0-RTT in HTTP over
QUIC [<a href="#ref-HQ" title=""Hypertext Transfer Protocol (HTTP) over QUIC"">HQ</a>].
<span class="h3"><a class="selflink" id="section-1.1" href="#section-1.1">1.1</a>. Conventions and Definitions</span>
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="https://www.rfc-editor.org/bcp/bcp14">BCP</a>
<a href="https://www.rfc-editor.org/bcp/bcp14">14</a> [<a href="./rfc2119" title=""Key words for use in RFCs to Indicate Requirement Levels"">RFC2119</a>] [<a href="./rfc8174" title=""Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words"">RFC8174</a>] when, and only when, they appear in all
capitals, as shown here.
<span class="h2"><a class="selflink" id="section-2" href="#section-2">2</a>. Early Data in HTTP</span>
Conceptually, early data is concatenated with other application data
to form a single stream. This can mean that requests are entirely
contained within early data or that only part of a request is early.
In a multiplexed protocol, like HTTP/2 [<a href="./rfc7540" title=""Hypertext Transfer Protocol Version 2 (HTTP/2)"">RFC7540</a>] or HTTP/QUIC [<a href="#ref-HQ" title=""Hypertext Transfer Protocol (HTTP) over QUIC"">HQ</a>],
multiple requests might be partially delivered in early data.
The model that this document assumes is that once the TLS handshake
completes, the early data received on that TLS connection is known to
not be a replayed copy of that data. However, it is important to
note that this does not mean that early data will not be or has not
been replayed on another connection.
<span class="h2"><a class="selflink" id="section-3" href="#section-3">3</a>. Supporting Early Data in HTTP Servers</span>
A server decides whether or not to offer a client the ability to send
early data on future connections when sending the TLS session ticket.
TLS [<a href="#ref-TLS13" title=""The Transport Layer Security (TLS) Protocol Version 1.3"">TLS13</a>] mandates the use of replay detection strategies that
reduce the ability of an attacker to successfully replay early data.
These anti-replay techniques reduce but don't completely eliminate
the chance of data being replayed and ensure a fixed upper limit to
the number of replays.
When a server enables early data, there are a number of techniques it
can use to mitigate the risks of replay:
1. The server can reject early data at the TLS layer. A server
cannot selectively reject early data, so this results in all
requests sent in early data being discarded.
<span class="grey">Thomson, et al. Standards Track [Page 3]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-4" ></span>
<span class="grey"><a href="./rfc8470">RFC 8470</a> HTTP Early Data September 2018</span>
2. The server can choose to delay processing of early data until
after the TLS handshake completes. By deferring processing, it
can ensure that only a successfully completed connection is used
for the request(s) therein. This provides the server with some
assurance that the early data was not replayed. If the server
receives multiple requests in early data, it can determine
whether to defer HTTP processing on a per-request basis.
3. The server can cause a client to retry individual requests and
not use early data by responding with the 425 (Too Early) status
code (<a href="#section-5.2">Section 5.2</a>) in cases where the risk of replay is judged
too great.
All of these techniques are equally effective; a server can use the
method that best suits it.
For a given request, the level of tolerance to replay risk is
specific to the resource it operates upon (and therefore only known
to the origin server). The primary risk associated with using early
data is in the actions a server takes when processing a request;
processing a duplicated request might result in duplicated effects
and side effects. <a href="#appendix-E.5">Appendix E.5</a> of [<a href="#ref-TLS13" title=""The Transport Layer Security (TLS) Protocol Version 1.3"">TLS13</a>] also describes other
effects produced by processing duplicated requests.
The request method's safety (<a href="./rfc7231#section-4.2.1">[RFC7231], Section 4.2.1</a>) is one way to
determine this. However, some resources produce side effects with
safe methods, so this cannot be universally relied upon.
It is RECOMMENDED that origin servers allow resources to explicitly
configure whether early data is appropriate in requests. Absent such
explicit information, origin servers MUST either reject early data or
implement the techniques described in this document for ensuring that
requests are not processed prior to TLS handshake completion.
A request might be sent partially in early data with the remainder of
the request being sent after the handshake completes. This does not
necessarily affect handling of that request; what matters is when the
server starts acting upon the contents of a request. Any time any
server instance might initiate processing prior to completion of the
handshake, all server instances need to account for the possibility
of replay of early data and how that could affect that processing
(see also <a href="#section-6.2">Section 6.2</a>).
A server can partially process requests that are incomplete. Parsing
header fields -- without acting on the values -- and determining
request routing is likely to be safe from side effects but other
actions might not be.
<span class="grey">Thomson, et al. Standards Track [Page 4]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-5" ></span>
<span class="grey"><a href="./rfc8470">RFC 8470</a> HTTP Early Data September 2018</span>
Intermediary servers do not have sufficient information to decide
whether early data can be processed, so <a href="#section-5.2">Section 5.2</a> describes a way
for the origin to signal to them that a particular request isn't
appropriate for early data. Intermediaries that accept early data
MUST implement that mechanism.
Note that a server cannot choose to selectively reject early data at
the TLS layer. TLS only permits a server to either accept all early
data or none of it. Once a server has decided to accept early data,
it MUST process all requests in early data, even if the server
rejects the request by sending a 425 (Too Early) response.
A server can limit the amount of early data with the
"max_early_data_size" field of the "early_data" TLS extension. This
can be used to avoid committing an arbitrary amount of memory for
requests that it might defer until the handshake completes.
<span class="h2"><a class="selflink" id="section-4" href="#section-4">4</a>. Using Early Data in HTTP Clients</span>
A client that wishes to use early data commences by sending HTTP
requests immediately after sending the TLS ClientHello.
By their nature, clients have control over whether a given request is
sent in early data, thereby giving the client control over risk of
replay. Absent other information, clients MAY send requests with
safe HTTP methods (<a href="./rfc7231#section-4.2.1">[RFC7231], Section 4.2.1</a>) in early data when it is
available and MUST NOT send unsafe methods (or methods whose safety
is not known) in early data.
If the server rejects early data at the TLS layer, a client MUST
start sending again as though the connection were new. This could
entail using a different negotiated protocol [<a href="#ref-ALPN" title=""Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension"">ALPN</a>] than the one
optimistically used for the early data. Any requests sent in early
data will need to be sent again, unless the client decides to abandon
those requests.
Automatic retry creates the potential for a replay attack. An
attacker intercepts a connection that uses early data and copies the
early data to another server instance. The second server instance
accepts and processes the early data, even though it will not
complete the TLS handshake. The attacker then allows the original
connection to complete. Even if the early data is detected as a
duplicate and rejected, the first server instance might allow the
connection to complete. If the client then retries requests that
were sent in early data, the request will be processed twice.
<span class="grey">Thomson, et al. Standards Track [Page 5]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-6" ></span>
<span class="grey"><a href="./rfc8470">RFC 8470</a> HTTP Early Data September 2018</span>
Replays are also possible if there are multiple server instances that
will accept early data or if the same server accepts early data
multiple times (though the latter would be in violation of
requirements in Section 8 of [<a href="#ref-TLS13" title=""The Transport Layer Security (TLS) Protocol Version 1.3"">TLS13</a>]).
Clients that use early data MUST retry requests upon receipt of a 425
(Too Early) status code; see <a href="#section-5.2">Section 5.2</a>.
An intermediary MUST NOT use early data when forwarding a request
unless early data was used on a previous hop, or it knows that the
request can be retried safely without consequences (typically, using
out-of-band configuration). Absent better information, that means
that an intermediary can only use early data if the request either
arrived in early data or arrived with the Early-Data header field set
to "1" (see <a href="#section-5.1">Section 5.1</a>).
<span class="h2"><a class="selflink" id="section-5" href="#section-5">5</a>. Extensions for Early Data in HTTP</span>
Because HTTP requests can span multiple "hops", it is necessary to
explicitly communicate whether a request has been sent in early data
on a previous hop. Likewise, it is necessary to have some means of
explicitly triggering a retry when early data is not desired.
Finally, it is necessary to know whether the client will actually
perform such a retry.
To meet these needs, two signaling mechanisms are defined:
o The Early-Data header field is included in requests that might
have been forwarded by an intermediary prior to the completion of
the TLS handshake with its client.
o The 425 (Too Early) status code is defined for a server to
indicate that a request could not be processed due to the
consequences of a possible replay attack.
They are designed to enable better coordination of the use of early
data between the user agent and origin server, and also when a
gateway (also "reverse proxy", "Content Delivery Network", or
"surrogate") is present.
Gateways typically don't have specific information about whether a
given request can be processed safely when it is sent in early data.
In many cases, only the origin server has the necessary information
to decide whether the risk of replay is acceptable. These extensions
allow coordination between a gateway and its origin server.
<span class="grey">Thomson, et al. Standards Track [Page 6]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-7" ></span>
<span class="grey"><a href="./rfc8470">RFC 8470</a> HTTP Early Data September 2018</span>
<span class="h3"><a class="selflink" id="section-5.1" href="#section-5.1">5.1</a>. The Early-Data Header Field</span>
The Early-Data request header field indicates that the request has
been conveyed in early data and that a client understands the 425
(Too Early) status code.
It has just one valid value: "1". Its syntax is defined by the
following ABNF [<a href="#ref-ABNF" title=""Augmented BNF for Syntax Specifications: ABNF"">ABNF</a>]:
Early-Data = "1"
For example:
GET /resource HTTP/1.0
Host: example.com
Early-Data: 1
An intermediary that forwards a request prior to the completion of
the TLS handshake with its client MUST send it with the Early-Data
header field set to "1" (i.e., it adds it if not present in the
request). An intermediary MUST use the Early-Data header field if
the request might have been subject to a replay and might already
have been forwarded by it or another instance (see <a href="#section-6.2">Section 6.2</a>).
An intermediary MUST NOT remove this header field if it is present in
a request. Early-Data MUST NOT appear in a Connection header field.
The Early-Data header field is not intended for use by user agents
(that is, the original initiator of a request). Sending a request in
early data implies that the client understands this specification and
is willing to retry a request in response to a 425 (Too Early) status
code. A user agent that sends a request in early data does not need
to include the Early-Data header field.
A server cannot make a request that contains the Early-Data header
field safe for processing by waiting for the handshake to complete.
A request that is marked with Early-Data was sent in early data on a
previous hop. Requests that contain the Early-Data header field and
cannot be safely processed MUST be rejected using the 425 (Too Early)
status code.
The Early-Data header field carries a single bit of information, and
clients MUST include at most one instance. Multiple or invalid
instances of the header field MUST be treated as equivalent to a
single instance with a value of 1 by a server.
<span class="grey">Thomson, et al. Standards Track [Page 7]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-8" ></span>
<span class="grey"><a href="./rfc8470">RFC 8470</a> HTTP Early Data September 2018</span>
An Early-Data header field MUST NOT be included in responses or
request trailers.
<span class="h3"><a class="selflink" id="section-5.2" href="#section-5.2">5.2</a>. The 425 (Too Early) Status Code</span>
A 425 (Too Early) status code indicates that the server is unwilling
to risk processing a request that might be replayed.
User agents that send a request in early data are expected to retry
the request when receiving a 425 (Too Early) response status code. A
user agent SHOULD retry automatically, but any retries MUST NOT be
sent in early data.
In all cases, an intermediary can forward a 425 (Too Early) status
code. Intermediaries MUST forward a 425 (Too Early) status code if
the request that it received and forwarded contained an Early-Data
header field. Otherwise, an intermediary that receives a request in
early data MAY automatically retry that request in response to a 425
(Too Early) status code, but it MUST wait for the TLS handshake to
complete on the connection where it received the request.
The server cannot assume that a client is able to retry a request
unless the request is received in early data or the Early-Data header
field is set to "1". A server SHOULD NOT emit the 425 status code
unless one of these conditions is met.
The 425 (Too Early) status code is not cacheable by default. Its
payload is not the representation of any identified resource.
<span class="h2"><a class="selflink" id="section-6" href="#section-6">6</a>. Security Considerations</span>
Using early data exposes a client to the risk that their request is
replayed. A retried or replayed request can produce different side
effects on the server. In addition to those side effects, replays
and retries might be used for traffic analysis to recover information
about requests or the resources those requests target. In
particular, a request that is replayed might result in a different
response, which might be observable from the length of protected data
even if the content remains confidential.
<span class="h3"><a class="selflink" id="section-6.1" href="#section-6.1">6.1</a>. Gateways and Early Data</span>
A gateway MUST NOT forward requests that were received in early data
unless it knows that the origin server it will forward to understands
the Early-Data header field and will correctly generate a 425 (Too
Early) status code. A gateway that is uncertain about origin server
support for a given request SHOULD either delay forwarding the
<span class="grey">Thomson, et al. Standards Track [Page 8]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-9" ></span>
<span class="grey"><a href="./rfc8470">RFC 8470</a> HTTP Early Data September 2018</span>
request until the TLS handshake with its client completes or send a
425 (Too Early) status code in response.
A gateway without at least one potential origin server that supports
the Early-Data header field expends significant effort for what can
at best be a modest performance benefit from enabling early data. If
no origin server supports early data, it is more efficient to disable
early data entirely.
<span class="h3"><a class="selflink" id="section-6.2" href="#section-6.2">6.2</a>. Consistent Handling of Early Data</span>
Consistent treatment of a request that arrives in, or partially in,
early data is critical to avoiding inappropriate processing of
replayed requests. If a request is not safe to process before the
TLS handshake completes, then all instances of the server (including
gateways) need to agree and either reject the request or delay
processing.
Disabling early data, delaying requests, or rejecting requests with
the 425 (Too Early) status code are all equally good measures for
mitigating replay attacks on requests that might be vulnerable to
replay. Server instances can implement any of these measures and be
considered consistent, even if different instances use different
methods. Critically, this means that it is possible to employ
different mitigations in reaction to other conditions, such as server
load.
A server MUST NOT act on early data before the handshake completes if
it and any other server instance could make a different decision
about how to handle the same data.
<span class="h3"><a class="selflink" id="section-6.3" href="#section-6.3">6.3</a>. Denial of Service</span>
Accepting early data exposes a server to potential denial of service
through the replay of requests that are expensive to handle. A
server that is under load SHOULD prefer rejecting TLS early data as a
whole rather than accepting early data and selectively processing
requests. Generating a 503 (Service Unavailable) or 425 (Too Early)
status code often leads to clients retrying requests, which could
result in increased load.
<span class="h3"><a class="selflink" id="section-6.4" href="#section-6.4">6.4</a>. Out-of-Order Delivery</span>
In protocols that deliver data out of order (such as QUIC [<a href="#ref-HQ" title=""Hypertext Transfer Protocol (HTTP) over QUIC"">HQ</a>]),
early data can arrive after the handshake completes. A server MAY
process requests received in early data after handshake completion
only if it can rely on other instances correctly handling replays of
the same requests.
<span class="grey">Thomson, et al. Standards Track [Page 9]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-10" ></span>
<span class="grey"><a href="./rfc8470">RFC 8470</a> HTTP Early Data September 2018</span>
<span class="h2"><a class="selflink" id="section-7" href="#section-7">7</a>. IANA Considerations</span>
This document registers the Early-Data header field in the "Permanent
Message Header Field Names" registry located at
<<a href="https://www.iana.org/assignments/message-headers">https://www.iana.org/assignments/message-headers</a>>.
Header field name: Early-Data
Applicable protocol: http
Status: standard
Author/Change controller: IETF
Specification document(s): This document
Related information: (empty)
This document registers the 425 (Too Early) status code in the "HTTP
Status Codes" registry located at <<a href="https://www.iana.org/assignments/http-status-codes">https://www.iana.org/assignments/</a>
<a href="https://www.iana.org/assignments/http-status-codes">http-status-codes</a>>.
Value: 425
Description: Too Early
Reference: This document
<span class="h2"><a class="selflink" id="section-8" href="#section-8">8</a>. References</span>
<span class="h3"><a class="selflink" id="section-8.1" href="#section-8.1">8.1</a>. Normative References</span>
[<a id="ref-ABNF">ABNF</a>] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", STD 68, <a href="./rfc5234">RFC 5234</a>,
DOI 10.17487/RFC5234, January 2008,
<<a href="https://www.rfc-editor.org/info/rfc5234">https://www.rfc-editor.org/info/rfc5234</a>>.
[<a id="ref-HTTP">HTTP</a>] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
Protocol (HTTP/1.1): Message Syntax and Routing",
<a href="./rfc7230">RFC 7230</a>, DOI 10.17487/RFC7230, June 2014,
<<a href="https://www.rfc-editor.org/info/rfc7230">https://www.rfc-editor.org/info/rfc7230</a>>.
[<a id="ref-RFC2119">RFC2119</a>] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", <a href="https://www.rfc-editor.org/bcp/bcp14">BCP 14</a>, <a href="./rfc2119">RFC 2119</a>,
DOI 10.17487/RFC2119, March 1997,
<<a href="https://www.rfc-editor.org/info/rfc2119">https://www.rfc-editor.org/info/rfc2119</a>>.
<span class="grey">Thomson, et al. Standards Track [Page 10]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-11" ></span>
<span class="grey"><a href="./rfc8470">RFC 8470</a> HTTP Early Data September 2018</span>
[<a id="ref-RFC7231">RFC7231</a>] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
Protocol (HTTP/1.1): Semantics and Content", <a href="./rfc7231">RFC 7231</a>,
DOI 10.17487/RFC7231, June 2014,
<<a href="https://www.rfc-editor.org/info/rfc7231">https://www.rfc-editor.org/info/rfc7231</a>>.
[<a id="ref-RFC8174">RFC8174</a>] Leiba, B., "Ambiguity of Uppercase vs Lowercase in <a href="./rfc2119">RFC</a>
<a href="./rfc2119">2119</a> Key Words", <a href="https://www.rfc-editor.org/bcp/bcp14">BCP 14</a>, <a href="./rfc8174">RFC 8174</a>, DOI 10.17487/RFC8174,
May 2017, <<a href="https://www.rfc-editor.org/info/rfc8174">https://www.rfc-editor.org/info/rfc8174</a>>.
[<a id="ref-TLS13">TLS13</a>] Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", <a href="./rfc8446">RFC 8446</a>, DOI 10.17487/RFC8446, August 2018,
<<a href="https://www.rfc-editor.org/info/rfc8446">https://www.rfc-editor.org/info/rfc8446</a>>.
<span class="h3"><a class="selflink" id="section-8.2" href="#section-8.2">8.2</a>. Informative References</span>
[<a id="ref-ALPN">ALPN</a>] Friedl, S., Popov, A., Langley, A., and E. Stephan,
"Transport Layer Security (TLS) Application-Layer Protocol
Negotiation Extension", <a href="./rfc7301">RFC 7301</a>, DOI 10.17487/RFC7301,
July 2014, <<a href="https://www.rfc-editor.org/info/rfc7301">https://www.rfc-editor.org/info/rfc7301</a>>.
[<a id="ref-HQ">HQ</a>] Bishop, M., "Hypertext Transfer Protocol (HTTP) over
QUIC", Work in Progress, <a href="./draft-ietf-quic-http-14">draft-ietf-quic-http-14</a>, August
2018.
[<a id="ref-RFC7540">RFC7540</a>] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext
Transfer Protocol Version 2 (HTTP/2)", <a href="./rfc7540">RFC 7540</a>,
DOI 10.17487/RFC7540, May 2015,
<<a href="https://www.rfc-editor.org/info/rfc7540">https://www.rfc-editor.org/info/rfc7540</a>>.
Acknowledgments
This document was not easy to produce. The following people made
substantial contributions to the quality and completeness of the
document: David Benjamin, Subodh Iyengar, Benjamin Kaduk, Ilari
Liusavaara, Kazuho Oku, Eric Rescorla, Kyle Rose, and Victor
Vasiliev.
<span class="grey">Thomson, et al. Standards Track [Page 11]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-12" ></span>
<span class="grey"><a href="./rfc8470">RFC 8470</a> HTTP Early Data September 2018</span>
Authors' Addresses
Martin Thomson
Mozilla
Email: martin.thomson@gmail.com
Mark Nottingham
Fastly
Email: mnot@mnot.net
Willy Tarreau
HAProxy Technologies
Email: willy@haproxy.org
Thomson, et al. Standards Track [Page 12]
</pre>
|