Skip to content

Commit 74247e3

Browse files
carlosjoan91meacer
authored andcommitted
Add HTTPS Upgrading
1 parent aa6f53e commit 74247e3

File tree

1 file changed

+128
-3
lines changed

1 file changed

+128
-3
lines changed

fetch.bs

+128-3
Original file line numberDiff line numberDiff line change
@@ -2157,6 +2157,17 @@ Unless stated otherwise, it is false.
21572157

21582158
<p class=note>This flag is for exclusive use by HTML's render-blocking mechanism. [[!HTML]]
21592159

2160+
<p>A <a for=/>request</a> has an associated boolean <dfn export for=request>is HTTPS upgrade</dfn>.
2161+
Unless stated otherwise, it is false.
2162+
2163+
<p class=note>This is for exclusive use by HTTPS Upgrading algorithm.
2164+
2165+
<p>A <a for=/>request</a> has an associated
2166+
<dfn export for=request>HTTPS upgrade fallback URL</dfn>, which is null or a <a for=/>URL</a>.
2167+
Unless otherwise stated, it is null.
2168+
2169+
<p class=note>This is for exclusive use by HTTPS Upgrading algorithm.
2170+
21602171
<hr>
21612172

21622173
<p>A <a for=/>request</a> has an associated
@@ -3265,6 +3276,109 @@ through TLS using ALPN. The protocol cannot be spoofed through HTTP requests in
32653276
</div>
32663277

32673278

3279+
<h3 id=https-upgrades>HTTPS upgrading</h3>
3280+
3281+
<p>User agents may optionally upgrade requests with URLs that are not
3282+
<a>potentially trustworthy URLs</a> to attempt to fetch them over
3283+
<a>potentially trustworthy URLs</a>. If an upgraded request fails with a network error, it is
3284+
retried over the original URL.
3285+
3286+
<p>The HTTPS upgrading algorithm consists of <a>upgrade an HTTP request</a> and
3287+
<a>HTTPS upgrade fallback</a> algorithms.
3288+
3289+
<h4 id=https-upgrades-upgrade>HTTPS upgrade algorithm</h4>
3290+
<div algorithm>
3291+
3292+
<p>To <dfn>upgrade an HTTP request</dfn> given a <a for=/>request</a> <var>request</var>:
3293+
3294+
<ol>
3295+
<li>
3296+
<p>If one or more of the following conditions are met, return:
3297+
<ul>
3298+
<li><p><var>request</var>'s <a for="request">destination</a> is not "<code>document</code>"
3299+
3300+
<li><p><var>request</var>'s <a for="request">method</a> is not "<code>GET</code>"
3301+
3302+
<li><p><var>request</var>'s <a for="request">URL</a>'s <a for="url">scheme</a> is not
3303+
"<code>http</code>"
3304+
3305+
<li><p><var>request</var>'s <a for="request">URL</a>'s <a for="url">host</a> is exempted from
3306+
upgrades in an <a>implementation-defined</a> way.
3307+
</ul>
3308+
</li>
3309+
3310+
<li>
3311+
<p>If <var>request</var>'s <a for=request>HTTPS upgrade fallback URL</a> is non-null, clear
3312+
<a for=request>is HTTPS upgrade</a> and <a for=request>HTTPS upgrade fallback URL</a> and return.
3313+
3314+
<p class=note>This is a fallback request that shouldn't be upgraded again.
3315+
3316+
<li>
3317+
<p>Otherwise, set the following fields:
3318+
<ul>
3319+
<li><p>Set <a for=request>HTTPS upgrade fallback URL</a> to <var>request</var>'s
3320+
<a for="request">URL</a>.
3321+
3322+
<li><p>Set <var>request</var>'s <a for="request">URL</a>'s <a for="url">scheme</a> to
3323+
"<code>https</code>".
3324+
3325+
<li><p>Set <a for=request>is HTTPS upgrade</a> to true.
3326+
</ul>
3327+
</li>
3328+
</ol>
3329+
</div>
3330+
3331+
<h4 id=https-upgrades-fallback>Fallback algorithm</h4>
3332+
<div algorithm>
3333+
3334+
<p>To run <dfn>HTTPS upgrade fallback</dfn> given a <a for=/>request</a> <var>request</var> and
3335+
<a for=/>response</a> <var>response</var>:
3336+
3337+
<ol>
3338+
<li><p>If <var>request</var>'s <a for=request>is HTTPS upgrade</a> is not set, then return
3339+
<var>response</var>.
3340+
3341+
<li>
3342+
<p>If <var>response</var> is a <a>network error</a>:
3343+
3344+
<p class=note>This means that the upgrade failed and initiates a fallback load.
3345+
3346+
<ol>
3347+
<li><p>Let <var>serializedFallbackUrl</var> be the <a lt="URL serializer">serialization</a> of
3348+
<var>request</var>'s <a for=request>HTTPS upgrade fallback URL</a>.
3349+
3350+
<li><p>Let <var>fallbackResponse</var> be a new <a for=/>response</a> whose
3351+
<a for=response>header list</a> is «
3352+
(`<code>Location</code>`, <var>serializedFallbackUrl</var>)», and its
3353+
<a for="response">status</a> set to 307.
3354+
3355+
<li><p>Return <var>fallbackResponse</var>.
3356+
</ol>
3357+
3358+
<li>
3359+
<p>Return <var>response</var>.
3360+
3361+
<p class=note>This means the upgrade was successful.
3362+
3363+
</ol>
3364+
3365+
<p class=note>User agents can implement a fast-fallback path by canceling slow fetches on upgraded
3366+
requests, in order to quickly initiate a fallback http load.
3367+
3368+
</div>
3369+
3370+
<h4 id=http-upgrades-examples>Examples</h4>
3371+
3372+
<p id=example-https-upgrade-good-https class=example><code>a.com</code> serves both
3373+
<code>http://a.com</code> and <code>https://a.com</code>. An eligible request to
3374+
<code>http://a.com</code> will be upgraded to <code>https://a.com</code>.
3375+
3376+
<p id=example-https-upgrade-bad-https class=example><code>a.com</code> serves
3377+
<code>http://a.com</code> but refuses connections on <code>https://a.com</code>. An eligible
3378+
request to <code>http://a.com</code> will be upgraded to <code>https://a.com</code>, but the fetch
3379+
will fail. A fallback request will be initiated to <code>http://a.com</code>.
3380+
3381+
32683382

