¿Existe un mecanismo en un trabajador de servicio, que desconozco, que pueda permitirme saber desde qué página se activa una solicitud de recuperación?
Ejemplo: tengo una página HTML cargada en mi sitio web en /aPageUploadedByUser/onMySite/index.html , quiero asegurarme de que ninguno de los encabezados de autorización se pase a ninguna solicitud de recuperación realizada por /aPageUploadedByUser/onMySite/index.html a cualquier fuente.
Si mi trabajador de servicio conoce de alguna manera la página de origen de esta solicitud, puedo modularla por seguridad.
Para responder a su pregunta ( ¡pero con la advertencia de que no es una buena idea! ), existen dos enfoques generales, cada uno con sus propios inconvenientes:
El Referer: encabezado de solicitud tradicionalmente se establece en la URL de la página web que realizó una solicitud. Sin embargo, es posible que este encabezado no siempre se establezca para todos los tipos de solicitudes.
Un FetchEvent tiene una propiedad clientId y ese valor se puede pasar a clients.get() para obtener una referencia al Client que creó la solicitud. El Client , a su vez, tiene una propiedad url . Las advertencias aquí son que clients.get() es asíncrono (lo que significa que no puede usar su resultado para determinar si llamar o no a event.respondWith() ), y que la URL del Client puede haber cambiado en el intervalo entre el solicitud que se realiza y cuando lee la propiedad url .
Con esos enfoques descritos, el mayor problema es que usar a un trabajador de servicio de esta manera no es una práctica segura. La primera vez que un usuario visita su origen, no tendrá instalado un trabajador de servicio. Y luego, en las visitas de seguimiento, si un usuario recarga "fuertemente" la página con la tecla Mayús, la página tampoco será controlada por un trabajador del servicio. No puede confiar en el controlador de eventos de fetch de un trabajador del servicio para implementar ningún tipo de validación crítica.