Відкрийте панель мережі до завантаження сторінки чату, а потім знайдіть запит, який несе повідомлення, а не той, що малює каркас сторінки. Документ, скрипти, обмін під час входу й транспорт чату можуть іти на різні хости. Більшість повідомлень про те, що VPN зламав чат, насправді описують збій одного з цих чотирьох запитів. Дивіться їх по черзі, і відповідь зазвичай видно в перші дві хвилини.

Знайдіть запит, що несе повідомлення

Відфільтруйте за типом, коли сторінка заспокоїться: WebSocket з'являється окремим записом, потік подій лишається відкритим зі зростаючою відповіддю, а довге опитування повторюється з рівним інтервалом. Запишіть схему, хост, порт і стан для того, що несе оновлення. Занотуйте, чи почався він до чи після входу, бо транспорт, відкритий до автентифікації, зазвичай має іншу будову, ніж відкритий після неї. Читайте заголовки запиту на оновлення або прийнятий тип вмісту: вони показують транспорт, який розгорнута сторінка справді обрала.

Старі дописи на форумах описують транспорти, від яких продукти відмовилися роками раніше, тож довіряйте тому, що записав браузер, а не статті. Якщо запису немає зовсім, код клієнта міг жодного разу не спробувати з'єднання, і це вказує на раніший збій скрипта або конфігурації. Завантаження сторінки доводить лише те, що документ дійшов, і саме ця різниця вирішує, чи ви взагалі налагоджуєте мережу.

Налаштування, доставка й час життя ламаються по-різному

WebSocket відкривається оновленням HTTP, на яке відповідають станом 101, а все дальше - повідомлення в кадрах, а не завантаження сторінок; ці два етапи RFC 6455 явно розділяє. Потік подій відповідає потоковим типом вмісту й тримає тіло відповіді відкритим. Обидва можуть не відкритися, відкритися й нічого не доставити або відкритися, доставити й потім тихо померти.

wscat -c wss://chat.example.com/socket -H "Origin: https://chat.example.com"
curl -N -H "Accept: text/event-stream" https://chat.example.com/events

Зловіть перший значущий збій, перш ніж торкатися профілю, бо три моменти вказують на різні шари. Якщо рукостискання ніколи не завершується, порівняйте його зі звичайним запитом HTTPS до того самого хоста й подивіться, чи щось до нього доходить. Якщо воно завершується, а повідомлення не надходять, дивіться на кадри або тіло потоку, поки хтось надсилає тестове повідомлення з іншого облікового запису. Якщо працює, а потім спиняється, запишіть точний час і код закриття: ця пара вказує, яка сторона здалася.

Код 1006 означає, що сокет закрився без кадру закриття, і саме так проміжний пристрій або тайм-аут простою виглядає зсередини браузера. Пульс VPN не доводить, що внутрішня сесія застосунку ще жива.

Живий хост - окремий адресат

Бекенди чату часто живуть на власному імені хоста, іноді на іншому порту або за окремим сертифікатом. Цьому адресату потрібні власне розв'язання імені, маршрут і обробка проксі, а розділене тунелювання може включити сторінку й виключити сокет. Розв'яжіть ім'я живого хоста з клієнтської машини й підтвердьте, що воно відповідає очікуваною адресою в цій мережі. Перевірте ланцюг сертифікатів саме для цього імені хоста, бо шаблон, що покриває сайт, не завжди покриває кінцеву точку сокета.

Якщо на шляху є проксі, підтвердьте, що він дозволяє оновлення або довгу відповідь, а не буферизує їх. Корпоративні проксі, які переписують HTML, часто погано обробляють оновлення WebSocket, і виходить сторінка, що малюється, поки чат так і не підключається. Тож два запити до одного продукту - не два запити до одного хоста.

Виправляйте список адресатів, а не перевірки безпеки

Виправлення списку адресатів - це зміна маршрутизації, і вона належить власникові маршруту. Послаблення перевірки сертифікатів або видалення заголовка Origin - це зміна безпеки, і вона належить власникові політики, яким рідко буває людина, що налагоджує тікет. Найшвидший спосіб зробити з'єднання схожим на робоче зазвичай збігається з найшвидшим способом уможливити інцидент.

Перш ніж щось міняти, запитайте власника застосунку, які джерела приймає бекенд, і передайте цю відповідь тому, хто керує проксі. Якщо помилка сертифіката з'являється лише через тунель, огляньте пристрій, що перехоплює, а не встановлюйте обхід.

Запишіть достатньо, щоб передати

Корисний артефакт короткий: URL сторінки, жива кінцева точка, результат рукостискання, час першого збою й чи була спроба перепідключення. Додайте назву профілю VPN і мережу, у якій ви були, і кожен читач відтворить тест, не ставлячи шість питань. Приховуйте cookie, заголовки авторизації та тіла повідомлень і надавайте перевагу знімку екрана зі стовпцем часу перед повним експортом архіву. Кадри й мережеві архіви можуть містити приватні повідомлення й токени сесій, тож перегляньте їх перед вкладенням.

Якщо збій - тихе закриття, додайте код закриття та інтервал простою перед ним, бо ця пара зазвичай указує власника тайм-ауту. Передайте запис власникові застосунку або шлюзу, а не вгадуйте значення тайм-ауту самі. Їхня відповідь про підтримувану поведінку keepalive і закриває тікет.

Схожі статті