Ответ
HTTP (Hypertext Transfer Protocol) — это протокол прикладного уровня (7-й уровень модели OSI/4-й уровень TCP/IP), который определяет формат и смысл сообщений между клиентом (браузер) и сервером. TCP (Transmission Control Protocol) — это протокол транспортного уровня (4-й уровень OSI/3-й уровень TCP/IP).
Взаимосвязь: HTTP полностью полагается на TCP для надежной передачи своих данных.
Как это работает:
- Клиент (например, браузер) устанавливает TCP-соединение с сервером (обычно на порт 80 для HTTP или 443 для HTTPS).
- Поверх установленного TCP-канала клиент отправляет HTTP-запрос в виде текстовых команд.
- Сервер обрабатывает запрос и отправляет обратно HTTP-ответ по тому же TCP-соединению.
- После завершения обмена TCP-соединение может быть закрыто (для HTTP/1.0) или использовано для новых запросов (Keep-Alive в HTTP/1.1).
Пример ручной отправки HTTP-запроса через TCP-сокет (Java):
import java.net.Socket;
import java.io.*;
public class SimpleHttpClient {
public static void main(String[] args) throws IOException {
// 1. Установка TCP-соединения
Socket socket = new Socket("example.com", 80);
// 2. Формирование и отправка HTTP-запроса поверх TCP
OutputStream out = socket.getOutputStream();
PrintWriter writer = new PrintWriter(out);
writer.println("GET / HTTP/1.1");
writer.println("Host: example.com");
writer.println(); // Пустая строка — конец заголовков
writer.flush();
// 3. Чтение HTTP-ответа от сервера
InputStream in = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 4. Закрытие соединения
socket.close();
}
}
Эволюция:
- HTTP/1.1: Может использовать одно TCP-соединение для нескольких запросов (pipelining, Keep-Alive), но страдает от Head-of-Line Blocking.
- HTTP/2: Решает проблему HoL, вводя мультиплексирование — множество потоков HTTP-сообщений в рамках одного TCP-соединения.
- HTTP/3: Заменяет транспортный протокол TCP на QUIC (работает поверх UDP), чтобы решить проблему HoL на транспортном уровне и ускорить установление соединения.