如何通过HTTPS加载Web Worker脚本
How do I load a Web Worker script over HTTPS?
我正试图使用Web Worker将一些CPU密集型计算卸载到一个单独的线程中。对于一个小的上下文,我从getUserMedia
获取一个音频流,并将其保存到一个文件中,以便在它完成后上传到我的服务。我可以从用户那里检索流,并通过WebAudio API和HTML5播放器播放,但现在我需要采取下一步将其保存到文件中。
问题:
我的主服务是通过HTTPS连接运行的,因为它仅限于登录用户。我有一个工作者脚本,它可以完成我需要的任务,我正试图通过一个相对路径将脚本加载到我的工作者中。我收到以下错误
Mixed Content: The page at 'https://someurl.com:1081/some/path' was loaded over HTTPS,
but requested an insecure Worker script
'http://someurl.com/some/path/lib/assets/javascripts/worker.js'.
This request has been blocked; the content must be served over HTTPS.
我想这是因为我在代码中使用了一个相对路径,比如:
worker = new Worker('lib/assets/javascripts/worker.js');
我想排除这种可能性,所以我做了以下更改:
worker = new Worker('https://someurl.com:1081/some/path/lib/assets/javascripts/worker.js');
这并没有解决我的错误。无论我尝试使用哪个url位置,Worker
都会通过HTTP加载我的脚本。我找不到任何关于如何通过HTTPS使用Web Worker的参考资料,所以我希望有人能提供一些见解。
可能的解决方案
我确实想让你知道有一个可能的解决方案,但对我来说,这似乎有点过时。我可以将我的工作脚本加载为Blob
,并将其直接传递到Worker
中。如果这是唯一的解决方案,我可以让它发挥作用。但我希望找到一种通过HTTPS加载脚本的方法。
你试过吗
//someurl.com:1081/some/path/lib/assets/javascripts/worker.js
而不是
https://someurl.com:1081/some/path/lib/assets/javascripts/worker.js
只是我在这里发现的东西,Deezer内容通过HTTP 提供
我解决了这个问题。这个错误本身就具有误导性,让我陷入了寻找解决方案的困境。
这里的问题实际上源于我配置此服务的方式。启动web工作程序的服务实际上是在另一个服务后面代理的,所有请求都通过父服务。这对大多数请求都很有效,但在这种情况下会导致错误。web工作程序没有将此端口上的请求转发到我的应用程序,而是试图从父服务本身下载工作程序脚本。这意味着错误源于没有找到脚本,而不是协议不正确。
为了解决这个问题,我不得不使用Rails的资产管道从Rails传入一个本地化的脚本位置。这允许工作人员获取脚本并实际工作。
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 借助asp.net验证或java脚本对多个文本进行验证
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- Java脚本时间添加
- 不显示带有本地json文件数据的谷歌地图脚本
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 从远程脚本获取用户IP
- 如何根据时间运行不同的脚本
- 如何将字符串值从php页面发送到java脚本页面
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- 当脚本由system.js加载时,如何要求('electron')
- HTML标记在脚本标记中工作
- 如何通过HTTPS加载Web Worker脚本
- 使用 Mozilla Firefox sdk 时,如何在 worker 脚本中访问 request
- WebWorkers-新Worker不断从服务器请求相同的脚本
- 识别JS脚本何时作为Worker运行
- 是一个Web Worker比运行脚本更快
- 可靠地检测脚本是否在web worker中执行
- 如何将service worker注册到一个重定向的脚本URL