如何在 Node-RED 中的 'http request' 节点中启用 HTTP keep-alive?
How to enable HTTP keep-alive in the 'http request' node in Node-RED?
在 Node-RED 我正在设置一个 front-end 与 API 后端接口但是我不能使用 API 由于 http "keep-alive" 在 Node-RED "http request" 节点上是不可能的。
我正在 Node-RED 仪表板上设计一个 front-end,它与 soap API 后端接口,首先它需要 API 登录才能执行后续 API 请求。 backed-end 希望我先将凭据发送给 url http://10.10.10.10:8888/, then it reply with a new URL in the locaiton header (sample response http://10.10.10.10:8888/lskdh234hv02n),这个新的 URL 我必须在下一个 API 请求中使用。
为了使用响应新提供的 URL,第一个 HTTP 请求应使用 keep-alive 属性 保持初始 HTTP 请求打开。但是,当从 Node-RED 上的 "http request" 节点发送 HTTP 请求时,这不会发生。我使用 wireshark 确认了这一点,并在执行相同 API activity.
时将捕获与使用邮递员的另一个捕获进行了比较
当我使用邮递员时,它就像魅力一样工作,你可以看出 http 上有一个 keep-alive。
在 Node-RED 上,我尝试在 http 请求节点之前注入 header "connection: keep-alive",但是 Node-Red 正在覆盖此 header 值特别是 "connection: close\r\n"。我通过发送其他 header 来确认此行为,例如 User-Agent、Test-Header,我可以在我的请求中看到它们并且它们到达后端但连接 header 仍在进行中"close\r\n"
这是我在 http 请求节点之前注入以操纵连接 header:
msg.headers = {
"connection" : "keep-alive",
"my-custom-header": "samplevalue",
"User-Agent": "My User Agent"
}
return msg;
我看到 "User-Agent" 和 "my-custom-header" 设置正确,但 "connection" 仍然很接近。
现在我开始认为 Node-RED http 请求节点不允许重用 http 连接(持久的 http 连接),我想知道 Node-RED 上是否有允许它的解决方法或者Node-RED 本身的一些设置使其能够保持 http 持久连接?
编辑: 实际上,无论连接 header 设置为 keep-alive 还是关闭,我总是在由 [发起的 TCP 连接中看到 FIN 标志=46=](不是服务器)。 Node-RED 似乎没有维护与 keep-alive header 的 HTTP 连接。
感谢您的帮助
http-request 节点当前并未真正设置为单个持久连接。当前的实现旨在为每个传入消息发出一个请求,然后输出一个响应。
您所描述的可能是一个有效的功能请求,最好在 Node-RED 论坛上进行讨论,如果您想向节点添加一种模式以重新使用单个连接,那么可以使用拉取请求可能会受到好评(请先在论坛上讨论,不要打开问题)。
快速查看 request npm 模块文档意味着设置 forever
选项可能会有所帮助。
设法启用 HTTP 持久性,从而解决了问题。我简单地使用了 www-request 节点(类似于核心 http-request 节点的替代增强节点)并在 www-request 上启用了永久功能。
在 Node-RED 我正在设置一个 front-end 与 API 后端接口但是我不能使用 API 由于 http "keep-alive" 在 Node-RED "http request" 节点上是不可能的。
我正在 Node-RED 仪表板上设计一个 front-end,它与 soap API 后端接口,首先它需要 API 登录才能执行后续 API 请求。 backed-end 希望我先将凭据发送给 url http://10.10.10.10:8888/, then it reply with a new URL in the locaiton header (sample response http://10.10.10.10:8888/lskdh234hv02n),这个新的 URL 我必须在下一个 API 请求中使用。
为了使用响应新提供的 URL,第一个 HTTP 请求应使用 keep-alive 属性 保持初始 HTTP 请求打开。但是,当从 Node-RED 上的 "http request" 节点发送 HTTP 请求时,这不会发生。我使用 wireshark 确认了这一点,并在执行相同 API activity.
时将捕获与使用邮递员的另一个捕获进行了比较当我使用邮递员时,它就像魅力一样工作,你可以看出 http 上有一个 keep-alive。
在 Node-RED 上,我尝试在 http 请求节点之前注入 header "connection: keep-alive",但是 Node-Red 正在覆盖此 header 值特别是 "connection: close\r\n"。我通过发送其他 header 来确认此行为,例如 User-Agent、Test-Header,我可以在我的请求中看到它们并且它们到达后端但连接 header 仍在进行中"close\r\n"
这是我在 http 请求节点之前注入以操纵连接 header:
msg.headers = {
"connection" : "keep-alive",
"my-custom-header": "samplevalue",
"User-Agent": "My User Agent"
}
return msg;
我看到 "User-Agent" 和 "my-custom-header" 设置正确,但 "connection" 仍然很接近。
现在我开始认为 Node-RED http 请求节点不允许重用 http 连接(持久的 http 连接),我想知道 Node-RED 上是否有允许它的解决方法或者Node-RED 本身的一些设置使其能够保持 http 持久连接?
编辑: 实际上,无论连接 header 设置为 keep-alive 还是关闭,我总是在由 [发起的 TCP 连接中看到 FIN 标志=46=](不是服务器)。 Node-RED 似乎没有维护与 keep-alive header 的 HTTP 连接。
感谢您的帮助
http-request 节点当前并未真正设置为单个持久连接。当前的实现旨在为每个传入消息发出一个请求,然后输出一个响应。
您所描述的可能是一个有效的功能请求,最好在 Node-RED 论坛上进行讨论,如果您想向节点添加一种模式以重新使用单个连接,那么可以使用拉取请求可能会受到好评(请先在论坛上讨论,不要打开问题)。
快速查看 request npm 模块文档意味着设置 forever
选项可能会有所帮助。
设法启用 HTTP 持久性,从而解决了问题。我简单地使用了 www-request 节点(类似于核心 http-request 节点的替代增强节点)并在 www-request 上启用了永久功能。