RESOLVED MOVED302561
Safari on iOS 26.1 with iCloud Privacy Relay enabled cannot establish multiple WebSocket connections to the same host:port
https://bugs.webkit.org/show_bug.cgi?id=302561
Summary Safari on iOS 26.1 with iCloud Privacy Relay enabled cannot establish multipl...
rayleigh
Reported 2025-11-14 18:57:42 PST
Created attachment 477400 [details] recordings and test page # Overview On iOS 26.1, when iCloud+ Privacy Relay is enabled, Safari is unable to establish more than one WebSocket connection to the same IP and port within a single page. The first WebSocket connection succeeds, but all subsequent connections remain in the Connecting state indefinitely. If the first (successful) connection is manually closed, the remaining pending connections immediately succeed. This issue does not occur when different ports are used or when Privacy Relay is turned off. We believe this regression is related to networking changes introduced in iOS 26 (referenced in https://webkit.org/blog/17333/webkit-features-in-safari-26-0/), as well as several related reports involving Privacy Relay and QUIC. --- # Steps to Reproduce 1. Prepare an iPhone running iOS 26.1, with an active iCloud+ subscription and Privacy Relay enabled. 2. Open Safari and visit our demo page(if there are any error, you can find test_wss_connect.html in attachment too): https://test-ws-fishel-feng-fishelfengs-projects.vercel.app/ 3. Connect the iPhone to macOS Safari Web Inspector via USB for debugging. 4. On the demo page, click the button “Create 4 Connections (Verify Serialization)”. 5. Observe that only the first WebSocket connection succeeds. 6. Manually close the first successful WebSocket using macOS Safari Web Inspector. 7. Observe that the remaining three WebSocket connections immediately succeed. --- # Expected Behavior After clicking “Create 4 Connections”, all four WebSocket connections should succeed, regardless of Privacy Relay status. --- # Actual Behavior - Only the first WebSocket connection succeeds. - All subsequent connections remain stuck in Connecting until the first connection is closed. - Closing the first connection instantly allows the remaining ones to succeed. --- # Additional Findings - Based on our packet capture and request header analysis, the WebSocket upgrade requests are indeed relayed over QUIC when Privacy Relay is enabled. - The issue does not appear when connecting to different ports, only when multiple connections share the same IP + port. - We believe this may be related to changes introduced in the iOS 26 networking stack. --- # Related Reports We Found (All observations below are strictly based on our reading of these reports, without additional interpretation) - Bug 298616 (https://bugs.webkit.org/show_bug.cgi?id=298616) Reported WebSocket failures when Privacy Relay is enabled. Although stated to be fixed in iOS 26.1, our tests indicate that failures still occur in the scenario of multiple same-host+port WebSockets. - Figma community report https://forum.figma.com/report-a-problem-6/safari-maxos-26-sometimes-not-loading-websockets-45307 Mentions WebSocket loading problems associated with Privacy Relay. - Apple Support thread https://discussions.apple.com/thread/256142477?answerId=261592734022&sortBy=rank Users report WebSocket connection issues specifically when Privacy Relay is turned on. These reports appear to involve similar symptoms related to WebSocket failures under Privacy Relay. --- # Attachments We can provide the following upon request: - Screen recordings for two separate test runs - Network panel recordings from Safari Web Inspector --- # Request We would appreciate confirmation from the WebKit team on whether: - This is a known limitation or regression in Privacy Relay handling on iOS 26.1, - The issue is related to the previously reported WebSocket/Privacy Relay bugs and any solution to work with privacy relay enabled.
Attachments
recordings and test page (9.45 MB, application/zip)
2025-11-14 18:57 PST, rayleigh
no flags
Radar WebKit Bug Importer
Comment 1 2025-11-16 22:13:42 PST
youenn fablet
Comment 2 2025-11-16 22:14:45 PST
I am not able to access to the link you provided. I put the code in the test page in https://codepen.io/youennf/pen/qEZRGZL and was able to reproduce on a recent iOS build: - Without private relay off, the 4 connections open - With private relay on, only the first connection opens.
rayleigh
Comment 3 2025-11-16 22:24:13 PST
(In reply to youenn fablet from comment #2) > I am not able to access to the link you provided. > I put the code in the test page in https://codepen.io/youennf/pen/qEZRGZL > and was able to reproduce on a recent iOS build: > - Without private relay off, the 4 connections open > - With private relay on, only the first connection opens. Hi, thank you for your work. (Sorry that something wrong with my demo site) 1. When I mannually close the first connection, the remaining 3 connect successfully immediately. 2. And if there is no DELAY_MS=3s for those connections, just new Websocket(url) 4 times in a loop, all of them can succeed. Hope this can provide more information to you.
Alexey Proskuryakov
Comment 4 2025-11-17 09:22:49 PST
For what it's worth, when I ran the test without iCloud Private Relay, the fourth connection failed server side with 429 Too Many Requests. Just something to keep an eye out for when testing.
rayleigh
Comment 5 2025-11-17 21:37:17 PST
Thank you all so much. Not sure is there any workaround from Apple side to solve this issue for users private relay enabled, some of our customers have been severely affected due to our service not working, but we are not unable to contact them to disable the private relay feature.
Alexey Proskuryakov
Comment 6 2025-11-19 08:56:20 PST
We are currently tracking this as an underlying framework issue outside WebKit, so marking as MOVED. Apple engineers who work on this framework will be investigating. Youenn and myself will keep an eye on this bug in case there are further comments. I can't promise to post any updates though, just because there is too much traffic for me to always remember.
rayleigh
Comment 7 2025-11-19 17:24:30 PST
Appreciate the clarification. Thanks to you and Youenn for the update and for looking into this.
Note You need to log in before you can comment on or make changes to this bug.