我正在尝试在 IIS 8 中启用 WebSocket-Extension permessage-deflate,但到目前为止还没有运气。看来,IIS 不支持任何扩展并且不响应 Sec-WebSockets-Extension header 。

我尝试通过 Response.Headers.Add("Sec-WebSockets-Extension", "permessage-deflate; client_no_context_takeover; server_no_context_takeover") 手动发送它,并在发送之前/接收之后通过 DeflateStream 手动进行压缩/解压缩,但是 WebSocket 的接收方法失败了。

我还尝试将 WebSocket 手动实现为 OWIN 中间件(在库 vtortola 的帮助下),但 IIS 不断关闭我的 InputStream 并且无法读取数据。

有没有人成功启用此功能?

最佳答案

恐怕通过 System.Web.WebSockets 是不可能的。

https://tools.ietf.org/html/rfc7692#section-6

虽然您可以为 deflate 模式指定 HTTP header ,但消息需要激活位 RSV1 才能被识别为压缩:



所以即使你压缩了有效载荷,因为消息头没有压缩位,接收者仍然会尝试读取未压缩。一旦你通过HTTP升级机制协商了deflate模式,你仍然可以一起发送压缩和未压缩的消息,这是因为deflate对于小负载无效,所以有些消息可能不值得压缩。

也就是说,由于 ASP.NET 中的 WebSocket API 不允许您制定消息选项,因此恐怕无法做到这一点。

现在,关于 OWIN。我不得不说我没有探索过这条路,但是,我怀疑这是可能的,至少在与 HTTP 相同的端口中与 IIS8 集成,这可能是您想要做的。

关于.net - 带有 permessage-deflate 的 IIS 8 WebSockets,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38933815/

10-10 04:42