使用HTTPS向来自不同域的节点API发出请求

时间:2016-01-21 01:42:19

标签: node.js https cors

我通过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中间件也不会出现。

真正令人困惑的是,我的设置似乎在大部分时间都有效。

有谁知道我如何可靠地提出要求?

感谢并提前抱歉我的无知。

1 个答案:

答案 0 :(得分:0)

我也有点挣扎。如果你在Windows上我有一个解决方案,但有一些解决办法,但允许你通过HTTPS服务你的网站和NodeJS应用程序。

在Windows中,我在IIS中创建了一个反向代理,指向nodeJS RESTful端点(即nodeJS RESTful services == website.com:7000)。不要让反向代理人吓唬你,它的肉汁。

实施:

  1. 安装IIS(如果尚未安装)
  2. 创建自签名证书(假设您知道如何操作),或申请您现在使用的证书。
  3. 安装应用程序请求路由
  4. 打开您的网站配置,然后转到网址重写
  5. 重写内容:
  6. 对于模式:^ api(。*)

    重写:http://www.website.com:7000 {R:1}

    这基本上接受来自https://www.website.com/api/someApiAwesomeness的任何请求,并将其重写到运行在http://www.website.com:7000的nodejs App。现在你有一个SSL RESTful应用程序..

    祝你好运,我希望这会有所帮助!