Replies: 1 comment
And free plans cannot even disable HTTP/2... |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Summary
DeepSeek Harness Web UI fails to establish the WebSocket connection to
/api/remote.muxwhen served behind Cloudflare Tunnel. The browser-trust fence and authentication work correctly, but the WebSocket upgrade is rejected (404) because Cloudflare edge speaks HTTP/2 to the browser, and HTTP/2 does not support theUpgrade: websocketheader — it uses Extended CONNECT (RFC 8441) instead.Environment
@deepseek-ai/dsh0.1.0-rc.7dsh web --no-open --trusted-host harness.afonsoft.devcloudflared) → nginx reverse proxy →127.0.0.1:3080Symptoms
Browser console:
The Models page shows:
The
settings.describeRPC (which the Models page reads through the WebSocket mirror) never loads because the WebSocket never establishes.SSE stream also fails:
Diagnosis
curl --http1.1to/api/remote.muxwith WS upgradecurl(default HTTP/2) to/api/remote.muxwith WS upgrade127.0.0.1:3080(bypass Cloudflare)127.0.0.1:80(bypass Cloudflare)The WebSocket works at every layer except through Cloudflare HTTP/2 edge. Cloudflare Tunnel HTTP origin service does not translate HTTP/2 Extended CONNECT to HTTP/1.1 Upgrade: websocket for the origin.
The SSE /plugins/events stream also fails with ERR_QUIC_PROTOCOL_ERROR when HTTP/3 (QUIC) is enabled.
Workaround
Disabling HTTP/2 and HTTP/3 in the Cloudflare dashboard for the zone forces HTTP/1.1 between browser and edge, which supports Upgrade: websocket natively. This is not ideal for performance on other subdomains sharing the same zone.
Request
Reproduction
All reactions