3

ここで同様の失敗の報告を見ました: https://groups.google.com/forum/?fromgroups=#!topic/sockjs/QNtA1_p_arU、しかし私の問題は違うようです。

私のセットアップ: クライアントはhttps://www.mysite.com/sockjsSockJS に接続し、実際のページは で提供されhttps://www.mysite.com/blah/blah/blahます。ページ上のすべての外部要素 (css や js など) は、SockJS-Client (https://d1fxtkz8shb9d2.cloudfront.net/sockjs-0.3.js、最新リリースでは 0.3.4 である必要があります) を含むhttpsで提供されます。バックエンドは SockJS-Tornado で作成されています。

問題 1 : 次のプロトコルを使用するように指定します。

var options = {protocols_whitelist: ["websocket", "xhr-streaming", "xdr-streaming", "xhr-polling", "xdr-polling", "iframe-htmlfile", "iframe-eventsource", "iframe-xhr-polling"], debug: true};             
conn = new SockJS("https://www.mysite.com/sockjs", options);

iframe-htmlfileただし、サーバーログに次のように表示されるように、IE9 は単に最悪のプロトコルを使用しているようです。

INFO:root:200 GET /sockjs/info?t=1353062888578 (127.0.0.1) 0.51ms
INFO:root:200 GET /sockjs/iframe.html (127.0.0.1) 22.21ms

xdr-streamingorを使用しないのはなぜxdr-pollingですか? SockJS doc では、これらの 2 つのプロトコルに「IE8, 9 (cookies=no)」というラベルが付けられていますが、これは、ブラウザーで Cookie が無効になっている場合にのみ SockJS がそれらを使用することを意味しますか?

問題 2 : protocoliframe-htmlfileを使用すると'Only Secure Content is Displayed'、混合コンテンツの問題を示す警告がページに表示されます。ただし、テスト済みの他のブラウザー (Chrome、FireFox、Safari など) ではこの警告は報告されず、前述のように、ページ上のすべての外部リソースは https を介して提供されます。どうしてこれなの?使用されているこの特定のプロトコルに関連していiframe-htmlfileますか?

同時に、SockJS はサーバーへの接続とメッセージの送信に苦労します。これは、サーバーログに表示されるものです。

INFO:root:200 GET /sockjs/info?t=1353062888578 (127.0.0.1) 0.51ms
INFO:root:200 GET /sockjs/iframe.html (127.0.0.1) 22.21ms
INFO:root:200 GET /sockjs/info?t=1353062922712 (127.0.0.1) 0.39ms
connection openned for: 127.0.0.1
INFO:root:200 GET /sockjs/info?t=1353062963868 (127.0.0.1) 0.36ms
WARNING:root:Read error on 12: [Errno 104] Connection reset by peer
WARNING:root:error on read
Traceback (most recent call last):
  File "/home/ml/envs/.virtualenvs/sockapp/local/lib/python2.7/site-packages/tornado/iostream.py", line 355, in _handle_read
    if self._read_to_buffer() == 0:
  File "/home/ml/envs/.virtualenvs/sockapp/local/lib/python2.7/site-packages/tornado/iostream.py", line 422, in _read_to_buffer
    chunk = self._read_from_socket()
  File "/home/ml/envs/.virtualenvs/sockapp/local/lib/python2.7/site-packages/tornado/iostream.py", line 403, in _read_from_socket
    chunk = self.socket.recv(self.read_chunk_size)
error: [Errno 104] Connection reset by peer
subject disconnection from: None
Message handled in: 0 ms
INFO:root:200 GET /sockjs/369/rpf1d1vl/htmlfile?c=_jp.aepnvri (127.0.0.1) 60006.30ms

最後のエラーはタイムアウトのようです。IE9 で警告ダイアログを閉じると、接続が開いているように見えますが、その後ブラウザからメッセージが受信されません (ブラウザは、接続が開くとすぐにメッセージを送信する必要があります)。これは以前の混合コンテンツ警告と関係があるのだろうか。

4

1 に答える 1

5

SockJS メーリング リストで問題を特定できたと思います。簡単な要約:

問題 1 - サーバーは、(負荷分散の理由から) Cookie を実行するトランスポートのみを使用することをクライアントに要求しました。つまり、XDR ベースのトランスポートは使用できません (XDR は Cookie を実行できません)。

問題 2sockjs_url -サーバー側でパラメーターを設定するのを忘れて、(http ではなく) https から sockjs javascript を含めました。そのため、混合コンテンツの警告が表示されました。

于 2012-11-22T14:11:15.787 に答える