2014-12-06 3 views
4

자바 스크립트 클라이언트 프로세스에서 클라이언트가 websocket 업그레이드 요청을하고 그 요청이 실패 할 때 서버가 반환하는 HTTP 상태 코드를 가져 오려고합니다.Java 클라이언트에서 불완전한 websocket 업그레이드 요청 처리

내 서버에서 HTTP 400을 반환하여 websocket 업그레이드가 성공하지 못했음을 나타냅니다.

내가 구글 크롬을 사용하고 그리고 난 개발자 콘솔을 열 때 나는 다음과 같은 메시지를 볼 수 있습니다

웹 소켓 연결에 'WSS를 : //'실패 : 오류 웹 소켓 핸드 셰이크 중에 예기치 않은 응답 코드 : 400

그러나,이 메시지를 포함하지 않는의 OnError 핸들러는, 그것은 1006 오류를 수신하지만, 폐쇄는 HTTP (400) 자바 스크립트 (STABLE)을 수행하는 방법

을 얻기의 결과로 발생한 것을 나타내는 것은 아닙니다 oper 핸들 핸드 셰이크 오류? 핸드 셰이크 오류가 발생했을 때 유익한 메시지를 클라이언트에게 제공하고 싶습니다.

아래에 websocket 오류를 넣었습니다.이 오류가 websocket 핸드 셰이크 오류의 결과임을 나타내는 데 사용할 수있는 내용이없는 것 같습니다.

Websocket Error: {"path":{"length":0},"cancelBubble":false,"returnValue":true,"srcElement":{"binaryType":"blob","protocol":"","extensions":"","bufferedAmount":0,"readyState":3,"url":"wss://<my address>","URL":"wss://<my address>"},"defaultPrevented":false,"timeStamp":1417828938039,"cancelable":false,"bubbles":false,"eventPhase":2,"currentTarget":{"binaryType":"blob","protocol":"","extensions":"","bufferedAmount":0,"readyState":3,"url":"wss://<my address>","URL":"wss://<my address>"},"target":{"binaryType":"blob","protocol":"","extensions":"","bufferedAmount":0,"readyState":3,"url":"wss://<my address>","URL":"wss://<my address>"},"type":"error"} 

답변

4

JavaScript가 협상의 HTTP 상태 코드를 알 수있는 방법이 없습니다.

closing codes이 정의되어 있으며 1006은 연결이 갑자기 닫히기 만한다는 것을 의미하지만 프로토콜은 이유를 제공하지 않고 연결을 닫을 수도 있습니다. 이는 readyState API와 함께 문제의 원인을 진단해야하는 유일한 도구입니다.

+0

네, 유효하지 않은 인증 자격 증명 (예 : 쿼리 매개 변수로 전달 된 자격 증명)으로 인해 WebSocket 연결이 실패했는지 여부 또는 네트워크 오류 또는 기타 이유로 연결이 실패한 경우를 구분할 수없는 것으로 보입니다. 이 제한으로 인해 WebSocket 연결이 설정된 후 (표준 WebSocket 핸드 셰이크 대신) 보조 인증 (사용자 지정) 핸드 셰이크를 구현하여 인증을 수행해야했습니다. 성공/실패 상태에 대한 투명성이없는 신뢰할 수있는 인증을 구현하는 것은 현실적으로 불가능합니다. – Jon

관련 문제