Author here, happy this popped up and to see the HN community thinking through it. A few people have brushed off what I sketched as uninteresting and don't see any issues. I'll try to explain it another way (with three years reflection to help).<p>Single page applications are now quite popular. <i>Most single page apps use a different definition of "back" than browsers do</i>, and there are times when the two treatments conflict.<p>Many, or most, use a local in-memory database to keep track of information without going to the server. They update that in-memory store as you make changes. For example you see a list of names: Mary, Robert, John. You click Robert and edit the name to "Rob", the name auto-saves. Then you click "back".<p>Because single-page apps control "back" when in the SPA, they do what most developers want. They return to a semantically correct page, showing Mary, Rob (just edited), John. Tons of apps do this. <i>This is not what the browser does</i>. The browser, if following the "back" specs, would show the out-of-date names of Mary, Robert, and John.<p>The theoretical conflict can also become practical. Think through this flow:<p>* Visit /names<p>* AJAX for GET /api/names<p>* See Mary, Robert, John<p>* Edit Robert's name to Bob, autosave<p>* AJAX for POST /api/name/4 with the new name Bob<p>* See Mary, Bob, John<p>* Click on a link, lets say to Mary's website URL<p>* Mary's website, new domain, loads.<p>* ...click back<p>The SPA loads up, and attempts to GET /api/names. However, the bfcache is at play since the native "back" behavior is running. So the stale API response, with the original names Mary, Robert, John is returned. <i>The list of names on the screen is DIFFERENT than what the user saw after they edited</i>.<p>Additionally most SPA apps presume AJAX calls return accurate data, however here the names are <i>not</i> the names currently in the database. They are only in the bfcache. You can imagine, with more complex data, ways this can cause complex and unforeseen failures.<p>This is a very poorly understood corner of JavaScript development even today.<p>[edit]: formatting