Node.js返回HTTPS的空响应

时间:2016-01-19 19:30:44

标签: node.js

我有以下非常基本的Node.js服务器:

"use strict";

const http = require("http");
const https = require("https");
const fs = require("fs");

http.createServer((req, res) => {
        console.log("regular works");
        res.end("Regular response");
}).listen(3000);

https.createServer({
        key: fs.readFileSync("/etc/letsencrypt/live/domain.com/privkey.pem"),
        cert: fs.readFileSync("/etc/letsencrypt/live/domain.com/cert.pem")
}, (req, res) => {
        console.log("secure works");
        res.end("Secure response");
}).listen(3001);

我将其作为sudo node filename.js运行,因为/etc/letsencrypt/live中的文件只是root用户。我稍后会这样做,这只是为了测试。

运行时,我可以很好地打到3000端口。服务器控制台打印regular works,浏览器显示Regular response。但是,端口3001返回空响应,并且没有消息打印到服务器。

LetsEncrypt文件是使用./letsencrypt-auto certonly --standalone -d domain.com --email email@gmail.com --agree-tos生成的,并且显示有效。

我缺少什么才能获得预期的结果?

2 个答案:

答案 0 :(得分:3)

这里有两个问题:

  • 假设你没有模糊真实的主机名/ IP,你应该使用127.0.0.1或类似的(如果你在同一台机器上)而不是255.255.255.255。

  • HTTP是cURL的默认设置,因此您当前正在向您的HTTPS服务器发送明文HTTP请求,这不会起作用(HTTPS服务器将文字HTTP请求视为无效的TLS握手,这会导致连接突然结束)。要解决此问题,请明确包括https://(例如curl -I --verbose https://127.0.0.1:3001)。

答案 1 :(得分:0)

需要检查URL是否包含https://而不是http://