我通过HTTPS(https://example.com)提供静态页面,该页面向不同域(example-api.com)上的节点API发出请求。
我的API是使用HTTP的标准快递应用。这是我的设置代码:
var express = require('express');
var app = exports.app = express();
var port = process.env.PORT;
exports.server = require('http').createServer(app).listen(port);
在我的静态页面的请求中,我将https://example-api.com指定为URL。这大部分时间都可以使用,但每隔一段时间(10%的情况下?)Chrome会出现以下错误:
net::ERROR_INSECURE_RESPONSE
遇到此问题的其他用户(例如Failed to load resource: net::ERR_INSECURE_RESPONSE socket.io)似乎通过在其createServer调用中添加凭据选项来解决此问题,例如
var server = https.createServer(credentials, app)
所以当我尝试实现这一点时,我想出了以下内容:
var fs = require('fs');
var options = {
key: fs.readFileSync('server-key.pem'),
cert: fs.readFileSync('server-cert.pem')
};
var express = require('express');
var app = exports.app = express();
exports.server = require('https').createServer(options, app).listen(port);
然而,此解决方案似乎对我不起作用。当我尝试它时,请求永远不会进入我的应用程序 - 即使登录app.use中间件也不会出现。
真正令人困惑的是,我的设置似乎在大部分时间都有效。
有谁知道我如何可靠地提出要求?
感谢并提前抱歉我的无知。
答案 0 :(得分:0)
我也有点挣扎。如果你在Windows上我有一个解决方案,但有一些解决办法,但允许你通过HTTPS服务你的网站和NodeJS应用程序。
在Windows中,我在IIS中创建了一个反向代理,指向nodeJS RESTful端点(即nodeJS RESTful services == website.com:7000)。不要让反向代理人吓唬你,它的肉汁。
实施:
对于模式:^ api(。*)
重写:http://www.website.com:7000 {R:1}
这基本上接受来自https://www.website.com/api/someApiAwesomeness的任何请求,并将其重写到运行在http://www.website.com:7000的nodejs App。现在你有一个SSL RESTful应用程序..
祝你好运,我希望这会有所帮助!