Javascript Chrome历史API问题

Javascript Chrome历史API问题,javascript,google-chrome,xmlhttprequest,browser-history,Javascript,Google Chrome,Xmlhttprequest,Browser History,我有一个网站是Chrome的问题 大多数站点使用ajax/xmlhttprequest加载页面,并使用history API启用后退按钮。只有页面内容随请求而更改,菜单等不会重新加载。这只是重新调用上一页的ajax请求。这一切都很好,直到有人在浏览完博客后点击后退按钮。博客没有加载ajax,它只是一个标准链接 在Firefox中,如果我去了博客,然后按返回正确加载的站点。加载了导航的主页以及要在其中查看的页面 然而,在Chrome中,如果我在博客中按下后退按钮,“外部”页面不会被加载,只有aja

我有一个网站是Chrome的问题

大多数站点使用ajax/xmlhttprequest加载页面,并使用history API启用后退按钮。只有页面内容随请求而更改,菜单等不会重新加载。这只是重新调用上一页的ajax请求。这一切都很好,直到有人在浏览完博客后点击后退按钮。博客没有加载ajax,它只是一个标准链接

在Firefox中,如果我去了博客,然后按返回正确加载的站点。加载了导航的主页以及要在其中查看的页面

然而,在Chrome中,如果我在博客中按下后退按钮,“外部”页面不会被加载,只有ajax请求的内容会被加载。您可能需要查看它才能完全理解

这是Chrome中的bug还是我的工作中的bug?似乎我无法返回到使用xmlhttprequest部分加载的页面,因为只加载了请求的项

网址如下:

谢谢

Ric

简短回答 为XHR响应添加
缓存控制:无存储
HTTP头

长话短说 我很确定这是Chrome中的一个bug。我在我的应用程序中发现了完全相同的错误,它在Firefox中运行良好,但在Chrome中出现故障。我认为问题在于Chrome缓存XHR响应,并在按下后退按钮时从缓存中提供响应。我的应用程序使用Etag,但Chrome并不费心检查Etag。它只使用缓存响应,而缓存响应缺少所有外部内容。到目前为止,我提出的最好的解决方案是将
no-store
添加到缓存控制头中,用于XHR响应

您可以通过Chrome的NetInternals页面查看该行为。类型<代码>chrome://net-internals
在URL栏中,打开“事件”选项卡,并完成复制错误的步骤。当你转到一个非ajax页面,然后按下后退按钮,你会看到一个URL\u请求条目,用于你试图转到的页面的URL,但是Chrome只是检查缓存,就这样。将其与对该URL的正常请求进行对比。正常的一个将有一个缓存检查,然后是一个HTTP_事务_发送_请求部分,这是Chrome发出实际HTTP请求的地方