用程序猿视野看公共 CDN(安全性、易用性、国内最需要的 SRI 等等),还看见了各大厂商对公共资源服务的态度。(表格一目了然的比较方式,多地均值测试数据)

2018-07-31 19:04:12 +08:00
 cydian

多方面分析国内外公开的 CDN

==原创:Cydia·Rice (可能存在表达错误或者测试失误,请耐心提问或者指出错误),转载需注明==

==部分功能未参与此次分析,你可以在下面的评论提出来。部分分析不到位,请耐心指出,切勿大肆吐槽。==

多方便分析了这些 CDN,各有利弊。公开的静态资源库是本次分析的重点,两大厂的自建 CDN 也加入本次分析。从中,我们或许可以了解哪些 CDN 比较可靠,哪些 CDN 服务的内容或区域更加适合我们。

参与分析的 CDN

由于第二个 CDN 官网未有名称,根据域名,暂且和同域名的图床同名。BootCDN 官网不稳定(因为引用了自家的 CDN 啊,所以----)。JSDelivr 因部分地区 algolia 搜索框加载慢,官网体验不佳。

CDN 服务

绿色的 CDN 服务较多。其中,公开 CDN-SM.MS 和 75CDN,较其他 CDN,提供更多服务。自建 CDN 的服务内容主要看源站了,这里不做比较。

CDN 资源来源

绿色表明资源多,有些相当少,百度中规中矩。(对于国内的公共 CDN 来源并不唯一,这里注明主要来源。大多数都提供了“申请添加资源”功能,但只有 75CDN 能够及时响应并添加或手动更新,其他的一般申请都不了了之。)

公开 CDN 域名、链接、证书安全性

百度、BootCDN、CDNJS、Microsoft 的 CDN 域名或与主服务的证书一致,或为可自动续期的证书。理论上,上述 CDN 的 HTTPS 证书可得到保障。(我没有歧视证书的不同=.= )。也可以从中看出,多数公开 CDN 均使用了泛域名证书。

SM.MS,CDNJS,JSDelivr 采用了更安全的策略( Use HTTPS-HTTPS only 指 HTTP 不会跳转到 HTTPS,但 HTTPS 访问后不可降级,将会带上 strict-transport-security 头; SM.MS 的安全策略颇为奇怪,部分 CDN 服务域名使用 Use HTTPS-HTTPS only,部分 CDN 服务域名 HTTPS 和 HTTP 可任意跳转; JSDelivr 将在 April 31st 启用 HTST,不再提供 HTTP,HTTP 强制跳转 HTTPS ;腾讯海外 CDN 至今仍未提供强制 HTTPS 服务)。

我们还可以看出,直接提供 SRI 服务的有 75CDN (官网需按照指示开启 SRI,复制 link 或 script 标签时自动添加)。SRI 是浏览器的一种安全策略,防止第三方(中间人?拉光纤的?)篡改 CDN 文件内容。Github 于 September 19, 2015 已完成 Github 网页的 SRI 改造,加强 Github 的安全性。SRI 并非只有官方可以提供,我们可以手动根据 CDN 静态链接来获取 SRI (麻烦一点=.= )。

不要认为 SRI 多此一举,你可是在国内环境。JSDelivr 约半年前,国内 CDN 被其服务商投毒,后紧急撤回。BootCDN 已多次反馈各地 CDN 被劫持,并要求升级为 HTTPS。

国内外 IP 数和 PING 的均值

不要还没看完就认为我歧视那些 IP 少的 CDN,CDN 的质量和 IP 数无直接关联。图中的 IP 数,绿色为解析 IP 和其解析地所匹配,红色则为不匹配(国内解析到国外,反之亦然)。后面为对应的均值 PING。SM.MS\75CDN\JSDelivr\又拍 CDN 表现突出,国内外均能正常解析至就近 IP,所以其 PING 值也较低。

实际文件测试&CDN 路径比较&问题

说明:非单机测试,均为多地服务器测试,均为均值。测试时前 5 次测试值放弃,保证 CDN 已取回文件,减少源站的干扰。“-”值为无该文件。除 CDNJS 取回的文件大小为 450KB 外,其他测试的 CDN 取回的文件为 element4.5 版本的 index.js ( 525.854KB )。新浪 CDN 未能测试到 element 的 index.js 文件,但在查询库时,部分 CDN 文件存在编码错误(已排除本地问题和引用问题)。

