我们有一个在Spring Boot 2上运行的应用程序。我们的大多数站点都是使用Angular 7构建的。现在,我们的场景是一种不同的原因,而不是将Angular dist文件提供给我们使用Spring Boot 2来服务的服务器。来自角度的生产构建文件,
因此,我们的管道会生成Angular生产构建文件(main.js,vendor.js等),然后将它们复制到Spring Boot目标文件夹中,并打包和部署。
这意味着,尽管我使用@angular/service-worker
软件包注册了服务工作者,但我们使用的是Spring Boot。
因此,最终,服务工作者文件是从js/dist
文件夹提供的,即:https://shop.domain.com/js/dist/ngsw-worker.js
因此,我从/js/dist/ngsw-worker.js
注册了服务工作者,并且似乎都已加载。
但是当我尝试添加到homesceen时,出现错误:
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标头覆盖它。
但是,即使我指定了错误,错误仍然会发生。
任何帮助将不胜感激。