Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用body负载发出HTTP/2请求?_Node.js_Http2 - Fatal编程技术网

Node.js 如何使用body负载发出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协议负责二进制编码,还是我自己编码 我应

我希望打开一个HTTP/2流,并使用该流发出多个HTTP/2 POST请求。每个POST请求都有自己的主体有效载荷

我目前有下面的代码,它适用于不需要有效负载的请求,但我不确定如何为需要有效负载的请求定制它

我已经阅读了RFC7540和几乎所有关于SO的相关文章,但我仍然发现使用有效负载体编写HTTP/2的工作代码很困难

例如:

  • 使用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));