Неверная кодировка URL перенаправления при использовании ServiceWorker fetch. Как я могу это исправить? - PullRequest
0 голосов
/ 30 октября 2019

У меня проблема с ServiceWorker. Он работает нормально для всех запросов, кроме перенаправления 301. Я использую кириллические URL-адреса, но он работает без ServiceWorker.

Когда я отправляю запрос без ServiceWorker, я получаю правильный ответ с правильным URL для перенаправления. Когда я использую ServiceWorker, он отвечает неверным URL. Я отвечаю « / ÐнР° Ñение-Ñл овР° - ¨¨Ð¨ÑÑ-в-ÑÐ »Ð¾Ð²Ð ° Ñе-Ð £ ÑÐ ° ковР° », но это ISO-8859-1, ноЯ не знаю, где это появляется, в ответ я вижу UTF-8 и sw.js, сохраненные в UTF-8). Что происходит? Пожалуйста, помогите и сообщите, как я могу это исправить? Что мне нужно прочитать?

Я использую PHP и NGINX.

Заранее всем благодарен за помощь!

Без ServiceWorker:

Запрос:

Request URL: https://glosum.ru/%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BB%D0%BE%D0%B2%D0%B0--%D1%88%D0%BE%D1%81%D1%82-%D0%B2-%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D0%B5-%D0%A3%D1%88%D0%B0%D0%BA%D0%BE%D0%B2%D0%B0
Request Method: GET
Status Code: 301 
Remote Address: 194.58.104.159:443
Referrer Policy: no-referrer-when-downgrade

Ответ:

content-type: text/html; charset=UTF-8
date: Wed, 30 Oct 2019 17:41:19 GMT
location: /Значение-слова--Шост-в-словаре-Ушакова
server: nginx
status: 301

С ServiceWorker:

Запрос:

Request URL: https://glosum.ru/%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BB%D0%BE%D0%B2%D0%B0--%D1%88%D0%BE%D1%81%D1%82-%D0%B2-%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D0%B5-%D0%A3%D1%88%D0%B0%D0%BA%D0%BE%D0%B2%D0%B0
Request Method: GET
Status Code: 301 
Remote Address: 194.58.104.159:443
Referrer Policy: no-referrer-when-downgrade

Ответ:

content-type: text/html; charset=UTF-8
date: Wed, 30 Oct 2019 17:41:27 GMT
location: /ÐнаÑение-Ñлова--ШоÑÑ-в-ÑловаÑе-УÑакова
server: nginx
status: 301

Исходный код моего сервисного работника:

self.addEventListener('install', function (event) {
    event.waitUntil(
        caches.open('v5')
            .then(function (cache) {
                return cache.addAll([
                    '/',
                    '/js/share.js',
                    // img
                    '/img/logo.png',
                    '/images/search.png',
                    '/img/books.webp',
                    '/img/books.jpg',
                    '/img/header.png',
                    '/img/nav.png',
                    '/img/footer.png',
                    '/img/main-shadow.png',
                    '/img/article-1books.jpg',
                    // css
                    '/css/style.css'
                ]);
            })
    );
});

self.addEventListener('fetch', function (event) {
    event.respondWith(
        caches.match(event.request)
            .then(function (response) {
                if (response) {
                    return response;
                }
                return fetch(event.request);
            })
    );
});
...