【发布时间】:2017-09-14 16:39:10
【问题描述】:
我想在我的node-http-proxy 应用程序中通过http.Agent 和https.Agent 启用连接池。为此,我建立了一个安全代理,如下所示:
const secureAgent = new https.secureAgent({ keepAlive: true });
(为简洁起见,我省略了互补的 http 代理。)
我创建了一个代理服务器,如下所示:
const proxy = httpProxy.createProxyServer({});
最后我在 Connect 中间件中代理一个请求,如下所示:
proxy.web(req, res {
agent: isSecure ? secureAgent : agent,
target: ...,
secure: false,
});
这似乎适用于大多数请求,但每隔几分钟我就会看到如下所示的错误:
{
"message": "Parse Error",
"stack": "Error: Parse Error\n at TLSSocket.socketOnData (_http_client.js:411:20)\n at emitOne (events.js:96:13)\n at TLSSocket.emit (events.js:191:7)\n at readableAddChunk (_stream_readable.js:178:18)\n at TLSSocket.Readable.push (_stream_readable.js:136:10)\n at TLSWrap.onread (net.js:560:20)",
"bytesParsed": 215,
"code": "HPE_INVALID_CONSTANT",
"__error_callsites": [
{},
{},
{},
{},
{},
{}
],
"level": "error",
"timestamp": "2017-04-18T17:34:09.735Z"
}
从粗略的阅读中可以看出,HPE_INVALID_CONSTANT 似乎在响应格式错误时出现。但是,在引入安全代理之前,这些响应都很好。
有没有人知道这里发生了什么或者我该如何解决?
注意:此错误发生在 Docker 容器中的 Node v7.9.0 上,通过 FROM node:7.9。到目前为止,我只在HEAD 请求中观察到这一点——这一定是有原因的。
【问题讨论】:
-
您的请求参数中是否有空格,例如 ?a="ab"
-
我没有详尽的请求参数列表,尽管我想说在这种特殊情况下这似乎不太可能 - 请注意这些是对客户站点的代理请求,因此它们可以是任何东西。跨度>
-
当然我很想知道你是如何解决这个问题的。
-
你发现问题了吗?
标签: javascript node.js ssl proxy node-http-proxy