【问题标题】:How to force browsers to always cache static content如何强制浏览器始终缓存静态内容
【发布时间】:2014-08-30 18:36:33
【问题描述】:

我有一个从file:// 方案提供的 html 文件,我希望始终缓存来自 CDN 的静态引导程序/jquery。 IE。一旦第一次下载它们,我希望浏览器在我清除缓存之前永远不会执行网络请求。

<head>
    <link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" />
</head>

<body>
    <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
</body>

有没有办法实现这种行为?也许通过在代码或浏览器设置(Chrome、FF)中指定一些属性。我不想将内容保留在我的 html 旁边。

【问题讨论】:

    标签: html caching browser-cache static-content


    【解决方案1】:

    通过file:// 加载的内容不通过 HTTP 传递。缓存机制是 HTTP 的一部分,因此如果您想要缓存工作,您需要使用本地服务器,例如 node.js。

    【讨论】:

    • 我不明白传输协议如何影响代理缓存。你能详细说明一下吗?这是否意味着通过 http(s) 以外的协议传递的内容永远不会被缓存?
    • 如果您正在加载本地文件,但您没有使用任何传输协议,您只是将文件加载到浏览器中。提供缓存机制的是传输协议本身。浏览器询问服务器“x.html 是否与我的版本不同?”如果服务器显示“304”表示“否,请使用本地缓存副本”。在您的情况下,没有可以与之交谈的服务器。缓存机制是 HTTP 的一部分,没有使用,因此浏览器无法缓存您的本地文件。因此,它每次都将其视为新副本。
    • 我不关心浏览器是否缓存我的本地文件,但我关心的是使用 http(s) 协议在内部引用的资源。
    • 只要主页不是通过 HTTP 传递的,任何附加的资源都不会被缓存管理。您最好安装 node.js 并通过 HTTP 提供您自己的本地文件。