当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js ServerHttp2Stream http2stream.respondWithFD(fd[, headers[, options]])用法及代码示例


http2stream.respondWithFD(fd[, headers[, options]])

历史
版本变化
v14.5.0、v12.19.0

允许明确设置日期标题。

v12.12.0

fd 选项现在可能是 FileHandle

v10.0.0

现在支持任何可读的文件说明符,不一定是常规文件。

v8.4.0

添加于:v8.4.0


参数

启动从给定文件说明符中读取其数据的响应。不对给定的文件说明符执行验证。如果在尝试使用文件说明符读取数据时发生错误,将使用标准 INTERNAL_ERROR 代码使用 RST_STREAM 帧关闭 Http2Stream

使用时,Http2Stream对象的Duplex接口会自动关闭。

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

const server = http2.createServer();
server.on('stream', (stream) => {
  const fd = fs.openSync('/some/file', 'r');

  const stat = fs.fstatSync(fd);
  const headers = {
    'content-length': stat.size,
    'last-modified': stat.mtime.toUTCString(),
    'content-type': 'text/plain; charset=utf-8'
  };
  stream.respondWithFD(fd, headers);
  stream.on('close', () => fs.closeSync(fd));
});

可以指定可选的 options.statCheck 函数,以使用户代码有机会根据给定 fd 的 fs.Stat 详细信息设置附加内容头。如果提供了statCheck 函数,则http2stream.respondWithFD() 方法将执行fs.fstat() 调用以收集有关提供的文件说明符的详细信息。

offsetlength 选项可用于将响应限制为特定范围子集。例如,这可以用于支持 HTTP Range 请求。

文件说明符或FileHandle在流关闭时没有关闭,因此一旦不再需要它就需要手动关闭。不支持同时对多个流使用相同的文件说明符,这可能会导致数据丢失。支持在流完成后重新使用文件说明符。

当设置options.waitForTrailers 选项时,将在排队要发送的最后一块有效负载数据后立即发出'wantTrailers' 事件。然后可以使用http2stream.sendTrailers() 方法将尾随标头字段发送到对等方。

当设置options.waitForTrailers 时,在传输最后一个DATA 帧时,Http2Stream 不会自动关闭。用户代码必须调用 http2stream.sendTrailers()http2stream.close() 来关闭 Http2Stream

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

const server = http2.createServer();
server.on('stream', (stream) => {
  const fd = fs.openSync('/some/file', 'r');

  const stat = fs.fstatSync(fd);
  const headers = {
    'content-length': stat.size,
    'last-modified': stat.mtime.toUTCString(),
    'content-type': 'text/plain; charset=utf-8'
  };
  stream.respondWithFD(fd, headers, { waitForTrailers: true });
  stream.on('wantTrailers', () => {
    stream.sendTrailers({ ABC: 'some value to send' });
  });

  stream.on('close', () => fs.closeSync(fd));
});

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 http2stream.respondWithFD(fd[, headers[, options]])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。