Ответ
Классический HTTP/1.x (самая распространенная версия) основан на протоколе TCP (Transmission Control Protocol).
Как это работает:
- Клиент (браузер или
http-модуль Node.js) устанавливает TCP-соединение с сервером (обычно на порт 80 для HTTP или 443 для HTTPS). - По установленному надежному TCP-каналу передается текстовый HTTP-запрос.
- Сервер отправляет HTTP-ответ по тому же TCP-соединению.
- Соединение может быть закрыто или сохранено для повторного использования (keep-alive).
Пример низкоуровневого TCP-клиента на Node.js, отправляющего HTTP-запрос:
const net = require('net');
const client = net.createConnection({ port: 80, host: 'example.com' }, () => {
// После подключения отправляем сырой HTTP-запрос
client.write('GET / HTTP/1.1rn');
client.write('Host: example.comrn');
client.write('Connection: closern');
client.write('rn'); // Пустая строка - конец заголовков
});
client.on('data', (data) => {
console.log('Ответ от сервера:');
console.log(data.toString()); // Выведет HTTP-заголовки и тело
client.end();
});
client.on('end', () => {
console.log('Соединение закрыто');
});
Эволюция:
- HTTP/2 также работает поверх TCP, но использует бинарные фреймы и мультиплексирование для большей эффективности.
- HTTP/3 — это новая версия, которая отказывается от TCP в пользу протокола QUIC, работающего поверх UDP. QUIC решает проблемы задержки при установке TCP-соединения и «блокировки начала очереди» (head-of-line blocking).
Таким образом, для HTTP/1.1 и HTTP/2 ответ — TCP. Для HTTP/3 — QUIC (поверх UDP).