{ "$id": "websocket-handshake-response.json", "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "WebSocket Handshake Response", "description": "Schema describing the HTTP 101 Switching Protocols response that completes the WebSocket opening handshake as defined in RFC 6455 Section 4.2.2.", "type": "object", "required": [ "statusCode", "headers" ], "properties": { "statusCode": { "type": "integer", "const": 101, "description": "HTTP status code 101 Switching Protocols, indicating the server agrees to upgrade the connection." }, "statusMessage": { "type": "string", "const": "Switching Protocols", "description": "The HTTP reason phrase for the 101 status code." }, "headers": { "type": "object", "description": "HTTP headers in the server's handshake response.", "required": [ "Upgrade", "Connection", "Sec-WebSocket-Accept" ], "properties": { "Upgrade": { "type": "string", "const": "websocket", "description": "Confirms the protocol upgrade to WebSocket." }, "Connection": { "type": "string", "const": "Upgrade", "description": "Confirms the connection is being upgraded." }, "Sec-WebSocket-Accept": { "type": "string", "description": "A base64-encoded SHA-1 hash of the client's Sec-WebSocket-Key concatenated with the GUID '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'. Used to prove the server received the client's handshake.", "pattern": "^[A-Za-z0-9+/]{27}=$" }, "Sec-WebSocket-Protocol": { "type": "string", "description": "The subprotocol selected by the server from the client's list.", "examples": [ "chat", "graphql-ws" ] }, "Sec-WebSocket-Extensions": { "type": "string", "description": "The extensions selected by the server.", "examples": [ "permessage-deflate" ] } }, "additionalProperties": { "type": "string" } } }, "additionalProperties": false }