已经使用appcache将force-ssl包添加到Meteor项目

Dsy*_*yko 5 ssl caching websocket node.js meteor

我有一个Meteor项目,它使用appcache包在浏览器中保留Meteor应用程序的缓存.现在我购买了SSL证书,并希望开始强制用户连接到该站点的https://地址.所以我添加了force-ssl包.但是,当用户访问http://example.com时,会加载Meteor应用程序的缓存版本,它会收到缓存更新通知,并尝试开始下载新版本的应用程序.因此,http://站点现在正在尝试从https://站点请求资源,并且由于CORS问题,浏览器会阻止此操作.

我有点使用force-ssl包,甚至尝试设置一些标题:

var host = url.parse(Meteor.absoluteUrl()).hostname;
res.setHeader('access-control-allow-origin', 'http://' + host);
res.setHeader('access-control-allow-credentials', 'true');
res.setHeader('access-control-allow-methods', 'POST, GET, OPTIONS');
Run Code Online (Sandbox Code Playgroud)

但我仍然看到像这样的CORS错误:

GET https://www.example.com/sockjs/881/y6to3ysz/xhr 405 (Method Not Allowed) 
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何正确设置标题,以便更新可以从https://到http://网站?我正在设置socksjs标头等的兔子洞,并认为可能有人已经这样做了,可能会节省我一些时间.

Jer*_* S. 0

据我了解,您无法从节点服务器提供 SSL 证书,因此生产中的标准解决方案是设置代理服务器(在我的例子中为 NGINX)来处理证书,然后转发到 Meteor。经过一番挫折后我还发现我需要删除force-ssl包才能从代理转发。

这是我开始的一个线程,后来针对这一点发布了上述解决方案。

在整个过程中,appcache 包正常工作并且符合我的预期。它应该开始从 https 获得服务。但假设它坚持下去,并且如果您的应用程序不在生产使用中(因为每个用户都会遇到相同的问题),您可以手动删除http缓存(在chrome中它位于chrome://appcache-internals)。希望这可以帮助。