Manipulation des requêtes de mise à niveau Web sans connexion dans JavaScript Client

Je souhaite avoir un processus de client javascript obtenir le code d'état HTTP qu'un serveur retourne lorsque le client effectue une demande de mise à niveau Web et que cette requête échoue.

J'ai mon serveur renvoyant HTTP 400 pour indiquer qu'une mise à jour de la mise à niveau Web échoue.

J'utilise Google Chrome et lorsque j'ouvre la console de développeur, je vois le message suivant:

La connexion WebSocket à 'wss: //' a échoué: Erreur lors de la prise de contact WebSocket: code de réponse inattendue: 400

Toutefois, le gestionnaire Onerror ne contient pas ce message, il reçoit une erreur 1006 mais n'indique pas que la fermeture s'est produite à la suite de l'obtention de HTTP 400.

Comment un développeur javascript gère-t-il des erreurs de saisie? Je voudrais fournir au client un message informatif lorsqu'ils ont une erreur de poignée de main.

J'ai mis l'erreur de la passerelle Web ci-dessous, elle ne semble pas contenir tout ce que je peux utiliser pour indiquer que cette erreur est le résultat d'une erreur de saisie de communication Web.

Websocket Error: {"path":{"length":0},"cancelBubble":false,"returnValue":true,"srcElement":{"binaryType":"blob","protocol":"","extensions":"","bufferedAmount":0,"readyState":3,"url":"wss://<my address>","URL":"wss://<my address>"},"defaultPrevented":false,"timeStamp":1417828938039,"cancelable":false,"bubbles":false,"eventPhase":2,"currentTarget":{"binaryType":"blob","protocol":"","extensions":"","bufferedAmount":0,"readyState":3,"url":"wss://<my address>","URL":"wss://<my address>"},"target":{"binaryType":"blob","protocol":"","extensions":"","bufferedAmount":0,"readyState":3,"url":"wss://<my address>","URL":"wss://<my address>"},"type":"error"} 

Je crains qu'il n'y ait aucun moyen de javascript de connaître le code d'état HTTP de la négociation.

Il existe des codes de fermeture définis et 1006 signifie uniquement que la connexion est fermée brusquement, mais le protocole permet même de fermer la connexion sans fournir de raison. Cela, avec l'API readyState , sont les seuls outils que vous avez pour diagnostiquer la cause du problème.