Основной ответ уже был дан тут:
https://qna.habr.com/answer?answer_id=2174328#answ...
Судя по заголовкам, которые
requests использует по-умолчанию (даже без использования
Session), а именно наличию
connection: "keep-alive", keep alive режим работает из коробки, и, очевидно, правильно.
А
node-fetch нет. Но это можно исправить, см. мой ответ.
Просто выставить заголовок недостаточно, заголовок это просто текст.
Другое отличие — порядок заголовков. Хотя это вряд ли имеет значение.
И не существует таких заголовков:
"authority",
"method",
"path",
"scheme".
Есть
":authority",
":method",
":path",
":scheme", псевдо-заголовки HTTP/2.
requests — HTTP/1.1 библиотека.
---
import fetch from "node-fetch";
import http from "node:http";
import https from "node:https";
const httpAgent = new http.Agent({keepAlive: true});
const httpsAgent = new https.Agent({keepAlive: true});
function agent(_parsedURL) {
if (_parsedURL.protocol === "http:") {
return httpAgent;
} else {
return httpsAgent;
}
}
const response = await fetch("https://example.com/", {
agent
});