📜  在 Node.js 中用于执行 HTTP 请求和响应的不同类型的模块(1)

📅  最后修改于: 2023-12-03 15:23:14.175000             🧑  作者: Mango

在 Node.js 中用于执行 HTTP 请求和响应的不同类型的模块

在 Node.js 中,有许多不同的模块可用于执行 HTTP 请求和响应。这些模块包括 httphttpshttp2http2。下面我们将对这些模块进行简要介绍。

http
const http = require('http');

http 模块是 Node.js 内置的一个模块,可用于执行 HTTP 的客户端和服务器端应用。你可以使用 http.createServer() 方法来创建一个 HTTP 服务器,例如:

const http = require('http');
http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(3000, '127.0.0.1');

这会创建一个监听在 127.0.0.1:3000 上的 HTTP 服务器。

https
const https = require('https');

https 模块是 http 模块的扩展,添加了支持 SSL/TLS 安全套接字的功能。同样,你可以使用 https.createServer() 方法来创建一个 HTTPS 服务器,例如:

const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('hello world\n');
}).listen(443);

这会创建一个监听在 443 端口的 HTTPS 服务器。

http2
const http2 = require('http2');

http2 模块是 http 模块的进一步扩展,支持 HTTP/2 协议。你可以使用 http2.createSecureServer() 方法创建一个安全的 HTTP/2 服务器,例如:

const http2 = require('http2');
const fs = require('fs');

const server = http2.createSecureServer({
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
});

server.on('error', (err) => console.error(err));
server.on('stream', (stream, headers) => {
  stream.respond({
    'content-type': 'text/html',
    ':status': 200
  });
  stream.end('<h1>Hello World</h1>');
});

server.listen(8443);

这会创建一个安全的 HTTP/2 服务器,监听在 8443 端口。

http2-client
const http2 = require('http2');
const client = http2.connect('https://localhost:8443');

const req = client.request({':path': '/'});

req.on('response', (headers, flags) => {
  for (const name in headers) {
    console.log(`${name}: ${headers[name]}`);
  }
});

req.setEncoding('utf8');

let data = '';
req.on('data', (chunk) => {
  data += chunk;
});

req.on('end', () => {
  console.log(`\n${data}`);
});

req.end();

http2-client 模块是用于便捷地发送 HTTP/2 请求的模块。以上代码展示了如何使用 http2.connect()client.request() 方法发送 HTTP/2 请求,并监听响应的处理。