http2stream.respondWithFD(fd[, headers[, options]])
版本 | 变化 |
---|---|
v14.5.0、v12.19.0 | 允许明确设置日期标题。 |
v12.12.0 |
|
v10.0.0 | 现在支持任何可读的文件说明符,不一定是常规文件。 |
v8.4.0 | 添加于:v8.4.0 |
参数
fd
<number> | <FileHandle> 可读文件说明符。headers
<HTTP/2 Headers Object>options
<Object>statCheck
<Function>waitForTrailers
<boolean> 当true
时,Http2Stream
将在最后的DATA
帧发送后发出'wantTrailers'
事件。offset
<number> 开始读取的偏移位置。length
<number> 要从 fd 发送的数据量。
启动从给定文件说明符中读取其数据的响应。不对给定的文件说明符执行验证。如果在尝试使用文件说明符读取数据时发生错误,将使用标准 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()
调用以收集有关提供的文件说明符的详细信息。
offset
和length
选项可用于将响应限制为特定范围子集。例如,这可以用于支持 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));
});
相关用法
- Node.js ServerHttp2Stream http2stream.respondWithFile(path[, headers[, options]])用法及代码示例
- Node.js ServerHttp2Stream http2stream.respond([headers[, options]])用法及代码示例
- Node.js http2stream.respond()用法及代码示例
- Node.js http2stream.rstCode用法及代码示例
- Node.js ServerHttp2Stream http2stream.pushStream(headers[, options], callback)用法及代码示例
- Node.js http2stream.setTimeout()用法及代码示例
- Node.js http2stream.id用法及代码示例
- Node.js http2stream.closed用法及代码示例
- Node.js http2stream.pushAllowed用法及代码示例
- Node.js http2stream.sentHeaders用法及代码示例
- Node.js http2stream.endAfterHeaders用法及代码示例
- Node.js http2stream.pending用法及代码示例
- Node.js http2stream.headersSent用法及代码示例
- Node.js http2stream.close()用法及代码示例
- Node.js http2stream.state用法及代码示例
- Node.js http2stream.session用法及代码示例
- Node.js http2stream.destroyed用法及代码示例
- Node.js http2stream.additionalHeaders()用法及代码示例
- Node.js http2stream.priority()用法及代码示例
- Node.js http2stream.sentInfoHeaders用法及代码示例
- Node.js http2session.destroyed用法及代码示例
- Node.js http2session.type用法及代码示例
- Node.js http2session.ping()用法及代码示例
- Node.js http2session.connecting用法及代码示例
- Node.js http2session.setTimeout()用法及代码示例
注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 http2stream.respondWithFD(fd[, headers[, options]])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。