Gỡ lỗi WebSocket trong Google Chrome


213

Có cách nào, hoặc một phần mở rộng, cho phép tôi xem "lưu lượng truy cập" đi qua WebSocket không? Đối với mục đích gỡ lỗi, tôi muốn xem các yêu cầu / phản hồi của máy khách và máy chủ.

Câu trả lời:


250

Các công cụ dành cho nhà phát triển Chrome hiện có khả năng liệt kê các khung WebSocket và cũng kiểm tra dữ liệu nếu các khung không phải là nhị phân.

Quá trình:

  1. Khởi chạy công cụ Chrome Developer
  2. Tải trang của bạn và bắt đầu các kết nối WebSocket
  3. Nhấp vào tab Mạng .
  4. Chọn kết nối WebSocket từ danh sách bên trái (nó sẽ có trạng thái "101 Giao thức chuyển đổi".
  5. Nhấp vào tab phụ Tin nhắn . Các khung nhị phân sẽ hiển thị với độ dài và dấu thời gian và cho biết liệu chúng có bị che hay không. Khung văn bản sẽ hiển thị cũng bao gồm nội dung tải trọng.

Nếu kết nối WebSocket của bạn sử dụng khung nhị phân thì có thể bạn vẫn muốn sử dụng Wireshark để gỡ lỗi kết nối. Wireshark 1.8.0 đã thêm trình phân tích và hỗ trợ lọc cho WebSockets. Một thay thế có thể được tìm thấy trong câu trả lời khác này .


1
Bạn có biết làm thế nào để sử dụng Wireshark để làm điều này? Tôi chưa bao giờ thực sự sử dụng nó và nó dường như hiển thị tất cả lưu lượng truy cập mạng và hiển thị các gói thô.
mellow gió

2
Bạn có thể hạn chế chụp vào một cổng bằng các bộ lọc chụp . Thay phiên, sau khi bạn đã có được một bản chụp, bạn sẽ có thể nhấp chuột phải vào bất kỳ khung nào đã chụp là một phần của phiên và chọn tùy chọn để hiển thị phiên đó.
kanaka

1
Thật không may, sử dụng WireShark bằng localhost trên windows đòi hỏi phải nhảy qua các vòng để làm cho nó hoạt động. Xem wiki.wireshark.org/CaptureSetup/Loopback
Greg Woods

2
Gần đây tôi đã viết một bài viết về CodeProject, trong đó chỉ cho bạn cách gỡ lỗi / kiểm tra lưu lượng truy cập WebSocket với Fiddler. codeproject.com/Articles/718660/
Mạnh

1
@NiCkNewman có, đó là trường 7 bit cho biết độ dài byte của tải trọng. Tuy nhiên, nếu giá trị của trường là 126 hoặc 127, thì 16 hoặc 64 bit tiếp theo tương ứng là độ dài của tải trọng tính bằng byte. Xem mô tả về trường độ dài trong thông số kỹ thuật: tools.ietf.org/html/rfc6455#section-5.2 (khá dễ để tìm hiểu). Hơi lạ một chút, nhưng nó làm cho các tin nhắn ngắn rất hiệu quả (chỉ là tiêu đề 2 byte).
kanaka

72

Chrome Canary và Chromium hiện có tính năng kiểm tra khung tin nhắn WebSocket. Dưới đây là các bước để kiểm tra nhanh chóng:

  1. Điều hướng đến bản demo WebSocket Echo , được lưu trữ trên trang websocket.org .
  2. Bật Công cụ dành cho nhà phát triển Chrome.
  3. Bấm Mạng và để lọc lưu lượng được hiển thị bởi Công cụ Dev, bấm WebSockets .
  4. Trong bản demo Echo, bấm Kết nối . Trên tab Tiêu đề trong Google Dev Tool, bạn có thể kiểm tra bắt tay WebSocket.
  5. Nhấp vào nút Gửi trong bản demo Echo.
  6. BƯỚC NÀY QUAN TRỌNG : Để xem các khung WebSocket trong Công cụ dành cho nhà phát triển Chrome, bên dưới Tên / Đường dẫn, hãy nhấp vào mục echo.websocket.org, thể hiện kết nối WebSocket của bạn. Điều này làm mới bảng điều khiển chính ở bên phải và làm cho tab Khung WebSocket hiển thị với nội dung thông báo WebSocket thực tế.

Lưu ý : Mỗi khi bạn gửi hoặc nhận tin nhắn mới, bạn phải làm mới bảng điều khiển chính bằng cách nhấp vào mục echo.websocket.org ở bên trái.

Tôi cũng đăng các bước với ảnh chụp màn hình và video .

Cuốn sách được xuất bản gần đây của tôi, Hướng dẫn dứt khoát về HTML5 WebSocket , cũng có một phụ lục chuyên dụng bao gồm các công cụ kiểm tra khác nhau, bao gồm Chrome Dev Tools, Chrome net-internals và Wire Shark.


3
Hãy cẩn thận khi đăng bản sao và dán câu trả lời soạn sẵn / nguyên văn cho nhiều câu hỏi, những câu hỏi này có xu hướng bị cộng đồng đánh dấu là "spam". Nếu bạn đang làm điều này thì điều đó thường có nghĩa là các câu hỏi là trùng lặp, vì vậy hãy gắn cờ chúng như vậy.
Kev

2
Cảm ơn bạn cho bước 6! Tôi đã biết về bộ lọc WebSockets trong tab Mạng, nhưng đã thất vọng vì dường như nó chỉ bắt được vài tin nhắn đầu tiên của tôi. Bạn có biết có cách nào để làm cho nó biết về kết nối websocket đã được mở trước khi bạn mở tab không?
Trưởng Bryan

Bryan - Tôi không tin bạn có thể ngày hôm nay.
Peter Moskovits

@PeterMoskovits Bạn, perchance, có biết cách kiểm tra nội dung của khung nhị phân trong Chrome không? Hiện tại tôi chỉ có thể thấy chiều dài của nó!
Howie

@Howie Bạn không thể làm điều đó với Chrome. Bạn có thể sử dụng WireShark cho nó. Cuốn sách mới của chúng tôi, Hướng dẫn dứt khoát về HTML5 WebSocket cũng cung cấp cho bạn phần giới thiệu nhanh về WireShark. amazon.com/Definitive-Guide-HTML5-WebSocket-Apress/dp/ triệt
Peter Moskovits

52

Họ dường như liên tục thay đổi công cụ trong Chrome, nhưng đây là những gì hoạt động ngay bây giờ :-)

  • Trước tiên, bạn phải nhấp vào nút ghi màu đỏ hoặc bạn sẽ không nhận được gì.

  • Tôi không bao giờ nhận thấy WStrước đây nhưng nó lọc các kết nối ổ cắm web.

  • Chọn nó và sau đó bạn có thể thấy các khung sẽ hiển thị cho bạn thông báo lỗi, v.v.

