この問題が発生している可能性がありますが空の状態になった人を見つけるためにインターネットを調べました。したがって、ここに行きます:ARR 3を使用したTomcat 8 + IIS 8上のWebソケットは動作していません
私たちは、Java Webアプリケーション(Spring MVC 4に基づいています)を持っています。 Application Request Routing(ARR)v3を使用するロードバランサ/リバースプロキシとして機能するMicrosoft IISの背後に位置します。 dev.example.com
、demo.example.com
とqa.example.com
:
このIISは、3つの異なる環境(同じ Javaコードを実行しているすべての)のためのARRと負荷分散を行っています。
アプリケーションがSockJSとstompjs経由でのWebSocketを使用してユーザーのブラウザに通知を提供し、アプリケーションサーバにTomcat 8にqa.example.com
環境をアップグレードした後にTomcat 7の上にあったが、これはすべてが順調に取り組んできた、のWebSocket接続が動作を停止 - それはXHR POSTリクエストに戻ります。
IISに変更が加えられておらず、qa
アプリケーションサーバーだけであることを強調したいと思います。壊れqa
環境からのサンプル要求/応答(
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cache-Control: no-cache
Connection: Upgrade
Cookie: <cookies snipped>
Host: dev.example.com
Origin: https://dev.example.com
Pragma: no-cache
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: E7aIek0X6qcO9PAl1n6w4Q==
Sec-WebSocket-Version: 13
Upgrade: websocket
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36
応答ここ
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Connection: Upgrade
Date: Thu, 22 Oct 2015 02:19:35 GMT
Expires: 0
Pragma: no-cache
Sec-WebSocket-Accept: dKYK05s4eP87iA20aSo/3ntOrPU=
Server: Microsoft-IIS/8.0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Upgrade: Websocket
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-Powered-By: ARR/3.0
X-XSS-Protection: 1; mode=block
されています。ここでは
は(作業)
dev
環境からのサンプル要求/応答であります): Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cache-Control: no-cache
Connection: Upgrade
Cookie: <cookies snipped>
Host: qa.example.com
Origin: https://qa.example.com
Pragma: no-cache
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: jTOIAT0+o35+Qi0ZWh2gyQ==
Sec-WebSocket-Version: 13
Upgrade: websocket
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36
応答:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Connection: Upgrade
Date: Thu, 22 Oct 2015 02:18:30 GMT
Expires: 0
Pragma: no-cache
Sec-WebSocket-Accept: P+fEH8pvxcu3sEoO5fDizjSbwJc=
Sec-WebSocket-Extensions: permessage-deflate;client_max_window_bits=15
Server: Microsoft-IIS/8.0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Upgrade: Websocket
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-Powered-By: ARR/3.0
X-XSS-Protection: 1; mode=block
唯一の明らかな違いはdev
応答がないながらqa
応答がSec-WebSocket-Extensions: permessage-deflate;client_max_window_bits=15
ヘッダを含むことがあります。
101
レスポンスをデバッグするためにIISで「Failed Request Tracing」がオンになり、IISによって上書きされるヘッダーがいくつかあることがわかります。つまり、Sec-WebSocket-Accept
ヘッダーです。
IISは、その要求が502.5
エラーを生成していることも示しています。私はそれを見て、これを見つけた:502.5
は "WebSocket failure(ARR)"であると言われているhttps://support.microsoft.com/en-us/kb/943891とそれはすべてです。奇妙なことに、Chrome Dev Toolsは、それがそうであるように101で応答することを示しています。
ローカルアプリケーションサーバー(IISなしのTomcat 8)でこれを試してみました。 Tomcat 7 + IIS + ARR + WebSocketは正常に動作します。 Tomcat 8 + IIS + ARR + WebSocketsはサポートしていません。
正確なバージョンのTomcat 8は8.0.28ですが、Tomcat 8.0.26でも同じ結果が得られました。
私の次のステップでは、マイナーバージョンを使ってTomcat 8をダウングレードし、変更があるかどうか確認します。私が何かを発見したら、ここで更新します。
更新
ここに私のローカルサーバー(IISなし)からの応答です:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Connection: upgrade
Date: Thu, 22 Oct 2015 13:59:23 GMT
Expires: 0
Pragma: no-cache
Sec-WebSocket-Accept: 718HnPxHN8crYYzNGFjQf7w8O+Y=
Sec-WebSocket-Extensions: permessage-deflate;client_max_window_bits=15
Server: Apache-Coyote/1.1
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Upgrade: websocket
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
それが壊れqa
要求のようにたくさん見えるが、それは素晴らしい作品。だから私はSec-WebSocket-Extensions
ものは赤ちゃんだったと思います。また、Upgrade: websocket
とConnection: upgrade
はローカルサーバーでは小文字ですが、IISを前面に置くと、Websocket
とUpgrade
となります。
Sec-WebSocket-Extensions
もの後にqa
に後続スペースがありますが、ローカルではありません。
アップデート2
それはすべて私は、Internet Explorer 11を試していないが、私はそれはおそらくも動作を前提とする必要がマイクロソフトエッジ(Windowsの10)にqa
環境で正常に動作します。 FirefoxとOSXのChromeは動作しません。
アップデート3
それはIIS/ARRによって変更される前にTomcatからの要求:
HTTP/1.1 101 Switching Protocols
Server: Apache-Coyote/1.1
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Accept: luP49lroNK9qTdaNNnSCLXnxAWc=
Sec-WebSocket-Extensions: permessage-deflate;client_max_window_bits=15
Date: Tue, 27 Oct 2015 21:10:48 GMT
TomcatのWebソケットで圧縮を無効にできますか? Sec-WebSocket-エクステンション:permessage-deflate;それが圧縮されていることを示唆しています。私の経験では、IISは圧縮されたWebソケットをプロキシしませんでした。 –
@ timmah.faase私はそれをショットして報告します。 –
このオプションを私のTomcat設定に追加しようとしました: '-Dorg.apache.tomcat.websocket.DISABLE_BUILTIN_EXTENSIONS = true'は、 'trueの場合、サーバが提供するメッセージ圧縮などのすべてのビルトイン拡張機能を無効にしますが、応答ヘッダーはまったく変更されていないようです。 –