NodeJS服务器-客户端对于响应状态500的行为不同,具体取决于响应主体

时间:2018-06-22 09:26:55

标签: javascript node.js http httpresponse http-status-code-500

我已经设置了NodeJS服务器,正在localhost:3000上监听,并且正在使用Chrome浏览器对其进行测试。

当响应状态代码为500时:

  • 如果响应主体为空,则客户端显示: This page isn’t working localhost is currently unable to handle this request. HTTP ERROR 500
  • 如果响应正文不为空,则客户端(令人惊讶地)显示它没有错误

以下是重现此内容的示例代码:

let http = require("http");

let state = true;

let server = http.createServer(async function(request, response) {
    if (request.url == "/") {
        response.statusCode = 500;
        response.end(state ? "" : "data");
        console.log(state);
        state = !state;
    }
});

server.listen(3000, async function(error) {
    if (error)
        return console.log(error);
    console.log("server is listening");
});

说实话,我并不担心浏览器如何显示它,因为我的真正客户是系统中的其他进程。但是,即使我将一些数据放在响应正文中,我也要确保此过程接收到正确的状态码(500)。

所以我想知道我的代码中是否有问题(即是否不允许我发送状态为500的数据),或者这仅仅是Chrome的默认行为。

谢谢!

1 个答案:

答案 0 :(得分:3)

根据this postthis discussion Chrome,如果显示“友好的”错误页面是服务器响应的,没有正文的错误代码(之前的响应少于512字节),这就是为什么看到不同的行为。

在大多数情况下,您将发送自定义错误页面以及错误代码,以将其显示给用户。因此,如果仍然有自定义页面显示错误,则无需显示错误。

如果只需要验证响应标头,则可以使用chrome的特殊扩展名来查看它。例如,有HTTP Headers。 另外,我想您可以使用某种调试代理,例如fiddler来捕获流量,并检查请求和响应。