如何通过正文有效载荷发出HTTP / 2请求?

时间:2018-08-27 04:42:08

标签: node.js http2

我正在寻找打开HTTP / 2流并使用该流发出多个HTTP / 2 POST请求。每个POST请求都会有自己的主体有效负载。

我目前有以下代码,该代码适用于不需要有效负载的请求,但是我不确定如何为需要有效负载的请求自定义它。

我已经阅读了RFC 7540和关于SO的几乎所有相关文章,但是我仍然发现很难使用有效内容正文来编写HTTP / 2 的工作代码。

例如:

  • 是使用stream.write推荐的方式发送数据帧,还是应该使用http2提供的内置功能?
  • 我是否以纯文本形式传递参数,并且http2协议负责二进制编码,还是我自己进行编码?
  • 我应该如何修改以下代码以发送有效内容正文?

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?'))

1 个答案:

答案 0 :(得分:0)

  • 您需要做的第一件事是将主体数据转换为缓冲区

    var buffer = new Buffer(JSON.stringify(body));

  • 您需要使用Content-Type和Content-Length键更新connection.request对象。注意,Content-Length是缓冲区的长度
   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));