Einrichten einer $connect-Route, die ein WebSocket-Unterprotokoll erfordert - Amazon API Gateway

Einrichten einer $connect-Route, die ein WebSocket-Unterprotokoll erfordert

Clients können das Sec-WebSocket-Protocol-Feld verwenden, um ein WebSocket-Unterprotokoll während der Verbindung mit Ihrer WebSocket-API anzufordern. Sie können eine Integration für die $connect-Route einrichten, um Verbindungen nur zuzulassen, wenn ein Client ein von Ihrer API unterstütztes Unterprotokoll anfordert.

Die folgende Lambda-Beispielfunktion gibt den Sec-WebSocket-Protocol-Header an Clients zurück. Die Funktion stellt nur dann eine Verbindung zu Ihrer API her, wenn der Client das myprotocol-Unterprotokoll angibt.

Eine AWS CloudFormation-Vorlage, die diese Beispiel-API- und Lambda-Proxy-Integration erstellt, finden Sie unter 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; }

Sie können wscat verwenden, um zu testen, ob Ihre API Verbindungen nur zulässt, wenn ein Client ein von Ihrer API unterstütztes Unterprotokoll anfordert. Die folgenden Befehle verwenden das -s-Flag, um während der Verbindung Unterprotokolle anzugeben.

Mit dem folgenden Befehl wird versucht, eine Verbindung mit einem nicht unterstützten Unterprotokoll herzustellen. Da der Client das chat1-Unterprotokoll angegeben hat, gibt die Lambda-Integration einen 400-Fehler zurück und die Verbindung ist nicht erfolgreich.

wscat -c wss://api-id.execute-api.region.amazonaws.com/beta -s chat1 error: Unexpected server response: 400

Der folgende Befehl enthält ein unterstütztes Unterprotokoll in der Verbindungsanforderung. Die Lambda-Integration ermöglicht die Verbindung.

wscat -c wss://api-id.execute-api.region.amazonaws.com/beta -s chat1,myprotocol connected (press CTRL+C to quit)

Weitere Informationen zum Aufrufen von WebSocket-APIs finden Sie unter Aufrufen einer WebSocket-API.