主要观点:曾经从公共 CDN 加载脚本和样式是“最佳实践”,可提速、优化缓存和降低成本,但如今成了安全、隐私和稳定性问题的根源,如今最佳方案是自我托管内容和依赖项,用自己的缓存 CDN 提升性能。
关键信息:
- 公共 CDN 曾带来共享缓存等好处,如提升缓存、减少加载时间和带宽,但如今缓存不再共享,HTTP/2 也改变了其优势。
- 安全方面,存在远程代码执行等漏洞,如 cdnjs 被曝漏洞,可能导致账号被盗等严重后果。
- 隐私方面,从第三方加载资源会泄露用户信息,如 Referer 头包含网站域名等。
- 可靠性方面,CDN 可能出现宕机、访问受限、错误等情况,且依赖公共 CDN 无正式保障和支持。
- 性能方面,公共 CDN 加载资源未捆绑,压缩和树摇效果不佳。
重要细节: - 公共 CDN 缓存分区从 2020 年起在各主流浏览器默认实行,HTTP/2 支持单连接并行流使跨域资源加载优势消失。
- 安全漏洞曾被研究者发现并修复,攻击者也利用过共享第三方脚本,虽未出现重大恶意接管事件,但不能排除过去被利用的可能。
- 缓存反向代理服务如 Cloudflare 等可提供缓存等多种功能,且易于迁移,比公共 CDN 更可靠。
- 应使前端对资源加载失败有弹性,减少对非必要子资源的依赖,可通过异步脚本加载等方式提升应用性能。
- Subresource Integrity 虽能验证 CDN 内容,但仍不如自我托管和缓存有效,且存在诸多问题。
- IPFS 有望成为未来静态内容分发的更好解决方案,但目前仍不成熟。
- 承认公共 CDN 在原型设计等方面有小用处,但仍应尽量避免在生产应用中使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。