@@ -255,16 +255,23 @@ function appendFetchMetadata (httpRequest) {
255
255
256
256
// https://fetch.spec.whatwg.org/#append-a-request-origin-header
257
257
function appendRequestOriginHeader ( request ) {
258
- // 1. Let serializedOrigin be the result of byte-serializing a request origin with request.
258
+ // 1. Let serializedOrigin be the result of byte-serializing a request origin
259
+ // with request.
260
+ // TODO: implement "byte-serializing a request origin"
259
261
let serializedOrigin = request . origin
260
262
261
- // 2. If request’s response tainting is "cors" or request’s mode is "websocket", then append (`Origin`, serializedOrigin) to request’s header list.
262
- if ( request . responseTainting === 'cors' || request . mode === 'websocket' ) {
263
- if ( serializedOrigin ) {
264
- request . headersList . append ( 'origin' , serializedOrigin , true )
265
- }
263
+ // "'client' is changed to an origin during fetching."
264
+ // This doesn't happen in undici (in most cases) because undici, by default,
265
+ // has no concept of origin.
266
+ if ( serializedOrigin === 'client' ) {
267
+ return
268
+ }
266
269
270
+ // 2. If request’s response tainting is "cors" or request’s mode is "websocket",
271
+ // then append (`Origin`, serializedOrigin) to request’s header list.
267
272
// 3. Otherwise, if request’s method is neither `GET` nor `HEAD`, then:
273
+ if ( request . responseTainting === 'cors' || request . mode === 'websocket' ) {
274
+ request . headersList . append ( 'origin' , serializedOrigin , true )
268
275
} else if ( request . method !== 'GET' && request . method !== 'HEAD' ) {
269
276
// 1. Switch on request’s referrer policy:
270
277
switch ( request . referrerPolicy ) {
@@ -275,13 +282,16 @@ function appendRequestOriginHeader (request) {
275
282
case 'no-referrer-when-downgrade' :
276
283
case 'strict-origin' :
277
284
case 'strict-origin-when-cross-origin' :
278
- // If request’s origin is a tuple origin, its scheme is "https", and request’s current URL’s scheme is not "https", then set serializedOrigin to `null`.
285
+ // If request’s origin is a tuple origin, its scheme is "https", and
286
+ // request’s current URL’s scheme is not "https", then set
287
+ // serializedOrigin to `null`.
279
288
if ( request . origin && urlHasHttpsScheme ( request . origin ) && ! urlHasHttpsScheme ( requestCurrentURL ( request ) ) ) {
280
289
serializedOrigin = null
281
290
}
282
291
break
283
292
case 'same-origin' :
284
- // If request’s origin is not same origin with request’s current URL’s origin, then set serializedOrigin to `null`.
293
+ // If request’s origin is not same origin with request’s current URL’s
294
+ // origin, then set serializedOrigin to `null`.
285
295
if ( ! sameOrigin ( request , requestCurrentURL ( request ) ) ) {
286
296
serializedOrigin = null
287
297
}
@@ -290,10 +300,8 @@ function appendRequestOriginHeader (request) {
290
300
// Do nothing.
291
301
}
292
302
293
- if ( serializedOrigin ) {
294
- // 2. Append (`Origin`, serializedOrigin) to request’s header list.
295
- request . headersList . append ( 'origin' , serializedOrigin , true )
296
- }
303
+ // 2. Append (`Origin`, serializedOrigin) to request’s header list.
304
+ request . headersList . append ( 'origin' , serializedOrigin , true )
297
305
}
298
306
}
299
307
0 commit comments