Configurazione di una $connect route che richiede un WebSocket sottoprotocollo - Amazon API Gateway

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configurazione di una $connect route che richiede un WebSocket sottoprotocollo

I client possono utilizzare il Sec-WebSocket-Protocol campo per richiedere un WebSocket sottoprotocollo durante la connessione all' WebSocket API. È possibile impostare un'integrazione per la route $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 AWS CloudFormation modello che crea questo esempio di integrazione tra API e 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 per verificare che l'API consenta le connessioni solo se un client richiede un sottoprotocollo supportato dall'API. I comandi seguenti utilizzano il flag -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 chat1 error: 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,myprotocol connected (press CTRL+C to quit)

Per ulteriori informazioni sull'invocazione delle WebSocket API, consulta. Invocare un'API WebSocket