Все локации активны · 99.99% uptime
Протоколы

WebSocket и прокси

WebSocket устанавливает двусторонний и постоянно открытый канал между браузером и сервером. Панели с данными в реальном времени, чат-приложения и мгновенные уведомления используют эту технологию. Будет ли она работать через прокси, зависит от типа прокси и его конфигурации.

Как начинается WebSocket?

WebSocket не является отдельным протоколом; он начинается с HTTP-запроса и Upgrade меняет протокол с помощью этого механизма:

СХЕМАUpgrade-рукопожатие WebSocket
UPGRADECONNECT ornek.com:443 HTTP/1.1СерверGET /socket HTTP/1.1Upgrade: websocket · Connection: UpgradeSec-WebSocket-Key: dGhlIHNhbXBsZQ==101 Switching Protocols→ Теперь идёт двусторонний поток кадров

После ответа 101 соединение перестаёт быть HTTP, и начинают передаваться кадры WebSocket. Поэтому каждый промежуточный уровень должен понимать upgrade.

Поведение в зависимости от типа прокси

СХЕМАПоддержка WebSocket: по типам прокси
СОВМЕСТИМОСТЬws:// (без шифрования)wss:// (с шифрованием)HTTP-прокси (с поддержкой Upgrade)РаботаетРаботаетHTTP-прокси (устаревший)Не работаетРаботаетТуннель CONNECTРаботаетРаботаетSOCKS5РаботаетРаботает

Самая надёжная комбинация wss:// + туннель CONNECT. Поскольку трафик шифрован, прокси не может вмешаться в содержимое и нарушить upgrade.

Практическая рекомендация

Если вы собираетесь запускать приложение с WebSocket через прокси, отдавайте предпочтение wss:// (шифрованному). Туннель прокси передаёт только байты, поэтому он вообще не вмешивается в процесс upgrade, и проблема совместимости исчезает.

Почему некоторые прокси всё ломают?

В обычном ws:// трафике прокси читает запрос. Устаревшие или жёстко настроенные прокси могут допускать следующие ошибки:

СХЕМАПроблемы WebSocket и прокси
Типичные проблемы, вызванные CGNATКОД / ПРИЗНАКВОЗМОЖНАЯ ПРИЧИНАРЕШЕНИЕ400 / 502 приupgradeПрокси не передаёт заголовок UpgradeИспользуйте wss:// или туннель CONNECTСоединение обрываетсячерез 30–60 сТайм-аут простоя на проксиДобавьте ping/pong на уровне приложенияСообщения приходят с задержкойПрокси выполняет буферизациюНужно отключить буферизацию или использовать wss101 вообще не приходитПрокси не поддерживает смену протоколаИспользуйте SOCKS5 или туннель CONNECTСлучайные обрывыРотация IP разрывает сессиюИспользуйте sticky-сессию или статический IP

Последнюю строку часто упускают из виду: если вы используете ротируемые прокси, соединение WebSocket обрывается при смене IP. В этом сценарии статический IP — он обязателен.

Как избежать обрывов: ping/pong

Прокси и промежуточные маршрутизаторы закрывают соединения, по которым долго не идут данные. Протокол WebSocket предусматривает для этого кадры ping/pong. Большинство библиотек делают это автоматически, но интервал может потребоваться настроить:

СХЕМАПоддержание соединения
Настройки библиотек01# Python websockets — интервал ping02import websockets03async with websockets.connect(04 "wss://ornek.com/socket",05 ping_interval=20, # ping каждые 20 секунд06 ping_timeout=10, # обрыв, если pong не получен07) as ws:08 await ws.send("merhaba")0910# Node.js ws11const ws = new WebSocket("wss://ornek.com/socket", { agent: proxyAgent });12setInterval(() => { if (ws.readyState === 1) ws.ping(); }, 20000);1314# На стороне браузера ping отсутствует — отправляйте сообщение на уровне приложения15setInterval(() => ws.send(JSON.stringify({t: "keepalive"})), 25000);

