Upgrade Handshake

WebSocket은 HTTP 핸드셰이크로 시작해 연결을 전환한다

브라우저는 먼저 HTTP 요청을 보내고, 서버가 101 Switching Protocols로 동의하면 이후 바이트는 WebSocket 프레임으로 해석된다.

HTTP/1.1에서는 Upgrade 헤더가 핵심이다
Sec-WebSocket-Accept는 핸드셰이크 검증값이다
wss://는 TLS 위에서 같은 절차가 진행된다
Client request

HTTP/1.1 Upgrade 요청

GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: nonce
Sec-WebSocket-Version: 13
Server response

101 Switching Protocols

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: base64(sha1(key + GUID))

검증

Accept 값은 서버가 WebSocket 절차를 이해했는지 확인한다. 인증 토큰을 대체하지 않는다.

전환

101 이후에는 HTTP 메시지가 아니라 WebSocket 프레임이 같은 연결 위로 흐른다.

HTTP/2

HTTP/2에서는 Extended CONNECT가 필요하며, 중간 장비 지원 여부를 확인해야 한다.