Налагодження WebSocket в Google Chrome


213

Чи є спосіб чи розширення, що дозволяє мені спостерігати за "трафіком", що проходить через WebSocket? Для налагодження я хотів би бачити клієнтські та серверні запити / відповіді.

Відповіді:


250

Тепер інструменти для розробників Chrome мають можливість перелічувати кадри WebSocket, а також перевіряти дані, якщо кадри не є двійковими.

Процес:

  1. Запустіть інструменти для розробників Chrome
  2. Завантажте свою сторінку та ініціюйте з'єднання WebSocket
  3. Перейдіть на вкладку Мережа .
  4. Виберіть підключення WebSocket зі списку зліва (воно матиме статус "101 протокол комутації".
  5. Перейдіть на підвкладку Повідомлення . Двійкові рамки відображатимуться з довжиною та часовою позначкою та вказуватимуть, чи замасковані вони. Текстові кадри показуватимуть також вміст корисної навантаження.

Якщо у вашому з’єднанні WebSocket використовується двійкові кадри, ви, ймовірно, все ще хочете використовувати Wireshark для налагодження з'єднання. Wireshark 1.8.0 додав підтримку диссектора та фільтрації для WebSockets. Альтернативу можна знайти в цій іншій відповіді .


1
Чи знаєте ви, як використовувати Wireshark для цього? Я ніколи не використовував його, і, здається, він показує весь мережевий трафік і показує необроблені пакети.
mellowsoon

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

1
На жаль, використання WireShark з використанням localhost на Windows вимагає перестрибування обручів, щоб змусити його працювати. Дивіться wiki.wireshark.org/CaptureSetup/Loopback
Грег Вудс

2
Нещодавно я написав статтю про CodeProject, в якій показав, як налагодити / перевірити трафік WebSocket за допомогою Fiddler. codeproject.com/Articles/718660/…
engineforce

1
@NiCkNewman так, це 7-бітове поле, яке вказує довжину байтів корисного навантаження. Однак якщо значення поля дорівнює 126 або 127, то наступні 16 або 64 біти відповідно - це довжина корисного навантаження в байтах. Опис поля довжини див. У специфікації: tools.ietf.org/html/rfc6455#section-5.2 (це досить просто). Це трохи дивно, але це робить короткі повідомлення дуже ефективними (лише двобайтовий заголовок).
канака

72

Chrome Canary та Chromium тепер мають функцію перевірки кадру повідомлень WebSocket. Ось такі кроки, щоб швидко його перевірити:

  1. Перейдіть до демонстрації Echo WebSocket Echo , розміщеного на веб- сайті websocket.org .
  2. Увімкніть Інструменти для розробників Chrome.
  3. Клацніть Мережа , і щоб відфільтрувати трафік, показаний інструментами Dev, натисніть WebSockets .
  4. У демонстраційній програмі Echo натисніть Підключити . На вкладці Заголовки в інструменті Google Dev ви можете перевірити рукостискання WebSocket.
  5. Натисніть кнопку Надіслати в демонстраційній програмі Echo.
  6. ЦИЙ КРОК ВАЖЛИВО : Щоб побачити кадри WebSocket в Інструментах для розробників Chrome, в розділі Ім'я / Шлях натисніть запис echo.websocket.org, що представляє ваше з'єднання WebSocket. Це оновлює головну панель праворуч і змушує вкладку WebSocket Frames відображатися з фактичним вмістом повідомлення WebSocket.

Примітка . Кожен раз, коли ви надсилаєте чи отримуєте нові повідомлення, вам потрібно буде оновити головну панель, натиснувши на запис echo.websocket.org зліва.

Я також розмістив кроки із знімками екрана та відео .

У моїй нещодавно опублікованій книзі " Поточний посібник по HTML5 WebSocket" також є спеціальний додаток, що охоплює різні інструменти огляду, включаючи інструменти для розробників Chrome, сіткові мережі Chrome та Wire Shark.


3
Будьте обережні, коли публікуєте копіювати та вставляти відповідні кодові / дословні відповіді на кілька запитань, їх спільнота позначає як "спам". Якщо ви це робите, то зазвичай це означає, що питання є дублікатами, тому позначте їх як такі.
Кев

2
Дякую за крок 6! Я знав про фільтр WebSockets на вкладці «Мережа», але був розчарований, що, здається, він потрапив лише до моїх перших кількох повідомлень. Чи знаєте ви, чи є спосіб повідомити про підключення до веб-розетки, яке було відкрите перед відкриттям вкладки?
Брайан Хед

Брайан - Я не вірю, що ти сьогодні можеш.
Петро Московіц

@PeterMoskovits Чи знаєте ви, можливо, спосіб перевірити вміст бінарних кадрів у Chrome? В даний час я бачу лише його довжину!
Howie

@Howie Ви не можете зробити це з Chrome. Ви можете використовувати WireShark для цього. Наша нова книга "Поточний посібник з веб-розмови HTML5" також дає вам швидке вступ до WireShark. amazon.com/Definitive-Guide-HTML5-WebSocket-Apress/dp/…
Пітер Московіц

52

Здається, вони постійно змінюють речі в Chrome, але ось що працює зараз :-)

  • Спочатку потрібно натиснути на червону кнопку запису, інакше у вас нічого не вийде.

  • Я ніколи не помічав цього WSраніше, але він фільтрує з'єднання з веб-розеткою.

  • Виберіть його, і тоді ви зможете побачити кадри, на яких відображатимуться повідомлення про помилки тощо.

