Maison  >  Article  >  interface Web  >  Introduction détaillée à la traduction des spécifications HTML5 de l'API WebSocket

Introduction détaillée à la traduction des spécifications HTML5 de l'API WebSocket

黄舟
黄舟original
2017-03-16 16:06:002382parcourir

1. Introduction

Afin de permettre à l'application Web de maintenir une communication bidirectionnelle avec le processus serveur, voici l'introduction de WebSocket Interface.

2. Exigences de cohérence (omises)

3. Terminologie (omise)

4. .WebSocketinterface

(code omis)

WebSocket(url, protocoles)constructeurpeut être transmis1-2 paramètres. Le premier Rigel précise l'URL à laquelle se connecter. Le deuxième paramètre, s'il est déclaré, peut être une string ou une stringarray. S'il s'agit d'une chaîne, cela équivaut à un tableau contenant uniquement cette chaîne. Si le deuxième paramètre est omis, il équivaut à un tableau vide [c'est-à-dire que peu importe ce qui est passé dans le deuxième paramètre, il sera traité comme un tableau de chaînes]. Chaque chaîne du tableau est un nom de sous-protocole. La connexion ne peut être établie que si le serveur déclare avoir sélectionné l'un des sous-protocoles. Tous les noms de sous-protocoles doivent répondre aux exigences suivantes : Ces chaînes doivent contenir WebSocket en-tête de déclaration de protocole Sec-WebSocket-Protocol Contenu①.

Lorsque le constructeur WebSocket() est appelé, l'agent utilisateur doit effectuer les étapes suivantes :

(1) Depuis url URL sont analysés à partir des paramètres 🎜> pour obtenir l'hôte, le port, le nom de la ressource et le protocole de sécurité (hôte, port, ressource nom et sécurisé). Si ce processus échoue, une exception SyntaxError sera levée et les étapes suivantes seront terminées.

(2) Si

secure est vide, mais que le script d'entrée d'origine a un modèle qui est lui-même un protocole de sécurité, tel que HTTPS , puis lancez l'exception SecurityError. (Si secure est faux mais que l'origine du script d'entrée a un composant de schéma qui est lui-même un protocole sécurisé, par exemple HTTPS, alors lancez une SecurityError exception.)

