0

我想从使用策略令牌作为 URL 参数的安全 CDN 缓存资产。例如:www.cdn.com/image.png?Policy=AAAAA&Key-Pair-Id=BBBBB 如果我重新访问该站点,我想从缓存中获取资产,即使我有不同的策略令牌和 Key-Pair-Id。例如:www.cdn.com/image.png?Policy=CCCCC&Key-Pair-Id=DDDDD

如果我在服务人员中使用此代码:

workbox.routing.registerRoute(
    /^(http(s)?:)?\/\/www\.cdn\.com.*/,
    workbox.strategies.staleWhileRevalidate()
);

它在缓存中找不到响应并进入网络。我希望它通过没有 URL 参数的 URL 匹配(即使 Policy=CCCCC&Key-Pair-Id=DDDDD 实际上不是有效的策略)。只需查看是否www.cdn.com/image.png存在并检索它。

4

1 回答 1

2

我通过使用自定义处理程序找到了解决方案:

workbox.routing.registerRoute(
    /^(http(s)?:)?\/\/www\.cdn\.com.*/,
    ({url, event}) => {
        return caches.open(`${prefix}-${runtime}-${suffix}`).then((cache) => {
            const customRequest = `${url.origin}${url.pathname}`;
            return cache.match(customRequest).then((cacheRes) => {
                if (cacheRes) {
                    return cacheRes;
                }
                return fetch(event.request).then((fetchRes) => {
                    cache.put(customRequest, fetchRes.clone());
                    return fetchRes;
                });
            });
        });
    }
);
于 2017-12-25T06:30:28.587 回答