如果我在收到请求而不提供任何数据、调用 response.write() 或调用 response.writeHead() 时立即调用 response.end(),NodeJS 会发生什么?我很好奇从两个角度来回答:
1)服务器角度 - 这是否实质上从nodeJS中的后端堆栈或堆中取出一些东西来释放一些资源?还是发生了完全不同的事情?
2) 从客户端的角度来看——如果这是来自一个不期望收到任何数据响应的 ajax 请求,会出现任何问题吗?
如果我在收到请求而不提供任何数据、调用 response.write() 或调用 response.writeHead() 时立即调用 response.end(),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) 节点发出带有默认标头和空正文的响应。这完全取决于客户如何处理。在大多数情况下,客户端会将默认标头视为不完整,但在没有响应正文的情况下,别无选择。