2012-07-25 4 views
19

WebSocket의 성공적인 핸드 셰이크 후에 gzip 압축을 사용할 수 있습니까? 여기 websocket이 gzip 압축을 지원합니까?

내 시험이다 :

  1. 내가 다음 respon 클라이언트, 서버를 구축 할 수 아우토반 lib 디렉토리를 사용할 때 :
    HTTP/1.1 101 Switching Protocols content-encoding: gzip Connection: Upgrade Server: AutobahnPython/?.?.? Upgrade: WebSocket Sec-WebSocket-Accept: RIR8KmljoV8Cv9mdiLY7GM2nYMc=
  2. 다음 내 서버는 gzip으로 압축
  3. 를 사용하고 크롬 브라우저가 있어요 그 결과, "텍스트 프레임을 UTF-8로 디코딩 할 수 없다"는 말을 들었습니다.
+0

(현재) AutobahnPython은 프레임 단위 압축 확장을 지원하지 않습니다. 어쨌든, 지원 시그널링은 "content-encoding"이 아닌 WebSocket 특정 HTTP 헤더를 통해 이루어진다. – oberstet

+0

상기시켜 줘서 고마워. 어떤 방식 으로든 websocket을 사용하는 동안 http 메서드로 gzip 압축을 지원하는 간단한 방법이 있습니까? – littlesun

+0

아니요. WebSocket에서 압축을 사용하려면 확장 프로그램을 구현해야합니다.이 경우 확장 코드가 "심층적으로 확장되어야"합니다. – oberstet

답변

4

compression extension이 있습니다. IETF Websocket (HyBi) 워킹 그룹에 의해 worked on으로 보내십시오. 메일 링리스트를 따라 최신 정보를 얻을 것을 제안합니다. 나는 또한 this question을 체크 아웃하는 것이 좋습니다.


업데이트 2017 : https://tools.ietf.org/html/rfc7692

+0

사용 방법을 알려주시겠습니까? RFC 6455에서 찾았지만 사용법을 모르겠습니다 ... – littlesun

+0

Dreen에게 감사드립니다. 훌륭합니다. 나는 압축 확장을 연구 할 것이다. 다른 친구들이 그것에 대해 공부하고 있습니까? – littlesun

+0

@littlesun : 내가 아는 한,이 확장은 아직 작업 중이기 때문에 아직 사용할 수 없습니다 (프레임의 "프레임 단위"에서 "메시지 단위"로 변경 한 것이 주요한 증거입니다) . Javascript 자체는 실제로 압축/압축 해제를 지원하지 않습니다. 지금은 유일한 해결책은 IETF 사람들이 사양을 완료하고 브라우저 공급 업체가이를 구현할 때까지 기다리는 것입니다 ... 길지 않아야합니다. IMHO 아마도 몇 달 후에 발생합니다. – Dreen

6

웹 소켓 압축이 크롬에서 예를 들어 작성시 (기본적으로 일부 브라우저에서 활성화되어 있지만 : 확장 지금 몇 시간 동안 사용할 수있다 여기를 참조 Firefox에서). 클라이언트는이를 위해 'Sec-WebSocket-Extensions : permessage-deflate'헤더를 포함해야합니다. 서버가 동일한 확장자로 응답하면 WebSocket 통신은 프레임 단위로 압축됩니다. 내가 아는 한 확장 기능을 사용/사용 중지 할 브라우저 API는 없습니다.

주제에 대한 좋은 기사입니다 https://www.igvita.com/2013/11/27/configuring-and-optimizing-websocket-compression/

0

예는 없습니다. Chrome 19+ supports it.

"https://github.com/crossbario/autobahn-python/blob/master/examples/twisted/websocket/echo_compressed/server_advanced.py" 

from twisted.internet import reactor 
from twisted.web.server import Site 
from twisted.web.static import File 

from autobahn.twisted.websocket import WebSocketServerFactory, \ 
    listenWS 

from autobahn.websocket.compress import * 

def accept(offers): 
    for offer in offers: 
     return PerMessageDeflateOfferAccept(offer) 

debug = True 
factory = WebSocketServerFactory(u"ws://127.0.0.1:9000", debug=debug, debugCodePaths=debug) 
factory.setProtocolOptions(perMessageCompressionAccept=accept) 

listenWS(factory) 

webdir = File(".") 
web = Site(webdir) 
reactor.listenTCP(8080, web) 

reactor.run() 

더 많은 정보 : how PerMessageDeflateOffer is used in Autobahn examples.

관련 문제