Node.js

Node.js 知识量:9 - 37 - 115

7.3 构建HTTP服务><

HTTP- 7.3.1 -

HTTP(HyperText Transfer Protocol)是一种应用层协议,用于在网络中传输超文本(例如网页)。HTTP 的基本传输单位是“请求”和“响应”。当一个客户端(如Web浏览器)想获取某个网页时,它会向服务器发送一个HTTP请求,然后服务器会返回一个HTTP响应,其中包含所请求的网页。

HTTP 协议的主要特点如下:

  • 无连接:每次请求/响应交换之后,连接即被关闭。需要再次交换时,需要重新建立连接。

  • 无状态:服务器不会为每个请求保持状态。也就是说,同一个客户端的连续请求之间没有关联。

  • 支持 B/S 模式:即浏览器(Browser)和服务器(Server)之间的通信。

  • 简单快速:客户端向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、POST、PUT、DELETE 等。由于 HTTP 协议简单,使得http应用广泛。

  • 灵活:HTTP 允许传输任意类型的数据,传输的类型由 Content-Type 加以标记。

  • 无须长时间连接:HTTP 1.0 通信都是短时间的,一旦通信完成,连接即被关闭。一些应用需要更长时间的连接,它们需要创建持久的连接(HTTP 1.1)。

  • 头部自定义:HTTP 头部字段可以包含大量关于请求和响应的信息,以及自定义的头部字段。

HTTP/1.1 是 HTTP 的主要版本,它引入了持久连接、缓存、范围请求等特性。HTTP/2 是 HTTP 的最新版本,它对 HTTP/1.1 进行了改进,包括多路复用、头部压缩、服务器推送等特性。

http模块- 7.3.2 -

Node.js中的http模块是用于创建HTTP服务器的核心模块之一。通过http模块,可以轻松地创建自己的HTTP服务器,并处理HTTP请求和响应。

要使用http模块,需要先导入它。以下是一个简单的示例,演示如何使用http模块创建一个HTTP服务器:

const http = require('http');  
  
const server = http.createServer((req, res) => {  
  res.writeHead(200, { 'Content-Type': 'text/plain' });  
  res.end('Hello, World!');  
});  
  
server.listen(3000, () => {  
  console.log('Server listening on port 3000');  
});

在上面的示例中,首先通过require('http')导入了http模块。然后,使用http.createServer()方法创建了一个HTTP服务器。这个方法接受一个回调函数作为参数,该回调函数会在每次接收到请求时被调用。在回调函数中,通过res.writeHead()设置了响应的头部信息,并通过res.end()发送了响应内容。最后,使用server.listen()方法指定了服务器监听的端口号,并打印了一条消息表示服务器正在监听。

HTTP客户端- 7.3.3 -

Node.js的http模块提供了创建HTTP客户端的工具,用于向HTTP服务器发起请求。具体来说,可以使用http模块中的http.request()方法来创建一个HTTP客户端。

http.request()方法接受一个选项对象和一个回调函数作为参数。选项对象包含请求的参数,如请求的URL、请求方法、请求头等。回调函数在请求完成后被调用,并接收到一个参数,该参数是一个http.ClientResponse的实例,表示服务器的响应。

以下是一个使用http.request()方法创建HTTP客户端的示例:

const http = require('http');  
  
const options = {  
  hostname: 'www.example.com',  
  port: 80,  
  path: '/',  
  method: 'GET'  
};  
  
const req = http.request(options, (res) => {  
  console.log(`statusCode: ${res.statusCode}`);  
  res.on('data', (chunk) => {  
    console.log(chunk.toString());  
  });  
});  
  
req.on('error', (e) => {  
  console.error(`请求遇到问题: ${e.message}`);  
});  
  
req.end();

在上面的示例中,首先定义了一个选项对象,指定了请求的URL、端口、路径和请求方法。然后,使用http.request()方法创建了一个HTTP客户端,并将回调函数传递给该方法。在回调函数中,打印了响应的状态码,并监听了响应的数据事件来处理响应内容。最后,通过调用req.end()发送了请求。

需要注意的是,http模块还提供了http.get()方法,该方法是一个更简单的HTTP客户端工具,用于向服务器发起GET请求。如果只需要发送简单的GET请求,可以使用http.get()方法来简化代码。