I'm pretty sure I've ruled out the service worker returning stale responses under normal circumstances because if I manually call
fetch('.../A/...json')
with default options in the browser console, then the service worker reports 404.So it maybe nextjs calling fetch with weird options that's causing the issue.
reply
Looks like it is nextjs. It's calling fetch with a
X-Nextjs-Data: 1
header. If I remove the header, it 404's like it should.Here it turns a 404 to a 200 on the server: https://github.com/vercel/next.js/blob/c6fe20a31ff4f62ee75c08cd0eae9ceaba7ec50d/packages/next/src/server/lib/router-server.ts#L205
reply
If you run this in the browser console while on
https://stacker.news
it'll return 200 for an arbitrary data request.const headers = new Headers() headers.append('X-Nextjs-Data', '1') fetch('https://stacker.news/_next/data/this_doesnt_exist.json', { headers }).then(console.log)
reply
If I remove the middleware it works as expected and 404s.
I guess I should report this a bug to nextjs.
reply
All this software between us and our users almost makes me believe I want to be a hardware engineer, not a software engineer, lol
reply
tbf hardware engineers have even more software between their work and their customers lol
Software's composability is ultimately a feature and not a bug. It's why everyone makes software and a relatively small number of people make hardware ... and even hardware people rely on 3rd party components which are horrifyingly opaque and suffer from super slow release cycles.
There's an ex-hardware guy in Pleb Lab right now who has transitioned to software. The main upside afaict is how tangible his work was. I can buy the stuff he designed on Amazon and it can sit on my desk.
I totally get it though. I studied a lot of circuits and engineering in college wanting to be a sovereign full stacker to an absurd degree, but the reality is we're all dependent on something.
reply
I see, must be related to how their client side navigation works since only during client side navigation, these
/_next/data/
routes are called, I think.reply
deleted by author
reply
A
, when we load pages, the path requested for SSR data will look like.../A/...json
. All the appropriate cache headers are set, e.g.no-store, no-cache
.B
, the browser/pwa (unless its a fresh navigation or reload) continues to request.../A/...json
on navigations. Even though.../A/...json
doesn't actually exist, ie its a 404 if visited directly, the service worker returns an empty response with status 200 ... so effectively all the data is stale.