惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
I
InfoQ
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
Recent Announcements
Recent Announcements
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
Docker
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
博客园 - Franky
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog RSS Feed
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
月光博客
月光博客
罗磊的独立博客

奕奕 Blog

奕奕 Blog: 把博客排版整理了一遍 奕奕 Blog: 「纯属虚构」2026年度最佳小作文《我的女友XX》 奕奕 Blog: 我给公司的保洁阿姨缴纳社保了 法国和西班牙能在世界杯决赛相遇吗? 奕奕 Blog: 法国和西班牙能在世界杯决赛相遇吗? OpenViking 记忆提取挂了三天,最后发现是模型太聪明 奕奕 Blog: OpenViking 记忆提取挂了三天,最后发现是模型太聪明 Hermes Mini App 监控面板开发实录 奕奕 Blog: Hermes Mini App 监控面板开发实录 OCI ARM 实例的 iowait 假象 奕奕 Blog: OCI ARM 实例的 iowait 假象 当“家”的重担,悄然落在肩头 奕奕 Blog: 当“家”的重担,悄然落在肩头 我的抖音号被“永封” 奕奕 Blog: 我的抖音号被“永封” 鱼缸炸缸风险评估 奕奕 Blog: 鱼缸炸缸风险评估 烟雨西北 奕奕 Blog: 烟雨西北 三色发糕制作教程 奕奕 Blog: 三色发糕制作教程 QQ官方机器人无需审核快速发布正式版 奕奕 Blog: QQ官方机器人无需审核快速发布正式版 win11代理设置劫持--自动打开“使用设置脚本” 奕奕 Blog: win11代理设置劫持--自动打开“使用设置脚本” AI模型的Token到底是什么 奕奕 Blog: AI模型的Token到底是什么 为什么我选择放弃"暗色模式切换按钮" 奕奕 Blog: 为什么我选择放弃"暗色模式切换按钮" QQ机器人插件
奕奕 Blog: 利用CDN边缘函数缓存外部文件
奕奕Blog · 2025-02-21 · via 奕奕 Blog

因为一些特殊原因,我有一个比较小众的需求:希望利用CDN的边缘函数来缓存一个外部文件。可能大多数人用不到,但还是记录一下这个思路。

最开始的想法很简单,通过边缘函数实现一个跳转。当用户访问 a.com/logo.jpg 时,自动跳转到 b.com/logo.jpg。这样就能在不存储该文件的情况下,依然使用 a.com/logo.jpg 的路径访问它。

如果只是跳转,访问体验其实不太好,毕竟多了一次重定向。于是想到,是否可以直接让 CDN 缓存 b.com/logo.jpg,这样访问 a.com/logo.jpg 时,就能直接从缓存中获取,而不用每次都请求源站。

最终实现的代码如下:


// 目标图片地址
const targetUrl = 'https://b.com/logo.jpg';

async function handleRequest(request) {
    const url = new URL(request.url);

    if (url.pathname === '/logo.jpg') {
        // 构造新请求,避免原始请求的 headers 影响缓存
        const newRequest = new Request(targetUrl, {
            headers: new Headers({
                'User-Agent': request.headers.get('User-Agent')
            })
        });

        // 从源站获取图片
        const response = await fetch(newRequest);

        // 创建一个可缓存的响应
        const cachedResponse = new Response(response.body, {
            status: response.status,
            headers: {
                'Content-Type': response.headers.get('Content-Type'),
                'Cache-Control': 'public, max-age=86400' // 缓存 1 天
            }
        });

        return cachedResponse;
    }

    // 其他请求正常处理
    return fetch(request);
}

addEventListener('fetch', event => {
    event.respondWith(handleRequest(event.request));
});

这样,每次访问 a.com/logo.png,CDN 都会从缓存中直接返回图片,提高访问速度。如果缓存过期,CDN 会自动从 b.com 获取最新的文件并重新缓存。

整体来说,这个方法适用于那些无法在源站存储文件,但又希望使用特定域名访问的场景。虽然是个小众需求,但或许对部分人来说有参考价值。

版权所属:奕奕博客 版权