文档说明
加速资源的引用
了解加速资源的引用方式,特别是无Referer信息的访问,好快速启动您的项目。
1.方案概览
引用方式 | 适用于 | 说明 |
普通方式 | 绝大部分网站 | 满足域名限制要求,且请求带Referer信息(一般网页默认) |
跨域方式 | 无Referer情形 | 满足域名限制要求或离线本地,但请求不带Referer信息(出于安全考虑,跨域或跨站禁用了Referer)。支持启用SRI安全模式。 |
跳转方式 | 不满足域名限制要求情形 | 不满足域名限制要求,网站域名为简易名称(不带点),本地内部解析,或为IP地址,或带端口地址。由我们的带参数引导URL跳转到客户网站,只需跳转一次。 |
简单引导 | 离线本地调试 | 每次加载当前页面大概会多加载一次,虽然很快,但还是影响体验。适用于本地调试 |
标准引导 | 想要更多资源的订阅用户 | 不限制网站域名。初次加载当前页面需要使用过渡页,需要订阅获取访问ID。 |
高级引导 | 想要不受限制的注册用户 | 不限制网站域名。初次加载当前页面需要使用过渡页,需要申请获取用户ID和访问token,需要在后端使用MD5计算签名。能满足特殊需要,但不适用于静态网页内容。 |
2.引用方式一(普通方式)
在网页里通过普通的link标签、script标签、img标签和其他媒体标签来引入css、js、image和其他媒体文件。
下面简要说明一下基本用法:
文件类型 | 扩展名 | 用法举例 |
样式文件 | css | <link type="text/css" rel="stylesheet" href="test.css"> |
JS程序文件 | js | <script src="test.js" ></script> |
图片文件 | git, jpg, jpeg, png, bmp, webp | <img src="test.png"> |
声音文件 | wav, mp3, mid, wma |
<embed height="50" width="100" src="test.mp3"> <object height="50" width="100" data="test.mp3"></object> <audio controls> <source src="test.mp3" type="audio/mpeg"> <source src="test.ogg" type="audio/ogg"> Your browser does not support this audio format. </audio> |
视频文件 | mp4, ogg, webm |
<video width="320" height="240" controls> <source src="test.mp4" type="video/mp4"> <source src="test.ogg" type="video/ogg"> Your browser does not support this video format. </video> |
如果网站使用HTTP响应头或页面META头来禁用了跨站或跨域不发送Referer信息,则可以在引入标签上添加属性“referrerpolicy”,值可为“origin”、“origin-when-cross-origin”(推荐)或“unsafe-url”,强制发送Referer。此方式不适用于非HTTP协议模式。示例如下:
<script src="test.js" referrerpolicy="origin-when-cross-origin"></script>
3.引用方式二(跨域方式)
在上述普通方式的基础上,在主标签上添加跨域属性crossorigin,值为“anonymous”(推荐)或“use-credentials”。例如:
<script src="test.js" crossorigin="anonymous"></script>
支持以下标签:<link>、<script>、<img>、<audio>、<video>。
当您的页面访问我们的跨站资源时,如果请求无Referer信息,可采用此法引用。此方法也适用于离线本地(无服务器)模式。
此方式还支持子资源完整性(Subresource Integrity,SRI)安全模式,就是强制要求浏览器验证此资源是否原始文件,没有在中途被纂改过。如果被纂改过,则不加载该资源。通过添加属性“integrity”,配合跨域属性“crossorigin”可启用。示例如下:
<script src="https://npm.webcache.cn/jquery@2.2.4/dist/jquery.min.js" integrity="sha384-rY/jv8mMhqDabXSo+UCggqKtdmBfd3qC2/KvyTDNQ6PcUJXaxK1tMepoQda4g5vB" crossorigin="anonymous"></script>
本站当前已支持CDNJS和NPM资源的SRI复制,您还可以通过第三方在线工具(SRI Hash Generator)生成。
当前互联网已充斥着各种不安全因素,推荐使用此SRI安全模式,防止您的网站被挂马。
5.引用方式四(跳转方式)
使用引导服务引导并跳转到具体网页。引导服务路径及参数如下:
1)https://webcache.cn/{scheme}/{site_domain}{page_path}{url_params}
2)https://webcache.cn/{scheme}/{version}-{access_id}-{sign}@{site_domain}[:{host_port}]{page_path}{url_params}
说明:
- {scheme} - 此为目标网站协议,可为http/https/file
- {version} - 版本号或序号,例如:2024001、2026005
- {access_id} - 用户ID或访问ID,可通过注册或订阅我们获得
- {sign} - 签名信息,由主机名(不包括端口)、用户ID和内部秘钥合成,防纂改
- {site_domain} - 此为目标网站域名。
- {host_port} - 此为目标网站的主机端口,可为空。
- {page_path} - 此为目标页面路径,可为空
- {url_params} - 此为目标页面参数,可为空
若实际目标网站域名为简易名称(不带点),还需要申请获取用户ID,并组成格式为“{name}.{access_id}.local”的伪域名。否则,虽然可跳转,但无法获取到我们的加速资源。
若实际目标网站为IP地址或加端口地址,必须使用上述第二种地址方式调用,也就是网站地址之前需要追加访问信息。访问信息可由我们的工具页面生成,或者申请由客服给出。
若实际目标页面为离线本地文件(如windows本地文件),只能以下面描述的第二种方式在离线本地过渡页加载。
此方案有两种加载方式:
1)以HTML文档类型被浏览器直接访问或被父页面容器(如iframe)引入。
2)以JS文件类型被过渡引导页的script标签引入。
URL示例如下:
https://webcache.cn/https/baidu.com
https://webcache.cn/https/www.webcache.cn/convert.html
https://webcache.cn/http/test.local/?key=12345
https://webcache.cn/http/test.1234567890ABCDEF.local/
https://webcache.cn/http/2024001-0000000000000000-f602e5c028b2b837d57dfda98f28895d@149.104.8.3:30080/test1.php
https://webcache.cn/file//C:/Users/Administrator/Documents/test.htm
跳转到目标页面后,页面地址将会被追加参数“_refererId”,值为一串比较短的数字。目标页面需要在所有引用我们的加速资源的URL上也追加该参数,但参数名为“refererId”。
新地址示例如下:
https://www.webcache.cn/convert.html?_refererId=236593
其加速资源的URL示例如下:
<script src="https://cdnjs.webstatic.cn/ajax/libs/lodash.js/4.17.21/lodash.min.js?refererId=236593"></script>
此方案可用于嵌入页面和本地调试。目前已优化此方案,可省略资源URL上的后缀参数refererId,但还是建议带上。如果要省略,则网页不能禁用referer。
4.引用方式三(简单引导)
只需在加载外部资源前,先加载此引导地址,如下:
<script src="https://webcache.cn"></script>
完整示例如下:
<script src="https://webcache.cn"></script>
<script src="https://cdnjs.webstatic.cn/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
<script src="https://npm.webcache.cn/jquery@3.7.1/dist/jquery.js"></script>
此方案每次加载当前页面大概会多加载一次,虽然很快,但还是影响体验。建议只用于离线本地调式。
若要使用在正常服务模式下,需要在引导地址标签上添加跨域属性“crossorigin”,且值必须为“use-credentials”。
注意,此引导方式下,不能在引导地址标签上添加属性“crossorigin="anonymous"”和“crossorigin”(空值)。
6.引用方式五(标准引导)
首先,需要您在我们的网站订阅我们,并获取到访问ID。
然后,您需要制作一个引导页,须为不具有实际地址的内部页,内容大致如下:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Load</title>
<script>
function callback(refererId){
document.cookie = '_refererId='+refererId;
window.location.reload();
}
</script>
<script src="https://webcache.cn/?<loadParams>"></script>
</head>
<body>
</body>
</html>
本方案需要引导器能获取到当前网页地址的主机名,故对网页有以下三种选项设置。
- 1)网页默认情况下,不要禁用referer
- 2)网页禁用了referer,需要在引导器标签上添加referrerpolicy属性,且属性值为“origin”或“origin-when-cross-origin”
- 3)网页禁用了referer,需要在引导器标签上添加crossorigin属性,且属性值为“anonymous”或“use-credentials”
另外,上述加载地址参数“loadParams”内容如下:
- 访问ID(access_id) - 可通过注册或订阅我们获取
- 版本序号(ver) - 通过我们的在线工具自主获取,或联系我们申请。
- 签名信息(sign) - 通过我们的在线工具自主生成,或联系我们申请。
- 回调参数(callback) - 用于接收引导服务传过来的“refererId”。
完整引导地址示例如下:
<script src="https://webcache.cn/?ver=2024001&access_id=0000000000000000&sign=4dacdc321a5faccaab254812606de506" referrerpolicy="origin-when-cross-origin"></script>
当此引导页加载完时,会获得一个“refererId”值,并需要设置到会话中。
然后,主页加载时需要先判断该状态参数是否有值,若没有,则输出上述引导页内容, 并结束。否则,继续正常加载,且在加速资源URL上需要追加上述参数“refererId”。
简化内容大致如下:
<script src="https://cdnjs.webstatic.cn/ajax/libs/moment.js/2.29.4/moment.min.js?<refererId>"></script>
目前已优化此方案,可省略加载器URL上的callback参数和资源URL上的refererId参数,但还是建议带上。如果要省略,则网页不能禁用referer。
6.引用方式五(高级引导,研发中)
首先,需要您在我们的网站申请您的用户ID和访问token。
然后,您需要制作一个引导页,须为不具有实际地址的内部页,内容大致如下:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Load</title>
<script>
function callback(refererId){
document.cookie = '_refererId='+refererId;
window.location.reload();
}
</script>
<script src="https://webcache.cn/load?<loadParams>"></script>
</head>
<body>
</body>
</html>
上述加载地址参数“loadParams”须在主页后端初始化时根据给定信息,并按照一定的规则生成,规则如下:
1)所需值:
- 用户ID(user_id) - 向我们申请
- 访问token(token) - 向我们申请
- 站点名称(site_name) - 您给自己网站起的名称,可为单名(符合域名主名称规则),或域名。
- 时间戳(ts) - 按中国北京时间时区计算从1970-01-01 00:00:00到现在的秒数。
2)根据上述值联合并计算MD5值,联合规则为(不包括{}):“{token}site_name{site_name}ts{ts}user_id{user_id}”
3)计算出的MD5值作为签名参数“sign”和上述4个参数一并添加到URL中。
4)还需要一个回调参数“callback”,用于接收引导服务传过来的“refererId”。
附PHP代码生成函数,如下:
<?php
function getLoadParams(){
$token = '1234567890abcdef1234567890abcdef';
$content = array(
'ts' => time(),
'user_id' => '0000000000000000',
'site_name' => 'test.local'
);
$content['sign'] = md5(implode('',array(
$token,
'site_name',
$content['site_name'],
'ts',
$content['ts'],
'user_id',
$content['user_id']
)));
$paras = [];
foreach($content as $key => $value){
$paras[] = $key.'='.urlencode($value);
}
return implode('&', $paras).'&callback=callback';
}
当此引导页加载完时,会获得一个“refererId”值,并需要设置到会话中。
然后,主页加载时需要先判断该状态参数是否有值,若没有,则输出上述引导页内容, 并结束。否则,继续正常加载,且在加速资源URL上需要追加上述参数“refererId”。
简化内容大致如下:
<script src="https://cdnjs.webstatic.cn/ajax/libs/moment.js/2.29.4/moment.min.js?<refererId>"></script>
此方案目前正在研发中,推荐高级用户使用。未来满足于收费用户。
本用法介绍完毕!当前部分扩展用法正在研发中,有变动时,将及时更新。
更新时间:2024.10.31