http模块上的node.js response.writeHead

时间:2014-01-10 16:43:00

标签: javascript node.js http

我正在实现自己的http模块。 当我正在阅读官方node.js http模块api时,我无法理解一些事情:

  1. 如果用户正在使用response.writeHead(statusCode, [reasonPhrase], [headers])函数,是否应将标题写入套接字,或者它们是否应首先保存为对象的成员?然后只在.end()函数?
  2. 之后编写
  3. 只要用户不使用writeHead(),就应该使用隐式标头的含义是什么?他们应该被提前吗?如果用户没有设置它们?应该是什么行为?感谢

2 个答案:

答案 0 :(得分:2)

数目:

  1. 您写入响应标题writeHead或标记write的任何内容都会被缓冲并发送。你看他们使用套接字缓冲区。在发送之前,它们只能保存固定数量的数据。要记住的重要事实是,您只能在开始编写正文之前设置标题。如果这样做,http服务器本身会为您设置一些标题。

  2. 隐式标题是您没有专门编写但仍然发送的标题。通过响应请求而不设置任何标头来设置简单的http服务器。然后查看在浏览器中打开网站的请求标头。会有像Date,Server,Host等标题,这些标题会在没有用户意愿的情况下自动添加到每个请求中。

答案 1 :(得分:0)

我找到了第一个问题的答案,但仍然不理解第二个问题。

The first time response.write() is called, it will send the buffered header information and the first body to the client. The second time response.write() is called, Node assumes you're going to be streaming data, and sends that separately. That is, the response is buffered up to the first chunk of body.