WebSocket Upload Transport for Improved Performance in Proxied Environments
✨ Features
- server: Added a WebSocket upload transport at
/api/upload/wsthat streams the encrypted payload over a single persistent connection, eliminating the HTTP/2 multiplexing bottleneck that reverse proxies (Traefik, Nginx) impose on parallel chunk uploads - server: Added
FILE_UPLOAD_WSenvironment variable (default:true) to enable or disable the WebSocket upload transport - server: Added
FILE_UPLOAD_WS_MAX_BUFFERenvironment variable (default:16MB) to cap the per-session server receive buffer for WebSocket uploads - web: Upload worker now uses the WebSocket transport as the primary upload path and automatically falls back to the existing HTTP chunked upload when the handshake fails, is blocked, or times out (10 s)
🔒 Security
- server: Added
Originheader validation on WebSocket upgrade requests to prevent cross-site WebSocket hijacking (defence-in-depth, not exploitable due to token requirements)
📝 Documentation
- docs: Added
FILE_UPLOAD_WSandFILE_UPLOAD_WS_MAX_BUFFERto the user-guide environment variables page and the developer-guide environment reference - docs: Documented the WebSocket upload protocol in the upload API reference, including message shapes, close codes, and client fallback triggers
- docs: Added Nginx and Traefik configuration snippets for the WebSocket upload transport in the reverse-proxy guide
- docs: Updated developer-guide architecture to document both WebSocket (primary) and HTTP chunked (fallback) upload transports with flow diagrams
🐳 Docker
- Image:
skyfay/skysend:v2.3.0 - Also tagged as:
latest,v2 - Platforms: linux/amd64, linux/arm64