9. 확장 - WebSocket 프로토콜 번역

3173 단어 websocket
WebSocket 클라이언트는 본 규범의 확장을 요청할 수 있으며, WebSocket 서버는 일부 또는 모든 클라이언트가 요청한 확장을 받아들일 수 있습니다.서버는 클라이언트가 요청한 확장에 응답할 필요가 없습니다.확장 파라미터가 클라이언트와 서버 간의 협상에 포함되어 있다면, 이 파라미터들은 파라미터가 응용한 확장 규범에 따라 선택해야 한다.

9.1.협상 확장


클라이언트는 | Sec-WebSocket-Extensions| 헤더 필드를 포함하여 확장을 요청하여 정상적인 HTTP 헤더 규칙([RFC2616], 4.2절 참조)에 따라 헤더 필드의 값을 다음 ABNF에 따라 정의합니다 [RFC2616].이 장에서 사용하는 ABNF 구문/규칙은 [RFC2616]에서 유래한 것으로 암시적 *LWS 규범을 포함합니다.클라이언트나 서버가 협상 단계에서 수신한 값이 아래의 ABNF와 일치하지 않으면 기형적인 데이터의 수신자는 즉시 _WebSocket 접속 실패 _.
     Sec-WebSocket-Extensions = extension-list
     extension-list = 1#extension
     extension = extension-token *( ";" extension-param )
     extension-token = registered-token
     registered-token = token
     extension-param = token [ "=" (token | quoted-string) ]
         ; , 
         ; ’token’ABNF

다른 HTTP 헤더 필드와 마찬가지로 이 헤더 필드는 여러 줄에 걸쳐 분할되거나 조합될 수 있으므로 다음과 같습니다.
     Sec-WebSocket-Extensions: foo
     Sec-WebSocket-Extensions: bar; baz=2

완전히
     Sec-WebSocket-Extensions: foo, bar; baz=2

모든 extension-token은 egistered token이어야 합니다. (11.4절 참조)확장에 제공된 모든 매개 변수는 확장으로 정의되어야 합니다.클라이언트는 서버가 확장을 사용하고 싶다고 표시하지 않으면 모든 확장을 사용해야 합니다.
확장 순서가 중요합니다.여러 확장 간의 상호작용은 확장을 정의한 문서에 정의할 수 있다.이러한 정의가 없는 상황에서 이 요청의 클라이언트가 열거한 헤더 필드는 사용하고 싶은 헤더 필드의 선호도를 나타낸다. 첫 번째 옵션이 가장 좋다.서버에서 응답에 열거한 확장은 연결에 실제로 사용되고 있는 확장을 나타냅니다.확장은 데이터와/또는 그룹 프레임을 수정해야 하며, 데이터의 조작 순서는 열린 단계에서 악수하는 동안 서버 응답에 열거된 확장 순서와 같다고 가정해야 한다.
예를 들어 두 개의 확장 "foo"와 "bar"가 있고 서버가 보내는 헤더 필드 | Sec-WebSocket-Extensions | 값 "foo", "bar"가 있으면 데이터의 동작은 bar (foo (data) 로 바뀌며, 데이터 자체를 변경하거나 압축 (stack) 할 수 있는 그룹 프레임을 변경합니다.
허용 가능한 확장 헤더 필드 (참고: 가독성을 위해 긴 줄이 축소됨) 의 비규범화 예:
     Sec-WebSocket-Extensions: deflate-stream
     Sec-WebSocket-Extensions: mux; max-channels=4; flow-control,
      deflate-stream
     Sec-WebSocket-Extensions: private-extension

서버는 하나 이상의 확장 클라이언트가 요청한 |Sec-WebSocket-Extensions|헤더 필드를 포함하여 하나 이상의 확장을 수락합니다.모든 확장 파라미터의 해석과 고객이 요청한 파라미터 집합에 유효한 서버 응답을 구성하는 것은 각각의 확장에 의해 정의됩니다.

9.2.알려진 확장


확장은 선택적 가입을 위한 추가 프로토콜 특성을 실현하는 메커니즘을 제공했다.이 문서는 어떠한 확장도 정의하지 않았지만, 단독으로 정의된 확장을 사용할 수 있습니다.

좋은 웹페이지 즐겨찾기