You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
unsupported permessage-deflate parameter: "client_max_window_bits=15" from client #443
If a received extension negotiation offer doesn't have the
"client_max_window_bits" extension parameter, the corresponding
extension negotiation response to the offer MUST NOT include the
"client_max_window_bits" extension parameter.
There the server is hinting us on its window size but that doesn't matter to use as we always use the largest window size. See #258 (comment)
Here if you include client_max_window_bits you're telling the server it can reply with client_max_window_bits with a value less than 15. But we don't support that as we cannot adjust the window size to be less than 2**15.
If a received extension negotiation offer has the
"client_max_window_bits" extension parameter, the server MAY include
the "client_max_window_bits" extension parameter in the corresponding
extension negotiation response to the offer. If the
"client_max_window_bits" extension parameter in a received extension
negotiation offer has a value, the server may either ignore this
value or use this value to avoid allocating an unnecessarily big LZ77
sliding window by including the "client_max_window_bits" extension
parameter in the corresponding extension negotiation response to the
offer with a value equal to or smaller than the received value.
If you know a way to adjust the window size dynamically with the standard library deflate package I'd be happy to add support and then we can support these extensions parameters fully.
Activity
nhooyr commentedon Apr 9, 2024
Since we don't include it in the handshake request whatever server you're trying to use isn't implementing the RFC correctly.
See https://datatracker.ietf.org/doc/html/rfc7692
The library is correct to error on it.
HMaker commentedon Apr 9, 2024
I did include the
client_max_window_bitsparameter because that's what the Chrome browser does. I fixed it in my fork.HMaker commentedon Apr 9, 2024
related #351
nhooyr commentedon Apr 9, 2024
The situation is different from #351.
There the server is hinting us on its window size but that doesn't matter to use as we always use the largest window size. See #258 (comment)
Here if you include
client_max_window_bitsyou're telling the server it can reply withclient_max_window_bitswith a value less than 15. But we don't support that as we cannot adjust the window size to be less than2**15.If you know a way to adjust the window size dynamically with the standard library deflate package I'd be happy to add support and then we can support these extensions parameters fully.
HMaker commentedon Apr 9, 2024
In my case the server always reply with
client_max_window_bits=15, I made websocket accept thatnhooyr commentedon Apr 9, 2024
But you just said
If you didn't include it and the server is always replying then the server is broken. It's violating the RFC.
HMaker commentedon Apr 9, 2024
I meant the server replies with
client_max_window_bits=15when the client sendsclient_max_window_bits, so it won't break this libraryProbably most servers do that
nhooyr commentedon Apr 9, 2024
Ok fair enough I'll add a bypass here too.
hexdigest commentedon Aug 12, 2025
Hi @nhooyr
Have you considered using https://github.com/klauspost/compress/blob/v1.18.0/flate/deflate.go#L947 ?
It seems like it supports custom window sizes.