fix(serviceworker): Fixed CORS and Cache Control handling for Service Worker

This commit is contained in:
Philipp Kunz 2025-02-03 23:26:08 +01:00
parent 0fecf69420
commit efade7a78e
3 changed files with 35 additions and 11 deletions

View File

@ -1,5 +1,13 @@
# Changelog
## 2025-02-03 - 3.0.59 - fix(serviceworker)
Fixed CORS and Cache Control handling for Service Worker
- Improved handling of CORS settings for external requests.
- Preserved important headers while excluding caching headers.
- Ensured the presence of CORS headers in cached responses.
- Adjusted Cache-Control headers to prevent browser caching but allow service worker caching.
## 2025-02-03 - 3.0.58 - fix(network-manager)
Refined network management logic for better offline handling.

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@api.global/typedserver',
version: '3.0.58',
version: '3.0.59',
description: 'A TypeScript-based project for easy serving of static files with support for live reloading, compression, and typed requests.'
}

View File

@ -23,9 +23,13 @@ export class CacheManager {
// internal request
matchRequest = requestArg;
} else {
// For external requests, create a new request with appropriate CORS settings
matchRequest = new Request(requestArg.url, {
...requestArg.clone(),
mode: 'cors'
method: requestArg.method,
headers: requestArg.headers,
mode: 'cors',
credentials: 'same-origin',
redirect: 'follow'
});
}
return matchRequest;
@ -137,17 +141,29 @@ export class CacheManager {
const responseToPutToCache = newResponse.clone();
const headers = new Headers();
responseToPutToCache.headers.forEach((value, key) => {
if (
value !== 'Cache-Control'
&& value !== 'cache-control'
&& value !== 'Expires'
&& value !== 'expires'
&& value !== 'Pragma'
&& value !== 'pragma'
) {
// Preserve all headers except caching headers
if (![
'Cache-Control',
'cache-control',
'Expires',
'expires',
'Pragma',
'pragma'
].includes(key)) {
headers.set(key, value);
}
});
// Ensure CORS headers are present in cached response
if (!headers.has('Access-Control-Allow-Origin')) {
headers.set('Access-Control-Allow-Origin', '*');
}
if (!headers.has('Access-Control-Allow-Methods')) {
headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
}
if (!headers.has('Access-Control-Allow-Headers')) {
headers.set('Access-Control-Allow-Headers', 'Content-Type');
}
// Prevent browser caching while allowing service worker caching
headers.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate');
headers.set('Pragma', 'no-cache');