InfoGrab DocsInfoGrab Docs

Workhorse의 WebSocket 채널 지원

GitLab Workhorse가 WebSocket 연결을 통해 브라우저 터미널 접근 및 CI 서비스 연결을 처리하는 아키텍처를 설명합니다.

경우에 따라 GitLab은 WebSocket을 통해 다음 기능을 제공할 수 있습니다: 환경에 대한 브라우저 내 터미널 접근: 프로젝트가 배포된 실행 중인 서버 또는 컨테이너. CI에서 실행 중인 서비스에 대한 접근. Workhorse는 WebSocket 업그레이드와 장기적인 websocket 연결을 관리하며, 이를 통해 GitLab이 다른 요청을 처리할 수 있게 됩니다. 이 문서는 이러한 연결의 아키텍처를 설명합니다. WebSocket 소개 # WebSocket은 "업그레이드된" HTTP/1.1 요청입니다. WebSocket은 클라이언트와 서버 간의 양방향 통신을 허용합니다. WebSocket은 HTTP가 아닙니다. 클라이언트는 언제든지 서버에 메시지(프레임이라고 알려진)를 보낼 수 있으며, 그 반대도 마찬가지입니다. 클라이언트 메시지가 반드시 요청일 필요는 없으며, 서버 메시지가 반드시 응답일 필요도 없습니다. WebSocket URL은 ws:// (암호화되지 않음) 또는 wss:// (TLS 보안) 같은 스키마를 사용합니다. WebSocket으로 업그레이드를 요청할 때, 브라우저는 다음과 같은 HTTP/1.1 요청을 보냅니다: GET /path.ws HTTP/1.1 Connection: upgrade Upgrade: websocket Sec-WebSocket-Protocol: terminal.gitlab.com # More headers, including security measures 이 시점에서 연결은 여전히 HTTP이므로 이것은 요청입니다. 서버는 404 Not Found 또는 500 Internal Server Error 같은 표준 HTTP 응답을 보낼 수 있습니다. 서버가 업그레이드를 허용하기로 결정하면, HTTP 101 Switching Protocols 응답을 보냅니다. 이 시점부터 연결은 더 이상 HTTP가 아닙니다. 이제 WebSocket이 되며 HTTP 요청이 아닌 프레임이 전송됩니다. 클라이언트 또는 서버가 연결을 닫을 때까지 연결이 유지됩니다. 서브 프로토콜 외에도 개별 websocket 프레임은 다음과 같은 메시지 유형을 지정할 수 있습니다: BinaryMessage TextMessage Ping Pong Close 임의 데이터를 포함할 수 있는 것은 바이너리 프레임뿐입니다. 프레임은 서브 프로토콜 요구 사항 외에도 유효한 UTF-8 문자열이어야 합니다. 브라우저에서 Workhorse로 # 터미널을 예로 들면: GitLab은 https://gitlab.com/group/project/-/environments/1/terminal 과 같은 URL에서 브라우저에 JavaScript 터미널 에뮬레이터를 제공합니다. 이 URL은 wss://gitlab.com/group/project/-/environments/1/terminal.ws 로 websocket 연결을 엽니다. 이 엔드포인트는 Workhorse에만 존재하며 GitLab에는 존재하지 않습니다. 연결을 수신할 때, Workhorse는 먼저 GitLab에 pre