加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

一个域中的Angular 5多服务工作者

发布时间:2020-12-17 17:36:50 所属栏目:安全 来源:网络整理
导读:我在同一个域中的两个应用程序中有两个服务工作者(两个Angular 5): 一个内/前端/ 第二内/后/ 我正在使用@ angular / service-worker包来管理服务工作者. 当我构建prod版本并部署我的应用程序时会发生奇怪的事情. 当我首先进入http://my.domain/frontend/时,
我在同一个域中的两个应用程序中有两个服务工作者(两个Angular 5):

>一个内/前端/
>第二内/后/

我正在使用@ angular / service-worker包来管理服务工作者.

当我构建prod版本并部署我的应用程序时会发生奇怪的事情.

当我首先进入http://my.domain/frontend/时,我无法进入http://my.domain/backend/,因为服务人员加载文件并将我重定向到http://my.domain/frontend/

这个设置有什么问题?我需要更改该服务工作者的文件名,或者只是我在这个设置的同一个域上不能有两个角度应用程序

解决方法

我有同样的问题(重新启动浏览器后,服务器关闭 – 只是按预期从ServiceWorker获取数据,但混淆了).然后我遇到了 this stackoverflow question并将assetsGroups的名称更改为所有(现在我的情况下为2)应用程序之间的不同名称.

例如:

来自App 1的ngws-config.json:

{
  "index": "/index.html","assetGroups": [
    {
      "name": "sw-app-app","installMode": "prefetch","resources": {
        "files": ["/favicon.ico","/index.html"],"versionedFiles": ["/*.bundle.css","/*.bundle.js","/*.chunk.js"]
      }
    },{
      "name": "sw-app-assets","installMode": "lazy","updateMode": "prefetch","resources": {
        "files": ["/assets/**"]
      }
    }
  ]
}

App 2中的ngws-config.json:

{
  "index": "/index.html","assetGroups": [
    {
      "name": "sw-app-two-app",{
      "name": "sw-app-two-assets","resources": {
        "files": ["/assets/**"]
      }
    }
  ]
}

因为:

Cache Storage API(和其他存储机制,如IndexedDB)在整个源中共享,默认情况下没有“分片”或命名空间隔离.

我的猜测是这两个应用程序的缓存存储中使用了这个默认名称(但是还有一个哈希,这仍然让我感到困惑).我还检查了缓存存储并删除了所有不包含sw-app(或sw-app-two)的ngsw:*条目.

在这些更改之后,一切似乎都运行得更好,但经过一些重新加载(使用活动服务器)后,我意识到我的sw-app条目来自Cache Storage,在打开sw-app-two之后不见了.只有sw-app-two条目和一个名为ngsw:db:control left的条目.此条目仅包含sw-app-two的ngsw-conig.json的资产组(在清单下).再次打开sw-app后,assetGroups清单中的内容更改为sw-app,sw-app-two内容消失了.

所以我有ngsw:db:控制左边有sw-app内容,其他Cache Storage条目名称包含sw-app-two.当我打开两个应用程序(服务器关闭)时,总会出现sw-app-two(没有错误,但它只是一个没有真正内容的应用程序).这个混合适用于一个应用程序,也不知何故混淆.

更多细节,但仍然没有解决方案.很想检查角度代码并制作公关但……至少提出问题.我很确定缓存存储在同一来源的应用程序之间混淆了.

PS:当你设置baseHref时,一定要检查这个github问题:#8515 #8516

编辑:我创建了issue #21388

EDIT(2):

Service Worker脚本必须托管在同一源(协议域名端口).在this stackoverflow question提到

我将为每个应用程序创建一个子域,并在本地不同的端口上运行多个http服务器来测试它.这应该工作,似乎是这种用例的唯一解决方案.希望这也是你的选择!如果没有,你可以写一个评论来提升issue的频率标签;-)

EDIT(3):

我找到了一个似乎有效的解决方案,但你必须在构建过程之后编辑ngsw-worker.js.只需将ngsw:db:替换为应用程序的唯一名称(例如:ngsw:db:sw-app-one:for sw-app-one,ngsw:db:sw-app-two:for sw-app-二)

EDIT(4):

可悲的是,解决方案不起作用,控制键的条目(例如:ngsw:db:sw-app-one:control)将被另一个应用程序的内容覆盖…我将在issue发表评论以获取更多详细信息. ..

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读