在Google Chrome中调试WebSocket


213

有没有办法让我观看通过WebSocket的“流量”?出于调试目的,我想查看客户端和服务器的请求/响应。

Answers:


250

Chrome开发人员工具现在可以列出WebSocket框架,如果框架不是二进制的,还可以检查数据。

处理:

  1. 启动Chrome开发者工具
  2. 加载页面并启动WebSocket连接
  3. 单击网络选项卡
  4. 从左侧列表中选择WebSocket连接(其状态为“ 101交换协议”。
  5. 单击消息子选项卡。二进制帧将显示长度和时间戳,并指示是否被遮罩。文本框将显示还包括有效载荷内容。

如果您的WebSocket连接使用二进制框架,那么您可能仍将希望使用Wireshark调试连接。Wireshark 1.8.0添加了对WebSocket的解剖器和过滤的支持。在另一个答案中可以找到替代方法。


1
您知道如何使用Wireshark进行此操作吗?我从未真正使用过它,它似乎显示所有网络流量,并显示原始数据包。
mellowsoon 2011年

2
您可以使用捕获过滤器捕获限制为单个端口。或者,在捕获之后,您应该能够右键单击作为会话一部分的捕获帧上的任何一个,然后选择选项以仅显示该会话。
kanaka

1
不幸的是,在Windows上使用localhost来使用WireShark时,需要跳过箍以使其正常工作。参见wiki.wireshark.org/CaptureSetup/Loopback
Greg Woods

2
我最近在CodeProject上写了一篇文章,向您展示了如何使用Fiddler调试/检查WebSocket通信。codeproject.com/Articles/718660/...
engineforce

1
@NiCkNewman是的,它是一个7位字段,指示有效负载的字节长度。但是,如果该字段的值为126或127,则接下来的16或64位分别是有效载荷的长度(以字节为单位)。请参见规范中的length字段说明:tools.ietf.org/html/rfc6455#section-5.2(很容易理解)。有点奇怪,但是它使短消息非常有效(只是一个2字节的标头)。
kanaka 2015年

72

Chrome Canary和Chromium现在具有WebSocket消息框架检查功能。以下是快速测试它的步骤:

  1. 导航到websocket.org网站上托管的WebSocket Echo演示
  2. 打开Chrome开发者工具。
  3. 单击“ 网络”,然后单击WebSockets以过滤开发工具显示的流量。
  4. 在Echo演示中,点击连接。在Google Dev Tool的Headers选项卡上,您可以检查WebSocket握手。
  5. 单击Echo演示中的发送按钮。
  6. 此步骤很重要:要查看Chrome开发者工具中的WebSocket框架,请在“名称/路径”下单击代表您的WebSocket连接的echo.websocket.org条目。这将刷新右侧的主面板,并使“ WebSocket框架”选项卡与实际的WebSocket消息内容一起显示。

注意:每次发送或接收新消息时,都必须通过单击左侧的echo.websocket.org条目刷新主面板。

我还通过屏幕截图和视频发布了步骤

我最近出版的书《 HTML5 WebSocket权威指南》也有专门的附录,涵盖了各种检查工具,包括Chrome开发工具,Chrome网络内部程序和Wire Shark。


3
在发布复制和粘贴多个问题的样板/惯用答案时要小心,这些问题通常会被社区标记为“垃圾邮件”。如果您这样做,通常意味着问题是重复的,因此应将其标记为重复。
凯夫2012年

2
感谢您的第6步!我曾在“网络”选项卡中了解WebSockets过滤器,但感到沮丧的是它似乎只捕获了我的前几条消息。您是否知道有办法让您知道在打开选项卡之前已打开的Websocket连接?
Bryan Head

布莱恩-我不相信你今天能做到。
Peter Moskovits

@PeterMoskovits您也许会知道一种在Chrome中检查二进制帧内容的方法吗?目前,我只能看到它的长度!
Howie

@Howie您无法使用Chrome浏览器。您可以使用WireShark。我们的新书《 HTML5 WebSocket权威指南》也为您提供了WireShark的快速入门。amazon.com/Definitive-Guide-HTML5-WebSocket-Apress/dp/…–
彼得·莫斯科维茨

52

他们似乎在不断地改变Chrome中的功能,但是现在这是可行的方法:-)

  • 首先,您必须单击红色的记录按钮,否则您将一无所获。

  • 我以前从没注意到,WS但它过滤掉了Web套接字连接。

  • 选择它,然后您将看到显示错误消息等的框架。

在此处输入图片说明


我不喜欢那里的JSON格式很难看。基本没有格式化。
ses

1
@ses是signalR协议。与Microsoft一起处理
Simon_Weaver

1
很高兴看到至少四年后这个答案仍然不错:p
Stu Thompson

1
@StuThompson是的-我的投票不断积累:-)
Simon_Weaver

41

如果没有访问websocket的页面,则可以打开Chrome控制台并在以下位置键入JavaScript:

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

这将打开Web套接字,以便您可以在“网络”选项卡和控制台中看到它。


谢谢!另外:您打开的页面必须与Websocket具有相同的来源。如果您尝试在其他来源(甚至是新标签页)上打开Chrome开发者工具,然后连接到Websocket,则会收到授权错误。
Dan Esparza

有没有办法解决这个问题?
not2qubit

37

其他答案涵盖了最常见的情况:观看框架的内容(“开发工具->网络”选项卡->右键单击websocket连接->框架)。

如果您想了解更多信息,例如当前正在打开/空闲的套接字或能够关闭它们,您会发现此URL很有用

chrome://net-internals/#sockets

10

您有3个选项:Chrome(通过开发人员工具->网络选项卡),Wireshark和Fiddler(通过日志选项卡),但是它们都是非常基本的。如果通信量非常大或每个帧都很大,则很难使用它们进行调试。

但是,您可以将Fiddler与FiddlerScript一起使用来检查WebSocket通信,就像检查HTTP通信一样。此解决方案的优点很少,您可以利用Fiddler中的许多其他功能,例如多个检查器(HexView,JSON,SyntaxView),比较数据包和查找数据包等。检查WebSocket流量

请参考我最近在CodeProject上撰写的文章,该文章向您展示如何使用Fiddler(使用FiddlerScript)调试/检查WebSocket通信。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. 使用websocket加载页面
  3. 单击带有服务器升级响应的websocket请求
  4. 选择标签“框架”以查看网络套接字框架
  5. 再次单击websocket请求以刷新框架

1
看来这是可行的,但令人讨厌的是,如果断开并重新连接到websocket网址(例如,在websocket.org/echo.html上),它将停止工作,在这种情况下,您必须刷新页面!:(
matanster

3

Chrome开发人员工具可以查看握手请求,该请求在打开的连接期间保持挂起状态,但据我所知,您看不到任何流量。但是,您可以例如嗅探它


2

我已经使用了由用户hakobera发布的名为Simple WebSocket Client v0.1.3的 Chrome扩展程序。它的用法非常简单,它允许在给定的URL上打开websocket,发送消息并关闭套接字连接。这是非常简约的。


2

至于我开始使用的工具,我建议使用firecamp,就像Postman一样,但是它也支持websockets和socket.io。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.