HTTP 1.0 contre 1.1

263

Quelqu'un pourrait-il me donner un bref aperçu des différences entre HTTP 1.0 et HTTP 1.1? J'ai passé du temps avec les deux RFC, mais je n'ai pas réussi à faire la différence entre eux. Wikipedia dit ceci:

HTTP / 1.1 (1997-1999)

Version actuelle; les connexions persistantes sont activées par défaut et fonctionnent bien avec les proxys. Prend également en charge le pipelining des demandes, permettant d'envoyer plusieurs demandes en même temps, permettant au serveur de se préparer à la charge de travail et potentiellement de transférer plus rapidement les ressources demandées au client.

Mais cela ne signifie pas grand-chose pour moi. Je me rends compte que c'est un sujet quelque peu compliqué, donc je ne m'attends pas à une réponse complète, mais quelqu'un peut-il me donner un bref aperçu des différences à un niveau un peu inférieur?
J'entends par là que je recherche les informations dont j'ai besoin pour implémenter un serveur HTTP ou une application. Je suis surtout à la recherche d'un coup de pouce dans la bonne direction afin de pouvoir le découvrir par moi-même.

Jason Baker
la source
Ceci est un assez bon résumé des principales différences: http://www.research.att.com/~bala/papers/h0vh1.html
Kev
3
Bravo pour aller à la source. Il semble que vous ne connaissiez pas grand-chose au réseautage en général, si vous ne comprenez pas ce résumé. Vous devriez peut-être également rechercher ces termes.
Marcin
4
Bien que je sois encore un débutant en ce qui concerne ce genre de choses, mon principal problème est que le résumé me donne plus de "quoi" que de "comment".
Jason Baker,

Réponses:

363

Prise en charge du proxy et champ hôte:

HTTP 1.1 a un en-tête Host requis par spec.

HTTP 1.0 ne nécessite pas officiellement d'en-tête Host, mais cela ne fait pas de mal d'en ajouter un, et de nombreuses applications (proxy) s'attendent à voir l'en-tête Host quelle que soit la version du protocole.

Exemple:

GET / HTTP/1.1
Host: www.blahblahblahblah.com

Cet en-tête est utile car il vous permet d'acheminer un message via des serveurs proxy et également parce que votre serveur Web peut distinguer différents sites sur le même serveur.

Cela signifie donc que si blahblahlbah.com et helohelohelo.com pointent tous deux vers la même IP. Votre serveur Web peut utiliser le champ Hôte pour distinguer le site que l'ordinateur client souhaite.

Connexions persistantes:

HTTP 1.1 vous permet également d'avoir des connexions persistantes, ce qui signifie que vous pouvez avoir plus d'une demande / réponse sur la même connexion HTTP.

Dans HTTP 1.0, vous deviez ouvrir une nouvelle connexion pour chaque paire demande / réponse. Et après chaque réponse, la connexion serait fermée. Cela a entraîné de gros problèmes d'efficacité en raison du démarrage lent de TCP .

Méthode OPTIONS:

HTTP / 1.1 présente la méthode OPTIONS. Un client HTTP peut utiliser cette méthode pour déterminer les capacités du serveur HTTP. Il est principalement utilisé pour le partage de ressources Cross Origin dans les applications Web.

Mise en cache:

HTTP 1.0 a pris en charge la mise en cache via l'en-tête: If-Modified-Since.

HTTP 1.1 étend beaucoup la prise en charge de la mise en cache en utilisant quelque chose appelé «balise d'entité». Si 2 ressources sont identiques, elles auront les mêmes balises d'entité.

HTTP 1.1 ajoute également les en-têtes conditionnels If-Unmodified-Since, If-Match, If-None-Match.

Il existe également d'autres ajouts relatifs à la mise en cache, comme l'en-tête Cache-Control.

100 Continuer le statut:

Il y a un nouveau code retour dans HTTP / 1.1 100 Continue. Il s'agit d'empêcher un client d'envoyer une demande volumineuse lorsque ce client n'est même pas sûr que le serveur peut traiter la demande ou est autorisé à traiter la demande. Dans ce cas, le client n'envoie que les en-têtes, et le serveur dira au client 100 Continuer, continuez avec le corps.

Beaucoup plus:

  • Authentification Digest et authentification proxy
  • Nouveaux codes d'état supplémentaires
  • Encodage de transfert en morceaux
  • En-tête de connexion
  • Prise en charge améliorée de la compression
  • Beaucoup plus.
Brian R. Bondy
la source
15
Notez que beaucoup de serveurs / mandataires qui prétendent vouloir HTTP / 1.0 seront très contrariés si vous omettez l'en-tête Host.
Paul Tomblin
2
HTTP 1.0 prend en charge la compression via l'en-tête Content-Encoding. Comme Paul l'a mentionné, je recommanderais certainement à tous les clients HTTP / 1.0 d'envoyer l'en-tête Host, car il n'est pas strictement interdit de le faire et les choses fonctionneront plus souvent comme prévu. Sinon, c'est mort.
cpm
@ Paul Tomblin: Merci d'avoir ajouté cette information.
Brian R. Bondy
2
Concernant "si vous avez blahblahlbah.com et helohelohelo.com pointant tous les deux vers la même IP. Votre serveur Web peut utiliser le champ Hôte pour distinguer le site que veut la machine cliente." Alors, que se passe-t-il lorsqu'un client HTTP 1.0 ne nous donne aucun champ hôte à distinguer?
Pacerier
@Pacerier est généralement une page par défaut; cela dépend du serveur.
Andrew Lambert
14

 HTTP 1.0 (1994)

  • Il est toujours utilisé
  • Peut être utilisé par un client qui ne peut pas traiter les réponses de serveur fragmentées (ou compressées)

 HTTP 1.1 (1996-2015)

  • Formalise de nombreuses extensions de la version 1.0
  • Prend en charge les connexions persistantes et en pipeline
  • Prend en charge les transferts en bloc, la compression / décompression
  • Prend en charge l'hébergement virtuel (un serveur avec une seule adresse IP hébergeant plusieurs domaines)
  • Prend en charge plusieurs langues
  • Prend en charge les transferts de plage d'octets; utile pour reprendre des transferts de données interrompus

