클라이언트와 서버가 서로에게 원할 때 데이터를 주고 받을 수 있다.웹 소켓도
HandShaking이 필요하며,Socket프로토콜이 아니라HTTPorHTTPS프로톨로 이루어진다.
HTTP 버전 = 1.1 이상.GET Method.Upgade 정보는 서버, 전송, 프로토콜 연결에서 다른 프로토콜로 Upgrade or Update하기 위한 규칙.Sec-WebSocket-Key는 클라이언트가 요청하는 서브 프로토콜을 의미.101 Switching Protocols가 Response로 오면 웹소켓이 연결된 것이다.
Sec-WebSocket-Accept는 요청에서의 Key값을 계산한 값으로 신원 인증에 필요한 데이터이다.HandShake가 완료되면 프로토콜이 ws로 변경된다.wss와 같이 데이터 보안을 위하여 SSL을 적용한 프로토콜로 변경된다.Frame이 모여서 구서하는 하나의 논리적 메시지 단위Communication에서 가장 작은 단위의 데이터, 작은 헤더 + Payload로 구성WebSocket 통신에 사용되는 데이터 : UTF8 인코딩0x00 → 보낼 데이터 → 0xff 구성으로 진행HTTP 프로토콜 위에서 HandShaking을 하기 때문에 HTTP Header를 사용한다.Text & Binary 뿐이다.Socket.io, SockJS와 같은 HTML5 이전의 기술로 구현된 서비스에서 웹 소켓처럼 사용할 수 있도록 도와주는 기술이다. 그래서 JS를 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현할 수 있고 WebSocket, FlashSocket, AJAX Long Polling 등등을 하나의 API로 추상화한 것이다.즉, 브라우저와 웹 서버의 종류와 버전을 파악하여 가장 적합한 기술을 선택해서 사용하는 방식이다.
WebSocket은 문자열들만 주고 받을 수 있고 그 외는 X 주고 받은 문자열의 해독은 오로지 앱에 맡긴다. HTTP는 형식을 정해두어 모두가 약속을 따르기만 하면 해석 할 수 있어도 WebSocket은 형식이 정해져 있지 않아 앱에서 쉽게 해석이 힘들다. 그래서 WebSocket 방식은 sub-protocols를 사용하여 주고 받는 메시지의 형태를 약속하는 경우가 많다. sub-protocol로 자주 사용하는 것은 STOMO다.