Добавление заголовков в ответы сервис-воркера angular

Некоторые ответы сервис-воркеров нарушают CSP, и мне может потребоваться добавить этот заголовок:

Content-Security-Policy = "connect-src *;"

ко всем ответам обслуживающего персонала, как описано здесь и здесь.

Как я могу добавить заголовки ответов в ответы сервис-воркеров с помощью angular PWA?


person ChrisOdney    schedule 21.06.2019    source источник


Ответы (2)


Вы можете использовать http-перехватчики для перехвата любых http-запросов и ответов в одном месте. Это также применимо для обслуживающего персонала.

Подробное объяснение можно найти здесь.

https://angular.io/api/common/http/HttpInterceptor

Пример:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(request).pipe(
    ...          
));
}
person talhature    schedule 21.06.2019
comment
Я не знал, что перехватчики работают и для сервис-воркеров (запросы на выборку), попробую. - person ChrisOdney; 21.06.2019
comment
Это не сработает. Заголовки CSP должны быть установлены на сервере до того, как ответы дойдут до клиентского / Angular кода. - person abraham; 23.06.2019
comment
Заголовки @abraham отправляются с сервера, но когда они кэшируются и обслуживаются сервис-воркерами, этих заголовков там нет. - person ChrisOdney; 24.06.2019

Заголовки ответа не нужно устанавливать для кэшированного ответа, возвращаемого работником службы, вместо этого решение состоит в том, чтобы установить специальные заголовки CSP на сервере для ответа для сценария SW. То есть, когда браузеры запрашивают ngsw-worker.js (имя по умолчанию для сценария Angular SW), сервер должен прикрепить к этому ответу специальные заголовки CSP (например, Content-Security-Policy: connect-src *).

person ChrisOdney    schedule 29.06.2019
comment
Этот. Это не относится к Angular. Обратите внимание, что вам, вероятно, также понадобится worker-src, а не connect-src, хотя в моем случае ошибка говорила, что последнее, исправление было первым. См. developer.mozilla. org / en-US / docs / Web / HTTP / Headers / - person philw; 29.10.2020