fix(serviceworker): Fixed CORS and Cache Control handling for Service Worker
This commit is contained in:
		| @@ -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. | ||||
|  | ||||
|   | ||||
| @@ -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.' | ||||
| } | ||||
|   | ||||
| @@ -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'); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user