您的位置:

HTTP 状态码101 - 切换协议

HTTP 状态码101表示服务器正在切换协议。它是一个比较少见的状态码,但仍然在某些场景下被广泛使用。本文将从以下几个方面详细介绍状态码101的含义、用途以及相关的实际应用。

一、101状态码是什么?

在HTTP请求中,状态码是服务器用来告诉客户端请求的处理状态的一种机制。HTTP状态码由三位数字组成,从100到599。其中1xx表示请求已接收,2xx表示请求已成功处理,3xx表示需要进一步操作来完成请求,4xx表示客户端请求错误,5xx表示服务器错误。 HTTP状态码101属于1xx级别的状态码,表示服务器正在切换协议。这种情况通常发生在WebSocket或HTTP/2协议等需要在HTTP连接建立后进行协议切换的情况下。

二、101状态码的使用场景

HTTP状态码101通常用于实现以下协议切换的过程: 1. WebSocket协议切换; WebSocket是一种在单个TCP连接上进行全双工通信的协议。在WebSocket的初始连接建立阶段,客户端会发送一个HTTP请求到服务器。服务器在接收到请求后,如果同意切换到WebSocket协议,就会返回一个HTTP状态码为101的响应,告诉客户端接下来的通信将会使用WebSocket协议。 2. HTTP/2协议切换; HTTP/2是一种新的HTTP协议版本,它使用了二进制协议来更高效地传输数据。在HTTP/2的初始连接建立阶段,客户端会发送一个HTTP请求到服务器。服务器在接收到请求后,如果同意切换到HTTP/2协议,就会返回一个HTTP状态码为101的响应,告诉客户端接下来的通信将会使用HTTP/2协议。

三、101状态码的实际应用

下面是一个使用WebSocket协议的简单示例,展示了HTTP状态码101的实际应用。

const http = require('http');
const WebSocket = require('ws');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World!');
});

const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
  console.log('WebSocket connected');
  
  ws.on('message', (message) => {
    console.log(`Received message: ${message}`);
  });
  
  ws.send('Hello WebSocket!');
});

server.listen(3000, () => {
  console.log('Server listening on port 3000');
});
在上述代码示例中,当客户端发起WebSocket连接请求时,服务器会通过WebSocket.Server监听connection事件来处理连接。在connection事件中,服务器会返回一个HTTP状态码为101的响应,告诉客户端接下来的通信将会使用WebSocket协议。在之后的通信中,客户端和服务器就可以直接发送数据并进行全部双向通信。

四、小结

HTTP状态码101表示服务器正在切换协议,常用于实现WebSocket或HTTP/2等协议的切换过程。在响应中返回状态码为101时,服务器会告诉客户端接下来的通信将使用哪种协议。状态码101虽然比较少用,但在WebSocket和HTTP/2等场景中仍然会被广泛使用。