#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 — Возможно, я был немного резок, используя слово «принудительно»! Таким образом, это добровольно, но может быть принудительно с одной стороны, со стороны веб-сервера.