近期发现正在使用的 CDN 每次加载都异常缓慢,不仅 JS 资源都未被缓存,协议还是 http 1.1,严重影响体验。打算更换 CDN 服务时,发现正在使用的服务提供商被列为被攻击名单中,资源可能会出现投毒等情况。没想到使用了大厂的 CDN 服务也会出现这种问题(说明还不够大~~~)
国外
虽然推荐的都是大厂稳定的服务,但是仍建议做好资源完整性的验证,在资源引入时填写 SRI 哈希
访问较慢,稳定安全优先
测速来源:https://www.itdog.cn/tcping/ ,
Tcping,均使用443端口。测速时间:2024/09/27
| 组织 | 域名 | 协议 | 平均速度(https) |
注意事项 |
|---|---|---|---|---|
| cloudflare.com | cdnjs.cloudflare.com | h2 |
国内: 528 ms国外: 4 ms |
1. 同步 cdnjs,进入复制即可 2. 默认缓存时间 1 年 3. 资源并非完全同步 npm,对资源有要求。若资源未被收录可在该项目提 PR cdnjs/packages |
| ⭐️ jsdelivr | cdn.jsdelivr.net | h2 |
国内: 274 ms国外: 15 ms |
同步 npm js,默认缓存一年,支持 esm 语法: https://cdn.jsdelivr.net/npm/package@version/file 示例:https://cdn.jsdelivr.net/npm/jquery@3.6.4/dist/jquery.min.js |
| Michael Jackson | unpkg.com | h2 |
国内:346 ms 国外: 3 ms |
同步 npm js,默认缓存一年(建议通过语法来获取包内容) 语法: https://unpkg.com/:package@:version/:file 示例:https://unpkg.com/react@latest/umd/react.production.min.js 通过 /any/file?meta 可获取元数据,例如文件 integrity 或 size 等信息,示例:react@18.0.3 通过 ?module 获取 ES 版本 |
国内 - 大厂
虽有大厂背书,生产仍需谨慎使用,做好完整性的验证。
| 组织 | 域名 | 协议 | 平均速度(https) |
注意事项 |
|---|---|---|---|---|
| 又拍云 | s4.zstatic.net | h2 |
国内: 22 ms国外: 27 ms |
同步 cdnjs(又拍云赞助,相当于国内 cdn js,访问站点搜索资源)使用 又拍云提供的 SRI Hash 生成器 |
| 知乎 | unpkg.zhihu.com unpkg.zhimg.com |
h3 |
国内: 6 ms 国外: 21 ms |
理论同步 unpkg.com,可能会有资源同步问题(维护未知),腾讯云 CDN 服务 使用同 unpkg 替换域名即可:https://unpkg.zhimg.com/react@latest/umd/react.production.min.js |
不稳定,且有风险的 CDN,资源无缓存,不建议使用,仍在使用的建议更换
相关文章:
Polyfill supply chain attack hits 100K+ sites > https://web.archive.org/web/20240229113710/https://github.com/polyfillpolyfill/polyfill-service/issues/2834 > https://www.v2ex.com/t/1053497
bootcdnstaticfile CDN
三方自建
稳定性未知,不建议生产项目中使用,注意验证资源的完整性
| 组织 | 域名 | 协议 | 平均速度(https) |
注意事项 |
|---|---|---|---|---|
| ⭐️7ED Services | use.sevencdn.com | h2 |
国内: 5 ms 国外: 281 ms |
同步 cdnjs,将域名替换 use.sevencdn.com 即可 示例:https://use.sevencdn.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.min.js |
| jsdelivr 镜像站 | cdn.jsdmirror.com | h2 |
国内: 31 ms 国外: 83 ms |
jsdelivr 的国内镜像站,将域名 cdn.jsdelivr.net 替换为 cdn.jsdmirror.com 境内 腾讯云 Edgeone,境外 CF |
| webcache | cdnjs.webstatic.cn | h2 |
国内: 22 ms 国外: 186 ms |
支持 cdnjs 和 unpkg.com,使用 阿里云 CDN cdn js: https://cdnjs.webstatic.cn/ajax/libs/:package/:version/:file unpkg:https://npm.webcache.cn/:package@:version/:file |
| 渺软CDN | https://jsd.onmicrosoft.cn (jsDelivr) https://npm.onmicrosoft.cn ( UNPKG) https://cdnjs.onmicrosoft.cn ( cdnjs) |
h1.1 |
国内: 43 ms 国外: 130 ms |
根据不同的域名选择不同的服务,使用 cloudflare CDN |
Subresource Integrity
通过在资源引用标签(如 <script> 或 <link>)中添加 integrity 属性,来确保加载的外部资源(如脚本或样式表)在传输过程中未被篡改
可在 SRI Hash Generator 中生成相应的
Hash值
在 script 中使用
对于跨源资源共享(CORS)的资源需要配置 crossorigin,anonymous、use-credentials 或 空值,推荐 anonymous。 同源资源可无需配置
<script
crossorigin="anonymous"
src="https://s4.zstatic.net/ajax/libs/react/18.3.1/umd/react.development.js"
integrity="sha512-YFI6ChaPQ5hH9o8Q4n5ZzDHrhrwZ3dhgZSQ2JC/pgmYuD0QtG0iwQgfFa1J+o4jvklsKBupcHz5Tx1yqa25FFQ=="
></script>
























