如何通过Net.js Net模块发送HTTP响应



我们的节点JS服务器使用NET模块用于TCP/IP通信,是否可以使用Net模块发送HTTP响应?我是否必须使用HTTP模块发送HTTP响应?

我想添加一些有关使用常规套接字编程发送HTTP响应所需的额外信息。

我一生中至少写了4次HTTP服务器(首次娱乐,然后再上班(,我想指出所有有兴趣的人,以找出实施标准符合标准的HTTP响应所需的最低限度努力詹姆斯·马歇尔(James Marshall(出色的HTTP变得非常容易。该页面自1998年以来就已经存在,直到今天,我最喜欢的关于RFC 2616(HTTP规范(的最喜欢的参考文献之一以及可以遗漏的内容。

我之前曾经在节点上写过自己的HTTP服务器,因为我需要自定义处理HTTP模块不提供的处理(或者我只是不知道该怎么做(。因此,这些知识仍然有用。

HTTP响应的绝对最低要求是:

let server = net.createServer(sock => {
    let client = sock.remoteAddress;
    console.log('serving stream to ' + client);
    // Headers:
    sock.write(
        'HTTP/1.0 200 OKrn' +
        'rn'
    );
    sock.write('Hello world');
    sock.close(); // HTTP 1.0 signals end of packet by closing the socket
});
server.listen(SOME_PORT);

从这里您可以按照需要处理HTTP请求的任何方式修改代码。

通常,使用http模块或更高级别之类的诸如Connect Framework或Express.js之类的更高级别,但知道此技巧有时会有所帮助。

我有一次使用net模块编写了自己的HTTP服务器是因为我需要实现流媒体多部分服务器,以便我可以流式传输MJPEG视频流。http模块假设一个请求/响应模型,该模型与我需要的连接/流模型不符

一个人可以通过普通的TCP插座发送HTTP响应,因为这正是HTTP模块本身所做的(它构建在Net模块的顶部(。但是,它要求您编写遵循HTTP协议的代码,以进行连接,收到请求和发送响应。

但是,您要问的并没有真正的意义。每个TCP套接字都需要两端的某些协议(即使是自定义协议(才能知道如何进行交流。因此,如果您说协议是HTTP,因此您需要发送HTTP响应,那么您不妨使用预构建的HTTP模块而不是重建所有内容。

如果出于某种原因,您在TCP套接字上还有其他一些协议,现在您只想在该插座上发送HTTP响应,则必须找到或编写自己的代码才能构建一个遵循所有内容的HTTP响应适当的HTTP规则。可以做到 - 这只是工作,并且有很多细节了解规范,因此您确保涵盖了所有规则和特殊情况。

我们的节点JS服务器使用NET模块进行TCP/IP通信,是否可以使用Net模块发送HTTP响应?

是的,这就是HTTP模块所做的。

我是否必须使用HTTP模块发送HTTP响应?

您不必使用HTTP模块。这只是创建HTTP响应并遵循所有HTTP规范的代码。您可以编写自己的代码,如果您真的愿意,可以做类似的事情。HTTP模块的重点是允许您在所有预编写的代码之上构建,而不是自己重新实现。

最新更新