У нас есть приложение, которое запускается в Spring Boot 2. Большая часть нашего сайта построена с использованием Angular 7. Теперь наш сценарий является своего рода другой причиной, а не передачей файлов Angular dist на сервер, который мы используем Spring Boot 2 для обслуживанияФайлы производственной сборки из angular,
Таким образом, наш конвейер генерирует файлы производственной сборки Angular (main.js, vendor.js и т. д.), и мы копируем их в целевую папку Spring Boot, упаковываем и разворачиваем.
Это означает, что, хотя я регистрирую работника сервиса с помощью пакета @angular/service-worker
, мы обслуживаем его с помощью весенней загрузки.
Таким образом, в конечном итоге файлы работника сервиса обслуживаются из папки js/dist
, то есть:https://shop.domain.com/js/dist/ngsw-worker.js
Таким образом, я регистрирую работника службы в порядке с /js/dist/ngsw-worker.js
, и все, кажется, загружается.
Но когда я пытаюсь добавить в homeceen, я получаю ошибку:
Site cannot be installed: no matching service worker detected. You may need to reload the page, or check that the service worker for the current page also controls the start URL from the manifest
все относящиеся к этому файлы находятся в папке js/dist
.Как: /js/dist/manifest.webmanifest
/js/dist/ngsw.json
/js/dist/safety-worker.js
Итак, я прочитал и нашел хороший заголовок с именем Service-Worker-Allowed
Так что в моем приложении Spring Boot 2 я регистрирую следующий WebFilter
ServiceWorkerHeaderFilter.java
package com.company.project.serviceworker;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter(urlPatterns = "/js/dist/ngsw-worker.js")
public class AddServiceWorkerSecurityHeaderFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
httpServletResponse.setHeader("Service-Worker-Allowed", "/");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
Кажется, что заголовок работает нормально и файлы загружаются правильно.В моем файле манифеста я указываю start_url
"start_url": "/"
Я больше не указываю scope
, так как заголовок http должен его переопределять.Но даже если я это укажу, ошибка будет повторяться.
Любая помощь будет принята с благодарностью.