web-dev-qa-db-fra.com

Performances HTTP vs HTTPS

Existe-t-il des différences de performances majeures entre http et https? Il me semble me rappeler avoir lu que HTTPS peut être un cinquième aussi rapide que HTTP. Est-ce valable avec les serveurs Web/navigateurs de la génération actuelle? Si oui, y a-t-il des livres blancs à l'appui?

358
Jim Geurts

Il existe une réponse très simple à cette question: Décrivez les performances de votre serveur Web pour voir quelle en est la pénalité pour votre situation particulière. Il existe plusieurs outils permettant de comparer les performances d’un serveur HTTP à un serveur HTTPS (JMeter et Visual Studio me viennent à l’esprit) et ils sont relativement simples à utiliser.

Personne ne peut vous donner une réponse significative sans des informations sur la nature de votre site Web, de votre matériel, de vos logiciels et de votre configuration réseau.

Comme d'autres l'ont déjà dit, le chiffrement entraînera un certain surcroît de travail, mais il dépend fortement:

  • Matériel
  • Logiciel serveur
  • Ratio contenu dynamique vs contenu statique
  • Distance du client au serveur
  • Durée de session typique
  • Etc (mon préféré)
  • Comportement en cache des clients

D'après mon expérience, HTTPS a moins d'impact sur les serveurs qui utilisent beaucoup de contenu dynamique, car le temps passé à chiffrer (temps système SSL) est insignifiant par rapport au temps de génération de contenu.

Les serveurs qui consomment peu de pages statiques et qui peuvent facilement être mis en cache en mémoire subissent une surcharge beaucoup plus importante (dans un cas, le débit a été réduit à néant sur un "intranet").

Edit: Plusieurs points ont été soulevés par le fait que le protocole SSL constitue le coût principal du protocole HTTPS. C’est exact, c’est pourquoi la "longueur de session typique" et le "comportement de mise en cache des clients" sont importants.

De nombreuses sessions très courtes signifient que le temps passé en mains libres submergera tous les autres facteurs de performance. Des sessions plus longues impliqueront des coûts de prise de contact au début de la session, mais les demandes ultérieures auront des frais généraux relativement faibles.

La mise en cache des clients peut être effectuée à plusieurs étapes, du serveur proxy à grande échelle au cache de navigateur individuel. Généralement, le contenu HTTPS ne sera pas mis en cache dans un cache partagé (bien que quelques serveurs proxy puissent exploiter un comportement de type intermédiaire dans ce but). De nombreux navigateurs mettent en cache le contenu HTTPS pour la session en cours et souvent entre les sessions. L'impact de la non-mise en cache ou de la réduction de la mise en cache signifie que les clients récupéreront le même contenu plus fréquemment. Cela se traduit par davantage de demandes et de bande passante pour desservir le même nombre d'utilisateurs.

228
James Schek

HTTPS nécessite une poignée de main initiale qui peut être très lente. La quantité réelle de données transférées dans le cadre de la poignée de main n'est pas énorme (moins de 5 ko en général), mais pour de très petites requêtes, cela peut être un peu long. Cependant, une fois la poignée de main terminée, une forme très rapide de cryptage symétrique est utilisée, de sorte que la surcharge est minime. En bout de ligne: faire beaucoup de demandes courtes via HTTPS sera un peu plus lent que HTTP, mais si vous transférez beaucoup de données en une seule demande, la différence sera insignifiante.

Cependant, keepalive est le comportement par défaut de HTTP/1.1. Vous devrez donc établir une poignée de main nique, puis de nombreuses requêtes sur la même connexion. Cela fait une différence significative pour HTTPS. Vous devriez probablement profiler votre site (comme d'autres l'ont suggéré) pour vous en assurer, mais je soupçonne que la différence de performances ne sera pas perceptible.

218
Graeme Perrow

Pour vraiment comprendre comment HTTPS augmentera votre temps de latence, vous devez comprendre comment les connexions HTTPS sont établies. Voici un diagramme de Nice . La clé est qu'au lieu que le client reçoive les données après 2 étapes (un aller-retour, vous envoyez une demande, le serveur envoie une réponse), le client ne recevra les données qu'au moins 4 étapes (2 allers-retours). . Ainsi, s'il faut 100 ms pour qu'un paquet se déplace entre le client et le serveur, votre première requête HTTPS prendra au moins 500 ms.

Bien sûr, cela peut être atténué en réutilisant la connexion HTTPS (ce que les navigateurs devraient faire), mais cela explique une partie de ce blocage initial lors du chargement d'un site Web HTTPS.

101
twk

La surcharge n'est pas due au cryptage. Sur un processeur moderne, le cryptage requis par SSL est trivial.

La surcharge est due aux liaisons SSL, qui sont longues et augmentent considérablement le nombre d'allers et retours nécessaires pour une session HTTPS sur une session HTTP.

