He estado tratando de usar trabajadores de servicio para (lo que parecen horas y horas), para adjuntar un encabezado simple a todas las solicitudes. Lo que es frustrante es que funciona.
Intento 1:
self.addEventListener("fetch", event => {
const modifiedHeaders = new Headers({
...event.request.headers,
'API-Key': '000000000000000000001'
});
const modifiedRequest = new Request(event.request, {
headers: modifiedHeaders,
});
event.respondWith((async () => {
return fetch(modifiedRequest);
})());
});
El código anterior funciona para archivos HTML, sin embargo, para los archivos CSS y JS recibo el siguiente error
ReferenceError: los encabezados no están definidos
Si desactivo el requisito de encabezado, la página se carga con imágenes y JavaScript y puedo interactuar con él como de costumbre.
Intento 2:
var req = new Request(event.request.url, {
headers: {
...event.request.headers,
'API-Key': '000000000000000000001'
},
method: event.request.method,
mode: event.request.mode,
credentials: event.request.credentials,
redirect: event.request.redirect,
referrer: event.request.referrer,
referrerPolicy: event.request.referrerPolicy,
bodyUsed: event.request.bodyUsed,
cache: event.request.cache,
destination: event.request.destination,
integrity: event.request.integrity,
isHistoryNavigation: event.request.isHistoryNavigation,
keepalive: event.request.keepalive
});
Este intento, simplemente construí una nueva solicitud, que incluyó con éxito el nuevo encabezado en las solicitudes de archivos CSS y JS. Sin embargo, cuando hago una POST o redirecciono, las cosas dejan de funcionar y se comportan de manera extraña.
¿Cuál es el enfoque correcto para esto? Siento que el intento 1 es el mejor camino, pero parece que no puedo crear el objeto Headers en la solicitud sin importar lo que haga.
La versión de Chrome que estoy usando es
Versión 78.0.3904.70 (compilación oficial) (64 bits)
El sitio es una herramienta interna para desarrolladores, por lo que no se requiere compatibilidad cruzada con el navegador. Así que estoy feliz de cargar cualquier libs adicional / habilitar funciones experimentales, etc.