我有一个关于Node Js响应的一般性问题,并且希望有人可以解释实际发生的事情,我可以说res.WriteHead(“blah blah”) .
所以从我在html和javascript中的理解,我提出了一个路由请求 . 我检查路由的请求,然后说它是一个get方法 . 我写的是头部,它会编写一个http响应的头部 . 如果我发送res.write(“some text”)会发生什么 .
我要问的是你能解释一下这个过程,以及客户端和服务器之间的通信是怎么回事 .
我对响应有点困惑,这一条消息被发回或者就像流一样 .
对整个过程提供尽可能多的解释的答案将不胜感激 .
我正在谈论的一些示例代码 . 请注意我使用NodeJS
//加载http模块var http = require('http');
//创建服务器var server = http.createServer(handleRequest);
//启动服务器server.listen(2000);
//请求处理函数函数handleRequest(req,res){
console.log(req.method+" request for "+req.url);
// content header
res.writeHead(200, {'content-type': 'text/plain'});
res.write("ohai!\n");
// write message body and send
res.end("Hello, World!"); };
1 回答
为了解释这一点,我们可以考虑一个类比,其中响应可以被视为具有以下实体的文档 - Status-Line,(response-header)[message-body]
所以通过res.writeHead(200,{'content-type':'text / plain'});服务器正在写响应文档的状态行以及响应 Headers 'content-type':'text / plain'
通过res.write(“ohai!\ n”);服务器已经开始编写消息体的内容,这将被res.end认为是完整的(“Hello,World!”);直到那时客户端将处于停滞状态,等待服务器提供请求的响应
总结上面的服务器端代码可能只有一个res.writeHead和res.end但可以使用多个res.write,它们将消息附加到message-body .
在服务器上执行res.end之后,服务器使用HTTP chunked传输机制以块的形式发送响应,其中每个块前面都有其大小 . 当遇到零长度的块时,传输结束 .
我附上request-response life-cycle
这导致了以下回应