HTTP/2 websockets obsolète?
J'apprends sur HTTP/2 du protocole. C'est un protocole binaire avec un petit message pour les cadres. Il permet le multiplexage de flux plus unique de connexion TCP. Sur le plan conceptuel, il semble très similaire à WebSockets.
Existe-il des plans à obsolètes websockets et de les remplacer par une sorte de sans en-tête HTTP/2 demandes et initiées par le serveur les messages de push? Ou vont les WebSockets complément de HTTP/2?
Vous devez vous connecter pour publier un commentaire.
De ce que j'ai compris HTTP/2 n'est pas un remplacement pour les websocket mais vise à normaliser le protocole SPDY.
Dans HTTP/2, server-push est utilisé derrière la scène pour améliorer le chargement de ressources par le client à partir du navigateur. En tant que développeur, vous n'avez pas vraiment à ce sujet au cours de votre développement. Cependant, avec Websocket, le promoteur est autorisé à utiliser l'API qui est en mesure de consommer et de message push avec un unique full-duplex connexion.
Ce ne sont pas les mêmes choses, et ils devraient se complètent mutuellement.
Après juste en train de terminer la lecture de la HTTP/2 spec, je pense que HTTP/2 ne obsolètes les websockets pour la plupart des cas, mais peut-être pas tous.
PUSH_PROMISE
(familièrement connu sous le nom de serveur push) n'est pas la question ici. C'est juste une optimisation des performances.Les principaux cas d'utilisation pour les Websockets dans un navigateur est de permettre bidirectionnel de streaming de données. Donc, je pense que l'OP question est de savoir si le protocole HTTP/2 fait un meilleur travail de l'activation bidirectionnel en streaming dans le navigateur, et je pense que, oui, il n'.
Tout d'abord, il est bi-di. Suffit de lire l'introduction à la flux de section:
Articles comme cette (lien dans une autre réponse) sont de mauvais sur cet aspect de HTTP/2. Ils disent que c'est pas bidi. Regardez, il y a une chose qui ne peut pas arriver avec HTTP/2: Après la connexion est ouverte, le serveur ne peut pas initier un flux régulier, seulement une poussée de flux. Mais une fois que le client ouvre un flux par l'envoi d'une demande, les deux parties peuvent envoyer des trames de DONNÉES à travers une persistance de la prise en tout temps - plein bidi.
Ce n'est pas beaucoup différent de websockets: le client doit lancer un websocket demande de mise à niveau avant que le serveur peut envoyer des données à travers, trop.
La plus grande différence est que, contrairement aux websockets, HTTP/2 définit ses propres multiplexage sémantique: comment les flux d'obtenir les identifiants et comment les cadres de réaliser l'id du flux qu'ils sont sur. HTTP/2 définit également le contrôle de flux sémantique pour la priorisation de flux. Ceci est important dans la plupart des applications du monde réel de bidi.
(Que de mal l'article dit aussi que le Websocket standard a de multiplexage. Non, il n'est pas. Ce n'est pas vraiment difficile à trouver, il suffit d'ouvrir le Websocket RFC 6455 et appuyez sur ⌘-F, et de type "multiplexe". Après avoir lu
Vous trouverez qu'il ya de 2013 le projet d'extension de Websocket de multiplexage. Mais je ne sais pas lequel des navigateurs, le cas échéant, un soutien qui. Je ne voudrais pas essayer de construire mon SPA webapp sur le dos de cette extension, en particulier avec HTTP/2 à venir, le soutien peut ne jamais arriver).
Le multiplexage est exactement le genre de chose que vous avez à faire vous-même chaque fois que vous ouvrez une websocket pour bidi, disons, d'une puissance réactive de la mise à jour single page app. Je suis content que ça dans le HTTP/2 spec, pris en charge une fois pour toutes.
Si vous voulez savoir ce que HTTP/2 peut faire, il suffit de regarder gRPC. gRPC est mis en œuvre à travers le protocole HTTP/2. Regardons de plus près la moitié et duplex intégral streaming options de gRPC offre. (Notez que gRPC ne fonctionne actuellement pas dans les navigateurs, mais qui est en fait parce que les navigateurs (1) ne pas exposer le HTTP/2 cadre pour le client javascript, et (2) ne font généralement pas de soutien Remorques, qui sont utilisés dans le gRPC spec.)
Où les websockets ont encore leur place? Si vous n'avez pas besoin tout de l'extra que HTTP/2 spécifications sorti (c'est un immense complexe spec), alors peut-être que les websockets sont mieux. En agitant nos mains sur la mise en œuvre de la difficulté, je suis convaincu que la conformité avec le protocole websocket est toujours va être moins gourmand en ressources que HTTP/2 - HTTP/2 juste vous oblige à faire plus de choses.
La taille des images est très comparable. Websocket les cadres sont un peu plus petits, de 2 à 14 octets de surcharge par image, par rapport à HTTP/2 est fixé au 9. Parce que websocket opté pour une variable longueur d'en-tête, il peut encoder des images plus grandes (jusqu'à 2^64-1 de bits par trame vs HTTP/2 2^24-1 bits par trame ). Donc, si vous avez besoin d'une prise de sucer vers le bas quelque chose de gras, sans beaucoup de cérémonie, comme, je ne sais pas, peut-être les images, puis les websockets peut encore faire sens. Pour la plupart des cas d'utilisation, en particulier les choses relatives à des pages web, je pense que HTTP/2 ressemble à la voie à suivre.
Je dis Non (Websockets ne sont pas obsolètes).
Le premier et le plus souvent ignoré problème est que HTTP/2 push n'est pas exécutoire et peut être ignoré par des fondés de pouvoir, les routeurs, les autres intermédiaires ou même le navigateur.
c'est à dire (à partir de la HTTP2 projet):
Aussi, HTTP/2 connexions de faire fermer après un certain temps.
Il est vrai que la norme précise que:
Mais...
Même si la connexion le permet pour pousser le contenu alors qu'il est ouvert et même si HTTP/2 résout certains des problèmes de performance introduite par HTTP/1.1 du "keep-alive" ... HTTP/2 connexions ne sont pas rester ouverte indéfiniment.
Ni d'une page web ré-initier un HTTP/2 connexion une fois fermé (à moins que nous sommes de retour au long de la traction, qui est).
MODIFIER en 2017, deux ans plus tard)
Implémentations de HTTP/2 montrent que plusieurs onglets du navigateur/windows partager une seule adresse HTTP/2, ce qui signifie que
push
ne saura jamais qui l'onglet /fenêtre, il appartient, d'éliminer l'utilisation depush
comme un remplacement pour les Websockets.ssh
terminal sur le navigateur est un jeu d'enfant quand utiliser les Websockets. Ce serait un total de maux de tête sur HTTP/2, surtout si plus d'un onglet est ouvert. Aussi, si le navigateur (ou de l'un de HTTP/2 procurations) fermeture de la connexion? Le client peut-il simplement supposer aucune nouvelle donnée n'est disponible? nous sommes de retour dans les bureaux de vote.onclose
de rappel, donc pas de bureau de vote est nécessaire. Comme pour le multiplexage, je pense que c'était une nécessité plutôt qu'un choix.keep-alive
en panne et que le seul moyen d'éviter la "première ligne" des performances risque de multiplexage. Le temps nous le dira 🙂La réponse est non. L'objectif entre les deux sont très différents. Il y a même une RFC pour WebSocket sur HTTP/2, qui permet de faire de multiples WebSocket des connexions sur un seul HTTP/2 TCP pipe.
WS sur HTTP/2 sera une conservation de la ressource jouer en diminuant le temps d'ouvrir de nouvelles connexions et permettant plus de canaux de communication sans les frais supplémentaires de plus de sockets, doux Irq et les tampons.
https://tools.ietf.org/html/draft-hirano-httpbis-websocket-over-http2-01
Bien, pour citer cette InfoQ article:
Et donc HTTP2 push est vraiment quelque chose entre votre navigateur et le serveur, tandis que les Websockets vraiment exposer l'Api qui peut être utilisé par le client (javascript, si son exécution sur le navigateur) et le code de l'application (en cours d'exécution sur le serveur) pour le transfert de données en temps réel.
D'échange de messages et de streaming(pas d'audio, de vidéo en streaming) peut être fait à la fois via Http/2 multiplexage et les WebSockets. Donc, il ya un certain chevauchement, mais les WebSockets ont ainsi mis en place un protocole, un grand nombre de cadres/Api et moins les en-têtes de frais généraux.
Voici bel article sur le sujet.
Je ne le pense pas, si push/pull et duplex disponibles dans le cadre de http/2, alors pourquoi devrais-je vous recommandons d'utiliser WebSocket et son clairement une surcharge supplémentaire. Je dois dire que Oui, il va certainement obsolète WebSocket