Mesurez (à l'aide d'un outil tel que Firebug) les temps de chargement de la page lorsque le serveur se trouve à la fin d'un lien simulé à latence élevée. Des outils existent pour simuler un lien à latence élevée - pour Linux, il existe "netem". Comparez HTTP avec HTTPS sur la même configuration.

La latence peut être atténuée dans une certaine mesure par:

  • S'assurer que votre serveur utilise HTTP keepalives - cela permet au client de réutiliser des sessions SSL, ce qui évite le recours à une autre poignée de main
  • Réduire le nombre de requêtes au minimum possible - en combinant les ressources si possible (par exemple, les fichiers d'inclusion .js, CSS) et en encourageant la mise en cache côté client
  • Réduisez le nombre de chargement de pages, par exemple en chargeant des données non requises dans la page (peut-être dans un élément HTML masqué), puis en les affichant à l'aide du script client.
76
MarkR

Mise à jour de décembre 2014

Vous pouvez facilement tester la différence entre les performances HTTP et HTTPS dans votre propre navigateur à l'aide du site Web HTTP vs HTTPS en - AnthumChris : “Cette page mesure son temps de chargement sur des connexions HTTP non sécurisées et cryptées HTTPS. Les deux pages chargent 360 images uniques et non mises en cache (2,04 Mo au total). ”

Les résultats pourraient vous surprendre.

Il est important de disposer de connaissances à jour sur les performances HTTPS car l'autorité de certification codons commence à émettre gratuitement des et des certificats SSL ouverts à l’été 2015, grâce à Mozilla, Akamai, Cisco, Electronic Frontier Foundation et IdenTrust.

Mise à jour de juin 2015

Mises à jour sur Let’s Encrypt - Arrivée en septembre 2015:

Plus d'infos sur Twitter: @ letsencrypt

Pour plus d'informations sur les performances HTTPS et SSL/TLS, voir:

Pour plus d'informations sur l'importance d'utiliser HTTPS, voir:

Pour résumer, permettez-moi de citer Ilya Grigorik : "TLS a exactement un problème de performances: il n'est pas utilisé assez largement. Tout le reste peut être optimisé."

Merci à Chris - auteur du test HTTP vs HTTPS - pour ses commentaires ci-dessous.

25
rsp

La réponse principale actuelle n'est pas tout à fait correct.

Comme d'autres l'ont fait remarquer ici, https nécessite une prise de contact et multiplie donc les allers-retours TCP/IP.

Dans un environnement WAN, la latence devient généralement le facteur limitant et non l'augmentation de l'utilisation de l'UC sur le serveur.

Rappelez-vous que la latence entre l’Europe et les États-Unis peut être d’environ 200 ms (temps de transition).

Vous pouvez facilement mesurer cela (dans le cas d'un utilisateur unique) avec HTTPWatch .

23
kohlerm

En plus de tout ce qui a été mentionné jusqu'à présent, n'oubliez pas que certains navigateurs Web (tous?) Ne stockent pas le contenu en cache obtenu via HTTPS sur le disque dur local pour des raisons de sécurité. Cela signifie que, du point de vue de l'utilisateur, les pages contenant beaucoup de contenu statique sembleront se charger plus lentement après le redémarrage du navigateur, et du point de vue de votre serveur, le volume de demandes de contenu statique via HTTPS sera supérieur à celui qui aurait été obtenu via HTTP.

12
Alexander

Dans un certain nombre de cas, l'impact de la négociation SSL sur les performances sera atténué par le fait que la session SSL peut être mise en cache des deux côtés (poste de travail et serveur). Sur les machines Windows, par exemple, la session SSL peut être mise en cache pendant 10 heures maximum. Voir http://support.Microsoft.com/kb/247658/EN-US . Certains accélérateurs SSL auront également des paramètres vous permettant de régler l'heure de mise en cache de la session.

Un autre impact à prendre en compte est que le contenu statique servi sur HTTPS ne sera pas mis en cache par les mandataires, ce qui peut réduire les performances de plusieurs utilisateurs accédant au site via le même proxy. Cela peut être atténué par le fait que le contenu statique sera également mis en cache sur les ordinateurs de bureau, le contenu statique HTTPS en cache d'Internet Explorer versions 6 et 7, sauf indication contraire (Menu Outils/Options Internet/Options avancées/Sécurité/Ne pas enregistrer les pages cryptées. sur le disque).

6
ZX81

Il n'y a pas une seule réponse à cela.

Le cryptage consommera toujours plus de ressources processeur. Cela peut souvent être déchargé sur du matériel dédié, et le coût varie en fonction de l'algorithme sélectionné. 3des est plus cher que l'AES, par exemple. Certains algorithmes sont plus coûteux pour le crypteur que pour le décrypteur. Certains ont le coût opposé.

Plus coûteux que la crypto en vrac est le coût de la négociation. Les nouvelles connexions consomment beaucoup plus de ressources processeur. Cela peut être réduit avec la reprise de session, au prix de garder les anciens secrets de session jusqu'à leur expiration. Cela signifie que les petites demandes d'un client qui n'en demande pas davantage sont les plus chères.

Pour le trafic Internet croisé, vous ne remarquerez peut-être pas ce coût dans votre débit de données, car la bande passante disponible est trop faible. Mais vous le remarquerez certainement dans l'utilisation du processeur sur un serveur occupé.

6
Darron

Je peux vous dire (en tant qu'utilisateur dialup) que la même page sur SSL est plusieurs fois plus lente que via HTTP classique ...

6
Brian Knoblauch

J'ai fait une petite expérience et obtenu une différence de temps de 16% pour la même image provenant de flickr (233 kb):

http://farm8.staticflickr.com/7405/13368635263_d792fc1189_b.jpg

https://farm8.staticflickr.com/7405/13368635263_d792fc1189_b.jpg

enter image description here

Bien sûr, ces chiffres dépendent de nombreux facteurs, tels que les performances de l'ordinateur, la vitesse de connexion, la charge du serveur, la qualité de service sur le chemin d'accès (chemin d'accès réseau particulier pris entre le navigateur et le serveur), mais cela montre l'idée générale: HTTPS est plus lent que HTTP. demande plus d'opérations à compléter (protocole de transfert SSL et codage/décodage des données).

4
Khachatur

Voici un excellent article (un peu ancien, mais toujours excellent) sur la latence de négociation SSL. M'a aidé à identifier SSL comme étant la principale cause de lenteur pour les clients qui utilisaient mon application via des connexions Internet lentes:

http://www.semicomplete.com/blog/geekery/ssl-latency.html

3
OrPo

COMPARAISON DES PERFORMANCES HTTP VS HTTPS

J'ai toujours associé HTTPS à des temps de chargement de page plus lents que si vous utilisiez du vieux HTTP ordinaire. En tant que développeur Web, la performance des pages Web est importante pour moi et tout ce qui peut ralentir les performances de mes pages Web est un non-non.

Afin de comprendre les implications en termes de performances, le diagramme ci-dessous vous donne une idée de base de ce qui se passe sous le capot lorsque vous faites une demande pour une ressource utilisant HTTPS.

enter image description here

Comme vous pouvez le voir sur le diagramme ci-dessus, l'utilisation de HTTPS nécessite quelques étapes supplémentaires par rapport à l'utilisation d'un protocole HTTP simple. Lorsque vous faites une demande en utilisant HTTPS, une poignée de main doit avoir lieu afin de vérifier l'authenticité de la demande. Cette poignée de main est une étape supplémentaire par rapport à une requête HTTP et entraîne malheureusement une surcharge.

Afin de comprendre les implications en termes de performances et de voir par moi-même si l'impact sur les performances serait important ou non, j'ai utilisé ce site comme plate-forme de test. Je me suis dirigé vers webpagetest.org et j'ai utilisé l'outil de comparaison visuelle pour comparer le chargement de ce site en utilisant HTTPS vs HTTP.

Comme vous pouvez le voir sur voici la vidéo de test Résultat , l’utilisation de HTTPS a eu une incidence sur le temps de chargement de ma page, mais la différence est négligeable et j’ai seulement remarqué une différence de 300 millisecondes. Il est important de noter que ces temps dépendent de nombreux facteurs, tels que les performances de l'ordinateur, la vitesse de connexion, la charge du serveur et la distance qui le sépare du serveur.

Votre site peut être différent et il est important de tester votre site de manière approfondie et de vérifier l'impact sur les performances induit par le passage à HTTPS.

POUVONS-NOUS WE AMÉLIORER LES PERFORMANCES? visitez ici pour obtenir des informations détaillées

2
Sunny S.M

TLS est-il encore rapide? Oui.

De nombreux projets visent à brouiller les lignes et à rendre le protocole HTTPS aussi rapide. Comme SPDY et mod-spdy .

2
Anthony Hatzopoulos

Il semble y avoir un cas Edge méchant ici: Ajax sur wifi encombré.

Ajax signifie généralement que le KeepAlive a expiré après, disons, 20 secondes. Cependant, le wifi signifie que la connexion ajax (idéalement rapide) doit faire plusieurs allers-retours. Pire encore, le wifi perd souvent des paquets et il y a TCP retransmissions. Dans ce cas, HTTPS fonctionne vraiment très mal!

2
Richard

Depuis que je recherche le même problème pour mon projet, j'ai trouvé ces diapositives. Plus vieux mais intéressant:

http://www.cs.nyu.edu/artg/research/comparison/comparison_slides/sld001.htm

2
Mircea Stanciu

Il y a un moyen de mesurer cela. L'outil d'Apache appelé jmeter mesurera le débit. Si vous configurez un large échantillon de votre service avec jmeter, dans un environnement contrôlé, avec et sans SSL, vous devez obtenir une comparaison précise du coût relatif. Je serais intéressé par vos résultats.

0
dacracot