2012-11-16 2 views
3

여기에도 비슷한 오류가있는보고가 있습니다 : https://groups.google.com/forum/?fromgroups=#!topic/sockjs/QNtA1_p_arU,하지만 내 문제가 다른 것 같습니다.IE9에 문제가있는 SockJS

내 설정 : 클라이언트가 SockJS에 https://www.mysite.com/sockjs에 연결하고 실제 페이지가 https://www.mysite.com/blah/blah/blah에 게재됩니다. 페이지의 모든 외부 요소 (예 : css 및 js)는 https으로 제공되며 SockJS-Client (https://d1fxtkz8shb9d2.cloudfront.net/sockjs-0.3.js 포함)는 최신 릴리스의 경우 0.3.4이어야합니다.). 백엔드는 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); 

그러나, IE9는 단순히 최악의 가능한 프로토콜 iframe-htmlfile를 사용하는 것 I는 서버 로그에서 다음을 참조 같이

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-streaming 또는 xdr-polling을 사용하지 않습니까? SockJS doc에서는 'IE8, 9 (cookies = no)'아래에이 두 프로토콜을 표시합니다. 이는 SockJS가 브라우저에서 쿠키를 사용할 수 없을 때만 사용한다는 것을 의미합니까?

문제 2는 : 프로토콜 iframe-htmlfile를 사용하여, 사용자는 혼합 된 콘텐츠 문제를 신호 페이지,에 'Only Secure Content is Displayed' 경고를 받게됩니다. 그러나 테스트를 거친 다른 브라우저 (예 : Chrome, FireFox, Safari)는 이전에 언급했듯이 페이지의 모든 외부 리소스가 https를 통해 제공됩니다. 왜 이런거야? 이 특정 프로토콜 iframe-htmlfile과 관련이 있습니까?

동시에 SockJS는 서버에 연결하여 msg를 보내려합니다. 이것은 서버 로그에 표시되는 내용입니다.

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에서 경고 대화 상자를 닫을 때 연결이 열리는 것처럼 보이지만 나중에 브라우저에서 아무런 메시지도받지 못합니다 (브라우저가 연결이 열리 자마자 메시지를 보내야 함). 이 내용이 전에 혼합 된 내용과 관련이 있는지 궁금합니다.

답변

5

SockJS 메일 링리스트에서 문제를 확인했다고 생각합니다. 빠른 요약 :

문제 1 - 서버에서 쿠키를 처리하는 전송 (로드 균형 조정)을 사용해야하므로 XDR 기반 전송을 사용할 수 없습니다 (XDR은 쿠키를 처리 할 수 ​​없음).

문제 2 - 서버 측에 sockjs_url 매개 변수를 설정하는 것을 잊어 버렸습니다. https가 아닌 http의 sockjs javascript가 포함되었습니다. 그래서 콘텐츠 경고가 혼재 된 것입니다.