【问题标题】:Node.js returning empty response for HTTPSNode.js 返回 HTTPS 的空响应
【发布时间】:2016-04-25 10:26:13
【问题描述】:

我有以下非常基本的 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 生成的,并且显示为有效。

为了获得预期的结果,我缺少什么?

【问题讨论】:

  • 同时检查响应头。
  • @Gothdo 不幸的是,server.setSecure 不再是一个函数,并且 Express 指南也不起作用 - 给了我相同的结果。

标签: node.js


【解决方案1】:

这里有两个问题:

  • 假设您没有掩盖真实的主机名/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)。

【讨论】:

  • 抱歉,我应该指定 - 我在原始文件中隐藏了主机名。我尝试使用 https 进行 curl 并获得了一些新信息。谢谢!
  • 好的,看来您的服务器现在工作正常。如果您希望在 cURL 中看到“安全响应”输出,您将不会在 HEAD 请求中看到它(这是正确的)。请改用GET 请求来查看响应正文。
  • 我想这一切都归结为我对 curl 的了解...感谢您的帮助!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多