概述参数顺序、大小写与无关参数会影响命中。本文示例统一标准化处理。正规化示例function normalize(url) {

const u = new URL(url);

u.searchParams.sort();

u.hash = '';

// 可过滤无关参数,如 utm_*

for (const k of Array.from(u.searchParams.keys())) {

if (k.startsWith('utm_')) u.searchParams.delete(k);

}

return u.origin + u.pathname + (u.search ? '?' + u.searchParams.toString() : '');

}

self.addEventListener('fetch', event => {

const keyUrl = normalize(event.request.url);

event.respondWith((async () => {

const cache = await caches.open('norm-v1');

const key = new Request(keyUrl, { headers: event.request.headers });

const cached = await cache.match(key);

if (cached) return cached;

const res = await fetch(event.request);

await cache.put(key, res.clone());

return res;

})());

});

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部