@@ -116,6 +116,12 @@ spec:websockets; type:attribute; text:bufferedAmount; for:WebSocket
116
116
"href": "https://datatracker.ietf.org/doc/html/draft-ietf-masque-h3-datagram",
117
117
"publisher": "IETF",
118
118
"title": "Using QUIC Datagrams with HTTP/3"
119
+ },
120
+ "SVCB": {
121
+ "authors": ["Ben Schwartz", "Mike Bishop", "Erik Nygren"] ,
122
+ "href": "https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https",
123
+ "publisher": "IETF",
124
+ "title": "Service binding and parameter specification via the DNS (DNS SVCB and HTTPS RRs)"
119
125
}
120
126
}
121
127
</pre>
@@ -2343,51 +2349,50 @@ functionality.
2343
2349
2344
2350
<h3 id=resolving-domains>Resolving domains</h3>
2345
2351
2346
- <p tracking-vector> To <dfn>resolve a domain</dfn> , given a <a for=/>network partition key</a>
2347
- <var> key</var> and a <a for=/>domain</a> <var> domain</var> :
2352
+ <p tracking-vector> To
2353
+ <dfn export id=resolve-an-origin oldids=resolve-a-domain>resolve an origin</dfn> , given a
2354
+ <a for=/>network partition key</a> <var> key</var> and an <a for=/>origin</a> <var> origin</var> :
2355
+ <!-- Should we assert the scheme here to be an HTTP(S) scheme or a WebRTC scheme? -->
2348
2356
2349
2357
<ol>
2350
- <li><p> If <var> domain</var> is a <a for=/>host</a> whose <a for=host>public suffix</a> is
2358
+ <li><p> If <var> origin</var> 's <a for=origin>host</a> is an <a for=/>IP address</a> , then return
2359
+ « <var> origin</var> 's <a for=origin>host</a> ».
2360
+
2361
+ <li><p> If <var> origin</var> 's <a for=origin>host</a>' s <a for=host>public suffix</a> is
2351
2362
"<code> localhost</code> ", then return « <code> ::1</code> , <code> 127.0.0.1</code> ».
2352
2363
2353
- <li><p> Perform an <a>implementation-defined</a> operation to turn <var> domain</var> into a
2354
- <a for=/>set</a> of one or more <a for=/>IP addresses</a> . If this operation succeeds, return the
2355
- <a for=/>set</a> of <a for=/>IP addresses</a> .
2364
+ <li>
2365
+ <p> Perform an <a>implementation-defined</a> operation to turn <var> origin</var> into a
2366
+ <a for=/>set</a> of one or more <a for=/>IP addresses</a> .
2367
+
2368
+ <p> It is also <a>implementation-defined</a> whether other operations might be performed to get
2369
+ connection information beyond just <a for=/>IP addresses</a> . For example, if <var> origin</var> 's
2370
+ <a for=origin>scheme</a> is an <a>HTTP(S) scheme</a> , the implementation might perform a DNS query
2371
+ for HTTPS RRs. [[SVCB]]
2372
+
2373
+ <p> If this operation succeeds, return the <a for=/>set</a> of <a for=/>IP addresses</a> and any
2374
+ additional <a>implementation-defined</a> information.
2375
+ </li>
2356
2376
2357
2377
<li><p> Return failure.
2358
2378
</ol>
2359
2379
2360
- <p> The results of <a>resolve a domain </a> may be cached. If they are cached, <var> key</var> should
2380
+ <p> The results of <a>resolve an origin </a> may be cached. If they are cached, <var> key</var> should
2361
2381
be used as part of the cache key.
2362
2382
2363
2383
<div class=note>
2364
2384
<p> Typically this operation would involve DNS and as such caching can happen on DNS servers without
2365
2385
<var> key</var> being taken into account. Depending on the implementation it might also not be
2366
2386
possible to take <var> key</var> into account locally. [[RFC1035]]
2367
2387
2368
- <p> The order of the <a for=/>IP addresses</a> <a>resolve a domain </a> can return return can differ
2369
- between invocations.
2388
+ <p> The order of the <a for=/>IP addresses</a> that the <a>resolve an origin </a> algorithm can return
2389
+ can differ between invocations.
2370
2390
2371
2391
<p> The particulars (apart from the cache key) are not tied down as they are not pertinent to the
2372
2392
system the Fetch Standard establishes. Other documents ought not to build on this primitive without
2373
2393
having a considered discussion with the Fetch Standard community first.
2374
2394
</div>
2375
2395
2376
- <p> To <dfn>resolve an origin</dfn> , given a <a for=/>network partition key</a> <var> key</var> and an
2377
- <a for=/>origin</a> <var> origin</var> :
2378
- <!-- Should we assert the scheme here to be an HTTP(S) scheme or a WebRTC scheme? -->
2379
-
2380
- <ol>
2381
- <li><p> If <var> origin</var> 's <a for=origin>host</a> is an <a for=/>IP address</a> , then return
2382
- « <var> origin</var> 's <a for=origin>host</a> ».
2383
-
2384
- <li><p> Return the result of running <a>resolve a domain</a> given <var> key</var> and
2385
- <var> origin</var> 's <a for=origin>host</a> .
2386
- </ol>
2387
-
2388
- <p class=note> The same caveat applies. Do not build on this without having a considered discussion
2389
- with the Fetch Standard community first.
2390
-
2391
2396
2392
2397
<h3 id=connections>Connections</h3>
2393
2398
@@ -2525,7 +2530,7 @@ steps:
2525
2530
return it. Any other returned values that are <a>connections</a> may be closed.
2526
2531
2527
2532
<p class=note> Essentially this allows an implementation to pick one or more
2528
- <a for=/>IP addresses</a> from the return value of <a>resolve a domain </a> (assuming
2533
+ <a for=/>IP addresses</a> from the return value of <a>resolve an origin </a> (assuming
2529
2534
<var> proxy</var> is "<code> DIRECT</code> ") and race them against each other, favor
2530
2535
<a for=/>IPv6 addresses</a> , retry in case of a timeout, etc.
2531
2536
@@ -4049,11 +4054,21 @@ steps:
4049
4054
<li> Matching <var> request</var> 's <a for=request>current URL</a>' s <a for=url>host</a> per
4050
4055
<a href=https://datatracker.ietf.org/doc/html/rfc6797#section-8.2>Known HSTS Host Domain Name Matching</a>
4051
4056
results in either a superdomain match with an asserted <code> includeSubDomains</code> directive
4052
- or a congruent match (with or without an asserted <code> includeSubDomains</code> directive).
4053
- [[!HSTS]]
4057
+ or a congruent match (with or without an asserted <code> includeSubDomains</code> directive) [[!HSTS]] ; or
4058
+ DNS resolution for the request finds a matching HTTPS RR per
4059
+ <a href=https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https#section-9.5>section 9.5</a>
4060
+ of [[!SVCB]] .
4061
+ [[!HSTS]][[!SVCB]]
4054
4062
</ul>
4055
4063
<!-- Per Mike West HSTS happens "probably after" Referrer -->
4056
4064
4065
+ <p class=note> As all DNS operations are generally <a>implementation-defined</a> , how it is
4066
+ determined that DNS resolution contains an HTTPS RR is also <a>implementation-defined</a> . As DNS
4067
+ operations are not traditionally performed until attempting to <a>obtain a connection</a> , user
4068
+ agents might need to perform DNS operations earlier, consult local DNS caches, or wait until later
4069
+ in the fetch algorithm and potentially unwind logic on discovering the need to change
4070
+ <var> request</var> 's <a for=request>current URL</a>' s <a for=url>scheme</a> .
4071
+
4057
4072
<li><p> If <var> recursive</var> is false, then run the remaining steps <a>in parallel</a> .
4058
4073
4059
4074
<li>
@@ -8240,6 +8255,7 @@ Eero Häkkinen,
8240
8255
Ehsan Akhgari,
8241
8256
Emily Stark,
8242
8257
Eric Lawrence,
8258
+ Eric Orth,
8243
8259
François Marier,
8244
8260
Frank Ellerman,
8245
8261
Frederick Hirsch,
0 commit comments