웹 소켓이란?
두 프로그램 간의 메시지를 교환하기 위한 통신 방법 중 하나
표준 프로토콜 중 하나
현재 인터넷 환경에서 많이 사용 되는 프로토콜이다
웹 소켓의 특징
웹 소켓 이전에 사용했던 기술
양방향 통신이며 실시간 네트워킹이 가능해야 함.
종류
서버에 요청 보내고 끊기지 않은 연결상태에서 끊임없이 데이터 수신
클라이언트에서 서버로 데이터 송신이 어렵다
단점
웹 소켓의 동작 방법
http or https 프로토콜을 이용해서 핸드 쉐이킹함
GET /chat HTTP/1.1 => 반드시 GET 메서드, HTTP 버전은 1.1 이상
Host: algo-with-me-api.shop => 웹 서버의 주소
Upgrade: websocket => 현재 클라이언트, 서버, 전송 프로토콜 연결에서 다른 프로토콜로
업그레이드하기 위한 규칙
Connection: Upgrade => Upgrade 헤더 필드가 명시되었을 경우,
Connection 헤더 필드도 전송
Sec-WebSocket-Key: => 클라이언트와 서버간의 서로의 신원을 인증하는 데에 사용
dG1mdGwdnaiw1dZQj== 길이가 16바이트인 임의로 선택된 숫자를 base64로 인코딩 한 값
Origin: 클라이언트주소 => 웹 브라우저를 사용하는 경우 필수항목, 클라이언트의 주소
Sec-WebSocket-Protocol => 클라이언트가 요청하는 여러 서브프로토콜을 의미
: chat, superchat 공백문자로 구분되며 순서에 따라 운선권 부여
서버에서 여러 프로토콜 혹은 프로토콜 버전을 나눠서 서비스할 경우
이러한 서브 프로토콜을 서버로 보내면 서버는 자신이 지원하는
서브 프로토콜을 다시 클라이언트에게 반환함.
Sec-WebSocket-Version : 13 => 웹소켓 버전
HTTP/1.1 101 Switching Protocols => Switching Protocols이 오면 웹소켓이 연결 됐다는 의미
Upgrade: websocket
connection: Upgrade
Sec-WebSocket-Accept => 클라이언트로 받은 Sec-WebSocket-Key를 사용하여 계산된
:s3pPLMBiTxaQ9kQkoQadAQDmadQW= 값으로 서로의 신원을 확인하기 위해 사용된다.
여러 frame이 모여서 구성하는 하나의 논리적 메세지 단위
communication에서 가장 작은 단위의 데이터, 작은 헤더 + payload
웹소켓 통신에 사용되는 데이터는 UTF-8 인코딩을 사용
ex) 0x00 [보내고 싶은 데이터] 0xff 이런 식으로 데이터를 주고 받게 됨.
웹 소켓 프로토콜 특징