奇怪知识点系列:Office 365 CDN 揭秘
在一个几乎人人都可以写作发布面向公众的时代,一个吸引眼球的标题必不可少,于是就有了这个奇怪知识点系列。其内容主要围绕我个人相对熟悉且一直从事的微软企业应用展开。目前微软企业应用也全线上云,Azure、Office 365、Dynamic 365,看似简单的云计算三个字,对于之前一直能掌控整个应用系统软硬件体系的开发者来说,是革命,是机遇。应用系统后置服务化,开发技术栈变更,用户终端形态轮回(过去二十年从 C/S 到 B/S 然后再回到现在的 C/S (Apps)),真的全都变了吗?变化中有没有不变的?为什么要变?为什么又不变?这些都值得去思考和记录。这个系列不会围绕一个产品线从头到脚评论一番,只会选择其中的某些点展开,如果某天能连成一条线,一定是巧合。
众所周知,CDN(Content Delivery Network)是为了加速静态资源文件到用户端的下发速度。在 Office 365 体系中,也存在 CDN 服务,Office 365 CDN 服务是和 SharePoint Online 订阅绑定在一起的,Office 365 CDN使用HTTP / 2协议来改善压缩和HTTP管道传输机制。
注意:Office 365 CDN 仅适用于生产(全球)云中的租户。 美国政府、中国和德国云中的租户目前不支持 Office 365 CDN。
Office 365 CDN 类型介绍
在 Office 365 CDN 上的静态资产分为两种类型:
- 公共(Public)
- 私有(Private)
故名思议,公共资产可以匿名访问,而私有资产需要确认当前用户的身份。但无论是公共资产还是私有资产,只能在 SharePoint Online 网站上引用,即只能在 *.sharepoint.com 网站范围内引用。
Office 365 CDN上的静态资产来自于 SharePint Online 网站内的资产,这些用于配置到 CDN 上的资产称为来源(Origin)
,来源是 SharePoint Online 网站内可以用 Url 访问的内容,包括:
- SharePoint 网站
- 文档库
- 文件夹
Office 365 CDN 配置管理
Office 365 CDN 的配置管理只能通过管理工具进行。包括:
- SharePoint Online Management Shell
- PnP PowerShell
- Office 365 CLI
在这里推荐 Office 365 CLI
进行配置管理,因为 Office 365 CLI
支持跨平台,而前两个基于 PowerShell 的管理工具只能在 Windows 平台上执行。基于两个 PowerShell 管理工具的配置管理请参考:
- Set up and configure the Office 365 CDN by using the SharePoint Online Management Shell
- Set up and configure the Office 365 CDN by using PnP PowerShell
注意:由于 CDN 配置是针对整个 Tenant 进行的,所以需要使用 Tenant 管理员身份登录管理工具进行配置管理。
使用 Office 365 CLI 配置管理 Office 365 CDN
安装工具
Office 365 CLI作为一个 NPM 包发布,因此,安装此工具就显得很简单,在具有 Node 包管理工具的命令行工具中(Bash,Cmder,PowerShell 等都可以)执行:
npm i -g @pnp/office365-cli
运行工具
工具安装完成后,在命令行中输入 o365
命令,回车执行进入Office 365 CLI运行时。
$ o365
o365$ _
使用 login
命令登录 Tenant 网站。
o365$ login https://yourtenantsiteurl
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code [9位字符] to authenticate.
输入 login
命令和正确的网站 url 后,命令行工具中会输出一行提示,使用浏览器打开地址: https://microsoft.com/devicelogin,之后输入 9 位字符的确认码。
确认码验证成功后会跳转到一个登录界面,这里需要输入 Tenant 管理员的用户名和密码。
在 Tenant 管理员的身份验证成功后, 命令行工具中的Office 365 CLI运行时就正式启用。
配置 CDN
Office 365 CLI 运行时登录成功后,就可以开始配置 CDN,CDN 开启和关闭都非常简单:
// 开启 Tenant 的公共 CDN 能力
spo cdn set --type Public --enabled true
// 开启 Tenant 的私有 CDN 能力
spo cdn set --type Private --enabled true
// 关闭 Tenant 的公共 CDN 能力
spo cdn set --type Public --enabled false
// 关闭 Tenant 的私有 CDN 能力
spo cdn set --type Private --enabled false
公共 CDN 能力和私有 CDN 能力可以共存,根据实际需求进行配置。
管理 CDN
在开启 CDN 功能后,还可以根据实际需求正对 CDN 进行管理。
默认情况下,公共 CDN 开启后会自动启用 3 个来源:
// 查看当前 Tenant 下所有公共来源
o365$ spo cdn origin list --type Public
*/MASTERPAGE
*/STYLE LIBRARY
*/CLIENTSIDEASSETS
而私有 CDN 开启后会自动启用 2 个来源:
// 查看当前 Tenant 下所有私有来源
o365$ spo cdn origin list --type Private
*/USERPHOTO.ASPX
*/SITEASSETS
来源前面的星号表示此 Tenant 下所有网站对应的目录内的资产都作为 CDN 静态资产发布。根据实际需求,可以对来源进行增减,使用如下命令:
// 增加新的私有来源
o365$ spo cdn origin add --type Private --origin SITES/APORTAL/SITEASSETS
// 查看所有私有来源
o365$ spo cdn origin list --type Private
*/USERPHOTO.ASPX
*/SITEASSETS
SITES/APORTAL/SITEASSETS
// 删除私有来源中的项
o365$ spo cdn origin remove --type Private --origin SITES/APORTAL/SITEASSETS
从来源发布到 CDN 上的静态资产受文件类型限制,默认运行的文件类型包含:CSS,EOT,GIF,ICO,JPEG,JPG,JS,MAP,PNG,SVG,TTF,WOFF,JSON,使用以下命令可以根据实际情况调整从来源发布到 CDN 上静态资源的文件类型。
o365$ spo cdn policy set --type Public --policy IncludeFileExtensions --value "CSS,EOT,GIF,ICO,JPEG,JPG,JS,MAP,PNG,SVG,TTF,WOFF,JSON"
Office 365 CDN 使用
经历过上面几个步骤,最后的目的是为了享有 Office 365 CDN 能力带来的优势,下面就介绍下两种模式下静态资产的引用模式以及实际测试 CDN 能力的优势。
公共 CDN 使用方式
公共 CDN 是可以匿名访问的,所以,拥有这些资产URL 的人都能访问,因此强烈建议在公共 CDN 当中存放非敏感性的常规静态资产。
在启用了 发布
功能的网站中,SharePoint的发布功能自动重新发布页面中的链接:
- 经典发布页面 HTML 响应中的 IMG/LINK/CSS URL
- 这包括作者在页面的 HTML 内容中添加的图像
- 图片库幻灯片 Web 部件图像 URL
- SPList REST API (RenderListDataAsStream) 结果中的图像字段
- 使用新的属性_ImageFieldsToTryRewriteToCdnUrls_提供以逗号分隔的字段列表
- 支持 hyperlink 字段和 PublishingImage 字段
- SharePoint 图像呈现形式
私有 CDN 使用方式
私有 CDN 由于带上了权限验证,因此使用方式就比较单一:在 SharePoint Online 的页面上,如果页面上引用了私有 CDN 来源的文档库或者文件夹对应的内容,则这些内容链接会被转换为私有 CDN 的地址,且 URL 后会带上访问令牌,浏览器在下载完页面的 HTML 内容后,再从私有 CDN 的地址下载对应的静态资源。私有 CDN 适用于既希望有权限控制且能资源加速的企业组织内的静态公共资源。
奇怪知识点总结
Office 365 CDN的配置管理为什么能上奇怪点系列?我尝试到https://medium.com/上去搜索相关文章,只有两篇,足以说明它的使用频度。我实际测试过,1M 左右的 js 文件,放在网站资产库,不开启 CDN 的下载速度在 300 毫秒左右,开启 CDN 的速度在150 毫秒,对于用户数不多的企业内的应用来说,是否开启意义不大。结合我过往的企业应用开发实施经验,绞尽脑汁为这个奇怪知识点寻找了三点最佳实践方向:
- 公共 CDN 的模式应用场景更广泛,因为不经过权限系统,所以非敏感静态资源都可以考虑使用公共 CDN 发布。
- SharePoint Online 的站点上有成千上万的用户,且网站使用频率比较高,用户地域较为分散。这种情况下为公共静态资源开启 CDN 功能。从用户角度说资源下载速度不受地域影响,从网站使用率上讲减少 SharePoint Online 站点的请求并发,这两者都能为应用提速。
- 公共 CDN 虽然没有权限验证,但是会有请求来源的验证,必须是在 *.sharepoint.com 网站上才能连接使用这些资源。所以,如果你是一个基于 SharePoint Online 提供企业应用服务的 ISV,你也可以考虑把自己提供给其他客户使用的产品相关资源文件使用公共 CDN 发布,建立版本发布管理机制,在用户端应用页面上可以直接引用同一个公共 CDN 发布的资源,这样一定程度上可以实现产品的集中交付。
这不是广告
SharePoint Online 是 Office 365 中的一个功能模块,有使用过它前身 SharePoint 的同学应该了解,SharePoint 是微软企业协同On-Premise 版本皇冠上的明珠。企业协同的核心是业务数据的收集、流转、处理、应用,因此工作流是企业应用的驱动引擎。
APortal 是为云端 SharePoint Online 打造的工作流解决方案:
- 流程设计器为企业业务数据流转驱动提供强力保障。
- 表单设计器能方便快捷定制业务表单,让技术服务业务,而不是让业务受限于技术,迎合当下的 Codeless 理念。
- 组织结构,通过部门、用户、角色三者的精妙组合,为业务数据流转提供最理想的支持。
谁用谁知道!