【问题标题】:Node.js, handler callback isn't calledNode.js,未调用处理程序回调
【发布时间】:2014-12-14 22:29:48
【问题描述】:

这是一个简单的代码示例:

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync("./ssl/key.pem"),
  cert: fs.readFileSync("./ssl/cert.pem")
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(443);

对 localhost:443 的所有请求都会导致无限等待

我通过以下方式运行此示例:“sudo nodejs https.js”

未观察到错误/警告。端口 443 处于“侦听”状态。 https://www.dropbox.com/s/uchpbn0ifacmf4x/node.jpg?dl=0

问题在我的 linux 和 windows 机器上重现。

我还尝试了名为“pem”的节点库,结果相同。

http 在我的环境中运行良好。

节点版本:0.10.33

您能帮我解决问题吗?我可以激活更多调试吗?

更新:strace

{{EPOLLIN, {u32=10, u64=10}}}, 1024, 119999) = 1
clock_gettime(CLOCK_MONOTONIC, {1989619, 754364596}) = 0
accept4(10, 0, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK) = 11
futex(0x7f577c0008c8, FUTEX_WAKE_PRIVATE, 1) = 1
gettimeofday({1418596391, 472239}, NULL) = 0
futex(0x7f577c0008c8, FUTEX_WAKE_PRIVATE, 1) = 1
gettimeofday({1418596391, 472445}, NULL) = 0
accept4(10, 0, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK) = -1 EAGAIN (Resource temporarily unavailable)
clock_gettime(CLOCK_MONOTONIC, {1989619, 755788224}) = 0
epoll_ctl(5, EPOLL_CTL_ADD, 11, {EPOLLIN, {u32=11, u64=11}}) = 0
epoll_wait(5, {{EPOLLIN, {u32=11, u64=11}}}, 1024, 119999) = 1
clock_gettime(CLOCK_MONOTONIC, {1989619, 755916479}) = 0
read(11, "GET / HTTP/1.1\r\nHost: localhost"..., 65536) = 583
gettimeofday({1418596391, 472940}, NULL) = 0
clock_gettime(CLOCK_MONOTONIC, {1989619, 756589265}) = 0
futex(0x7f577c0008c8, FUTEX_WAKE_PRIVATE, 1) = 1
epoll_wait(5, {{EPOLLIN, {u32=10, u64=10}}}, 1024, 119999) = 1
clock_gettime(CLOCK_MONOTONIC, {1989619, 758012624}) = 0
accept4(10, 0, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK) = 12
futex(0x7f577c0008c8, FUTEX_WAKE_PRIVATE, 1) = 1
gettimeofday({1418596391, 475378}, NULL) = 0
gettimeofday({1418596391, 475522}, NULL) = 0
gettimeofday({1418596391, 475798}, NULL) = 0
gettimeofday({1418596391, 475836}, NULL) = 0
gettimeofday({1418596391, 476235}, NULL) = 0
gettimeofday({1418596391, 476272}, NULL) = 0
brk(0x12c0000)                          = 0x12c0000
brk(0x1300000)                          = 0x1300000
mmap(0x8138ef00000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x8138ef00000
mprotect(0x8138ef05000, 4096, PROT_NONE) = 0
mmap(0x8138ef06000, 1019904, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x8138ef06000
mprotect(0x8138efff000, 4096, PROT_NONE) = 0
gettimeofday({1418596391, 478274}, NULL) = 0
futex(0x7f577c0008c8, FUTEX_WAKE_PRIVATE, 1) = 1
gettimeofday({1418596391, 478657}, NULL) = 0
accept4(10, 0, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK) = -1 EAGAIN (Resource temporarily unavailable)
clock_gettime(CLOCK_MONOTONIC, {1989619, 762218983}) = 0
epoll_ctl(5, EPOLL_CTL_ADD, 12, {EPOLLIN, {u32=12, u64=12}}) = 0
epoll_wait(5, ^CProcess 15474 detached

更新:我用的是digitalocean droplet。
Ubuntu 14.04 x64 vmlinuz-3.13.0-24-generic (1221)
Linux r___t.ru 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

【问题讨论】:

  • 你用什么发行版和内核测试 Linux?
  • 我用的是digitalocean droplet。 Ubuntu 14.04 x64 vmlinuz-3.13.0-24-generic (1221),(Linux r___t.ru 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux) . 同样问题存在于 Windows 7 PC 上。

标签: javascript node.js ssl https


【解决方案1】:

呵呵……

此问题的根本原因是请求“http://localhost:443”而不是“https://localhost”。

感谢nodejs https server doesn't respond

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2020-08-16
    • 2017-09-09
    • 2016-06-25
    相关资源
    最近更新 更多