Implementing Advanced Extensions

1. Implementing Custom Extension

StepDetail
NamingReverse DNS, e.g. com.example.encrypt
NegotiateServer echoes back from offer
TransformModify payload on send/recv
InverseSymmetric on peer
Warning: Browsers do not support custom WS extensions — only server-to-server (Node, Java, etc.) can.

2. Modifying Frame Headers

BitUse
RSV1permessage-deflate flag
RSV2/RSV3Reserved for ext use
OpcodeMust remain spec-defined

3. Transforming Payload Data

TransformExample
Compressiondeflate / brotli
EncryptionAES-GCM per frame
Encoding swapJSON → msgpack
SigningHMAC append

4. Negotiating Extension Parameters

Example: Extension offer with params

Sec-WebSocket-Extensions: com.example.encrypt; alg=AES-GCM; kid=42, permessage-deflate
// server selects
Sec-WebSocket-Extensions: com.example.encrypt; alg=AES-GCM; kid=42
TokenDetail
nameExtension identifier
param=valueConfiguration
; separatorBetween params
, separatorBetween extensions

5. Handling Extension Conflicts

ConflictResolution
Two use RSV1Server picks one only
Order mattersDefine apply / reverse order
IncompatibleReject one in negotiation

6. Implementing Custom Framing

Note: Custom framing on top of WS frames (not modifying WS frames). Use TLV with opcodes for app-level multiplexing.
ElementWidth
Stream ID2-4 bytes
Type1 byte
Flags1 byte (END_STREAM, etc.)
Length2-4 bytes
Payloadvariable

7. Testing Extension Compatibility

TestDetail
Both peers supportRound-trip successful
One unsupportedFalls back gracefully
Param mismatchServer picks compatible set
Frame corruptionClose 1002

8. Documenting Extension Behavior

SectionContents
Name + versionIdentifier scheme
NegotiationHeaders exchanged
Frame transformApply / reverse
ErrorsFailure modes + close codes
InteractionsCompat with permessage-deflate

9. Versioning Extensions

StrategyDetail
Suffix in namecom.x.encrypt.v2
Param version; v=2
Multiple offersServer picks newest both support

10. Understanding Extension Security

RiskMitigation
Compression oracleAvoid mixing secret + attacker data (CRIME-style)
Custom crypto pitfallsUse vetted libs (libsodium)
ReplayNonce / counter in frame
DowngradeServer enforces required extension