【发布时间】:2016-01-13 14:55:41
【问题描述】:
前几天我在使用 NodeJS 发出 HTTP 请求时收到了HPE_INVALID_CONSTANT。它们最近神秘地停止了,但我仍然感到困惑和好奇 HPE_INVALID_CONSTANT 到底想告诉我什么。
我的谷歌搜索结果有点偏向 NodeJS,所以我没有选择任何更笼统地描述这意味着什么的东西。它看起来像一个系统级错误,因为它都是大写的。
【问题讨论】:
前几天我在使用 NodeJS 发出 HTTP 请求时收到了HPE_INVALID_CONSTANT。它们最近神秘地停止了,但我仍然感到困惑和好奇 HPE_INVALID_CONSTANT 到底想告诉我什么。
我的谷歌搜索结果有点偏向 NodeJS,所以我没有选择任何更笼统地描述这意味着什么的东西。它看起来像一个系统级错误,因为它都是大写的。
【问题讨论】:
认为这个答案已经晚了,但它可以帮助一些人。
我也遇到了这个问题,并意识到 NodeJS 不支持 HTTP 0.9,服务器的响应不包含标头。事实上,在 NodeJS 文档中显示了对 1.0 和 1.1 的 http 请求的支持。
您可以在本期阅读更多here。
【讨论】:
HPE_INVALID_CONSTANT 表示Http Parse Error,无效常量表示响应格式错误。所以解析器无法解析!
【讨论】:
我遇到这个问题是因为我试图压缩太小的文件。在我的具体情况下,我正在创建一个 83 字节的文件的读取流,然后将其通过管道传输到 gzip 中,然后最终将其传输到响应中
fs.createReadStream(file_path).pipe(gzip.createGzip()).pipe(res);
在请求者方面,然后我试图解压缩文件
stream = request({"url": "https://example.com/getFile", "timeout": 200000});
//This is where the error was getting thrown
stream.pipe(gzip.createGunzip())
似乎尝试压缩然后解压缩大小小于 200 字节的文件会完全破坏这一点,所以这是我遇到的一个问题。我想我的故事的寓意是不要压缩超小的文件!
【讨论】:
在请求 URL 中使用未解码的参数时,我遇到了同样的问题。
例子:
请求http://someaddress.com?query=something with whitespaces会导致错误
Error: Parse Error
at TLSSocket.socketOnData (_http_client.js:440:20)
at emitOne (events.js:116:13)
at TLSSocket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at TLSSocket.Readable.push (_stream_readable.js:208:10)
at TLSWrap.onread (net.js:597:20)
bytesParsed: 0,
code: 'HPE_INVALID_CONSTANT',
对http://someaddress.com?query=something%20encoded%20with%20whitespaces 的请求可以正常工作
【讨论】: