2012-09-13 3 views
1

핸드 셰이크 요청없이 Java 코드로 websocket 연결을 생성 할 수 있습니까?Java 클라이언트를 통한 netty websocket 연결

나는 방법을 사용하여 handhsake 요청 하나를 만들 알고 다음

String request = "GET " + path + " HTTP/1.1\r\n" 
      + "Upgrade: WebSocket\r\n" + "Connection: Upgrade\r\n" 
      + "Host: " + host + "\r\n" + "Origin: " + origin + "\r\n" 
      + extraHeaders.toString() + "\r\n"; 

하지만 소켓 연결을 열면 내가 오 위를 방지 원하고, 단지 채널 아래로 프레임을 보내려면? .. 이것이 가능한가?

답변

3

WebSocket 핸드 셰이크없이 WebSocket 연결을 만들 수 없습니다. WebSocket 핸드 셰이크 및 프레이밍은 프로토콜의 중요한 부분입니다. 핸드 셰이크는 HTTP와 호환되며 웹 소켓이 기존 웹 인프라와보다 쉽게 ​​상호 작용할 수 있습니다. 다른 것들 중에서도 핸드 셰이크는 보안 메커니즘을 추가하고 크로스 원본 공유 (Cross Origin Resource Sharing) (CORS)를 허용합니다.

핸드 셰이크 후에 각 WebSocket 프레임은 여전히 ​​원시 데이터가 아닙니다. WebSocket은 메시지 기반 프로토콜이므로 프레임 헤더에는 메시지 설명, 프레임 길이, 메시지 유형 (바이너리, 텍스트, 핑 등) 등이 포함됩니다. 또한 클라이언트 (브라우저)에서 서버로의 데이터는 실행중인 XOR을 사용하여 마스킹되어야합니다 마스크. 이것은 HTTP 중개자 (프록시, HTTP 캐시 등)의 이론적 인 취약점을 피하기위한 것입니다.

이름에 "소켓"으로 그릇 인도해서는 안됩니다. WebSockets는 전이중, 양방향, 긴 수명 및 낮은 대기 시간과 같은 원시 TCP 소켓의 많은 이점을 가지고 있지만 원시 TCP 소켓에 계층화되고 HTTP 친화적 인 핸드 셰이크를 사용하는 메시지 기반 전송 프로토콜입니다.

자세한 내용은 IETF 6455 WebSocket spec 공식을 참조하십시오.