mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
## Summary - Implements proper WebSocket subprotocol negotiation per RFC 6455 and WHATWG standards - Adds HeaderValueIterator utility for parsing comma-separated header values - Fixes WebSocket client to correctly validate server subprotocol responses - Sets WebSocket.protocol property to negotiated subprotocol per WHATWG spec - Includes comprehensive test coverage for all subprotocol scenarios ## Changes **Core Implementation:** - Add `HeaderValueIterator` utility for parsing comma-separated HTTP header values - Replace hash-based protocol matching with proper string set comparison - Implement WHATWG compliant protocol property setting on successful negotiation **WebSocket Client (`WebSocketUpgradeClient.zig`):** - Parse client subprotocols into StringSet using HeaderValueIterator - Validate server response against requested protocols - Set protocol property when server selects a matching subprotocol - Allow connections when server omits Sec-WebSocket-Protocol header (per spec) - Reject connections when server sends unknown or empty subprotocol values **C++ Bindings:** - Add `setProtocol` method to WebSocket class for updating protocol property - Export C binding for Zig integration ## Test Plan Comprehensive test coverage for all subprotocol scenarios: - ✅ Server omits Sec-WebSocket-Protocol header (connection allowed, protocol="") - ✅ Server sends empty Sec-WebSocket-Protocol header (connection rejected) - ✅ Server selects valid subprotocol from multiple client options (protocol set correctly) - ✅ Server responds with unknown subprotocol (connection rejected with code 1002) - ✅ Validates CloseEvent objects don't trigger [Circular] console bugs All tests use proper WebSocket handshake implementation and validate both client and server behavior per RFC 6455 requirements. ## Issues Fixed Fixes #10459 - WebSocket client does not retrieve the protocol sent by the server Fixes #10672 - `obs-websocket-js` is not compatible with Bun Fixes #17707 - Incompatibility with NodeJS when using obs-websocket-js library Fixes #19785 - Mismatch client protocol when connecting with multiple Sec-WebSocket-Protocol This enables obs-websocket-js and other libraries that rely on proper RFC 6455 subprotocol negotiation to work correctly with Bun. 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
7.2 KiB
7.2 KiB