Основной ответ уже был дан тут:
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
});