сделать запросы кеша кросс-исходных с помощью регулярного выражения - PullRequest
0 голосов
/ 24 января 2020

Я хочу кэшировать все json ресурсы в каталоге на cdn моих сайтов с рабочим сервисом workbox

url ресурсов:

https://cdn.example.com/mydir/*.json

и мой сервисный работник находится по адресу:

https://example.com/service-worker.js

я написал свой код кэша, как показано ниже

workbox.routing.registerRoute(
    /mydir\/.+\.json$/,
    new workbox.strategies.CacheFirst({
        plugins: [
            new workbox.cacheableResponse.Plugin({
                statuses: [0, 200]
            })
        ]
    })
);

, но я получаю эту ошибку из рабочего ящика:

The regular expression '/mydir\/.+\.json$/' only partially matched against the cross-origin URL 'https://cdn.example.com/mydir/test.json'. RegExpRoute's will only handle cross-origin requests if they match the entire URL.

как я могу кэшировать эти ресурсы в моем сервисном работнике ? есть идеи?

Ответы [ 2 ]

1 голос
/ 25 января 2020

Вы должны настроить свое регулярное выражение так, чтобы оно соответствовало всему домену. Немного более многословно, но оно гарантирует, что вы действительно хотите кешировать то и то из точного домена.

Так что пути (/mydir/bla/blu/bla.json) недостаточно, вместо этого сопоставить весь адрес (https://sub.domain.com/mydir/bla/blu/bla.json).

0 голосов
/ 25 января 2020

я нашел свой ответ при маршрутизации worbox: c:

Однако для запросов из разных источников регулярные выражения должны соответствовать началу URL-адреса. Причина этого заключается в том, что маловероятно, что с помощью регулярного выражения new RegExp('/styles/.*\\.css') вы намеревались сопоставлять сторонние CSS файлы.

https://cdn.third-party-site.com/styles/main.css
https://cdn.third-party-site.com/styles/nested/file.css
https://cdn.third-party-site.com/nested/styles/directory.css

Если вы действительно хотите такое поведение, вам просто нужно убедиться, что регулярное выражение соответствует началу URL. Если бы мы хотели сопоставить запросы на https://cdn.third-party-site.com, мы могли бы использовать регулярное выражение new RegExp('https://cdn\\.third-party-site\\.com.*/styles/.*\\.css')

https://cdn.third-party-site.com/styles/main.css
https://cdn.third-party-site.com/styles/nested/file.css
https://cdn.third-party-site.com/nested/styles/directory.css

, поэтому я изменил свое регулярное выражение маршрутизации на:

/^https:\/\/cdn\.example\.com\/mydir\/.+\.json$/

и теперь работает кэширование на рабочем месте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...