nhập mô tả hình ảnh ở đây


Tôi không thích cách JSON được định dạng ở đó xấu xí. Không có định dạng về cơ bản.

1
@ ống đó là giao thức signalR. Đưa nó lên với Microsoft 😜
Simon_Weaver

1
vui mừng khi thấy ít nhất câu trả lời này vẫn còn tốt bốn năm sau: p
Stu Thompson

1
@StuThndry có - upvotes của tôi tiếp tục tích lũy :-)
Simon_Weaver

41

Nếu bạn không có trang đang truy cập websocket, bạn có thể mở bảng điều khiển Chrome và nhập JavaScript của mình vào:

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

Điều này sẽ mở ra ổ cắm web để bạn có thể nhìn thấy nó trong tab mạng và trong bảng điều khiển.


Cảm ơn! Ngoài ra: Trang bạn mở phải có cùng nguồn gốc với websocket của bạn. Nếu bạn cố gắng mở các công cụ phát triển Chrome trên một nguồn gốc khác (hoặc thậm chí trang tab mới) và sau đó kết nối với websocket của bạn, bạn sẽ gặp lỗi ủy quyền.
Dan Esparza

Có cách nào để sửa lỗi này?
not2qubit

37

Các câu trả lời khác bao gồm kịch bản phổ biến nhất: xem nội dung của các khung (Công cụ dành cho nhà phát triển -> tab Mạng -> Nhấp chuột phải vào kết nối websocket -> khung).

