【问题标题】:link prefetch not working properly, script is fetched again on navigation链接预取无法正常工作,导航时再次获取脚本
【发布时间】:2021-10-30 18:43:09
【问题描述】:

我有一个简单的标记。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="prefetch" href="page2.html">
    <link as="script" rel="prefetch" href="./src/script2.js">
</head>
<body>
    <p>Let's check</p>
    <a href="page2.html">Go to page 2 where script2 is there</a>
    <script src="./src/script1.js"></script>
</body>
</html>

我在这里预取第二个脚本 script2.js。它已成功预取,但是当我单击第 2 页链接时,我有我的脚本标记 script2.js,再次下载了 script2,它没有从预取缓存中获取它。

这是page2.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>This is page 2</p>
    <script src="./src/script2.js"></script>
</body>
</html>

【问题讨论】:

    标签: javascript html link-prefetch


    【解决方案1】:

    有类似的问题,原因是我在谷歌浏览器中禁用了缓存。

    您可以在此答案https://stackoverflow.com/a/7000899/2992661 上查看如何在 Chrome DevTools 中禁用/启用缓存

    【讨论】:

    • 我也面临同样的问题。但在我的情况下,禁用缓存选项未启用,那么完善也不起作用。还有其他选择吗?
    • 确保您的响应 Cache-Control 未设置为 no-cache
    【解决方案2】:

    我遇到这个问题已经有一段时间了,只是知道 HTTP 标头 VARY 会损害预取缓存。查看 MDN 关于 VARY 的描述。

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary

    Vary 超文本传输​​协议 (HTTP) 响应标头确定如何匹配未来的请求标头。需要此信息来决定是否可以提供缓存的响应,而不是从源服务器请求新的响应。服务器使用此响应标头来指示它在内容协商算法中选择资源表示时使用的标头。

    在我的例子中,在我删除“vary”之后,“预取”脚本确实从“预取缓存”中加载。

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2020-08-05
      • 1970-01-01
      • 2016-10-16
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多