我有一个关于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);
//请求处理函数 function 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!"); };
答案 0 :(得分:2)
为了解释这一点,我们可以考虑一个类比,其中响应可以被视为具有的文档 以下实体 - Status-Line,(response-header)[message-body]
所以通过res.writeHead(200,{' content-type':' text / plain'});服务器正在写入响应文档的状态行 with response-header' 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
app.get('/check', function (req, res) {
res.writeHead(200, {'content-type': 'text/plain'});
res.write("ohai!\n");
res.write("I am!\n");
res.write("good!\n");
res.end("Hello, World!");
})
这导致了以下回复
ohai!
I am!
good!
Hello, World!