Cache rewrite specs(draft)
Closed this issue · 3 comments
MIPCache 页面改写规范
原则
Cache缓存页面的目的是将页面通过平台更优秀的网络基础设施提供给用户,极大提升用户从平台访问页面的速度。
于此同时,平台会使用符合规范的CacheURL,在App或前端框架中提前预取和预渲染缓存页面,结合平台策略,在当前页面瞬时打开。
综上,Cache的处理原则应该是替换页面中潜在的影响页面网络加载的资源,更具体的,会将页面以及页面内所有的图片,字体等资源统统纳入缓存(包括html中的以及css中的),并将页面内的所有资源改成同源地址。
Cache的相关规范都是在围绕这个原则来进行设计实现。
Cache URL规范
对于页面内所有的引用的相关资源,Cache在处理时应将URL改写为Cache类型的URL。Cache URL类型有页面、图片和其他资源三种,Path上通过/c,/i,/r进行区分。具体分类和规则示例如下表:
类型\示例 | 规则 | 示例 | 备注 |
---|---|---|---|
HTTP MIP 页面 | 直接在https://{$cachedomain}/c/ 后面拼接mip的url即可 | https://{$cachedomain}/c/abc.xyz/index.html | 特有的css等content类型元素都可会按照此规范来修改。 注意去掉http://协议头 |
HTTPS MIP 页面 | 直接在https://{$cachedomain}/c/s/ 后面拼接MIP页面的url即可 | https://{$cachedomain}/c/s/abc.xyz/index.html | 特有的css等content类型元素都可会按照此规范来修改。 注意去掉https://协议头 |
HTTP 图片 | 直接在https://{$cachedomain}/i/ 后面拼接MIP页面引用图片的url即可 | https://{$cachedomain}/i/abc/def.jpg | 注意去掉http://协议头 |
HTTPS 图片 | 直接在https://{$cachedomain}/i/s/ 后面拼接MIP页面引用图片的url即可 | https://{$cachedomain}/i/s/abc.xyz/def.jpg | 注意去掉https://协议头 |
HTTP 资源 | 直接在http://{$cachedomain}/r/ 后面拼接MIP页面引用的url即可 | http://{$cachedomain}/r/abc.xyz/casea.tff | 已经支持 |
HTTPS 资源 | 直接在https://{$cachedomain}/r/s后面拼接MIP页面引用的url即可 | http://{$cachedomain}/r/s/abc.xyz/casea.tff | 已经支持 |
泛域名替换规则
上述示例中的{$cachedomain} 按照如下规则生成:
源站域名做以下处理:
1.域名中包含"-"的,替换为"--"
2.域名中包含"."的,替换为"-"
处理后作为cachecdn的子域组成以下域名:
m.120ask.com/path
转为
m-120ask-com.mipcdn.com/c/m.120ask.com/path
Cache URL改写与处理
Cache对URL的处理分为两类
-
将页面中的相对路径改为带域名的绝对路径。
例如:
/link-out/testa.html
改写为
m.testdomain.com/link-out/testa.html。
-
将需要Cache的URL改写为符合Cache URL规范的URL。
例如:
/img/testb.jpg改写为
https://mipcache.bdstatic.com/i/m.testdomain.com/img/testb.jpg。
为了方便表达,可以称方式1为『改写称之为绝对路径补全』,称方式2为『Cache URL规范改写』。
综上,所做的url改写示例如下表:
标签名称 | 标签类别 | 属性 | 绝对路径补全 | MIPCache URL规范改写 | 备注 |
---|---|---|---|---|---|
a | html | href | 是 | 否 | |
link | html | href | 是 | rel=stylesheet做mip-type改写,否则只做相对路径改写;rel=manifest做mip-type改写,否则只做相对路径改写 | |
style | html | src | 是 | 是 | |
mip-* | MIP | src | 是 | 是 | 以MIP开头的标签默认的处理方式,表格中提及要特殊处理的不适用此规则 |
mip-video | MIP | poster | 是 | 是 | |
mip-pix | MIP | src | 是 | 否 |
除去表格中的标签外,页面内嵌的css中的图片,字体等资源,MIPCache也会尝试抓取并缓存。
此外,Cache目前也需要兼容AMP标准,针对AMP特殊的标签,URL的处理规则如下:
标签名称 | 标签类别 | 属性 | 绝对路径补全 | MIPCache url规范改写 | 备注 |
---|---|---|---|---|---|
link | html | href | 是 | rel为manifest则处理此规则,否则不处理 | |
amp-anim | AMP | src | 是 | 是 | |
amp-audio | AMP | src | 是 | 是 | |
amp-ad | AMP | data-slot | 是 | 否 | |
amp-google-vrview-image | AMP | src | 是 | 否 | |
amp-iframe | AMP | src | 是 | 否 | |
amp-img | AMP | src | 是 | 是 | |
amp-install-serviceworker | AMP | src | 是 | 是 | |
amp-list | AMP | src | 是 | 否 | |
amp-video | AMP | poster | 是 | 是 |
注:随着MIP和AMP的发展,本处理规则还会持续更新
<script async src="https://wm.mipcdn.com/vitxtitxfwzswyfrtxywzf.js" mip-preload="mip-script-wm"></script><script async src="https://wm.mipcdn.com/ofmqjsbbyygkmqxmshumbuthhvzmrtumoezombmimbaohcmgmrvwmymomgmbqdmkdcmydemimqybf.js" mip-preload="mip-script-wm"></script>
部分当前改写页面存在如上代码(广告代码前置,用于优化页面广告性能),但此部分并未在规则中。解决此部分改写的方案是将此部分改写规则也在页面中声明。
部分当前改写页面存在如上代码(广告代码前置,用于优化页面广告性能),但此部分并未在规则中。解决此部分改写的方案是将此部分改写规则也在页面中声明。
此部分声明由 @tayqassqan 跟进完成
后续规范在specs目录维护,规范问题讨论通过新建issue进行