NodeJS 服务器 - 客户端在响应状态 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 的默认行为。

根据这篇文章和这个讨论,Chrome 如果显示"友好"错误页面是服务器响应的错误代码而不带正文(早些时候响应少于 512 字节( - 这就是为什么你会看到不同的行为。

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

如果你只需要验证响应标头,Chrome有特殊的扩展,可以让你看到它。例如,有HTTP标头。 另外,我想您可以使用某种调试代理,例如小提琴手来捕获流量,并检查请求和响应。

相关内容

最新更新