введіть тут опис зображення


Мені не подобається, як JSON там некрасиво відформатований. Відсутнє форматування в основному.
SES

1
@ses це протокол signalR. Займіться цим Microsoft 😜
Simon_Weaver

1
радий бачити, що принаймні ця відповідь все-таки хороша через чотири роки: p
Стю Томпсон

1
@StuThompson так - мої надходження продовжують накопичуватися :-)
Simon_Weaver

41

Якщо у вас немає сторінки, яка має доступ до веб-розетки, ви можете відкрити консоль Chrome і ввести свій JavaScript:

var webSocket = new WebSocket('ws://address:port');
webSocket.onmessage = function(data) { console.log(data); }

Це відкриє веб-розетку, щоб ви могли бачити її на вкладці мережі та на консолі.


Дякую! Також: Сторінка, яку ви відкриваєте, повинна мати те саме походження, що і ваша веб-розетка. Якщо ви спробуєте відкрити інструменти для розробників Chrome на іншому походженні (або навіть на новій сторінці вкладки), а потім підключитися до свого веб-сокета, ви отримаєте помилку авторизації.
Дан Еспарза

Чи є спосіб це виправити?
not2qubit

37

Інші відповіді стосуються найпоширенішого сценарію: дивіться вміст кадрів (Інструменти для розробників -> вкладка Мережа -> Клацніть правою кнопкою миші на з'єднанні веб-розетки -> кадри).

Якщо ви хочете дізнатися більше інформації, наприклад, які розетки в даний час відкриті / в режимі очікування або ви зможете їх закрити, ця URL-адреса буде корисною

chrome://net-internals/#sockets

10

У вас є три варіанти: Chrome (через Інструменти для розробників -> вкладка "Мережа"), Wireshark та Fiddler (через вкладку "Журнал"), але всі вони є основними. Якщо у вас дуже високий об'єм трафіку або кожен кадр дуже великий, використовувати їх для налагодження стає дуже важко.

Однак ви можете використовувати Fiddler разом із FiddlerScript для перевірки трафіку WebSocket таким же чином, як і ви очікуєте трафік HTTP. Мало переваг цього рішення полягає в тому, що ви можете використовувати багато інших функцій у Fiddler, таких як кілька інспекторів (HexView, JSON, SyntaxView), порівнювати пакети та знаходити пакети тощо.Перевірка трафіку WebSocket

Будь ласка, зверніться до моєї нещодавно написаної статті про CodeProject, де показано, як налагодити / перевірити трафік WebSocket за допомогою Fiddler (за допомогою FiddlerScript). http://www.codeproject.com/Articles/718660/Debug-Inspect-WebSocket-traffic-with-Fiddler


5

Я щойно публікую це, оскільки Chrome багато змінюється, і жодна з відповідей не була актуальною.

  1. Відкрийте інструменти розробки
  2. ПОВЕРНІТЬ СВОЮ СТОРІНУ (щоб WS-з'єднання було захоплено вкладкою мережі)
  3. Клацніть свій запит
  4. Перейдіть на підвкладку «Кадри»
  5. Ви повинні побачити щось таке:

введіть тут опис зображення


4

Коротка відповідь для версії Chrome 29 і новіших версій:

  1. Відкрийте налагоджувач, перейдіть на вкладку "Мережа"
  2. Завантажте сторінку за допомогою веб-сокета
  3. Клацніть на запит вебсокета з відповіддю на оновлення від сервера
  4. Виберіть вкладку "Кадри", щоб побачити кадри веб-розетки
  5. Клацніть на запит вебсокета ще раз, щоб оновити кадри

1
Здається, це працює, за винятком того, що це дратує те, що він перестає працювати, якщо ви відключите та знову підключитесь до URL-адреси веб-сокета (наприклад, на websocket.org/echo.html ), і в цьому випадку вам потрібно оновити сторінку! :(
matanster

3

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


2

Я використовував розширення Chrome під назвою Simple WebSocket Client v0.1.3, яке публікує користувач hakobera. Він дуже простий у використанні, коли дозволяє відкривати веб-розетки за вказаною URL-адресою, надсилати повідомлення та закривати з'єднання з сокетом. Це дуже мінімалістично.


2

Щодо інструменту, який я почав використовувати, я пропоную firecamp Це як Postman, але він також підтримує websockets та socket.io.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.