同步 CDNJS 库的 CDN 路径相同,开发时便于某些特殊操作。

可以看出,0.5MB 的 JS,CDNJS 最慢,其他表现差异不明显。JSDelivr 因压缩方式不同,实际传回文件更小。

总结

==CDN 无好坏之分,分析只是为了寻找更合适的 CDN 服务。每一个 CDN 的提供商都不容易。我们也可以从中看到某些大厂,对于公共 CDN 的服务态度。==

强调

==原创:Cydia·Rice (可能存在表达错误或者测试失误,请耐心提问或者指出错误),转载需注明==

==部分功能未参与此次分析,你可以在下面的评论提出来。部分分析不到位,请耐心指出,切勿大肆吐槽。==

10073 次点击
所在节点    程序员
37 条回复
bequt
2018-08-01 00:53:01 +08:00
楼主用什么 ping 这些 cdn 的?
bequt
2018-08-01 00:54:44 +08:00
138 个探测点(完成 138 个)最快新加坡 <1ms 最慢浙江温州[电信] 248ms 平均 22.8ms cdnjs.loli.net
128 个探测点(完成 128 个)最快美国 <1ms 最慢贵州兴义[电信] 282ms 平均 16.1ms cdn.jsdelivr.net
128 个探测点(完成 128 个)最快重庆[联通] <1ms 最慢美国纽约 429ms 平均 49.3ms cdn.bootcss.com
137 个探测点(完成 137 个)最快美国洛杉矶 <1ms 最慢江苏镇江[电信] 270ms 平均 33.3ms lib.baomitu.com

说实话,楼上说的 JSDelivr 真不错
Loyalsoldier
2018-08-01 01:04:38 +08:00
JSDelivr 是最好的
Marfal
2018-08-01 01:28:49 +08:00
JSDeliver 好像国内是和网宿合作的,国外更是相当好,推荐!
diggerdu
2018-08-01 04:24:28 +08:00
请问有哪些支持 websocket 呢
cydian
2018-08-01 07:14:27 +08:00
@bequt 我和你都使用过同一个测试网站( ping.china....)。文中 ping 值数据,区分海内外,且为均值。
cydian
2018-08-01 07:16:42 +08:00
@Marfal 暂不清楚国内是否和网宿合作。根据收集的资料来看,JSDelivr 的国内投毒事件就是它干的?具体情况不知。找时间看下 cname。
isCyan
2018-08-01 11:45:33 +08:00
@cydian JSDelivr 是和 Quatil 合作的,Quantil 是网宿境外子公司。投毒这种事,可能是网宿或者运营商干的。网宿在国内 CDN 行业的地位就不需要我说了
cydian
2018-08-01 12:14:43 +08:00
@isCyan 可否分析下网宿在国内 CDN 的地位?
比较少听说,但还是希望了解下。
Coioidea
2018-08-01 18:15:59 +08:00
应该加入 combo (文件拼接)分析
cydian
2018-08-01 18:55:45 +08:00
@Coioidea 已经计划在下次的分析中,感谢(❁´ω`❁)
cydian
2018-08-05 22:15:05 +08:00
修正:JSDelivr 的 SRI 为半支持。下次分析重新分析所有 CDN 的 SRI 服务。
感谢各位的收藏。
Showfom
2018-08-09 03:57:43 +08:00
@cydiansm.ms 没提供过的 CDN 啊,不然你就写 loli.net 提供的好了- - 国外节点用的 cloudflare 理论上和 cdnjs 官方差不多效果
cydian
2018-08-09 07:12:46 +08:00
@Showfom 哥,文首我说了 loli 的 cdn 没有官方名字,我就跟图床同名了。。。评论中也说了是 loli 提供的呢!
Showfom
2018-08-09 12:40:23 +08:00
@cydian 官方名字我说了算的 你就写烧饼博客吧
cydian
2018-08-09 12:52:10 +08:00
@Showfom 哇,没想到你就是那个大神。抱歉抱歉,刚刚冒犯了。下次订正。
biglee0304
2018-09-14 19:40:53 +08:00
连网宿都没有啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/475746

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX