Open OZZlE opened 3 weeks ago
@KhafraDev
If A and B are different origins, the spec tells us to remove cookies on cross-origin redirects.
If A and B are different origins, the spec tells us to remove cookies on cross-origin redirects.
Yep, in my case the hostname is identical, path should not matter unless the cookie was set on a specific path other than /
, our cookies also use /
as path
"Same origin" in this case requires the protocol, hostname, and port to be identical. If this is true, I need a reproducible sample.
They are identical, our website is behind login. That using fetchCookie
solves the issue should be proof enough that the issue exists. I will get back to you if I can find time to set up an example, it might take some time to implement.
Times like these node.js feels a bit imature compared to many of the older web backends.
I may have been concentrating on your same origin comment too much since we've had similar reports in the past - undici does not implement a cookie jar.
import { once } from 'node:events'
import { createServer } from 'node:http'
const server = createServer((req, res) => {
if (req.url === '/path1') {
res.writeHead(302, undefined, {
location: '/path2',
'set-cookie': 'a=b'
})
res.end()
} else {
console.log('ok')
console.log(req.headers)
res.end()
}
}).listen(0)
await once(server, 'listening')
const v = await fetch(`http://localhost:${server.address().port}/path1`)
console.log(v.headers.getSetCookie()) // empty
We have an Api that you need to call on endpoint A, it sets cookies and redirects to B (and you cannot call B directly) but undici looses the cookies so the Api call fails.
(Update: both A and B live on the same origins but diffent paths and the cookie path is set on
/
)I also considered:
However on Win11 I want to use SSL certs which is poorly implemented in windows so I have to use this syntax:
But trying to wrap that with
fetchCookie
like:const fetch = fetchCookie(uWinCaFetch);
only becomes:Additional context