(3) Si le port utilisé dans le paramètre est défini pour être interdit d'accès à l'agent utilisateur, alors une exception SecurityError sera levée. Les ports 80 et 443 ne doivent pas être bloqués, y compris sécurisé estfaux, le port 443 ne peut pas être bloqué, et sécurisé est true Lorsque le port 80 ne peut pas être bloqué [Ici, cela signifie qu'il existe deux types de WebSocket Dans le formulaire, ws n'a pas de protocole de sécurité, et le port par défaut est 80, wss est livré avec un protocole de sécurité, par défaut, il utilise le port 443 Cependant, même si le protocole utilisé ne nécessite pas de port correspondant, l'accès au 443 ne peut être interdit et 80 ces deux ports].

(4) Si le paramètre

protocols n'est pas déclaré, laissez-le devenir un tableau vide. Sinon, si le paramètre protocols est une chaîne, laissez-le devenir un tableau contenant la chaîne.

(5) Si une

variable dans le paramètre protocoles est déclarée supérieure à cela ou ne répond pas aux exigences de ①, alors Lancez l'exception SyntaxError et terminez les étapes suivantes.

(6) Soit

origine la sérialisation ASCII de l'origine du script d'entrée, convertie en minuscule ASCII.

(7) Renvoie un nouveau

🎜>WebSocket objet et continuez avec les étapes suivantes dans le programme en arrière-plan.

(8) Créer une base de données contenant l'hôte, le port, le nom de la ressource et les protocoles sécurisés et donnés. liste, et une liste vide d'extensions (extensions) et une liste de origine de WebSocketConnectez-vous. Pour envoyer les bons Cookies, vous devez utiliser l'en-tête Cookie, où la valeur est transmise au utilisateur La valeur du cookie stockée et l'url sont calculées. À ces fins, il ne s’agit pas d’une API sans le protocole HTTP.

Lors de l'exécution du "WebSocketAlgorithme d'établissement de connexion", lorsque l'agent utilisateur vérifie la réponse du serveur, si le code d'état reçu du serveur n'est pas 101, l'agent utilisateur DOIT mettre fin à cette connexion WebSocket.

Attention ! L'utilisation de HTTP ici peut entraîner de graves risques de sécurité pour le contexte du navigateur. Par exemple, imaginez qu'un hôte soit un serveur configuré à l'aide de WebSocket sur un chemin, et d'une redirection HTTP ouverte pointant vers un autre chemin. . Du coup, tout script auquel une URL WebSocket spécifique peut accéder à ce service et communiquer avec d'autres hôtes sur Internet, même si le script vérifie l' URL est le nom d'hôte correct.

Remarque : Si l'exécution de l'algorithme de connexion WebSocket échoue, l'algorithme d'échec de connexion WebSocket sera déclenché . Cet algorithme exécutera l'algorithme de fermeture de la connexion WebSocket, qui fermera la connexion WebSocket et déclenchera fermer événement , les étapes d'exécution sont telles que décrites ci-dessous.

Lorsque l'objet global du script est un objet

Window ou un objet instancié via l'interface WorkerUtils, Ce constructeur doit être visible. L'attribut

url

doit être analysé à partir de l'URL transmise au constructeur. L'attribut

readyState

représente l'état de la connexion. Il a les valeurs suivantes :

CONNECTING

, la valeur correspondante est 0, indiquant que la connexion n'a pas été établie

OPEN

, la valeur correspondante est 1 , indiquant WebSocketLa connexion a été établie et la communication est possible

FERMETURE

, la valeur correspondante est 2 ; , indiquant que la connexion subit une poignée de main de fermeture ou que la méthode close() a été appelée

CLOSED, la valeur correspondante est

3, indiquant que la connexion a été fermée ou que la connexion ne peut pas être ouverte. Lorsque l'objet

WebSocket

instancié est créé, sa valeur readyState doit être définie sur CONNEXION. La valeur initiale de l'attribut

extensions doit être une chaîne vide. Lorsque la connexion WebSocket est établie, sa valeur peut être modifiée selon les règles suivantes.

Remarque : Si le serveur a sélectionné l'extension, l'attribut extension renvoie l'extension sélectionnée par le serveur. (Actuellement, ce champ a toujours été un champ vide)

protocoleL'initialisation de l'attribut doit être une chaîne vide . Lorsque la connexion WebSocket est établie, sa valeur peut être modifiée selon les règles suivantes.

Remarque : Si le serveur spécifie un sous-protocole, l'attribut protocol renvoie le sous-protocole sélectionné par le serveur. La méthode

close() doit être exécutée selon les étapes suivantes :

(1) Si cette méthode passe le premier paramètre mais qu'il n'est pas égal à 1000 ou non dans la plage de 3000 à 4999, lancez l'exception InvalidAccessError et terminez les étapes suivantes.

(2) Si le deuxième paramètre est passé, exécutez les sous-étapes suivantes :

①Laissez raison brute devenir le deuxième des paramètres de la méthode

( est suivi de l'omission de )

(3) Exécutez la première étape de correspondance ci-dessous

①Si l'attribut readyState est CLOSING ou CLOSED, rien ne se passe.

②Si la connexion WebSocket n'a pas été établie, mettre fin à l'établissement de la connexion WebSocket et readyState est définie sur CLOSING.

③Si la poignée de main de fermeture de

WebSocket n'a pas encore commencé, démarrez la poignée de main de fermeture de WebSocket et readyState est réglé sur CLOSING. Si le premier paramètre est passé, alors le code d'état utilisé par le message de fermeture WebSocket doit être le entier spécifié par le premier paramètre. Si le deuxième paramètre est également déclaré, raison doit être donné après le code d'état du message de clôture.

④Dans d'autres cas, définissez la valeur de l'attribut

readyState sur CLOSING.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn