2014-11-16 5 views
0

스프링 websocket 구현에 연결하는 데 문제가 있습니다.스프링 웹 소켓 상태 : 400 websocket 연결 유지

코드를 디버깅 한 후 요청 헤더 'Connection'에 간단한 자바 스크립트 코드에서 'keep-alive'및 'Upgrade'의 두 값이 있음을 발견했습니다.

요청의 피들러 출력은 다음과 같습니다 -

GET http://localhost:8282/play/stream HTTP/1.1 
Host: localhost:8282 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 
Authorization: Basic bXNhZG1pbjptc2FkbWlu 
Upgrade: websocket 
Connection: Upgrade 
Origin: http://localhost:8282 
Sec-WebSocket-Version: 13 
User-Agent: Mozilla/5.0 (Windows NT 5.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Cookie: JSESSIONID=8C8748DD08104EAD51296E4A9E846604 
Sec-WebSocket-Key: 9edBIn/q4i5pyQOFf72SMA== 
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits 

...을 DefaultHandshakeHandler()가 '유지 (keep-alive)'인 FIRST 값을 반환하는 HttpHeaders.getConnection를 호출합니다. 이것은 '업그레이드'및 '업그레이드'와 비교되고 실패합니다.

무엇이 문제입니까? 이 상황에서 keep-alive 헤더를 사용할 수 있습니까? 그렇다면 논리가 올바르지 않습니까?

나는 봄-WebSocket을/스프링 웹 4.0.8.RELEASE

건배

답변

0

요청이 HTTP 1.1은 동일한 필드 이름을 가진 여러 필드를 받아들이으로 기술적으로 올바른 (RFC2616 섹션 4.2)를 사용하고 있습니다 . 그러나 HttpHeaders은 첫 번째 값만 가져옵니다. 그 이유입니다. 첫 번째 연결 헤더 또는 을 다시 주문하십시오. 연결 : 업그레이드이 선택됩니다.

+0

설명해 주셔서 감사합니다. 이것은 keep-alive 헤더를 기대하지 않고 첫 번째 값만 가져 오기 때문에 스프링 웹 소켓의 버그 여야합니다. – CobraFlow