2016-08-13 65 views
4

我想在IIS 8中啓用WebSocket-擴展permessage-deflate,但目前還沒有運氣。看來,IIS不支持任何擴展,並且不會以Sec-WebSockets-Extension標題做出響應。IIS 8 WebSockets與滲透泄漏

我試圖通過Response.Headers.Add("Sec-WebSockets-Extension", "permessage-deflate; client_no_context_takeover; server_no_context_takeover")手動發送它,並在發送/接收之後手動通過DeflateStream進行壓縮/解壓縮,但是接着WebSocket的接收方法失敗。

我也嘗試手動實現WebSocket作爲OWIN中間件(在庫vtortola的幫助下),但IIS保持關閉我的InputStream並且不可能讀取數據。

有沒有人成功啓用此功能?

回答

3

恐怕不可能通過System.Web.WebSockets

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

雖然可以表明在放氣模式的HTTP頭,需要有激活位RSV1才能被識別的信息爲壓縮:

該文件分配RSV1位PMCEs 的WebSocket標題,並將該位設置爲「Per-Message Compressed」位。在使用PMCE的WebSocket 連接中,該位指示消息是否被壓縮。

因此,即使您壓縮有效負載,由於消息頭沒有壓縮位,接收機仍會嘗試讀取爲未壓縮。一旦通過HTTP升級機制協商了放氣模式,仍然可以將壓縮和未壓縮的消息一起發送,其原因是放氣對小負載無效,因此存在可能不值得壓縮的消息。

這就是說,由於ASP.NET中的WebSocket API不允許你計算消息選項,恐怕這是不能做到的。

現在,關於OWIN。我不得不說,我還沒有探索過這條路,但是,我懷疑這是可能的,至少在與HTTP相同的端口上與IIS8集成,這可能是你想要做的。

+0

這個問題會是這樣的:你有沒有想過把你的websocket庫與一個自定義的owin中間件集成在一起?這不可能嗎? – Kjellski

+0

我想到了這一點,但考慮到它不能運行在與IIS8相同的TCP端口上,我失去了興趣。從技術上講,這應該是可能的,但我從來沒有試圖做類似的事情。 – vtortola

+0

而且可能的話,我的意思是可以在自己託管的應用程序中使用它,而不是在IIS8中使用它。 – vtortola