Можно ли проверить ws://localhost или сервер в LAN с этой HTTPS-страницы?
Зависит от браузера (по состоянию на октябрь 2026 года). Chrome 147 и новее считает WebSocket-подключения к вашему компьютеру или локальной сети доступом к локальной сети: в первый раз он спрашивает, разрешить ли это сайту, а после выбора «Разрешить» подключения к ws://localhost, ws://127.0.0.1 и по ws:// к IP-адресу в LAN, например 192.168.1.10, проходят. В Chrome сервер в LAN нужно указывать IP-адресом; обычное имя хоста (кроме .local) блокируется, даже если оно указывает на адрес в вашей сети. Firefox подключается к localhost напрямую, но блокирует ws:// к адресам в LAN. Safari блокирует ws:// к localhost и к LAN с HTTPS-страниц. На wss:// правило смешанного содержимого не распространяется: публичные серверы доступны с этой страницы в любом браузере, если сертификат доверенный; для localhost и адресов в LAN Chrome и здесь сначала запрашивает доступ к локальной сети.
Почему с этой страницы не подключиться к ws://example.com?
Эта страница открыта по HTTPS, а браузеры блокируют незашифрованное подключение ws:// к публичному хосту с HTTPS-страницы (смешанное содержимое, mixed content). Chrome и Firefox сразу отказывают с SecurityError, и инструмент об этом сообщает. Используйте адрес сервера с wss://. На публичные сайты, открытые по обычному http, это правило не распространяется, но в последних версиях Chrome они вообще не могут обращаться к localhost или к вашей локальной сети.
Подключение завершилось с кодом 1006 — что пошло не так?
1006 означает лишь то, что соединение завершилось без закрывающего рукопожатия. Когда рукопожатие не удаётся, стандарт WebSocket требует, чтобы браузер скрыл причину от страницы, — 401, 404, закрытый порт, ошибка сертификата и отклонённый Origin выглядят одинаково (Firefox сообщает об ошибках сертификата кодом 1015), — поэтому ни один веб-тестер, подключающийся прямо из браузера, не может её показать. Нажмите F12 и откройте консоль: Chrome и Edge выводят HTTP-статус, который вернул сервер. Инструмент также отличает сбои до открытия соединения от обрывов после него и для каждого случая перечисляет типичные причины.
Можно ли добавить заголовок Authorization или другой собственный заголовок?
Нет. Браузерный WebSocket API не позволяет веб-страницам задавать заголовки запроса; браузер отправляет фиксированный набор (включая Origin и cookie для собственного сайта сервера). Распространённые обходные пути — в зависимости от того, что поддерживает сервер: токен в URL, например wss://host/ws?token=…; токен в подпротоколе (допустимы только символы токена, поэтому JWT подходит, а стандартный Base64 с = или / — нет, и сервер должен вернуть подпротокол в ответе); или cookie, которую браузеры надёжно отправляют только на собственный сайт страницы, так что с этой страницы до вашего сервера она обычно не доходит. Инструменты вроде Postman могут задавать заголовки, потому что они не браузеры.
Почему в Postman работает, а здесь нет?
Postman и консольные клиенты могут задать любой заголовок и обычно не отправляют Origin. Браузер не может добавить заголовок Authorization и всегда отправляет Origin: https://go-tools.org. Если серверу нужен токен в заголовке или он проверяет Origin, он отклонит рукопожатие браузера; разрешите этот Origin или передайте токен другим способом.
Отправляет ли heartbeat ping-кадры WebSocket?
Нет. Веб-страницы не могут ни отправлять, ни видеть ping/pong-кадры уровня протокола; когда сервер присылает ping, браузер сам отвечает pong. Отправка по таймеру здесь посылает обычное текстовое сообщение, например {"type":"ping"}, с заданным интервалом. По умолчанию она выключена, потому что сервер, не ожидающий такого сообщения, может закрыть соединение. Чтобы простаивающее соединение не обрывалось прокси, пусть ping отправляет сервер.
Почему не удаётся подключиться к моему серверу Socket.IO?
Socket.IO — это протокол поверх WebSocket, а не чистый WebSocket. Сервер Socket.IO v3/v4 ожидает путь /socket.io/?EIO=4&transport=websocket, присылает пакет open, начинающийся с 0, ждёт 40 для входа в пространство имён по умолчанию и закрывает соединение, если на каждый ping 2 не приходит pong 3. Выберите протокол Socket.IO — и инструмент сделает всё это сам; затем отправляйте события в виде 42["event","data"]. Серверы, настроенные только на HTTP long-polling, WebSocket-подключение не примут вовсе.
Соединение обрывается примерно через минуту — почему?
Обычно виноват таймаут простоя в обратном прокси. Nginx по умолчанию закрывает проксируемое соединение, если 60 секунд не передаются данные (proxy_read_timeout), и страница видит код 1006. Увеличьте таймаут или пусть сервер отправляет ping-кадры. За Nginx также проверьте, что прокси пробрасывает upgrade через proxy_set_header Upgrade $http_upgrade; и proxy_set_header Connection "upgrade"; (до Nginx 1.29.7 — ещё и proxy_http_version 1.1;).
Как подключиться к серверу wss:// с самоподписанным сертификатом?
Откройте https://the-same-host:port/ в новой вкладке, примите предупреждение о сертификате, затем вернитесь и подключитесь. Браузер запомнит исключение для этого хоста и порта. Делайте так только для своих тестовых серверов, потому что это ослабляет защиту браузера.
Как отправлять и читать бинарные сообщения?
Выберите HEX или Base64 в качестве формата отправки. HEX принимает 48 69 00 FF, 0x48,0x69 или 486900FF; предпросмотр показывает байты, а недопустимые символы или нечётное число цифр сообщаются с указанием позиции вместо отправки. Полученные бинарные сообщения показываются в HEX по 16 байт в строке, а панель журнала переключает их на Base64. Чтобы прочитать полученный HEX как текст, вставьте его в Hex в текст. Проходят ли мои сообщения через серверы go-tools?
Нет. Браузер подключается напрямую к указанному адресу, и сообщения не проходят через наши серверы. Кроме того, инструмент не открывает WebSocket-соединение, пока вы не нажмёте «Подключиться», а адрес и сообщения хранит только в памяти — не в URL страницы и не в хранилище браузера. Как и весь сайт, эта страница загружает скрипты аналитики и рекламы.
Есть ли сервер, на котором можно протестировать подключение?
Используйте локальное эхо: оно работает внутри этой страницы, возвращает всё, что вы отправляете, и не устанавливает сетевых соединений. Существуют и публичные эхо-сервисы, например wss://echo.websocket.org/, но они принадлежат третьим сторонам: их доступность не гарантируется, а ваши сообщения уходят этой третьей стороне.