Запросы NTLM в ядре K6 и .NET

#asp.net-core-webapi #ntlm #k6

#asp.net-core-webapi #ntlm #k6

Вопрос:

Я написал нагрузочное тестирование своего API с использованием NTLM auth (здесь я дополнительно проверяю, присутствует ли авторизованный пользователь NTLM в базе данных). Во время повторного запроса:

   var url = 'https://login:*****@localhost:xxxx/api/authorization/logon';
  var payload = { };

  var params = {
    headers: {
      'Content-Type': 'application/json'
    },
  };

   let response = http.post(url, params, {auth: "ntlm"});  
   check(response, {
    'status is 200': (r) => r.status === 200
    });
}
  

у меня ошибка:

ошибка=»Post»https://user :*****@localhost:xxx/api/authorization/logon»: ошибка потока: идентификатор потока 3; HTTP_1_1_REQUIRED».

Почему? Kestrel обслуживает HTTP/1.1

Ответ №1:

Это проблема в том, как работает HTTP-клиент стандартной библиотеки Go, который подробно описан здесь, в котором для конечных точек HTTPS соединение принудительно обновляется до HTTP / 2.0, который не поддерживается протоколом NTLM.

Я не уверен, но, возможно, вы можете отключить это обновление соединения в Kestrel.

Комментарии:

1. Значит, мы должны использовать пользовательский HTTP-клиент?

2. Вы имеете в виду внутри k6? Я думаю, что это не сработает, поскольку k6 предназначен для работы с внутренней HTTP-библиотекой Go и поскольку он также не поддерживает NodeJS и API-интерфейсы браузера, вы не можете использовать пользовательский HTTP-клиент из кода JavaScript, если вы не интегрируете его самостоятельно (т. Е. Не добавите пользовательский HTTP-клиент в исходный код k6).

3. Хорошо, я не понял. Спасибо, Мостафа!

4. @MostafaMoradian, я не думаю, что вы правы. Стандартная библиотека Go (и, следовательно, k6) не форсирует соединения HTTP / 2, она обновляет соединения HTTPS с серверами, которые поддерживают HTTP / 2, до этого протокола, в противном случае использует HTTP / 1.1. Таким образом, я думаю, что сервер в этом случае был по крайней мере частично ответственен. Проблема, на которую вы ссылались, заключается в том, что вы не можете заставить k6 не обновлять соединения, но это не всегда их принудительно.

5. Добро пожаловать, Александр! @na — Возможно, я был немного резок, используя слово «принудительно»! Таким образом, это добровольно, но может быть принудительно с одной стороны, со стороны веб-сервера.

Ответ №2:

вы можете настроить в своей глобальной системной среде включение HTTP1.1

введите описание изображения здесь