async function handleRequest(request) { // 获取 Referer const referer = request.headers.get('Referer'); // Referer 为空,禁止访问 if (!referer) { return new Response(null, { status: 403 }); } // 设置 Referer 白名单 const urlInfo = new URL(request.url); const refererRegExp = new RegExp(`^https?:\\/\\/${urlInfo.hostname}\\/t-[0-9a-z]{10}\\/.*`); // Referer 不在白名单,禁止访问 if (!refererRegExp.test(referer)) { return new Response(null, { status: 403 }); } // 正常请求,访问 EdgeOne 节点缓存或回源 return fetch(request);}addEventListener('fetch', event => { // 当函数代码抛出未处理的异常时,边缘函数会将此请求转发回源站 event.passThroughOnException(); event.respondWith(handleRequest(event.request));});
一、示例预览
在 PC 端与移动端的浏览器地址栏中输入匹配到边缘函数触发规则的 URL(如:https://example.com/images/ef-1.jpeg),即可预览到示例效果。
·HTTP 请求头 Referer 为 https://example.com/t-0123456789/page,边缘函数正常响应图片。
·HTTP 请求头 Referer 不在白名单,边缘函数识别为盗链并响应 403 状态码。
二、相关参考
·Runtime APIs: Fetch
·Runtime APIs: Headers
·Runtime APIs: Response