首页 > 解决方案 > 引用外部脚本和资源而不是将它们“本地”下载到您的服务器是否安全?

问题描述

当我看到这种常见的做法时,我感到很困惑。但由于 Web 开发不是我的主要领域,我不知道这是否是不好的做法,是否具有真正的优势或无关紧要。

例如,我发现很多:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

<script src="https://aframe.io/releases/1.2.0/aframe.min.js"></script>

<script src="https://cdn.jsdelivr.net/gh/donmccurdy/aframe-extras@v6.1.1/dist/aframe-extras.min.js"></script>

<script src="https://rawgit.com/rdub80/aframe-gui/master/dist/aframe-gui.min.js"></script>

<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.3/build/grids-responsive-min.css">

我经常提到的优点是缓存。例如,如果用户导航到使用jquery它的页面,则不必为其他网站再次获取它。

但是,我认为这是为您的站点引入了许多外部依赖项。这些托管站点/CDN 中的任何一个都出现故障或变慢,并且您的站点出现故障。我个人认为这是一个巨大的缺点,远远超过了缓存的好处。

我看到的另一个大问题是引用master而不是特定版本。随着远程站点上的任何更新,您的站点可能会变得无法使用。

什么时候应该引用外部 CDN,什么时候应该在服务器上下载本地副本?

标签: javascriptnode.jsaframe

解决方案


是的,它是安全的。特别是对于知名的 CDN 服务。您将从缓存中受益。此外,CDN 将流量引导到离用户最近的机器上,从而实现更快的下载和更低的延迟。您可以免费获得复制成本高昂的基础设施。

信誉良好的 CDN 出现故障的情况很少见。可能比一般的 Web 托管服务更罕见。

发布版本的 URL 永远不会改变。在某些情况下,技术上它们可以,但实际上不会发生,除非项目管理不善或在非常特殊的情况下(例如,对关键错误的热修复)。

https://aframe.io/releases/1.2.0/aframe.min.js将始终指向同一个文件。

我永远不会将您的代码指向 master 而是将其锁定到特定的提交(请参阅提交列表以获取链接)。例如:https ://cdn.jsdelivr.net/gh/aframevr/aframe@52136de6a863f32d8cb806b65c3c3223f6b0f8a3/dist/aframe-master.min.js

Git 提交是不可变的,构建永远不会改变。

您始终可以获取所有依赖项,将它们捆绑在一个文件中并自己托管它们。有时是必要的:例如,在具有外部访问限制的网络中提供的 Web 应用程序。


推荐阅读