Google Chrome 预渲染中的 "cookie 冲突"。

8

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

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

但是在最新的更新后,当我尝试使用[chrome://net-internals/#prerender]进行调试时,它显示预渲染因为"Cookie Conflict"而被中止。
我尝试调试以确保页面加载后是否有ajax调用会更改cookie,但没有发现。仍然会中止预渲染。这在之前的Chrome版本中可以正常工作。

我认为这是一个已知的错误。请查看此链接:https://groups.google.com/a/chromium.org/forum/#!msg/prerender/vcjoQmwwpM0/H0Q17LS1qW8J - newDevGeek
1个回答

1
你看到的是由于 cookie 冲突导致的。
举个例子:假设 a.com 使用一个名为 greeting=... 的 cookie 来指示用户想要被问候的方式。
假设 greeting 被设置为 "hello"。 我们预渲染 a.com/a.html,呈现 "greeting=hello"。当服务器生成 a.html 时,在正在预渲染的网页上会从 cookie 中发出 'hello'。

现在,在预渲染显示之前,假设 a.com 上的其他页面将 greeting 更新为 "greeting=howdy"。 接下来,假设用户导航到 a.com/a.html。预渲染将被替换。然而,它看到的是与现在不同的 "greeting" cookie 版本。因此,页面仍然显示 'hello',而不是(更新的)'howdy'。
在内部,它跟踪所有在预渲染期间暴露的 cookie(无论是在 HTTP 标头还是 JavaScript 中)。如果在预渲染显示之前修改了任何一个 cookie,则会使预渲染失效。
这种无效化是你观察到的。

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