2013-05-24 4 views
1

안녕 모두 사전에 감사,WebSocket을하고 파이어 폭스

나는 C에서 내 자신의 웹 소켓 서버를 압연하고있어 ++ RFC에 따라 (나는 또한 빨리 여기 무슨 일이 일어나고 있는지 다시 한 번 확인하기 위해 오늘 아침에 C#에서 하나를 압연했습니다) 6455

표준을 읽었으며 이제 클라이언트와 성공적으로 연결되는 서버를 갖게되었습니다. 핸드 쉐이크를 완료하고 상대방에서 제대로 수신되는 간단한 테스트 클라이언트의 데이터를 보낼 수 있습니다.

FireFox/JS를 사용하여 서버에 데이터를 보내고 테스트 할 때 서버 끝에 깨진 심볼이 나타납니다. WireShark를 사용하여 소켓을 모니터하고 서버가 데이터를 올바르게 수신하고 있음을 확인했지만 해석하는 데 문제가 있습니다.

내가 마지막으로, 내 서버에 문자열 "테스트"(따옴표)를 보내이 같이 나타났다을 시도하기 위해 노력하고있어 :

0x81 
0x84 
0x1e 
0x31 
0x65 
0xaf 
0x6a 
0x54 
0x16 
0xdb 

이들의 대부분은 때마다, 심지어 인쇄 가능한 문자를 arn't하고, 나는이 값은 항상 첫 번째 문자 0x81를 제외하고 (변경 보내기를 클릭 NB를 :.이 사양에 따라, 0x000xFF 패딩을 트리밍하기 전에이다

FireFoxs 악수 요청에

, 그것을 수락 지정 않습니다. - 다음과 같이 인코딩 :

Accept-Encoding: gzip, deflate 

그러나 GZIP과 DEFLATE 모두 압축을 풀려고했는데 오류가 발생합니다. 나는 또한 서버에 Lorem Ipsum을 보내려고했다. 결과는 같다. (0x81 뒤에 매쉬가있다.)

누구든지이 문제에 관해 밝힐 수 있는가? 이것은 실제로 압축 되었습니까? 같은 문자열을 보낼 때마다 다른 결과가 나타나는 이유는 무엇입니까? FireFox에서 보내는 데이터의 타임 스탬프를 설정합니까? 여기

GET/HTTP/1.1 
Host: 127.0.0.1:8888 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-gb,en;q=0.5 
Accept-Encoding: gzip, deflate 
Sec-WebSocket-Version: 13 
Origin: null 
Sec-WebSocket-Key: lXen8aJPlv/0JOZBb4WAtA== 
Connection: keep-alive, Upgrade 
Pragma: no-cache 
Cache-Control: no-cache 
Upgrade: websocket 

그리고 내 서버 전체에 회신 :

HTTP/1.1 101 Switching Protocols 
Upgrade: websocket 
Connection: Upgrade 
Sec-WebSocket-Accept: WHTW6PSJ/pWIPskBw0owBT/jacw= 
내가 원하는 건 여기

파이어 폭스에서 전체 요청입니다 제대로 다시 "테스트"에 서버 단에서의 문자열을 해석하는 것입니다

이 성공하고 심지어 자바 스크립트 끝에서 OPEN을 얻을, 그럼 내가 ... 내가 위의 코드의 첫 번째 블록에 표시된 쓰레기를받을 ("테스트") 전송 호출 버튼을 클릭하면

답변

3

RFC 6455의 섹션 5.3을보십시오 (http://tools.ietf.org/html/rfc6455#section-5.3). 클라이언트 - 서버 websocket 메시지는 XOR과 메시지 헤더에서 전송 된 키를 사용하여 마스크 처리됩니다. 이 키를 풀어서 메시지를 디코딩 할 때 사용해야합니다. 압축이 필요 없습니다.

여기서 구체적인 예는 처음 6 바이트가 프레임 헤더입니다. 프레임 헤더의 마지막 4 바이트는 마스킹 키입니다. 4 개의 마스킹 키 바이트를 나머지 4 개의 페이로드 바이트로 XOR하면 "테스트"문자열을 다시 가져와야합니다.

+0

그건 정말 고마워요. 스펙에서 그걸 두려워하기 시작했다는 것을 알았을 것입니다. – Pez