Tester WebSocket: łącz się, wysyłaj i loguj ramki online | We.Inc
Darmowy tester WebSocket online. Otwórz połączenie ws:// lub wss:// ze swojej przeglądarki, wysyłaj tekst lub JSON, śledź każdą wiadomość i odczytaj kod zamknięcia, gdy połączenie się zakończy.
Tester WebSocket
Wklej adres wss:// lub ws://, naciśnij Połącz, a tester otworzy prawdziwy WebSocket z Twojej własnej przeglądarki. Wpisz wiadomość, wyślij ją, a każda wychodząca i przychodząca ramka trafi do logu ze znacznikiem czasu. Gdy gniazdo się zamknie, zobaczysz kod zamknięcia, powód oraz informację, czy handshake zamykający zakończył się poprawnie.
Co oznacza każda wartość readyState
Wartość
Stała
Znaczenie
CONNECTING
Utworzony, handshake jeszcze się nie zakończył
OPEN
Gotowy: send() już działa
CLOSING
Rozpoczął się handshake zamykający
CLOSED
Zamknięty albo połączenie nigdy się nie otworzyło
Nic tutaj nie przechodzi przez nasze serwery. Połączenie otwiera obiekt WebSocket wbudowany w kartę przeglądarki, w której to czytasz, więc serwer widzi Twoją przeglądarkę, Twój adres IP i origin tej strony, https://we.inc. Serwer sprawdzający nagłówek Origin może je odrzucić. Ponieważ ta strona jest serwowana przez https, wybieraj adres wss://; zwykły ws:// może zostać zablokowany przez przeglądarkę jako niezabezpieczony.
Wpisz adres serwera. Musi zaczynać się od ws://, wss://, http:// lub https:// i nie może zawierać fragmentu #.
Dodaj podprotokoły, jeśli serwer ich oczekuje, oddzielone przecinkami, a potem naciśnij Połącz.
Napisz wiadomość i naciśnij Wyślij albo naciśnij Ctrl+Enter w polu tekstowym. Zaznacz opcję JSON, aby sprawdzić, czy tekst się parsuje, zanim zostanie wysłany.
Czytaj log: strzałki pokazują kierunek, a wpis zamknięcia pokazuje kod, powód i flagę wasClean.
Naciśnij Zamknij, aby zakończyć sesję własnym kodem (1000 lub dowolnym od 3000 do 4999) i krótkim powodem.
Zamknięte od razu z kodem 1006 i bez powodu? Handshake nie powiódł się, zanim popłynęła jakakolwiek ramka. Sprawdź adres, port, TLS oraz to, czy serwer odrzuca obce originy.
Przeglądarki celowo ukrywają szczegóły handshake przed skryptami, więc zdarzenie error nigdy nie mówi, dlaczego. Otwórz panel Network w narzędziach deweloperskich i filtruj po WS, aby zobaczyć status HTTP żądania upgrade.
Przeglądarki traktują localhost i 127.0.0.1 jako zaufane adresy, więc ws://localhost:PORT to najprostszy sposób na sprawdzenie serwera działającego na Twoim komputerze.
Ramki binarne domyślnie przychodzą jako obiekty Blob. Ten tester pokazuje ich rozmiar w bajtach, zamiast próbować je wyświetlić.
Powody zamknięcia muszą być krótkie: przeglądarka rzuca SyntaxError, jeśli powód po zakodowaniu w UTF-8 ma więcej niż 123 bajty.
Najczęściej zadawane pytania
Dlaczego moje połączenie nie działa tutaj, a działa w mojej aplikacji?
Zwykle przyczyną jest sprawdzanie originu. Twoja aplikacja łączy się z własnego originu, a ta strona z https://we.inc. Jeśli serwer akceptuje tylko wskazane originy, odrzuca handshake, a przeglądarka zgłasza kod zamknięcia 1006. Warto też spróbować adresu w formie wss://, bo sama ta strona jest serwowana przez https.
Czy moje dane są wysyłane do We.Inc?
Nie. Strona tylko tworzy gniazdo w Twojej karcie i zapisuje log w pamięci. Wiadomości płyną bezpośrednio między Twoją przeglądarką a serwerem, którego adres wpisałeś. Przeładowanie strony czyści log.
Czy mogę ustawić własne nagłówki, na przykład Authorization?
Nie z przeglądarki. Konstruktor WebSocket przyjmuje tylko adres URL i opcjonalną listę podprotokołów. Serwery wymagające tokenu zwykle odczytują go z query stringa, ciasteczka lub pierwszej wiadomości po otwarciu połączenia.
Dlaczego nie mogę wysłać pinga z tego narzędzia?
Przeglądarkowy interfejs WebSocket ma tylko metody send() i close(). Ping i pong to ramki kontrolne, na które przeglądarka odpowiada sama, gdy serwer ją pinguje, więc skrypty na stronie nigdy ich nie widzą. Wyślij zwykłą wiadomość tekstową, jeśli Twój serwer używa heartbeatu na poziomie aplikacji.
Jakie kody zamknięcia mogę wysłać?
Skrypty mogą przekazać do close() tylko 1000 lub kod od 3000 do 4999. Każda inna liczba rzuca InvalidAccessError. Kody z zakresu od 1001 do 1015 ustawiają same przeglądarki i serwery.
Co się dzieje po naciśnięciu Połącz
Przeglądarka wysyła zwykłe żądanie HTTP z nagłówkiem Upgrade: websocket, losowym Sec-WebSocket-Key i nagłówkiem Origin. Serwer, który się zgadza, odpowiada statusem 101 Switching Protocols i wartością Sec-WebSocket-Accept wyliczoną z tego klucza. Od tej chwili to samo połączenie TCP przenosi ramki w obu kierunkach.
Każda próba kończy się zdarzeniem open albo zdarzeniem close. Jeśli widzisz close bez open, upgrade nigdy się nie powiódł, co zawęża przyczynę do adresu, sieci lub reguł handshake po stronie serwera.
Jak czytać zdarzenie close
Wpis zamknięcia w logu zawiera trzy rzeczy. code to liczba z poniższej tabeli. reason to dowolny tekst wysłany przez drugą stronę, często pusty. wasClean ma wartość true tylko wtedy, gdy obie strony wymieniły ramki zamykające, więc false zwykle oznacza zerwanie sieci lub awarię serwera.
Kody zamknięcia WebSocket
Zakres od 1000 do 1015 jest zdefiniowany dla samego protokołu. Zakres od 3000 do 3999 jest rejestrowany w IANA dla bibliotek i frameworków, a od 4000 do 4999 jest wolny do prywatnego użytku między Twoim klientem a serwerem.
Kody zamknięcia i co z nich wynika
Kod
Nazwa
Co zwykle oznacza
Normal Closure
Praca jest skończona, a gniazdo zamknięto celowo
Going Away
Serwer się wyłącza albo strona została opuszczona
Protocol error
Jedna ze stron złamała reguły ramkowania
Unsupported Data
Dane typu, którego punkt końcowy nie przyjmuje, na przykład binarne do serwera obsługującego tylko tekst
No Status Received
Zarezerwowany: przyszła ramka zamykająca bez kodu
Abnormal Closure
Zarezerwowany: brak jakiejkolwiek ramki zamykającej, często nieudany handshake lub zerwana sieć
Invalid frame payload data
Wiadomość miała niespójne dane, na przykład tekst, który nie jest w UTF-8
Policy Violation
Ogólna odmowa, gdy nie pasują 1003 ani 1009
Message Too Big
Ramka była większa, niż akceptuje punkt końcowy
Mandatory Ext.
Klient chciał rozszerzenia, na które serwer się nie zgodził
Internal Error
Serwer napotkał nieoczekiwany stan
Service Restart
Serwer jest restartowany
Try Again Later
Stan przejściowy, na przykład przeciążenie
Bad Gateway
Proxy dostało nieprawidłową odpowiedź od serwera nadrzędnego
TLS handshake
Zarezerwowany: handshake TLS się nie powiódł, na przykład z powodu niezaufanego certyfikatu
3000 to 3999
Zarejestrowane
Definiowane przez biblioteki i frameworki
4000 to 4999
Użytek prywatny
Cokolwiek ustalą Twój klient i serwer
Ten sam klient w kilku linijkach JavaScriptu
Minimalny klient w przeglądarce
Tester robi pod spodem dokładnie to: otwiera połączenie, loguje każdą wiadomość i podaje kod zamknięcia.