← Назад к вопросам

К какому классов протоколов относится HTTP

1.3 Junior🔥 201 комментариев
#REST API и HTTP

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

HTTP: классификация в модели OSI и TCP/IP

HTTP относится к нескольким классификациям протоколов в зависимости от эталонной модели.

Модель OSI (7 слоёв)

HTTP относится к 7-му слою — Application Layer (Приложение)

Это самый верхний слой модели OSI, где находятся все протоколы, напрямую используемые приложениями:

Слой 7 (Application) ← HTTP, HTTPS, FTP, SMTP, DNS, SSH, Telnet
   ↓
Слой 6 (Presentation) — кодирование, сжатие, шифрование
   ↓
Слой 5 (Session) — управление сессиями
   ↓
Слой 4 (Transport) — TCP, UDP
   ↓
Слой 3 (Network) — IP
   ↓
Слой 2 (Data Link) — Ethernet, WiFi
   ↓
Слой 1 (Physical) — кабели, сигналы

Модель TCP/IP (4 слоя)

HTTP относится к 4-му слою — Application Layer

Модель TCP/IP проще и больше используется на практике:

Слой 4 (Application) ← HTTP, HTTPS, FTP, SMTP, DNS
   ↓
Слой 3 (Transport) — TCP, UDP
   ↓
Слой 2 (Internet) — IP (IPv4, IPv6)
   ↓
Слой 1 (Link/Network Interface) — Ethernet, WiFi

Зависимость HTTP от нижних слоёв

HTTP использует TCP (слой Transport):

import socket

# HTTP базируется на TCP соединении
def simple_http_request():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # SOCK_STREAM = TCP
    sock.connect(('example.com', 80))  # TCP соединение на порт 80
    
    # HTTP запрос отправляется поверх TCP
    request = b"GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n"
    sock.send(request)
    
    response = sock.recv(4096)
    print(response.decode('utf-8'))
    sock.close()

simple_http_request()

Классификация по типам

1. По типу коммуникации:

  • Запрос-ответ (Request-Response) — HTTP, FTP, SMTP
  • Потоковый — RTP, RTMP
  • P2P — BitTorrent

2. По безопасности:

  • HTTP (незащищённый) — 80 порт, текст отправляется в открытом виде
  • HTTPS (защищённый) — 443 порт, TLS/SSL шифрование
import requests

# HTTP — небезопасный, данные видны в пути
response = requests.get('http://example.com')  # Не использовать для чувствительных данных

# HTTPS — защищённый, использует шифрование
response = requests.get('https://example.com')  # Безопасно

3. По версиям:

  • HTTP/1.0 — простая версия, каждый запрос новое соединение
  • HTTP/1.1 — keep-alive, множественные запросы в одном соединении
  • HTTP/2 — multiplexing, сжатие заголовков (HPACK)
  • HTTP/3 — QUIC вместо TCP, более быстрый

Стек протоколов в Python запросе

import urllib.request

# Когда ты отправляешь HTTP запрос, в деле участвуют все слои:
response = urllib.request.urlopen('https://api.example.com/users')

# За кулисами происходит:
# 1. Application: HTTP запрос формируется
#    GET /users HTTP/1.1
#    Host: api.example.com
#
# 2. Presentation: данные могут кодироваться (gzip)
#
# 3. Transport: TCP соединение на порт 443 (HTTPS)
#    (или 80 для HTTP)
#
# 4. Internet: IP маршрутизация пакетов
#
# 5. Link: Ethernet/WiFi передача физических сигналов

Практический пример в Python

from http.server import HTTPServer, BaseHTTPRequestHandler
from http.client import HTTPConnection

# HTTP сервер (слой Application)
class RequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(b'Hello, HTTP!')

# Запустить сервер
server = HTTPServer(('localhost', 8000), RequestHandler)
print('Сервер слушает на порту 8000')
server.serve_forever()

# HTTP клиент
connection = HTTPConnection('localhost', 8000)
connection.request('GET', '/')
response = connection.getresponse()
print(response.read().decode())

Итог

HTTP — это протокол 7-го слоя (Application Layer) в модели OSI и 4-го слоя в TCP/IP. Он основан на TCP (Transport Layer) и использует стандартные порты 80 (HTTP) и 443 (HTTPS). HTTP решает задачу передачи гипертекста и данных между клиентом и сервером, опираясь на надёжность TCP соединений.