Это очень распространенная проблема, которую я видел у многих людей, которые используют разные версии своего сайта для мобильных и настольных компьютеров, многие темы имеют эту функцию. Проблема в том, что Cloudflare кэширует одну и ту же страницу независимо от пользовательского устройства, вызывая смешивание и несоответствие между настольной и мобильной версиями.
Наиболее распространенное решение - разделить мобильную версию на другой URL-адрес, но в моем случае я хочу чтобы использовать один и тот же URL-адрес и заставить кеш Cloudflare правильно работать как на настольных компьютерах, так и на мобильных устройствах. устарел, мне пришлось изменить некоторые части, чтобы он заработал.
Я создал новый поддомен для своих рабочих, а затем назначил маршрут моему сайту, чтобы он начал работать.
Рабочий кэширует все, однако, у него нет желаемой функции наличия разных кэшированных версий в зависимости от устройства.
async function run(event) {
const { request } = event;
const cache = caches.default;
// Read the user agent of the request
const ua = request.headers.get('user-agent');
let uaValue;
if (ua.match(/mobile/i)) {
uaValue = 'mobile';
} else {
uaValue = 'desktop';
}
console.log(uaValue);
// Construct a new response object which distinguishes the cache key by device
// type.
const url = new URL(request.url);
url.searchParams.set('ua', uaValue);
const newRequest = new Request(url, request);
let response = await cache.match(newRequest);
if (!response) {
// Use the original request object when fetching the response from the
// server to avoid passing on the query parameters to our backend.
response = await fetch(request, { cf: { cacheTtl: 14400 } });
// Store the cached response with our extended query parameters.
event.waitUntil(cache.put(newRequest, response.clone()));
}
return response;
}
addEventListener('fetch', (event) => {
event.respondWith(run(event));
});
он действительно определяет правильный пользовательский агент, но он должен иметь две отдельные версии кеша в соответствии назначенная строка запроса ...
Думаю, может быть, мне не хватает конфигурации ion, я не знаю, почему он не работает должным образом. На данный момент я все еще смешиваю версии кеша для мобильных устройств и компьютеров.