Node.js 如何使用body负载发出HTTP/2请求?
我希望打开一个HTTP/2流,并使用该流发出多个HTTP/2 POST请求。每个POST请求都有自己的主体有效载荷 我目前有下面的代码,它适用于不需要有效负载的请求,但我不确定如何为需要有效负载的请求定制它 我已经阅读了RFC7540和几乎所有关于SO的相关文章,但我仍然发现使用有效负载体编写HTTP/2的工作代码很困难 例如:Node.js 如何使用body负载发出HTTP/2请求?,node.js,http2,Node.js,Http2,我希望打开一个HTTP/2流,并使用该流发出多个HTTP/2 POST请求。每个POST请求都有自己的主体有效载荷 我目前有下面的代码,它适用于不需要有效负载的请求,但我不确定如何为需要有效负载的请求定制它 我已经阅读了RFC7540和几乎所有关于SO的相关文章,但我仍然发现使用有效负载体编写HTTP/2的工作代码很困难 例如: 使用stream.write是发送数据帧的推荐方式,还是应该使用http2提供的内置函数 我是以明文形式传递参数,而http2协议负责二进制编码,还是我自己编码 我应
- 使用stream.write是发送数据帧的推荐方式,还是应该使用http2提供的内置函数
- 我是以明文形式传递参数,而http2协议负责二进制编码,还是我自己编码
- 我应该如何修改下面的代码以发送有效负载正文
- 您需要做的第一件事是将主体数据转换为缓冲区
- 您需要使用内容类型和内容长度键更新connection.request对象。注意,内容长度是缓冲区的长度
- 最后,您需要通过将主体数据转换为字符串来发送请求
@BarryPollard的可能重复该线程中的问题类似,但没有解释如何保持连接打开;发送.write()后接.end()立即关闭连接,而在这里,我希望保持连接持续打开流应该关闭,但您是否尝试在同一连接上发出另一个请求?注意:如果在设定的时间内没有收到其他请求,大多数服务器将超时并关闭整个连接。
const http2 = require('http2')
const connection = http2.connect('https://www.example.com:443')
const stream = connection.request({
':authority':'www.example.com',
':scheme':'https',
':method': 'POST',
':path': '/custom/path',
}, { endStream: false })
stream.setEncoding('utf8')
stream.on('response', (headers) => {
console.log('RESPONSE', headers)
stream.on('data', (data) => console.log('DATA', data))
stream.on('end', () => console.log('END'))
})
stream.write(Buffer.from('POST-request-payload-body-here?'))
var buffer = new Buffer(JSON.stringify(body));
const stream = connection.request({
':authority':'www.example.com',
':scheme':'https',
':method': 'POST',
':path': '/custom/path',
'Content-Type': 'application/json',
'Content-Length': buffer.length
}, { endStream: false })
stream.end(JSON.stringify(body));