我有一个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');
但我仍然看到像这样的CORS错误:
GET https://www.example.com/sockjs/881/y6to3ysz/xhr 405 (Method Not Allowed)
任何人都知道如何正确设置标头,以便更新可以从https://到http://网站?我在设置socksjs标题等时走下了兔子洞,并想到也许某人已经这样做了,可能会节省我一些时间。
答案 0 :(得分:0)
根据我的理解,您无法从节点服务器提供SSL证书,因此生产中的标准解决方案是设置代理服务器(在我的情况下为NGINX)来处理证书然后转发到meteor。我还发现一些挫折后我需要删除force-ssl包以便从代理转发。
Here is a thread我开始并稍后在上面发布了上述解决方案。
appcache包正常工作&正如我在整个过程中所期望的那样。它应该从https开始服务。但假设它坚持下去,并且如果您的应用程序未在生产中使用(因为每个用户都会遇到相同的问题),您可以手动删除http缓存(在chrome中它位于chrome://appcache-internals
)。希望这会有所帮助。