Node.js 中的 http.ServerResponse.addTrailers() 函数

2025年3月20日 | 阅读 4 分钟

在 Node.js 环境中的 HTTP 服务器,http.ServerResponse.addTrailers() 是在发送附加 HTTP 头部时使用的一个方法。这个额外的 HTTP 头部块,通常称为“尾部”(trailers),在 HTTP 响应的主头部已经发送之后传输。对于需要传输附加元数据的协议,这些元数据在响应主体发送完成后才能提供,实现这些协议至关重要。我们将重点介绍 addTrailers() 方法,并尽可能全面地介绍其语法、用法和示例。这将有助于读者理解该方法在 Node.js Web 服务器开发的大背景下是如何实际使用的。

HTTP 尾部

在深入了解 addTrailers() 的细节之前,我们应该先了解一下 HTTP 尾部。HTTP 尾部 类似于常规的 HTTP 头部,但允许出现在响应主体的后面。服务器可以使用尾部来提供在处理响应主体内容之前或同时无法提供的信息。例如,校验和、身份验证令牌和其他信息可能直到整个响应主体发送完成后才能计算出来。

HTTP/1.1 规范定义了“Trailer”头部,用于指示哪些头部在尾部部分。这对于某些特定应用程序很有帮助,例如分块传输编码,其中数据以一系列块的形式发送。包含尾部允许服务器有效地将补充信息与主体一起传输,从而优化通信。

addTrailers() 的语法

addTrailers() 方法是 Node.js 中 http.ServerResponse 类的一部分。使用该方法的语法如下:

参数

  • Headers:一个对象或键值对数组,表示我们要添加为尾部的 HTTP 头部。键必须是字符串,相应的值可以是字符串或字符串数组。

addTrailers()

  1. 非阻塞:此 addTrailers() 方法是一个非阻塞方法。这意味着我们程序的执行不会因为发送尾部而阻塞。它会在响应完成后发送尾部,并且必须在 end() 函数之前调用。您需要在响应对象上调用 end() 方法之前调用 addTrailers()。如果我们尝试在响应关闭后添加尾部,它将不起作用,并可能导致错误。
  2. 对分块响应的支持:通过使用 addTrailers() 方法可以支持分块响应,当服务器的响应是分块的。它允许在最后一个数据块之后馈送附加信息。
  3. 头部管理:使用 addTrailers() 来启用主响应中默认包含的头部。

addTrailers() 的示例用法

在这种情况下,将调用 addTrailers() 方法,以响应分块服务器响应。例如,它允许在使用数据块在最后一个数据块之后馈送信息时使用尾部。

1. 头部管理

使用 addTrailers() 函数来启用主响应中默认包含的头部。

输出

http.ServerResponse.addTrailers() function in Node.js

说明

在此示例中,我们构建了一个简单的 HTTP 服务器,它监听在 3000 端口。它响应一个“Hello, World!”的消息,但在关闭之前,我们附加了一个名为 X-Custom-Trailer 的尾部头部。由于客户端收到相同的响应,它将看到尾部头部以及完整的 HTTP 响应。

2. 在分块传输编码中发送尾部

现在,让我们扩展前面的示例,展示如何在分块传输编码中发送尾部。这是尾部很有用的一个常见场景,尤其是在处理大文件或数据流时。

输出

http.ServerResponse.addTrailers() function in Node.js

说明

在分块传输的这个示例中,服务器在关闭响应之前发送多个数据块。addTrailers() 方法添加了一个另一个头部,该头部提供了有关发送的数据块的信息,这对于可能需要验证或进一步处理接收到的数据的客户端来说非常有用。

客户端处理尾部

当客户端向使用尾部的服务器发送请求时,应该处理客户端。在典型的使用场景中,客户端通常使用库或框架,甚至是在浏览器中运行的某种应用程序。在任何实现中,客户端都可以使用 getResponseHeader() 方法,当它们使用 XMLHttpRequest 或 Fetch API 来访问尾部时。