CloudFront 배포에 WebSocket 사용
Amazon CloudFront는 클라이언트와 서버 사이에 수명이 긴 양방향 연결이 필요할 때 유용한 TCP 기반 프로토콜인 WebSocket의 사용을 지원합니다. 지속적 연결이 실시간 애플리케이션의 요구 사항에 포함되는 경우가 흔히 있습니다. WebSockets를 사용할 수 있는 시나리오에는 채팅 플랫폼, 온라인 협업 공간, 멀티 플레이어 게임 및 금융 거래 플랫폼과 같이 실시간 데이터 피드를 제공하는 서비스 등이 포함됩니다. WebSocket 연결에서는 데이터가 전이중 통신의 양방향으로 흐를 수 있습니다.
WebSocket 기능은 모든 배포판에서 작동하도록 자동으로 활성화됩니다. WebSocket을 사용하려면 배포에 연결된 캐시 동작에서 다음 중 하나를 구성합니다.
모든 뷰어 요청 헤더를 오리진에 전달합니다. (AllViewer 관리 원본 요청 정책을 사용할 수 있습니다.)
특히 원본 요청 정책에서
Sec-WebSocket-Key
및Sec-WebSocket-Version
요청 헤더를 구체적으로 전달하세요.
WebSocket 프로토콜의 작동 방식
WebSocket 프로토콜은 독립적인 TCP 기반의 프로토콜이며, 이를 통해 HTTP의 오버헤드 및 잠재적인 지연 시간 연장을 방지할 수 있습니다.
WebSocket 연결을 설정하기 위해, 클라이언트가 HTTP의 업그레이드 의미론을 사용하는 정규 HTTP 요청을 전송하여 프로토콜을 변경합니다. 그 후에는 서버가 핸드셰이크를 완료할 수 있습니다. WebSocket 연결은 개방 상태를 유지하며 클라이언트 또는 서버가 매회 새로운 연결을 설정할 필요 없이 서로에게 데이터 프레임을 전송할 수 있습니다.
기본적으로 WebSocket 프로토콜은 정규 WebSocket 연결에 포트 80을, TLS/SSL을 통한 WebSocket 연결에는 포트 443을 사용합니다. CloudFront 뷰어 프로토콜 정책 및 프로토콜(사용자 지정 오리진만 해당)에 대해 선택한 옵션은 HTTP 트래픽뿐 아니라 WebSocket 연결에도 적용됩니다.
WebSocket 요구 사항
WebSocket 요청은 다음 표준 형식으로 RFC 6455
예제 클라이언트 요청:
GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Origin: https://example.com Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13
샘플 서버 응답:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat
WebSocket 연결이 클라이언트나 서버 또는 네트워크 장애로 인해 끊어진 겨우, 클라이언트 애플리케이션이 서버와의 연결을 다시 시작해야 합니다.
권장 WebSocket 헤더
WebSocket을 사용할 때 예상치 못한 압축 관련 문제를 방지하려면 오리진 요청 정책에 다음 헤더를 포함하는 것이 좋습니다.
-
Sec-WebSocket-Key
-
Sec-WebSocket-Version
-
Sec-WebSocket-Protocol
-
Sec-WebSocket-Accept
-
Sec-WebSocket-Extensions