Node.js 对protobuf序列化二进制响应进行编码以通过http post正文发送响应的正确方法是什么?

Node.js 对protobuf序列化二进制响应进行编码以通过http post正文发送响应的正确方法是什么?,node.js,spring,encoding,utf-8,http-post,Node.js,Spring,Encoding,Utf 8,Http Post,我正试图通过http post从NodeJS客户端向JavaSpring服务器发送一个protobuf message.serializeBinary()提供了一个uint8字节数组,我试图用新的StringDecoder('utf8')对其进行编码。write()。我通过邮寄方式发送,并附上npm请求承诺: const request = require('request-promise') const options = { uri: <some url>, meth

我正试图通过http post从NodeJS客户端向JavaSpring服务器发送一个protobuf

message.serializeBinary()
提供了一个uint8字节数组,我试图用
新的StringDecoder('utf8')对其进行编码。write()
。我通过邮寄方式发送,并附上npm请求承诺:

 const request = require('request-promise')
 const options = {
  uri: <some url>,
  method: 'POST',
  qs: {
    'attr1': 'value1',
    'attr2': new StringDecoder('utf8').write(message.serializeBinary())
  }
}
request(options).then(console.log).catch(console.log)

看起来像是编码问题,我不确定使用什么编码通过http传输协议缓冲区。或者如果我做错了什么,也请指出。

tl;dr解决方案是将qs更改为表单

const options = {
  uri: <some url>,
  method: 'POST',
  form: {
    'attr1': 'value1',
    'attr2': new StringDecoder('utf8').write(message.serializeBinary())
  }
}
const选项={
uri:,
方法:“POST”,
表格:{
“attr1”:“value1”,
“attr2”:新的StringDecoder('utf8')。写入(message.serializeBinary())
}
}

问题是将编码的protobuf作为查询字符串参数传递,该参数是url的一部分。Url具有基于浏览器的可变长度限制,最好将其作为表单数据传递。请参见

您好,先生,我也遇到了与您相同的错误。您是如何解决的?问题是以查询字符串的形式发送的,该字符串根据url长度限制而被截断,我开始将其作为表单数据传递,这就解决了问题。如果您确保将记录保留在较小的一端,则对protobuf进行Base64编码也应该可以
const options = {
  uri: <some url>,
  method: 'POST',
  form: {
    'attr1': 'value1',
    'attr2': new StringDecoder('utf8').write(message.serializeBinary())
  }
}