HTTP 1.1 est une amélioration de HTTP 1.0. Voici une liste des quatre améliorations majeures:

  1. Utilisation efficace des adresses IP, en permettant à plusieurs domaines d'être servis à partir d'une seule adresse IP.

  2. Réponse plus rapide, en permettant à un navigateur Web d'envoyer plusieurs demandes via une seule connexion persistante.

  3. Réponse plus rapide pour les pages générées dynamiquement, grâce à la prise en charge du codage par blocs, qui permet d'envoyer une réponse avant que sa longueur totale ne soit connue.
  4. Réponse plus rapide et grandes économies de bande passante, en ajoutant la prise en charge du cache.
i_thamary
la source
9

Pour les applications triviales (par exemple, récupérer sporadiquement une valeur de température à partir d'un thermomètre compatible Web), HTTP 1.0 convient à la fois pour un client et un serveur. Vous pouvez écrire un client ou un serveur HTTP 1.0 basé sur des sockets bare-bones dans environ 20 lignes de code.

Pour des scénarios plus compliqués, HTTP 1.1 est la voie à suivre. Attendez-vous à une augmentation de 3 à 5 fois de la taille du code pour gérer les subtilités du protocole HTTP 1.1 plus complexe. La complexité vient principalement du fait que dans HTTP 1.1, vous devrez créer, analyser et répondre à divers en-têtes. Vous pouvez protéger votre application de cette complexité en demandant à un client d'utiliser une bibliothèque HTTP ou à un serveur d'utiliser un serveur d'applications Web.

Diomidis Spinellis
la source
7

Un problème clé de compatibilité est la prise en charge des connexions persistantes . J'ai récemment travaillé sur un serveur qui "supportait" HTTP / 1.1, mais je n'ai pas réussi à fermer la connexion lorsqu'un client a envoyé une requête HTTP / 1.0. Lorsque vous écrivez un serveur qui prend en charge HTTP / 1.1, assurez-vous qu'il fonctionne également bien avec les clients HTTP / 1.0 uniquement.

Troy J. Farrell
la source
8
HTTP / 1.1 nécessite-t-il que nous soyons compatibles HTTP / 1.0?
Pacerier
@Troy - Est-il valide d'envoyer une réponse à une requête HTTP 1.1 et de fermer immédiatement la connexion (socket à partir duquel la requête a été lue sur le serveur)? Ce qui signifie pratiquement que le serveur implémente HTTP 1.0
Guy Avraham
5

L'une des premières différences dont je me souviens du haut de ma tête sont plusieurs domaines exécutés sur le même serveur, la récupération partielle des ressources, cela vous permet de récupérer et d'accélérer le téléchargement d'une ressource (c'est ce que font presque tous les accélérateurs de téléchargement).

Si vous souhaitez développer une application comme un site Web ou similaire, vous ne devez pas vous inquiéter trop sur les différences , mais vous devez connaître la différence entreGET et les POSTverbes au moins.

Maintenant, si vous souhaitez développer un navigateur, alors oui, vous devrez connaître le protocole complet ainsi que si vous essayez de développer un serveur HTTP.

Si vous souhaitez uniquement connaître le protocole HTTP, je vous recommande de commencer par HTTP / 1.1 au lieu de 1.0.

Leandro López
la source
1
Il me semble que Jason connaît déjà la différence entre GET et POST s'il envisage de créer son propre serveur / application HTTP à partir de zéro. :)
Kev
1
J'ai en fait fait un travail avec un serveur Web qui ne prend actuellement en charge que HTTP 1.0, je me demandais simplement ce qui est impliqué dans l'ajout de la prise en charge 1.1.
Jason Baker,
2

HTTP 1.1 est la dernière version de Hypertext Transfer Protocol, le protocole d'application du World Wide Web qui s'exécute en plus de la suite de protocoles TCP / IP d'Internet. comparer à HTTP 1.0, HTTP 1.1 fournit une livraison plus rapide des pages Web que le HTTP d'origine et réduit le trafic Web.

Trafic Web Exemple: par exemple, si vous accédez à un serveur. Dans le même temps, de nombreux utilisateurs accèdent au serveur pour les données, puis il y a une chance de bloquer le serveur. Il s'agit du trafic Web.

Krishna Mohan
la source
1

HTTP 1.1 est livré avec l'en-tête d'hôte dans sa spécification tandis que le HTTP 1.0 n'a pas officiellement d'en-tête d'hôte, mais il ne refuse pas d'en ajouter un.

L'en-tête de l'hôte est utile car il permet au client de router un message à travers le serveur proxy, et la principale différence entre les versions 1.0 et 1.1 HTTP est:

  1. HTTP 1.1 est livré avec des connexions persistantes qui définissent que nous pouvons avoir plus d'une demande ou réponse sur la même connexion HTTP.
  2. tandis que dans HTTP 1.0, vous devez ouvrir une nouvelle connexion pour chaque demande et réponse
  3. Dans HTTP 1.0, il a un pragma tandis que dans HTTP 1.1, il a Cache-Control, c'est similaire à pragma
Niraj Kumar Jena
la source
0

Comparé à 1.0, 1.1 réduit le trafic Web

Ram MVS
la source