Chrome 历史记录 API 问题

6

我在Chrome浏览器上遇到了网站问题。

该网站的大部分页面使用ajax / xmlhttprequest进行加载,并使用历史记录API启用后退按钮。只有请求发生变化时,页面内容才会发生变化,菜单等不会重新加载。这一切都很好,直到有人查看博客后单击后退按钮。博客没有使用ajax加载,而是一个标准链接。

如果我在Firefox中进入博客然后按返回键,网站将正确加载。主页和导航加载,其中包括要在其中查看的页面。

然而,在Chrome中,如果我从博客中按下后退按钮,则不会加载“外部”页面,仅加载ajax请求的内容。您可能需要查看它以充分理解。

这是Chrome的错误还是我的错误?似乎我无法返回部分使用xmlhttprequest加载的页面,因为只有请求的项目被加载。

网站链接:http://www.basmooarc.com

谢谢

Ric

1个回答

4

简短回答

为XHR响应添加Cache-Control: no-store HTTP头。

详细回答

我相信这是Chrome浏览器中的一个bug。我在我的应用程序中发现了完全相同的问题,在Firefox中运行良好但在Chrome中不正常工作。我认为问题在于Chrome缓存了XHR响应并在按下后退按钮时从缓存中提供它。我的应用程序使用Etags,但Chrome不会去检查Etag。它仅使用缓存的响应,其中缺少所有外部内容。到目前为止,我想到的最好的解决方案是为XHR响应的缓存控制头添加no-store

您可以通过Chrome的net-internals页面查看行为。在URL栏中键入chrome://net-internals,打开"事件"选项卡并按照重现您的错误的步骤进行操作。当您转到非ajax页面然后按下后退按钮时,您将看到URL_REQUEST条目的URL,该条目是您试图转到的页面,但Chrome仅检查缓存,就此结束。与该URL的常规请求相对比,常规请求将具有缓存检查,然后是HTTP_TRANSACTION_SEND_REQUEST部分,这是Chrome进行实际HTTP请求的地方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接