为了提高我的网站性能/响应能力,我使用 AJAX、replaceState、pushState 和 popstate 监听器实现了部分页面加载。 我将页面的中央部分(HTML)作为状态对象存储在历史记录中。 当单击链接时,我从服务器请求页面的中央部分(使用不同的 Accept 标头标识这些请求),并使用 JavaScript 替换它。 在 popstate 事件发生时,我获取前一个中央部分并将其推回 dom 中。然而,我发现了一个问题,即当进行 POST 操作时,通过 AJAX 的部分页面加载会出现一些错误。可能是浏览器缓存了第二个动态加载的页面,导致在返回完整页面时仅显示了缓存的部分响应。虽然尝试了添加 Vary: Accept 头和 Cache-Control max-age=0、pragma no-cache 和过期日期等缓存控制方法,但均未解决该问题。
很遗憾,我的公司不允许外部流量访问我们的开发服务器,所以我无法向您展示问题。我查看了这里的各种类似问题,但似乎没有一个完全相同的,并且建议的解决方案似乎也不起作用。
如果我在动态GET请求中添加一个无意义的参数(blah = blah),这样就可以解决问题。然而,这是一种不太好的hack方法,我宁愿不这样做。由于我认为这是一个缓存问题,所以似乎应该通过标头来解决。有人能解释一下这到底是怎么回事吗?