javascript - 引用外部脚本和资源而不是将它们“本地”下载到您的服务器是否安全?
问题描述
当我看到这种常见的做法时,我感到很困惑。但由于 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,什么时候应该在服务器上下载本地副本?
解决方案
是的,它是安全的。特别是对于知名的 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 应用程序。
推荐阅读
- python - Python:组合元组
- python - Google drive API 在使用 PageToken 时返回 400 Bad request
- android - 简单的应用内购买的好例子?
- c# - 从 Xamarin 的视图页面中的条目获取用户数据
- c++ - 将局部变量地址复制到类指针变量c ++
- flutter - 如何在按键时更改 TextField 的文本?
- java - junit.framework.AssertionFailedError:预期:
但是是: - c# - 有没有办法按升序对列表列表进行排序?
- sql - SQL查询使用另一个表中的相同ID从列中求和值
- reactjs - React-query:使用具有不同参数的 useInfiniteQuery 进行新查询