32693383
<h2 id=http-extensions>HTTP extensions</h2>
32703384

@@ -4445,6 +4559,14 @@ steps:
44454559

44464560
<li><p><a>Upgrade <var>request</var> to a potentially trustworthy URL, if appropriate</a>.
44474561

4562+
<li>
4563+
<p>Optionally, run <a>upgrade an HTTP request</a> algorithm on <var>request</var>.
4564+
4565+
<p class=note>HTTPS upgrading only applies to requests with <a>HTTP(S) scheme</a>s, but it's done
4566+
in <a>main fetch</a> instead of <a>HTTP fetch</a> to ensure that
4567+
<a>upgrade a mixed content <var>request</var> to a potentially trustworthy URL, if appropriate</a>
4568+
step runs next and applies to the upgraded request.
4569+
44484570
<li><p><a>Upgrade a mixed content <var>request</var> to a potentially trustworthy URL, if appropriate</a>.
44494571

44504572
<li><p>If <a lt="block bad port">should <var>request</var> be blocked due to a bad port</a>,
@@ -5157,8 +5279,6 @@ these steps:
51575279
<p>If one of the following is true
51585280

51595281
<ul class=brief>
5160-
<li><p><var>response</var>'s <a for=response>type</a> is "<code>error</code>"
5161-
51625282
<li><p><var>request</var>'s <a for=request>mode</a> is "<code>same-origin</code>" and
51635283
<var>response</var>'s <a for=response>type</a> is "<code>cors</code>"
51645284

@@ -5246,6 +5366,10 @@ these steps:
52465366
<a>CORS check</a>, as <var>request</var>'s <a for=request>client</a> and the service worker can
52475367
have different embedder policies.
52485368

5369+
<li><p>If <var>request</var>'s <a for=request>is HTTPS upgrade</a> is set, set <var>response</var>
5370+
and <var>internalResponse</var> to the result of running <a>HTTPS upgrade fallback</a> given
5371+
<var>request</var> and <var>response</var>.
5372+
52495373
<li>
52505374
<p>If <var>internalResponse</var>'s <a for=response>status</a> is a <a>redirect status</a>:
52515375

@@ -8716,7 +8840,7 @@ resource — for non-<a>CORS requests</a> as well as <a>CORS
87168840
requests</a> — and do not use `<code>Vary</code>`.
87178841

87188842

8719-
<h3 class=no-num id=websocket-protocol oldids=websocket-connections,websocket-opening-handshake,fail-the-websocket-connection,the-websocket-connection-is-established>WebSockets</h2>
8843+
<h3 class=no-num id=websocket-protocol oldids=websocket-connections,websocket-opening-handshake,fail-the-websocket-connection,the-websocket-connection-is-established>WebSockets</h3>
87208844

87218845
<p>As part of establishing a connection, the {{WebSocket}} object initiates a special kind of
87228846
<a for=/>fetch</a> (using a <a for=/>request</a> whose <a for=request>mode</a> is
@@ -8980,6 +9104,7 @@ done only by navigations). The <a>fetch controller</a> is also used to
89809104
<a for=request>redirect mode</a> set to "<code>manual</code>".
89819105

89829106

9107+
89839108
<h2 id=acknowledgments class=no-num>Acknowledgments</h2>
89849109

89859110
<p>Thanks to

0 commit comments

Comments
 (0)