프레임 헤더의 수수께끼였던 RSV1 비트가 주인을 만난다 — 메시지를 DEFLATE로 압축하는 유일한 표준 확장 permessage-deflate. Sec-WebSocket-Extensions 협상, 꼬리 4바이트 절단, context takeover의 압축률↔메모리 저울, 그리고 CRIME 계열 공격 때문에 기본으로 켜지 않는 이유까지.
HTTP/2는 Upgrade와 101을 아예 제거했다 — 연결이 스트림의 다발이 된 세계에서 "연결 통째로 전환"은 성립하지 않기 때문. 그 대신 생긴 문 Extended CONNECT의 세 단계(SETTINGS 능력 광고 → CONNECT + :protocol → 200), 사라진 헤더와 살아남은 헤더, 그리고 실전에서는 왜 여전히 소켓이 http/1.1로 열리는지까지.
연결은 "살아 있다"고 말해주지 않는다 — 침묵할 뿐이다. 그 침묵이 유휴인지 죽음인지 구분하는 프로토콜의 장치 ping/pong, 브라우저가 그 장치를 JS에 숨겨버린 탓에 래퍼가 앱 수준 하트비트를 직접 구현하게 된 사연, 그리고 주기·타임아웃을 정하는 실무 기준까지.
재연결 래퍼의 모든 판단 — "이 끊김은 재연결해야 하는 끊김인가?" — 의 스펙 근거를 본다. Close 프레임 교환 절차, wasClean과 readyState 상태 기계, 1006이 와이어에 존재하지 않는 이유, 브라우저 close()의 코드 제약, 그리고 지수 백오프가 스펙의 SHOULD인 이유까지.
ws.send("Hello") 한 줄이 와이어에 놓는 실제 11바이트를 RFC 6455 §5.2 다이어그램 그대로 읽는다. 2바이트 헤더에 압축된 FIN·opcode·MASK·길이, 컨트롤 프레임이 데이터 조각 사이에 끼어드는 원리, 그리고 마스킹이 암호화가 아니라 캐시 오염 방어인 이유까지.