Держите интервал ping короче тайм-аута простоя прокси. 20–25 секунд — безопасное значение для большинства конфигураций.

WebSocket через SOCKS5

Поскольку SOCKS5 вообще не анализирует данные приложения, он естественным образом передаёт WebSocket. Upgrade-рукопожатие, смена протокола и поток кадров — всё это для SOCKS5 просто поток байтов. Это делает SOCKS5 самым надёжным вариантом в сценариях с WebSocket.

Об общем поведении SOCKS5 см. как работает SOCKS5 смотрите нашу статью.

Долгоживущие соединения и стабильность IP

СХЕМАКонфликт ротируемых прокси и WebSocket
Типичные проблемы, вызванные CGNAT00:00Соединение WebSocket установлено —IP: A05:00Поток данных в норме10:00Истёк sticky TTL — выполняется попытканазначить новый IP10:01Текущее TCP-соединение оборвалось10:02Приложение вынужденопереподключиться

WebSocket по своей природе долгоживущий, а ротация стремится менять IP. Эти два подхода конфликтуют. В таком сценарии нужен статический IP или очень длительный срок sticky-сессии.

Стратегия переподключения

Если вы используете WebSocket через прокси, считайте обрыв не исключением, а ожидаемой ситуацией:

  • Экспоненциальная задержка: нарастающее ожидание вида 1, 2, 4, 8 секунд.
  • Добавьте jitter: Предотвращает одновременное возвращение множества клиентов, отключившихся в один момент.
  • Синхронизация состояния: после переподключения запрашивайте пропущенные сообщения.
  • Ограничение числа попыток: не уходите в бесконечный цикл; уведомите пользователя.
  • Следите за состоянием соединения: если частота обрывов растёт, пересмотрите конфигурацию прокси.

Резюме

WebSocket начинается с механизма HTTP upgrade, поэтому промежуточные уровни должны понимать смену протокола. wss:// (шифрованный) и выбор туннеля CONNECT либо SOCKS5 в значительной мере устраняют проблемы совместимости. Долгоживущие соединения конфликтуют с ротируемыми прокси; в этом сценарии нужен статический IP. Держите интервал ping/pong короче тайм-аута прокси и продумайте надёжную стратегию переподключения. Варианты со статическим IP см. ISP-прокси смотрите на нашей странице.

Часто задаваемые вопросы

01Работает ли WebSocket через прокси?

Да. Если использовать wss:// (шифрованный) и пропускать трафик через туннель CONNECT или SOCKS5, всё работает без проблем. При обычном ws:// некоторые прокси могут не передавать заголовки upgrade.

02Почему моё соединение WebSocket постоянно обрывается?

Две самые частые причины: тайм-аут простоя на прокси и ротация IP. В первом случае сократите интервал ping, во втором используйте статический IP или длительную sticky-сессию.

03Можно ли использовать WebSocket с ротируемыми прокси?

На практике это сложно. Когда ротация меняет IP, текущее TCP-соединение обрывается. Для долгоживущих соединений гораздо больше подходит решение со статическим IP.

04SOCKS5 лучше подходит для WebSocket?

Да, как правило. SOCKS5 не анализирует данные приложения и поэтому не может вмешаться в upgrade-рукопожатие — это устраняет проблемы совместимости.

05Какой интервал ping выставить в секундах?

20–25 секунд безопасны для большинства конфигураций. Важно, чтобы он был короче тайм-аута простоя прокси или промежуточных маршрутизаторов.

Связанные статьи и страницы

СЛЕДУЮЩИЙ ШАГ

Усильте свою прокси-инфраструктуру уже сегодня.

Начните с платным тарифом за считанные минуты или сначала попробуйте наш бесплатный список прокси.

FREEPROXY.TR

Ищете бесплатные прокси — вы попали по адресу

Комплексная прокси-платформа, где можно посмотреть актуальные адреса бесплатных прокси, сравнить типы HTTP и SOCKS и проверить свои прокси-подключения бесплатными инструментами.