Как включить поддержку HTTP в узле «http-запрос» в Node-RED?

На Node-RED я настраиваю внешний интерфейс, который взаимодействует с серверной частью API, однако я не могу использовать API из-за того, что http «keep-alive» невозможен на узле Node-RED «http request».

Я разрабатываю внешний интерфейс на панели инструментов Node-RED, который взаимодействует с бэкэндом API мыла, который сначала требует входа в API для выполнения последующих запросов API. Серверная часть ожидает, что я сначала отправлю учетные данные на URL-адрес http://10.10.10.10:8888/, а затем ответит новым URL-адресом в заголовке местоположения (пример ответа http://10.10.10.10:8888/lskdh234hv02n), этот новый URL-адрес я должен использовать в следующих запросах API.

Чтобы использовать вновь предоставленный URL-адрес в ответе, первый HTTP-запрос должен держать первоначальный HTTP-запрос открытым с помощью свойства keep-alive. Однако этого не происходит при отправке HTTP-запроса с узла «http-запрос» на Node-RED. Я подтвердил это с помощью wireshark и сравнил захват с другим захватом с помощью postman при выполнении той же активности API.

Когда я использую почтальон, он работает как шарм, и вы можете сказать, что на http происходит поддержка активности.

В Node-RED я попытался ввести заголовок «connection: keep-alive» в узле перед HTTP-запросом, однако 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» установлены правильно, но «соединение» все еще закрыто.

Теперь я начинаю думать, что узел http-запросов Node-RED не разрешает повторное использование http-соединения (постоянное http-соединение), и мне интересно, есть ли обходной путь для Node-RED, позволяющий ему или некоторым настройкам самого Node-RED сделать он способен поддерживать постоянное http-соединение?

Обновлено: На самом деле, независимо от того, установлено ли в заголовке соединения значение keep-alive или close, я всегда вижу флаг FIN в TCP-соединении, инициированном Node-RED (а не сервером). Похоже, что Node-RED не поддерживает HTTP-соединения с заголовком keep-alive.

Ценю твою помощь

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
2 643
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Узел http-запроса в настоящее время не настроен для одного постоянного соединения. Текущая реализация предназначена для выполнения одного запроса для каждого входящего сообщения и последующего вывода одного ответа.

То, что вы описываете, вероятно, является действительным запросом функции, который лучше всего обсуждать на форуме Node-RED, и если вы хотите посмотреть на добавление режима к узлу для повторного использования одного соединения, тогда, вероятно, будет рассмотрен пул реквест. благоприятно (пожалуйста, сначала обсудите на форуме и не открывайте вопрос).

Беглый взгляд на документацию модуля запрос npm подразумевает, что установка параметра forever может помочь.

Я понимаю. Не могли бы вы помочь, как поместить эту опцию навсегда в узел http-запроса node-red?

Ibrahim Al Mahfooz 29.07.2019 06:04

Нет, это не будет тривиальным изменением. Вам придется провести некоторое исследование, и это потребует выбора опции и, вероятно, большого количества тестов.

hardillb 29.07.2019 07:57

Я понимаю. Спасибо хардиллб.

Ibrahim Al Mahfooz 30.07.2019 16:38
Ответ принят как подходящий

Удалось включить постоянство HTTP, что устранило проблему. Просто я использовал узел www-request (альтернативный расширенный узел, аналогичный основному узлу http-request) и включил функцию навсегда в www-request.

Вам следует создать новую тему на форуме Node-RED, чтобы узнать, примет ли проект запрос на добавление этого в узел.

hardillb 01.08.2019 15:09

Хотя немного поздновато. Я сделал пул реквест исходного модуля www-request Node-RED и был объединен, и теперь узел запроса поддерживает возможность включения/отключения постоянного соединения.

Ibrahim Al Mahfooz 14.02.2021 08:09

Другие вопросы по теме