如何在Node-RED的“ http请求”节点中启用HTTP保持活动状态?

时间:2019-07-28 15:40:24

标签: node.js node-red

在Node-RED上,我正在设置与API后端接口的前端,但是由于在Node-RED“ http request”节点上无法进行http“ keep-alive”,所以我无法使用该API

我正在设计Node-RED仪表板上的前端,该前端与soap API后端接口,该后端首先需要API登录才能执行后续API请求。后端希望我先将凭据发送到url http://10.10.10.10:8888/,然后在locaiton标头中返回一个新URL(示例响应http://10.10.10.10:8888/lskdh234hv02n),这个新URL必须在下一个中使用API记录。

为了通过响应使用新提供的URL,第一个HTTP请求应使用keep-alive属性使初始HTTP请求保持打开状态。但是,当从Node-RED上的“ http请求”节点发送HTTP请求时,不会发生这种情况。我使用Wireshark确认了这一点,并在执行相同的API活动时将捕获的捕获与使用postman的捕获进行了比较。

当我使用邮递员时,它就像魅力一样工作,您可以判断出正在进行的HTTP保持活动状态。

在Node-RED上,我尝试在http请求节点之前注入标头“ connection:keep-alive”,但是Node-Red特别是用“ connection:close \ r \ n”覆盖了标头值。我通过发送其他标头(如User-Agent,Test-Header)确认了此行为,我可以在请求中看到它们,它们到达后端,但连接标头仍带有“ close \ r \ n”

这是我在http请求节点之前注入的用于操纵连接头的内容:

msg.headers = {
"connection" : "keep-alive",
"my-custom-header": "samplevalue",
"User-Agent": "My User Agent"
}
return msg; 

我看到正确设置了“ User-Agent”和“ my-custom-header”,但“连接”仍然关闭。

现在,我开始认为Node-RED http requets节点不允许HTTP连接重用(持久的http连接),并且我想知道Node-RED是否存在允许它的解决方法,或者Node-RED上的某些设置本身使其能够维持http持久连接?

编辑:实际上,无论连接头设置为保持活动还是关闭,我总是在由Node-RED(不是服务器)发起的TCP连接中看到FIN标志。似乎Node-RED没有使用keep-alive标头维护HTTP连接。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

http-request节点当前尚未真正为单个持久连接设置。当前的实现旨在对每个传入消息进行单个请求,然后输出单个响应。

您所描述的可能是一个有效的功能请求,将在Node-RED论坛上进行最佳讨论,如果您希望向节点添加模式以重用单个连接,则可能会请求请求受到好评(请先在论坛上进行讨论,不要发表任何意见)。

快速浏览request npm模块文档意味着设置forever选项可能会有所帮助。

答案 1 :(得分:1)

设法启用HTTP持久性,此问题已得到解决。简单地,我使用了www-request节点(类似于核心http-request节点的替代增强节点)并启用了www-request的永久功能。