

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Configurer un `$connect` itinéraire qui nécessite un WebSocket sous-protocole
<a name="websocket-connect-route-subprotocol"></a>

Les clients peuvent utiliser `Sec-WebSocket-Protocol` ce champ pour demander un [WebSocket sous-protocole](https://datatracker.ietf.org/doc/html/rfc6455#page-12) lors de la connexion à votre WebSocket API. Vous pouvez configurer une intégration pour la route `$connect` afin d’autoriser les connexions uniquement si un client demande un sous-protocole pris en charge par votre API.

L’exemple de fonction Lambda suivant renvoie l’en-tête `Sec-WebSocket-Protocol` aux clients. La fonction établit une connexion à votre API uniquement si le client spécifie le sous-protocole `myprotocol`.

Pour un CloudFormation modèle qui crée cet exemple d'intégration d'API et de proxy Lambda, consultez. [samples/ws-subprotocol.zip](samples/ws-subprotocol.zip)

```
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;
}
```

Vous pouvez utiliser [https://www.npmjs.com/package/wscat](https://www.npmjs.com/package/wscat) pour vérifier que votre API autorise les connexions uniquement si un client demande un sous-protocole pris en charge par votre API. Les commandes suivantes utilisent l’indicateur `-s` pour spécifier des sous-protocoles pendant la connexion.

La commande suivante tente une connexion avec un sous-protocole non pris en charge. Étant donné que le client a spécifié le sous-protocole `chat1`, l’intégration Lambda renvoie une erreur 400 et la connexion échoue.

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

La commande suivante inclut un sous-protocole pris en charge dans la demande de connexion. L’intégration Lambda permet la connexion.

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

Pour en savoir plus sur l'invocation WebSocket APIs, consultez[Invoquer WebSocket APIs](apigateway-how-to-call-websocket-api.md).