HTTP/1.1 에서 WebSocket 으로
마법 뒤를 보면 WebSocket handshake 는 그냥 네 개 결정적인 헤더 가진 HTTP/1.1 GET 이야: Upgrade: websocket, Connection: Upgrade, Sec-WebSocket-Key, Sec-WebSocket-Version: 13. 서버 일은 이걸 알아채고, 파생값 계산하고, 101 Switching Protocols 로 응답.
Sec-WebSocket-Accept hash
클라가 base64 인코딩된 random nonce 를 Sec-WebSocket-Key 로 보내. 서버는 거기에 고정된 magic GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11) 를 붙이고, SHA-1 떠서 base64 한 걸 Sec-WebSocket-Accept 로 돌려줘. 이거로 서버가 진짜 WebSocket protocol 이해한다는 걸 증명. 일반 HTTP 서버가 우연히 handshake 완료 못 해.
Optional handshake 헤더
Sec-WebSocket-Protocol 은 graphql-ws 나 mqtt 같은 subprotocol negotiation. Sec-WebSocket-Extensions 는 extension, 가장 흔하게 permessage-deflate (compression). Origin 은 호출하는 page identify — 서버가 이거 validation 해야 해.