Nếu bạn muốn biết thêm một số thông tin, như ổ cắm nào hiện đang mở / không hoạt động hoặc có thể đóng chúng, bạn sẽ thấy url này hữu ích

chrome://net-internals/#sockets

10

Bạn có 3 tùy chọn: Chrome (thông qua Công cụ dành cho nhà phát triển -> tab Mạng), Wireshark và Fiddler (thông qua tab Nhật ký), tuy nhiên tất cả đều rất cơ bản. Nếu bạn có lưu lượng truy cập rất lớn hoặc mỗi khung hình rất lớn, việc sử dụng chúng để gỡ lỗi sẽ trở nên rất khó khăn.

Tuy nhiên, bạn có thể sử dụng Fiddler với FiddlerScript để kiểm tra lưu lượng truy cập WebSocket giống như cách bạn truy cập lưu lượng HTTP. Một số ưu điểm của giải pháp này là bạn có thể tận dụng nhiều chức năng khác trong Fiddler, chẳng hạn như nhiều trình kiểm tra (HexView, JSON, SyntaxView), so sánh các gói và tìm gói, v.v.Kiểm tra lưu lượng truy cập WebSocket

Vui lòng tham khảo bài viết gần đây của tôi về CodeProject, trong đó chỉ cho bạn cách gỡ lỗi / Kiểm tra lưu lượng truy cập WebSocket bằng Fiddler (với FiddlerScript). http://www.codeproject.com/Articles/718660/Debug-Inspect-WebSocket-traffic-with-Fiddler


5

Tôi chỉ đăng bài này vì Chrome thay đổi rất nhiều và không có câu trả lời nào được cập nhật.

  1. Mở công cụ dev
  2. TẢI LẠI TRANG CỦA BẠN (để kết nối WS được ghi lại bởi tab mạng)
  3. Nhấp vào yêu cầu của bạn
  4. Nhấp vào tab phụ "Khung"
  5. Bạn sẽ thấy một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây


4

Câu trả lời ngắn cho Chrome Phiên bản 29 trở lên:

  1. Mở trình gỡ lỗi, chuyển đến tab "Mạng"
  2. Tải trang bằng websocket
  3. Nhấp vào yêu cầu websocket với phản hồi nâng cấp từ máy chủ
  4. Chọn tab "Khung" để xem khung websocket
  5. Nhấp vào yêu cầu websocket một lần nữa để làm mới khung

1
Có vẻ như điều này hoạt động, ngoại trừ việc nó khó chịu khi nó ngừng hoạt động nếu bạn ngắt kết nối và kết nối lại với url websocket (ví dụ: trên websocket.org/echo.html ), trong trường hợp đó bạn phải làm mới trang! :(
matanster

3

Các công cụ dành cho nhà phát triển Chrome cho phép xem yêu cầu bắt tay đang chờ xử lý trong khi kết nối được mở, nhưng bạn không thể thấy lưu lượng truy cập theo như tôi biết. Tuy nhiên bạn có thể đánh hơi nó chẳng hạn.


2

Tôi đã sử dụng tiện ích mở rộng Chrome có tên Simple WebSocket Client v0.1.3 được xuất bản bởi người dùng hakobera. Nó rất đơn giản trong cách sử dụng, nơi nó cho phép mở websockets trên một URL nhất định, gửi tin nhắn và đóng kết nối ổ cắm. Nó rất tối giản.


2

Đối với một công cụ tôi bắt đầu sử dụng, tôi đề xuất Firecamp Giống như Postman, nhưng nó cũng hỗ trợ websockets và socket.io.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.