8

我一直在使用 Chrome 的预渲染功能

<link rel="prerender" href="/path" />

但是在最新的更新之后,当我尝试使用[chrome://net-internals/#prerender]. 它表明预渲染由于"Cookie Conflict".

我试图调试以确保在页面加载后某些 ajax 调用是否正在更改 cookie,但没有找到。预渲染仍然中止。它曾经与以前的 chrome 版本一起工作得很好。

4

1 回答 1

1

您所看到的是由于 cookie 冲突。

例子:

假设a.com使用 cookie greeting=...来表示用户想要打招呼的问候语。
假设问候语设置为“你好”。我们预渲染 a.com/a.html,呈现“ greeting=hello ”。当服务器生成 a.html 时,它会从网页上的 cookie 中发出“hello”,该 cookie 正在被预渲染。

现在,在显示预渲染之前,假设 a.com 上的某个其他页面将问候语更新为“ greeting=howdy ” 接下来,假设用户导航到 a.com/a.html。预渲染将被交换。但是,它看到的“问候”cookie 的版本与现在的值不同。因此,页面仍然显示“你好”,而不是(更新的)“你好”。

在内部,它跟踪在预呈现期间暴露的所有 cookie(在 HTTP 标头或 javascript 中)。如果在显示预渲染之前修改了其中任何一个,则会使预渲染无效。

这种失效就是你观察到的。

于 2016-02-10T09:52:13.917 回答