2013-02-22 2 views
-1
GET/HTTP/1.1 
Upgrade: websocket 
Connection: Upgrade 
Host: localhost:53000 
Origin: null 
Sec-WebSocket-Protocol: hmiModel 
Sec-WebSocket-Key: Hbw2xjBq6OTGXzxeuqrdVQ== 
Sec-WebSocket-Version: 13 
Sec-WebSocket-Extensions: x-webkit-deflate-frame 

이것은 Chrome 브라우저의 클라이언트 측에서 가져온 요청 키입니다. 그 후 저는 Magic String으로 키를 연결했습니다.WebSocket 핸드 셰이크 중에 오류가 발생했습니다. Sec-WebSocket-Accept mismatch

매직 문자열 258EAFA5-E914-47DA-95CA-C5AB0DC85B11

그때는 SHA1 알고리즘을 사용하고 난 다음 해시

a5877edcaa04801d07c5687aad3a6cf03d26ad5c

그런 값 받고 있습니다 내가 base64를 사용하여 위의 값을 인코딩하고 내가 암호화 된 값을 가지고

Nzg1YWNkZTc0MGFhZDEwODVjNzA =

그런 다음 내가 클라이언트

HTTP/1.1 101 Switching Protocols 
Upgrade: websocket 
Connection: Upgrade 
Charset: ISO8859-1,UTF-8 
Connection: keep-alive, Upgrade 
WebSocket-Origin: localhost 
WebSocket-Location: localhost 
WebSocket-Protocol: hmiModel 
Sec-webSocket-Version: 13 
Sec-WebSocket-Accept: Nzg1YWNkZTc0MGFhZDEwODVjNzA= 

에 응답 핸드 셰이크를 보낼 수 있지만, 콘솔 내가 웹 소켓 핸드 셰이크 중에 오류 "와 같은 오류가 발생했습니다 : 불일치을 초-WebSocket을 수락 "

이 오류로 인해 onopen 및 onmessage 이벤트가 실행되지 않습니다.

누구나 내가 실수 한 부분을 말해 줄 수 있습니까?

답변

0

계산 결과를 확인하지 않았지만 중간 해시 값이 의심스러운만큼 보입니다. 좀 더 구체적인 피드백을 원하는 경우 RFC4634에서 SHA1 코드를 사용하여, 나는이 악수 응답

std::string key; 
// populate key with content of Sec-WebSocket-Key header 
key.append("258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); 
SHA1Context* sha1ctx = (SHA1Context*)malloc(sizeof(*sha1ctx)); 
(void)SHA1Reset(sha1ctx); 
(void)SHA1Input(sha1ctx, key.c_str(), key.size()); 
uint8_t digest[SHA1HashSize]; 
(void)SHA1Result(sha1ctx, digest); 
free(sha1ctx); 
// convert std::string(&digest[0], sizeof(digest)) to base64 

을 계산하기 위해 다음과 같은 코드를 사용하여 해당 코드를 포함하도록 질문을 수정하시기 바랍니다.

+0

확인. SHA1 값 구현 코드를 추가하겠습니다. –

관련 문제