A list's ETag tracks its schema, so ItemCount comes back stale via 304gotchas / rest-apiAdding items never moves the list entity's ETag, so revalidation answers 304 and the browser serves the body from when the list was empty; affects entity reads (GetList, lists(guid)), not collections or /items
An overwritten script with a stable name keeps serving the old codegotchas / spfxmax-age=600 on GitHub Pages, a memory cache shared by same-site tabs and SharePoint's service worker; keep stable files thin, test with cache: 'reload' and every tab closed, and don't read transferSize of a…
An SPFx chunk's file name is not its content — realContentHash is offgotchas / spfxSPFx builds with realContentHash: false, so a byte-identical chunk can get a new name (measured) and nothing rules out the reverse; deduplicate by bytes or git blob and never overwrite a published file
Cache-Control on a dynamic endpoint is an edge layer you can't invalidategotchas / azure-functionsmax-age on a live aggregate lets a shared cache hold the response keyed by URL; neither an app restart nor deleting the underlying data clears it, only expiry — serve dynamic data no-store, cache server-side, and have…
The best-known public API may be the worst one — measure before you build on itgotchas / azure-functionsThe best-known free API returned 404/502/timeout on 7 of 8 live calls while the test suite stayed green; probe latency and status on real data, then cache successes (never failures) and honour Retry-After — a Function…
The browser cache answers your read-after-write check — with a 200gotchas / rest-apiThe same URL read on both sides of a write is served from the browser cache, so res.ok guards pass on stale state; a cached existence check makes POST /fields create a duplicate column and report success, and an…