如果我在不提供任何头或数据的情况下调用response.end(),NodeJS会发生什么



如果我在收到请求时立即调用response.end(),而不提供任何数据,调用response.write()或调用response.writeHead(),NodeJS会发生什么?我从两个角度对答案感到好奇:

1) 从服务器的角度来看——这本质上是不是从nodeJS中的后端堆栈或堆中拿走了一些东西,从而释放了一些资源?还是发生了完全不同的事情?

2) 从客户端的角度来看——如果这是来自一个ajax请求,而该请求不希望接收到任何数据作为响应,那么会出现任何问题吗?

这里要做的显而易见的事情就是尝试一下。Node.js代码:

var http = require('http');
http.createServer(function (req, res) {
  res.end();
}).listen(1337, '127.0.0.1');

从服务器的角度来看,这与在其中添加数据/自定义标头没有什么不同。

从客户端的角度来看,给了我空的响应体,带有标题:

Connection:keep-alive
Date:Sun, 29 Jul 2012 07:58:51 GMT
Transfer-Encoding:chunked

与hello-world示例的不同之处在于Content-Type标头丢失,响应主体为空,仅此而已。

1)所有与请求和响应相关的资源都将被放弃(可用于垃圾收集)

2) 节点发送一个带有默认标头和空正文的响应。这完全取决于客户如何处理。在大多数情况下,客户端会认为默认标头不完整,但在没有响应体的情况下,别无选择。

最新更新