CloudFront 배포에 WebSocket 사용 - Amazon CloudFront

CloudFront 배포에 WebSocket 사용

Amazon CloudFront는 클라이언트와 서버 사이에 수명이 긴 양방향 연결이 필요할 때 유용한 TCP 기반 프로토콜인 WebSocket의 사용을 지원합니다. 지속적 연결이 실시간 애플리케이션의 요구 사항에 포함되는 경우가 흔히 있습니다. WebSockets를 사용할 수 있는 시나리오에는 채팅 플랫폼, 온라인 협업 공간, 멀티 플레이어 게임 및 금융 거래 플랫폼과 같이 실시간 데이터 피드를 제공하는 서비스 등이 포함됩니다. WebSocket 연결에서는 데이터가 전이중 통신의 양방향으로 흐를 수 있습니다.

WebSocket 기능은 모든 배포판에서 작동하도록 자동으로 활성화됩니다. WebSocket을 사용하려면 배포에 연결된 캐시 동작에서 다음 중 하나를 구성합니다.

  • 모든 뷰어 요청 헤더를 오리진에 전달합니다. (AllViewer 관리 원본 요청 정책을 사용할 수 있습니다.)

  • 특히 원본 요청 정책에서 Sec-WebSocket-KeySec-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