【发布时间】:2020-11-26 20:15:30
【问题描述】:
我有一个页面重定向到另一个页面:
//www.domainthatredirect.com/mypage
前往:
//www.finaldomain.com/mypage
我试图弄清楚下面的预渲染标记将如何表现:
<link rel="prerender" href="//www.domainthatredirect.com/mypage">
浏览器会跟随重定向并预呈现最终页面吗?
【问题讨论】:
我有一个页面重定向到另一个页面:
//www.domainthatredirect.com/mypage
前往:
//www.finaldomain.com/mypage
我试图弄清楚下面的预渲染标记将如何表现:
<link rel="prerender" href="//www.domainthatredirect.com/mypage">
浏览器会跟随重定向并预呈现最终页面吗?
【问题讨论】:
免责声明:我没有在任何现代浏览器中测试过您的场景。
¯_(ツ)_/¯
规范没有说明如果带有预加载或预渲染提示的链接资源需要遵循重定向,UA 应该做什么。
<link rel="prerender" 的行为被指定为in the WHATWG HTML Living Specification(强调我的):
https://html.spec.whatwg.org/multipage/links.html#link-type-prerender
[...]
prerender关键字表示下一次导航可能需要指定的资源,因此不仅可以抢先获取资源,还可以对其进行处理,例如:通过获取其子资源或执行一些渲染。 用户代理必须实现资源提示中描述的prerender关键字的处理模型。
链接的资源提示规范位于 W3C 的网站上,并且(截至 2020 年 11 月)仍处于编辑草稿阶段(因此它还不是规范)。
https://w3c.github.io/resource-hints/#prerender
prerender链接关系类型用于标识下一次导航可能需要的资源,并且用户代理应该获取并执行该资源,以便用户代理可以在请求资源后提供更快的响应未来。[...]
用户代理可能:
[...]
由于高成本或资源要求而放弃预渲染 - 例如高 CPU 或内存使用率、昂贵的数据访问等。
由于获取的内容的类型或属性而放弃预呈现:[...]
用户代理可能会实施其他策略
如果我是隐私意识网络浏览器供应商1 的 PM,我只会预加载和/或预渲染来自同一来源的页面2 作为源网页,这意味着任何指向不同来源的 URI - 或者如果同源请求导致 HTTP 重定向到异地资源 - 则不会遵循链接(或重定向)。
也就是说,请记住,<link rel="preconnect"、<link rel="prefetch"、<link rel="preload" 和 <link rel="prerender" 都只是对 UA 的提示。您不得要求或假设浏览器会遵守这些提示。
1Apple 和 Mozilla 显然都是注重隐私的浏览器供应商,Apple 垄断了 iOS 浏览器。谷歌很乐意告诉你他们是在保护用户的隐私,但他们的商业模式意味着他们存在利益冲突。 Microsoft 的 Edge,尽管现在基于 Chromium并且,因为 Microsoft 与 Apple 一样是平台供应商,但没有强烈的动机监视通过用户的习惯获利,@987654327 @。
2“原点”是( URI Scheme / Protocol ) + ( Host Address ) + ( Port ) 的元组。从概念上讲,每个 Origin 都类似于一个单独的“网站”(尽管通常可以通过不同的主机名和端口号访问同一个网站,但在当前的同源/跨源规则下这是不允许的,以保护用户免受恶意网站的侵害。See RFC 6454 for more details .
【讨论】: