检查浏览器缓存中的JS文件

15

我如何检查用户缓存中的Javascript文件。如果他在刷新页面或一段时间后访问站点,我无需再次下载该JS文件。 JS文件是否会在网站关闭后清除。


@MarkAmery,能否请您提供“时序攻击”检查解释的链接? - setec
1
@setec 这是一篇15年前的学术论文:http://sip.cs.princeton.edu/pub/webtiming.pdf。尽管它是一个隐私漏洞,但自那时以来还没有被修复。简而言之,创建一个带有`onload`和`onerror`属性的`<img>`标签,指向您感兴趣的URL,并使用JavaScript计算其中一个处理程序被调用所需的时间。如果少于几毫秒,则用户已经缓存了目标URL。 - Mark Amery
4个回答

11

一个javascript文件是否被缓存取决于你的Web服务器配置,用户浏览器配置以及你的服务器和用户之间的任何HTTP代理服务器的设置。你唯一能够控制的是如何设置你的服务器。

如果你想最大限度地提高javascript被缓存的机会,那么你的服务器需要发送正确的HTTP头信息与javascript文件一起。如何做到这一点取决于你使用的Web服务器。

以下是几个可能有所帮助的链接:

Apache - http://httpd.apache.org/docs/2.0/mod/mod_expires.html

IIS - http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0fc16fe7-be45-4033-a5aa-d7fda3c993ff.mspx?mfr=true


6

据我所知,检查Javascript文件是否被缓存仅适用于来自相同域的文件。

您可以像这样检查它:

try {
    await fetch("https://YOUR-DOMAIN.org/static/build/js/YOUR-FILE.js",
             {method:'Head',cache:'only-if-cached',mode:'same-origin'});
} catch (error) {
    console.error(error);
}

如果内容被缓存,你将会收到200的返回值,否则会抛出错误。


4

浏览器会自动管理其缓存。然而,你可以使用各种机制来控制它。

研究各种HTTP缓存头,例如:

  • Last-Modified
  • Expires
  • ETag

在客户端缓存方面,Expires头是最关键的。如果你设置一个远期的Expires头(例如10年),浏览器理论上不会再次向服务器请求该文件。当然,在文件内容更改时,你需要一种方法来更改文件名。大多数人通过向文件路径添加构建编号来管理此操作。


2

浏览器会为您处理缓存。

缓存何时清空部分取决于浏览器设置,部分取决于您发送的标头。如果您设置了一个“Expires”标头,则在其过期之前,浏览器不应重新请求该文件。阅读有关HTTP标头的信息可能会对您有所帮助。


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