Configurazione di un'instradamento $connect che richiede un sottoprotocollo WebSocket
I client possono utilizzare il campo Sec-WebSocket-Protocol per richiedere un sottoprotocollo WebSocket$connect in modo da consentire le connessioni solo se un client richiede un sottoprotocollo supportato dall'API.
La funzione Lambda di esempio seguente restituisce l'intestazione Sec-WebSocket-Protocol ai client. La funzione stabilisce una connessione all'API solo se il client specifica il sottoprotocollo myprotocol.
Per un modello AWS CloudFormation che crea questa API di esempio e integrazione proxy Lambda, consulta ws-subprotocol.yaml.
export const handler = async (event) => { if (event.headers != undefined) { const headers = toLowerCaseProperties(event.headers); if (headers['sec-websocket-protocol'] != undefined) { const subprotocolHeader = headers['sec-websocket-protocol']; const subprotocols = subprotocolHeader.split(','); if (subprotocols.indexOf('myprotocol') >= 0) { const response = { statusCode: 200, headers: { "Sec-WebSocket-Protocol" : "myprotocol" } }; return response; } } } const response = { statusCode: 400 }; return response; }; function toLowerCaseProperties(obj) { var wrapper = {}; for (var key in obj) { wrapper[key.toLowerCase()] = obj[key]; } return wrapper; }
È possibile utilizzare wscat-s per specificare i sottoprotocolli durante la connessione.
Il comando seguente tenta una connessione con un sottoprotocollo non supportato. Poiché il client ha specificato il sottoprotocollo chat1, l'integrazione Lambda restituisce un errore 400 e la connessione non riesce.
wscat -c wss://api-id.execute-api.region.amazonaws.com/beta-s chat1error: Unexpected server response: 400
Il comando seguente include un sottoprotocollo supportato nella richiesta di connessione. L'integrazione Lambda consente la connessione.
wscat -c wss://api-id.execute-api.region.amazonaws.com/beta-s chat1,myprotocolconnected (press CTRL+C to quit)
Per ulteriori informazioni su come richiamare le API WebSocket, consulta Invocazione delle API WebSocket.