Perspective IIS Reverse Proxy

Yes, I have configured this successfully. This behavior is due to IIS ARR inability of handling websocket compression properly. When launching a session, Chrome sends a websocket upgrade request containing a “Sec-WebSocket-Extensions” header with a value of “permessage-deflate”; the proxy server receives this message and forwards it to the gateway server, which responds back with the websocket protocol swap, including the “permessage-deflate” compression. However, while the proxy server receives subsequent websocket frames from the gateway server, it does not forward them back to the client (browser).

We can add a server variable within the inbound proxy rule so that the “Sec-WebSocket-Extensions” header is cleared, meaning that the requested compression isn’t used for websocket frames.

Do the following on the proxy server:

  1. Add the server variable within IIS Manager > URL Rewrite > View Server Variable… > Add…
    Server Variable Name: HTTP_SEC_WEBSOCKET_EXTENSIONS

  1. Edit inbound rule (IIS Manager > Your Site > URL Rewrite) and add server variable:
    Name: HTTP_SEC_WEBSOCKET_EXTENSIONS
    Value: “”
    Replace the existing value: True

  1. Locate path where web.config is stored. (e.g. %SystemDrive%\inetpub\wwwroot)

  1. Clear value for HTTP_SEC_WEBSOCKET_EXTENSIONS variable within web.config.

    <set name="HTTP_SEC_WEBSOCKET_EXTENSIONS" value="" />