xP: disable WebSocket compression on Safari
Wildly known to be broken.
This commit is contained in:
parent
a7c3ed7cc1
commit
9dc3dd02f3
15
xP/xP.go
15
xP/xP.go
|
@ -16,6 +16,7 @@ import (
|
|||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"nhooyr.io/websocket"
|
||||
|
@ -159,13 +160,21 @@ func clientWriteError(ctx context.Context, ws *websocket.Conn, err error) bool {
|
|||
}
|
||||
|
||||
func handleWS(w http.ResponseWriter, r *http.Request) {
|
||||
ws, err := websocket.Accept(w, r, &websocket.AcceptOptions{
|
||||
opts := &websocket.AcceptOptions{
|
||||
InsecureSkipVerify: true,
|
||||
// Note that Safari can be broken with compression.
|
||||
CompressionMode: websocket.CompressionContextTakeover,
|
||||
// This is for the payload; set higher to avoid overhead.
|
||||
CompressionThreshold: 64 << 10,
|
||||
})
|
||||
}
|
||||
|
||||
// AppleWebKit can be broken with compression.
|
||||
if agent := r.UserAgent(); strings.Contains(agent, " Version/") &&
|
||||
(strings.HasPrefix(agent, "Mozilla/5.0 (Macintosh; ") ||
|
||||
strings.HasPrefix(agent, "Mozilla/5.0 (iPhone; ")) {
|
||||
opts.CompressionMode = websocket.CompressionDisabled
|
||||
}
|
||||
|
||||
ws, err := websocket.Accept(w, r, opts)
|
||||
if err != nil {
|
||||
log.Println("Client rejected: " + err.Error())
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue