web-dev-qa-db-fra.com

Quelle est la différence entre httpS et http / 2?

J'essaie de comprendre quelle est la différence entre https et http/2?

Si je vais créer une application node.js/express, que dois-je utiliser?

Puis-je utiliser https avec http/2?

Peut-être que si j'utilise https, je n'ai pas besoin de http/2 car c'est la même chose ou que https utilise http/2 sous le capot?

Je suis confus.

Quelqu'un est lié à moi "différence entre HTTP 1.1 et HTTP 2.0 [fermé]", mais je comprends la différence entre HTTP et HTTP2. Je pose des questions sur HTTP S et HTTP/2

6
RTW

[~ # ~] http [~ # ~] - Un protocole utilisé par les clients (par exemple les navigateurs Web) pour demander des ressources aux serveurs (par exemple les serveurs Web) .

[~ # ~] https [~ # ~] - Une façon de crypter HTTP. Il enveloppe essentiellement les messages HTTP dans un format crypté à l'aide de SSL/TLS. Le Web évolue de plus en plus vers HTTPS et les navigateurs Web commencent à émettre de plus en plus d'avertissements lorsqu'un site Web est servi via HTTP non chiffré. Sauf si vous avez une très bonne raison de ne pas le faire, utilisez HTTPS sur tous les sites Web que vous créez maintenant.

En creusant dans HTTP, nous avons plus:

HTTP/1.1 - c'était le format répandu de HTTP jusqu'à récemment. Il s'agit d'un protocole basé sur du texte et qui présente certaines inefficacités - en particulier lors de la demande de nombreuses ressources comme une page Web classique. Les messages HTTP/1.1 peuvent être non chiffrés (là où les adresses de sites Web commencent http: //) ou chiffrés avec HTTPS (là où l'adresse de sites Web commencent par https: //). Le client utilise le début de l'URL pour décider quel protocole utiliser, généralement par défaut à http: // s'il n'est pas fourni.

HTTP/2 - une nouvelle version de HTTP publiée en 2015 qui résout certains des problèmes de performances en s'éloignant d'un protocole texte vers un protocole binaire où chaque octet est clairement défini. Ceci est plus facile à analyser pour les clients et les serveurs, laisse moins de place aux erreurs et permet également multiplexage . HTTP/2, comme HTTP/1.1, est disponible sur des canaux non chiffrés (http: //) et chiffrés (https: //) mais les navigateurs Web ne le prennent en charge que sur HTTPS, où il est décidé d'utiliser HTTP/1.1 ou HTTP/2 dans le cadre de la négociation HTTPS au début de la connexion.

HTTP/2 est utilisé par environ un tiers de tous les sites Web au moment de la rédaction . Cependant, tous les clients ne prennent pas en charge HTTP/2, vous devez donc prendre en charge HTTP/1.1 sur HTTPS et HTTP/2 sur HTTPS lorsque cela est possible (je crois que le nœud le fait automatiquement pour vous lorsque vous utilisez le module http). Je ne pense pas que HTTP/1.1 sera retiré prochainement. Vous devez également envisager de prendre en charge HTTP/1.1 sur HTTP non chiffré, puis rediriger vers la version HTTPS (qui utilisera ensuite HTTP/1.1 ou HTTP/2 selon le cas). Un serveur Web comme Apache ou Nginx devant Node rend cela facile.

HTTP/3 - la prochaine version de HTTP, actuellement en cours de développement. Il devrait être finalisé en 2019, mais il faudra probablement attendre 2020 avant de le voir disponible dans les serveurs Web et les langues comme node. Il sera construit sur un transport basé sur UDP appelé QUIC (plutôt que sur le protocole TCP basé sur HTTP/1.1 et HTTP/2). Il inclura une partie de HTTPS dans le protocole afin que HTTP/3 ne soit disponible que sur HTTPS.

En bref, vous devriez utiliser HTTP/1.1 sur HTTPS, devriez également considérer HTTP/2 s'il est facile à implémenter (pas toujours possible car pas encore omniprésent - mais y arriver) et à l'avenir, vous utiliserez peut-être HTTP/3.

Je vous suggère de bien comprendre toutes ces technologies (sauf peut-être HTTP/3 pour l'instant) si vous voulez faire du développement web. Il vous sera très utile.

9
Barry Pollard

HTTP2 est pris en charge dans tous les navigateurs modernes uniquement via une connexion sécurisée.

Donc, si vous souhaitez utiliser http/2, vous devrez utiliser https.

J'ai trouvé un moyen de le faire avec fastify comme ceci:

'use strict'

const fs = require('fs')
const path = require('path')
const fastify = require('fastify')({
  http2: true,
  https: {
    key: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.key')),
    cert: fs.readFileSync(path.join(__dirname, '..', 'https', 'fastify.cert'))
  }
})

fastify.get('/', function (request, reply) {
  reply.code(200).send({ hello: 'world' })
})

fastify.listen(3000)
0
RTW