1

我有一个简单的标记。

<!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>
4

2 回答 2

2

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

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

于 2021-03-12T10:20:12.127 回答
0

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

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

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

就我而言,在我删除“变化”后,“预取”脚本确实从“预取缓存”加载。

于 2021-10-30T10:37:34.127 回答