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

lei*_*lei 0 node.js

我们的 Node JS 服务器使用 net 模块进行 tcp/ip 通信,是否可以使用 net 模块发送 http 响应?我必须使用http模块来发送http响应吗?

sle*_*man 5

我想添加一些关于使用常规套接字编程发送 HTTP 响应到底需要什么的额外信息。

我一生中至少编写过 4 次 HTTP 服务器(第一次是为了好玩,后来是为了工作),我想向所有有兴趣找出实现符合标准的 HTTP 响应所需的最小努力的人指出 James Marshall 的出色贡献HTTP 变得非常简单。该页面自 1998 年就存在,至今仍然是我最喜欢的参考资料之一,了解RFC 2616(HTTP 规范)真正需要什么以及可以省略什么。

我之前曾在 Node 中编写过自己的 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 OK\r\n' +
        '\r\n'
    );

    sock.write('Hello world');
    sock.close(); // HTTP 1.0 signals end of packet by closing the socket
});

server.listen(SOME_PORT);
Run Code Online (Sandbox Code Playgroud)

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

一般来说,使用模块之类的东西或连接框架或Express.jshttp之类的更高级别的东西通常更容易,但了解这个技巧有时会很有帮助。

有一次我使用该模块编写了自己的 http 服务器,net因为我需要实现一个流式多部分服务器,以便我可以流式传输 mjpeg 视频流。该http模块采用的请求/响应模型不适合我需要的连接/流模型