Le protocole HTTP

 

Fait le 3 décembre 2001 par Claude PIDEIL

DESS TNI ASR 2001-2002 Université Montpellier II

 

 

Index Retour au sommaire

 

 

1. INTRODUCTION

HTTP (HyperText Transfer Protocol) est le protocole du WEB, ou plus précisément du WWW (World Wide Web), le plus utilisé sur Internet depuis 1990. Il permet aujourd’hui de transmettre n’importe quel type de fichier ou de donnée et a été pensé afin de pouvoir être utilisé dans de futures applications orientées objet (c’est pour cela que chaque requête commence par un nom de méthode).

HTTP est employé pour chaque transaction, il est présent dans chaque requête concernant un document ou un graphique du WEB, à chaque fois que l’on clique sur un lien hypertexte, et pour chaque formulaire soumis. Il permet la transmission de données sous forme de requêtes entre une machine ‘Client’, et une autre ‘Serveur’.

HTTP est un protocole ASCII (American Standard Code for Information Interchange), rapide, léger. Il se situe au niveau 7 (Application) du modèle OSI (Open Systems Interconnection), au même titre que FTP (File Transfer Protocol) et TELNET . Il est défini par les spécifications HTTP, diffusées par le W3C (World Wide Web Consortium) http://www.w3.org. Il s’appuie généralement sur une connexion transport TCP (Transmission Control Protocol), et utilise le port 80 par défaut. Quoi qu’il en soit, il peut fonctionner au-dessus de tout autre service orienté connexion.

Le protocole HTTP est en perpétuelle évolution : il existe plusieurs versions en cours d’utilisation et plusieurs autres encore en phase de développement. La version 1.0 est la plus répandue, mais depuis plus d'un an, il semblerait que se soit HTTP/1.1 tant attendu qui arrive maintenant en tête du classement. Une importante révolution est à venir avec le futur HTTP-NG déjà très prometteur.

 

 

2. LE WEB

On ne peut pas parler du protocole HTTP sans parler du WEB. Le WEB a été développé en 1989 par Tim Berners-Lee au CERN (Conseil Européen pour la Recherche Nucléaire) à GENEVE. A l’origine, sa motivation était de trouver une manière de partager les résultats d’expériences physiques. La technologie mise en place derrière le WEB permettait de relier un document sur un serveur à un document sur un autre en gardant invisible pour l’utilisateur la méthode d’accès et la localisation de ceux-ci. En 1993, on a développé une interface graphique pour le WEB : Mosaic (Université de l’Illinois) qui ne fonctionne que sur UNIX et Xwindow. Bientôt, des versions pour MAC et PC voient le jour et le WEB commence d’acquérir une grande popularité. En 1994, une nouvelle interface arrive : Netscape Navigator. Les grandes entreprises commencent à développer leur site. Toujours en 1994, le CERN et le MIT (Massachusetts Institute of Technology) signent un protocole d’accord pour créer le W3C dont le rôle est de standardiser les protocoles et promouvoir l’interopérabilité entre sites.

 

 

3. LES URL

Le concept du WEB est de permettre l’accès à des documents reliés entre eux et dispersés sur des milliers de machines réparties sur la planète. Au départ, l’idée était de relier des documents texte ; on dit que l’on utilise une technique d’hypertexte. Mais maintenant, on trouve de plus en plus d’images, de sons, de vidéos, … On parle alors d’hypermédia.

D’un point de vue technique, les fondements du WEB sont simples. Il s’agit de permettre l’accès, au moyen d’un système client-serveur, à des documents hypermédia distribués !

Dés le moment où l’on a imaginé le WEB, on a dû concevoir un mécanisme de nommage et de localisation des documents (appelé URL : Uniform Resource Locator), permettant d’identifier individuellement les différents documents accessibles à travers le WEB. Les documents hypermédia présents sur le WEB sont écrits à l’aide du langage HTML (HyperText Markup Language). Il s’agit de simples tests auxquels on a ajouté des constructions spéciales qui permettent de définir en particulier les liens vers d’autres documents au moyen des URLs.

Un URL est de la forme suivante :

protocole : / / serveur  : port / chemin / fichier # position

 

protocole

Le nom du protocole : le plus souvent http.

serveur

Le nom d’une machine reliée à Internet ( www.toto.fr ) ou son adresse ( 128.178.50.32 ).

[port]

Le numéro de port sur lequel le serveur est en attente. Suivant le protocole utilisé, il existe toujours une valeur par défaut. ( 80 pour HTTP ).

[chemin]

Le chemin ( suite de répertoires séparés par des / ) vers le document recherché.

fichier

Le nom du document recherché.

[#position]

Un nom désignant une position à l’intérieur du document.

 

Exemple : http://www.toto.fr/DessTni/http/index.html

 

4. PRINCIPE

HTTP est un protocole transactionnel, simple, basé sur le principe de Requête/Réponse. Il est dit sans état : le client envoie une requête et le serveur répond, indépendamment des requêtes précédentes et sans conserver la moindre information pour les requêtes à venir. Ensuite, il libère la connexion. Les serveurs peuvent cependant enregistrer les entêtes des requêtes à des fins statistiques et de déboggage.

HTTP n’est pas orienté session, il n’a aucun moyen d’identifier un utilisateur au cours d’une série de connexions à un site WEB.

Une transaction HTTP se décompose en quatre phases :

Remarque : C’est le client qui ouvre la connexion, mais c’est le serveur qui la ferme. Une transaction HTTP correspond au transfert d’au plus une ressource. Ainsi, cela n’a pas de sens de dire que l’on est "connecté" à un site WEB. Les sites qui donnent à l'utilisateur l'illusion d'être connecté, utilisent entre autre, les cookies.

Exemple pour la transaction : http://www.toto.fr/DessTni/http/index.html

 

 

Il est important de noter que le navigateur doit établir une nouvelle connexion TCP pour charger chaque composant de la page en question , ce qui n’est franchement pas efficace dans le cas de documents contenant un grand nombre d’images. (Aujourd’hui, c’est pratiquement toujours le cas, mais les dernières versions du protocole apportent des solutions que l’on abordera plus loin).

Parfois, le client demande au serveur un peu plus qu’un simple fichier : il peut lui demander d’exécuter un programme et de lui renvoyer le résultat . C’est ce qui se passe par exemple lorsque, après avoir rempli les champs d’un formulaire de recherche, l’utilisateur appuie sur le bouton [rechercher] du formulaire : les données du formulaire sont envoyées au serveur à l’aide de la requête, le serveur les communique au programme concerné, récupère les résultats et les retourne au client sous forme de réponse.

Le mécanisme par lequel le serveur et un programme échangent des données en vue de construire un document à renvoyer au client est appelé CGI (Common Gateway Interface).

 

 

5. HTTP/0.9

Pourquoi HTTP/0.9 ? En fait, lorsque Tim Berners-Lee a inventé ce protocole, il ne lui avait pas attribué de numéro de version. Il a été baptisé HTTP/0.9 lorsque la première version correctement définie par une RFC (Request For Comments) du NWG (Network Working Group) est apparue pour HTTP/1.0. C'est donc la toute première version du protocole HTTP.

Celle-ci a été écrite pour répondre aux exigences fixées par Tim Berners-Lee quant au transport et à l'acheminement des pages HTML au CERN.

Cette version implémente des requêtes extrêmement simples permettant uniquement l’obtention de documents par la seule méthode GET du protocole. Le seul moyen d'envoyer des informations aux serveurs est l'utilisation des URL encodés ou étendus. Pour cela, on termine l'URL par un "?" et on y rajoute l'information à la suite, sur la même ligne.

Par exemple : GET http://www.toto.fr/cgi-bin/imagemap.cgi?x=15&y=20

Cette version est uniquement à base de texte. Si le document n’existe pas, le serveur ne renvoie rien : on ne peut pas savoir si le document est vide ou s’il n’existe pas. On ne peut pas faire plus simple.

Dans la pratique, il n’y a plus aucun logiciel HTTP/0.9 en service aujourd’hui. Cependant, les serveurs WEB actuels assurent la compatibilité ascendante.

Exemple de requête HTTP/0.9

GET http://www.toto.fr/DessTni/http/index.html

 

Exemple de réponse HTTP/0.9

<HTML>

<HEAD><TITLE>Index HTTP</TITLE></HEAD>

<BODY><P>Le protocole HTTP est simple.</BODY>

</HTML>

 

HTTP/0.9 est tout ce qu'il y a de plus simple. L'information demandée arrive tout de suite sans préavis, et la connexion est coupée immédiatement après par le serveur. Conséquences :

 

 

6. HTTP/1.0

Si le WEB se résumait simplement à la récupération de documents texte, la version 0.9 suffirait largement. Mais il en est tout autrement. C’est pour cela que la notion d’en-têtes, introduite dans la version 1.0, permet l’échange de méta-information entre clients et serveurs.

Par rapport à la version précédente, HTTP/1.0 va apporter une grande nouveauté quant à la forme de la requête, et surtout de la réponse. La première amélioration apportée est donc pour le confort de navigation. HTTP/1.0 peut maintenant gérer les caches à l'aide de certaines de ces en-têtes (le mécanisme reste toutefois assez primitif).

Cette nouvelle version est maintenant composée des méthodes  GET, HEAD et POST (voir explications plus loin).

HTTP/1.0 sait maintenant reconnaître si une requête n'a pas abouti puisqu'il introduit aussi la notion de statut de la réponse ( Le fameux "404 not Found" ).

On voit également apparaître une distinction entre les différents types de données (Texte, Images, Son, …) permettant la diffusion de documents multimédia.

Les connexions persistantes font leur apparition.

Enfin, HTTP/1.0 permet aux utilisateurs de s'authentifier, par exemple, pour accéder à une partie cachée d'une site. Les spécifications détaillées de la version 1.0 (RFC1945 – HTTP : A protocol for networked information) sont accessibles sur le site du W3C.

A partir de HTTP/1.0, on voit apparaître sur la première ligne des requêtes et des réponses, la version de protocole utilisée. HTTP/1.0 ne résoud hélas pas tous les problèmes de son prédécesseur. En effet, il faut encore ouvrir plusieurs connexions par document pour en récupérer les différents objets qui le composent, et ce, à cause des connexions persistantes que peu d'intermédiaires (Proxies, …) comprennent.

Exemple de requête HTTP/1.0

GET http://www.toto.fr/DessTni/http/index.html HTTP/1.0

User-Agent : Mozilla/4.0 (compatible; MSIE 5.0; Windows 95)

 

 

Exemple de réponse HTTP/1.0

HTTP/1.0 200 OK

Date : Sat, 15 Jan 2000 14:37:12 GMT

Server : Microsoft-IIS/2.0

Content-Type : text/HTML

Content-Lentgh : 126

Last-Modified : Fri, 14 Jan 2000 08:25:13 GMT

<HTML>

<HEAD><TITLE>Index HTTP</TITLE></HEAD>

<BODY><P>La version 1.0 est bien moins simple.</BODY>

</HTML>

 

On voit tout de suite qu'il y a beaucoup plus d'informations fournies qu'avec HTTP/0.9. Notons tout d'abord l'ajout à la fin de la première ligne de la requête de "HTTP/1.0" qui indique simplement au serveur que l'on veut dialoguer avec lui avec cette version du protocole. Il en sera de même pour HTTP/1.1 et vraisemblablement aussi pour les futures versions.

Deuxième différence, cette fois-ci de taille, on dit aussi au serveur quel est le navigateur utilisé pour faire la requête. On peut donc maintenant rajouter de l'information dans les requêtes... On verra plus tard quel autre genre d'information on peut donner au serveur dans ce que l'on appelle les "en-têtes de la requête".

Troisième différence importante : le serveur nous renvoie un certain nombre d'informations avant le contenu du fichier lui-même (là aussi ce sont des en-têtes). En fin, on reçoit le fichier. Et en tout dernier, le serveur coupe la connexion.

 

6.1. Les requêtes du client en HTTP/1.0

Les méthodes :

Les requêtes, en HTTP/1.0, peuvent être de 3 sortes: la méthode GET, HEAD et POST.

On envoie un certain nombre d'informations à une procédure spécifiée par l'URL. Les informations sont envoyées en même temps que la requête dans ce qu'on va appeler le corps de l'entité.

 

 

Les en-têtes des requêtes :

Lorsqu'on envoie une requête à un serveur, il faut a priori envoyer une en-tête (c'est optionnel : on peut en effet terminer une requête sans même avoir donné d'en-tête).

Les lignes d'en-tête sont de la forme ( Nom : Valeur ). C'est le même format qui est utilisé pour l'envoi d'e-mail, défini par la RFC822.

L'en-tête se décompose en faite en 3 parties :

L'en-tête générique se compose principalement de la date et l'heure à laquelle on fait la requête (directive Date:).

 

 

Dans l'en-tête de la requête, on peut spécifier 5 choses :

directive

Signification

From:

Donne l'e-mail de la personne contrôlant le navigateur (cela peut poser des problèmes de respect de la vie privée).

Referer:

URL de l'objet qui amène la requête (URL de la page où se trouve le lien)

User-Agent:

l'identifiant du navigateur. Sert pour adapter la réponse au navigateur

Authorization:

permet à un client de s'authentifier auprès du serveur

If-Modified-Since:

permet de faire des GET conditionnels

Enfin, l'en-tête de l'entité renseigne sur les données. Le client n'en a vraiment l'utilité que lorsqu'il envoie des informations par la méthode POST. Les principales directives, qui reprennent celles des réponses du serveur, sont :

directive

signification

Content-Type:

le type MIME (Multipurpose Internet Mail Extensions) de l'information envoyée (exemple : text/html, image/jpeg...)

Content-Length:

le nombre d'octets d'information (en octets)

Content-Encoding:

utile si l'information est codée ou compressée (x-gzip par exemple)

Le point intéressant, c'est qu'on peut envoyer autre chose que des réponses à des formulaires, des images par exemple (c'est comme ça que l'on peut envoyer des documents attachés avec des mails en ligne comme Caramail, Hotmail...).

 

 

Corps de l'entité :

Le corps de l'entité ne concerne une requête que lorsque le client veut envoyer des informations au serveur par la méthode POST. Dans ce cas, on place obligatoirement une info Content-Type et un Content-Length.

Une fois toutes ces informations spécifiées, on remplit à proprement parler le corps de l'entité avec le message à envoyer.

Tout comme le serveur fait pour envoyer un document, il faut séparer l'en-tête et le corps de l'entité par un saut à la ligne supplémentaire.

 

 

6.2. Les réponses du serveur en HTTP/1.0

Le statut de la réponse :

Avec HTTP/1.0, le client connaît le type de la réponse, grâce à l'en-tête de la réponse du serveur. En fait, la première chose que renvoie le serveur, c'est l’état de la transaction .

La réponse est du genre : HTTP/1.0 200 OK

On distingue trois parties dans cette première information :

Le statut, c'est simplement la façon dont s'est passée la transaction. Le plus connu, hélas ! c'est le fameux "404 Not Found". Ces codes sont à trois chiffres et répartis en 5 classes : le premier chiffre indique la classe de statut et les suivants la nature exacte de l’erreur. HTTP définit seulement quelques codes spécifiques par classe, bien qu’elles soient de plus en plus fournies à chaque version.

Remarque : Si le client reçoit un code qu’il ne reconnaît pas, il devra comprendre sa signification basique à partir de la classe correspondante.

Classe

Description

1xx : Informationnelle.

Cette classe n'est pas utilisée avec la version HTTP/1.0.

2xx : Requête client réussie.

La réponse la plus courante pour une transaction HTTP réussie est 200 (OK) indiquant ainsi que la requête du client a abouti, et que la réponse du serveur contient les données.

3xx : Requête client redirigée, autre action nécessaire.

Quand un document a été déplacé, le serveur peut être configuré afin de révéler aux clients où il a été réinstallé. Les clients peuvent donc ensuite récupérer la nouvelle URL sans que l’utilisateur en ait connaissance. Il existe tout de même deux codes de réponse pour les documents déplacés : 301 pour indiquer un déplacement définitif, et 302 pour un déplacement provisoire. A partir de là, le client fait en silence une nouvelle requête à la nouvelle URL. Dans le cas du changement définitif, le client devrait désormais envoyer les prochaines requêtes à la nouvelle URL évitant ainsi des transactions inutiles.

4xx : Requête client incomplète.

Parfois le serveur est tout simplement incapable de traiter la requête. Soit parce qu’il y a une erreur concernant le document, soit parce que l’erreur se situe du coté de la requête. Le code erreur le plus connu des usagers du WEB est le 404 (Not Found), code renvoyé quand le document demandé n’existe pas. La plupart des autres codes sont directement interprétés par le client, comme par exemple le cas du 401 qui va demander à l’usager un nom et un mot de passe afin de pouvoir représenter la requête au serveur avec ces nouvelles informations.

5xx : Erreurs du serveur.

Requête correcte mais non satisfaite (problème interne au serveur, pas encore implémenté...)

 

 

 

Les en-têtes de la réponse :

Le serveur envoie des informations au client, tout comme le navigateur au serveur.

L'en-tête de la réponse du serveur se décompose également en trois parties, les trois mêmes que pour la requête du client.

L'en-tête générique peut comporter les 2 champs suivants :

directive

Signification

Date:

sert à indiquer la date de la réponse

Pragma:

définit des comportements spécifiques. Le seul comportement décrit dans la RFC1945 est "no-cache" qui dit que le document ne doit pas être caché (voir la gestion des caches).

 

L'en-tête de la réponse peut comporter 3 champs différents :

directive

Signification

Location:

l'URL absolue d'une ressource

Server:

des infos sur le serveur HTTP qui a répondu à la requête (du genre : Apache/1.3.12)

WWW-Authenticate:

demande l'authentification d'une personne

 

 

L'en-tête de l'entité peut comporter les champs suivants :

directive

Signification

Content-Type:

comme pour le client, le type d'infos envoyées

Content-Length:

la longueur des infos renvoyées (en octets)

Content-Encoding:

si l'information est codée (utile pour le décodage)

Expires:

limite de validité de la ressource envoyée. Utilisé pour les caches.

Last-Modified:

date et heure de la dernière modification. Egalement utilisé pour les caches.

Allow:

liste les méthodes utilisables pour l'URI demandée (classiquement, HEAD et GET)

Il est également possible d'utiliser des directives non définies par la RFC (extension-header).

Corps de l'entité :

C'est tout simplement le document renvoyé. Il se peut qu'il n'y en ait pas, par exemple si on a fait une requête avec la méthode HEAD. C'est également le cas lorsque le serveur renvoie un code statut "404 Not Found" par exemple.

La seule chose importante : le serveur doit envoyer un Content-Length si l'en-tête est suivie des données d'un document.

 

 

6.3. La gestion des caches

Un cache, c'est une sorte de "tampon", de mémoire : une machine stocke quelque part en mémoire certains documents, de façon à ce que, lorsqu'on demande une ressource déjà cachée (présente dans le cache), on fournisse ce document caché au lieu de refaire toute la requête complète auprès du serveur. Cela permet, entre autres, de gagner du temps sur les documents fortement demandés (les pages d'un intranet par exemple) et aussi de réduire le trafic réseau.

Toute la subtilité consiste donc à savoir si le document a été mis à jour. Sur le schéma suivant, on voit le "parcours" d'une ressource au moment d'une requête :

Le client va en fait soumettre la requête à un proxy ou tout autre élément comportant un cache. Cet élément va alors essayer de déterminer si le document caché qu’il dispose est valable ou non. Pour cela, il va s'aider des directives reçues lorsque le document a été demandé pour la première fois, et éventuellement faire une requête HEAD. En fonction de la réponse, le proxy va, soit refaire la requête complète auprès du serveur, cacher la nouvelle entité et la fournir au client, ou tout simplement, fournir au client l'entité qu'il possède déjà. C'est ce dernier cas qui fait gagner du temps.

De nouvelles directives :

HTTP/1.0 introduit des directives spéciales telles que Date, Expires et Last-Modified qui permettent de savoir quand le document demandé a été modifié depuis la dernière fois, ou de calculer le temps que doit rester une ressource dans le cache, voire tout simplement de dire à partir de quand on doit demander au serveur le nouveau document (directive Expires).

La méthode HEAD :

La première idée pour savoir si une entité a été modifiée depuis la dernière fois a été d'utiliser une nouvelle méthode : la méthode HEAD. Cette méthode permet de ne récupérer que la partie en-tête d'un requête complète GET, ce qui permet par exemple d'obtenir la date de dernière modification (via les nouvelles directives) et donc de savoir si le document demandé a changé depuis la dernière fois, sans pour autant trop charger le réseau (le document ne voyage pas, seulement les méta-informations transitent).

Le GET conditionnel :

HTTP/1.0 introduit un autre mécanisme de cache : une méthode GET conditionnel. Ceci se fait une fois de plus grâce à une nouvelle directive : If-Modified-Since. Le GET conditionnel permet de demander au serveur de renvoyer le document si et seulement si ce dernier a changé depuis la date indiquée en face de la directive. Pour le client, il suffit juste d'envoyer la date à laquelle il a reçu le document pour la dernière fois. Dans le cas où la ressource n'a pas été modifiée, le serveur renvoie un très court "HTTP/1.0 304 Not Modified" et le client sait alors qu'il n'a plus qu'a distribuer l'entité cachée.

Entités non cachables :

Bien sûr, certains documents ne doivent pas être cachés (par exemple, les résultats renvoyés par des scripts CGI). Pour cela, on utilise encore une directive Pragma : no-cache qui dit à tous ceux qui manipulent le document de ne pas le garder dans leur cache. L'autre solution est d'utiliser la directive Expires avec une date passée.

 

 

6.4. Authentification

Une dernière nouveauté de ce protocole HTTP/1.0 : un utilisateur peut s'authentifier, certes de manière relativement simple. Ceci permet de protéger par exemple une partie d'un site WEB et de ne le rendre accessible que par mot de passe.

Lorsqu'un client essaie d'accéder à une ressource protégée, le serveur renvoie un statut "HTTP/1.0 401 Authorization Required" avec une directive WWW-Authenticate qui dit au client comment procéder pour l'authentification. A ce moment, le client demande l'authentification et la renvoie au serveur qui délivrera ou non la ressource. HTTP/1.0 ne propose au départ qu'une seule façon de s'authentifier.

Une amélioration de HTTP/1.0 : il s'agit de la méthode "Basic" qui fait un codage de type base64 de la chaîne de caractère "login:mote_de_passe". Le mot de passe circule codé, certes, mais pas crypté, ce qui fait qu'on peut le craquer très facilement.

 

 

6.5. Les cookies

Le cookie est une technique qui consiste, pour un site WEB ou une page WEB, à enregistrer localement sur le poste client des informations utiles à la consultation dudit site ou de ladite page. En effet, la consultation WEB, effectuée grâce au protocole HTTP, ne permet pas nativement de garder des informations sur le contexte d'une session de travail sur un site WEB. Ainsi, lorsque vous êtes sur un site et que vous passez d'une page à l'autre en cliquant sur des liens, chaque requête est traitée de manière complètement indépendante, comme on l'a déjà vu plus haut. Pour pallier à cette non-persistance, on a donc introduit les cookies.

En passant d'une page à l'autre sur un site, les premières pages peuvent déposer des informations sur le poste client à destination des pages visitées par la suite et donc recréer un mécanisme de session. Lorsque les informations à conserver sont nombreuses, le site WEB n'enregistre sur le poste client qu'un simple identifiant (un numéro unique lié à l'utilisateur). Les informations sont conservées alors localement sur une base, côté serveur, mais sont associées via l'identifiant contenu dans le cookie à l'utilisateur.

Les cookies sont apparus entre 1995 et 1996 à l'initiative de Netscape.

Les mécanismes de cookies utilisent le protocole HTTP pour fonctionner. Ils accompagnent les échanges en s'introduisant dans les entêtes HTTP des requêtes et des réponses. Toutes les spécifications concernant ces entêtes HTTP avec cookies sont contenues dans la (RFC2109 - HTTP State Management Mechanism).

 

 

6.6. Limites

HTTP/1.0 ne résoud hélas pas tous les problèmes de son prédécesseur. En effet : nous n'avons pas évoqué le problème des connexions multiples (quand le client doit ouvrir plusieurs connexions successives avec le serveur pour charger un document en entier) : il faut encore ouvrir plusieurs connexions par document et ce, malgré une nouvelle directive (keep-alive) mais que peu d'intermédiaires comprennent. Par ailleurs, dans le cas d'un serveur hébergeant plusieurs serveurs virtuels, HTTP/1.0 ne sait pas résoudre les URL relatives, il faut en effet continuer à lui spécifier l'URL absolue.

 

 

7. HTTP/1.1

La RFC2616 décrivant HTTP/1.1 est assez conséquente (175 pages). Ceci dit, il n'y a pas de franche différence entre HTTP/1.1 et HTTP/1.0. Cette nouvelle version est plutôt une sorte d'ultime amélioration de HTTP/1.0, qui permet une quasi parfaite utilisation et gestion des ressources avec un mécanisme de cache particulièrement amélioré.

La préoccupation principale ne se trouve plus dans la façon d'acheminer la ressource, elle se situe plutôt désormais dans la rationalisation du système dans son ensemble. Le dialogue entre le client et le serveur doit être aussi clair et précis que possible, et ne doit circuler sur le réseau que le strict nécessaire. Dans ce sens, les connexions persistantes sont devenues le comportement par défaut. La connexion entre le client et le serveur reste désormais ouverte après la première requête, histoire de laisser le temps au client de récupérer d'autres fichiers (notamment les images contenues dans un document HTML).

Les séries d’octets (Range) permettent au client de récupérer seulement une partie d’une entité, d’obtenir les données d’un très gros document en plusieurs parties ou de lire un index de document de façon sélective. Avec la directive (Transfer-Encoding : chunked) le serveur peut commencer à envoyer une réponse sans connaître sa longueur totale (car toute la réponse n'a pas encore été générée), elle sera ainsi découpée en morceaux et envoyés au fur et à mesure.

HTTP/1.1 complète également HTTP/1.0 par des statuts et des méthodes supplémentaires, et un mécanisme d'authentification par challenge (méthode "digest"). Ajoutons également une amélioration notable du système de cache, mais les bases du protocole restent celles de HTTP/1.0 : le message comporte toujours un en-tête avec un statut pour la réponse et un corps divisé comme dans HTTP/1.0 avec une entité.

 

 

7.1. Nouveaux statuts

De nouveaux statuts font leur apparition. Leur rôle se situe surtout au niveau de la gestion des caches et du contrôle du trafic.

La classe 1xx s’ajoute avec 2 statuts utilisés pour gérer directement le canal de transmission.

 

 

7.2. Nouvelles méthodes

Bien évidemment, les trois méthodes de base (GET, HEAD et POST) sont toujours là et restent toujours celles majoritairement utilisées. Cependant, 5 autres nouvelles méthodes font leur apparition :

Ces nouvelles méthodes sont là pour la gestion de la communication client-serveur et la gestion des documents du serveur. On peut donc désormais concevoir une interface d'administration simple et totalement "web". Il va de soi que ces méthodes ne sont pas autorisées à tout le monde.

 

 

7.3. Nouvelles directives

La liste des directives utilisables (47 au total) a été considérablement rallongée pour assurer le bon fonctionnement de toutes les nouveautés : la gestion des caches, la clarté du dialogue client-serveur, la négociation de contenu, la rationalisation du canal de communication... La liste est trop longue pour figurer ici. Elle est toutefois disponible en annexe, sur ce même document. Notons cependant que la directive "Host:" est désormais obligatoire dans toute requête HTTP/1.1, afin d'assurer une parfaite gestion des serveurs virtuels et une correcte utilisation des URL absolues et relatives (ce qui n'était pas le cas dans HTTP/1.0).

Puisqu’ ici, la connexion réseau est maintenue par défaut après chaque transaction, il faut qu’elle soit fermée explicitement par le client ou le serveur. Cependant, les clients doivent bien s’assurer qu’ils intègrent l’en-tête Connection : Close lors de leur dernière transaction, sinon la connexion restera ouverte jusqu’à ce que le serveur détecte une trop longue inactivité (time out) et décide de la fermer.

D’après le RFC2626, le mode Pipeline peut être activé par le client lors d’une connexion persistante. C’est-à-dire qu’il peut envoyer une série de requêtes au serveur sans attendre de réponses immédiate. Cela permet d’utiliser une seule connexion TCP, donc plus efficace et plus rapide. La seule obligation pour le serveur sera de donner au client les réponses correspondantes dans le même ordre.

 

 

7.4. Les caches

L'idée des caches est la même qu'en HTTP/1.0, mais le mécanisme a été beaucoup amélioré dans HTTP/1.1. L'objectif principal est la réduction du nombre de requêtes "inutiles" : éviter au maximum de faire des requêtes complètes et de renvoyer des documents complets, autant que possible. Concrètement, le cache doit s'assurer au maximum de la "fraîcheur" des documents. Cela passe par l'utilisation de nouvelles directives et de nouveaux statuts.

Le cache doit pouvoir gérer 2 choses : les directives du serveur ("ne conserve pas ce document"...) et les souhaits du client ("je ne garde pas les documents plus d'un certain temps"). En fait, le type de requêtes reste le même, mais des algorithmes et des règles plus précis sur la façon de calculer et gérer l'âge des documents ainsi que les dates d'expiration ont été écrits. Tout ceci n'avait pas été fait dans HTTP/1.0 ou alors de façon trop imprécise.

Le mécanisme complet est trop complexe pour figurer dans ce document. Pour une complète description, se reporter à la RFC2616.

 

 

7.5. Négociation de contenu

HTTP/1.1 essaie d'apporter une gestion "intelligente" des documents. La négociation de contenu (content negociation) est un outil qui permet de renvoyer (ou récupérer selon le cas) le document qui répondra au mieux aux attentes de l'utilisateur. Par exemple, si le serveur arrive à savoir que l'utilisateur est français (en vérifiant le nom du navigateur par exemple), il va essayer de renvoyer prioritairement les documents écrits en français. Ou bien c'est le client HTTP qui essaie de demander le "meilleur" document. La sélection se fait sur base d'une liste renvoyée par le serveur de toutes les représentations possibles pour le document demandé.

 

 

7.6. Sécurité

Le mécanisme d'authentification de HTTP/1.0 n'a en revanche pas beaucoup changé. Un mécanisme d'authentification plus sûr (par challenge) a toutefois été mise en place pour résoudre les faiblesses de l'authentification "basic". Il s'agit de la méthode "digest" définie dans la RFC2617 (authentification par les méthodes Basic et Digest ). La RFC2616 donne également quelques recommandations pour la sécurité générale du serveur et de son contenu.

 

 

8. HTTP-NG

HTTP montre des limites en matière de modularité et de performances. Simomn Spero a proposé en 1995 un HTTP-NG (pour New Generation) repris par le W3C en 1997 qui vise à améliorer les performances de son prédécesseur. Ainsi, le protocole HTTP-NG :

En plus de ces performances améliorées, HTTP-NG supporte toutes les caractéristiques de HTTP, mais implémenté de manière complètement différente. En 1995, HTTP-NG a été testé sur une liaison transatlantique et a montré de belles performances avec une utilisation entière de la bande passante disponible. En revanche, HTTP/1.0 a seulement été capable d'utiliser un dixième de la bande passante. Comme prévu, les performances de HTTP-NG ne se sont pas dégradées autant que celles de HTTP dans des conditions de congestion.; il s'est comporté nettement mieux qu'avec des connexions multiples comme le permettent des navigateurs modernes multi-tâches. Si la version NG est intéropérable avec la version 1.1, son déploiement n'en nécessite pas moins une mise à niveau des logiciels clients et serveurs longue et coûteuse. De plus sa standardisation est encore au stade de l'élaboration. (A suivre …).

 

8.1. Politique de connexion

La différence majeure entre HTTP 1.0 et HTTP-NG est que ce dernier tente de réutiliser des connexions pour des transactions multiples. Une fois connecté, HTTP-NG reste connecté. Cela évite la charge due aux multiples demandes de connexion. Cela donne du temps pour que le mécanisme d'évitement de la congestion puisse monter son taux de transmission en puissance. Comme il y a moins de connexions, le serveur utilise bien moins de ressources pour retenir l'historique des connexions récemment fermées.

 

8.2. Flux de données multiples

L'unique connexion HTTP-NG est divisée en de multiples sessions virtuelles, chacune d'entre elle pouvant ramener un objet requis en parallèle. Ces dernières sont asynchrones, permettant à un client d'émettre de multiples requêtes sans attendre d'accusé de réception, sans parler de l'attente même de l'objet requis. Il existe une session dédiée, similaire à la connexion de contrôle du protocole FTP, utilisée pour envoyer toutes les requêtes et recevoir les meta-informations (auteur, détails de copyright, coûts, ou requêtes de redirection pour utiliser une connexion externe spéciale, comme par exemple un lien ATM pour de la vidéo en direct).

 

8.3. Protocole binaire

HTTP étant un protocole orienté texte, cela le rend aisé à debogguer. Cependant, tous ces en-têtes textuels signifient une charge considérable lorsqu'on transporte de petits objets , le transport pouvant se débrouiller avec des données binaires, ce qu'il fait d'ailleurs déjà pour le corps des objets. HTTP-NG utilise un protocole binaire, encodé en ASN.1 et rendu encore plus compact grâce aux PER (Packed Encoding Rules). Cela veut dire qu'une requête typique est très petite, mais ressemble à n'importe quoi tant qu'elle n'a pas été décodée.

 

8.4. Authentification et paiement

Chaque message individuel lors d'une connexion avec HTTP-NG peut être authentifié. La méthode de sécurité ne fait pas partie du protocole donc n'importe quelle méthode supportée à la fois par le client et le serveur peut être utilisée; des messages individuels peuvent utiliser des mécanismes d'authentification différents si nécessaire. Les données chiffrées peuvent être transportées en toute sécurité à travers des proxies intermédiaires moins sûrs. Comme réponse dans un environnement d'authentification, le serveur peut signaler à un client que le service requis encourre un coût. Et propose une liste de méthodes de paiement acceptables. Le client peut bien sûr refuser de continuer.

 

9. HTTPS : HTTP Secure

C'est un protocole issu de Netscape et lié à une connexion par socket sécurisée, autrement dit du HTTP avec une pincée de SSL (Secure Socket Layer). Sa principale utilisation est le commerce électronique.

Le protocole HTTPS utilise le port 443 par défaut et son rôle est de crypter la communication entre le client et le serveur. (Suis-je bien "connecté" au serveur auquel je pense ?). Pour cela, il est nécessaire d'établir une session SSL avant la connexion HTTP, l'utilisation du protocole HTTP est ensuite complètement identique .

Habituellement, les accès à des pages WEB se font à l'aide du protocole HTTP, en empruntant le réseau Internet. Aucune garantie de confidentialité n'est assurée lors des accès à des données soumises à authentification ( échange de login - mot de passe) dans le cadre d' applications de commerce électronique, par exemple. Il faut savoir que, dans ce cas, il n'est pas très difficile à un pirate d'intercepter ces informations confidentielles, y compris le mot de passe du client , et ainsi d'usurper son identité, voire récupérer son code de carte bleue. Afin de palier à ces inconvénients, le protocole HTTPS peut être mis en œuvre.

En outre, on n'a pas une certitude absolue d'être en cours de consultation du site auquel on croit être connecté.

D'une manière très schématique, HTTPS permet d'encapsuler et de crypter le trafic HTTP; ainsi, il sera quasiment impossible à un pirate qui intercepterait des accès à des pages chargées via le protocole HTTPS, de décrypter cet échange, et donc de récupérer des informations confidentielles. De surcroît , HTTPS permet de s'assurer que le serveur auquel on accède est bien celui que l'on croit.

HTTPS offre d'autres possibilités qui ne sont pas abordées ici (par exemple, authentifier la personne qui accède au serveur). Sans entrer dans du détail technique, les échanges HTTPS sont cryptés et décryptés à l'aide d'un couple de 'clés informatiques' qui sont propres à un serveur :

Le navigateur qui accède à un serveur doit récupérer la clé publique de ce serveur; celle-ci lui est transmise depuis le serveur, encapsulée dans un certificat X509 (c'est un fichier informatique). Ce certificat contient donc la clé publique du serveur, validée ("signée") par un organisme reconnu, appelé Certificate Authority (CA).

 

10. PRODUITS

En ce qui concerne les logiciels client, Netscape Navigator et Microsoft Internet Explorer sont les deux programmes World Wide Web les plus répandus, mais ce ne sont de loin pas les seuls. Le premier est gratuit et le second est intégré au système d'exploitation Windows que l'on peut se procurer à partir de 150€. Tous ces navigateurs ne sont pas nécessairement graphiques, il en existe de purement textuels, ou adaptés à certaines formes de handicap ou de consultation :

Côté serveurs, il y a Apache, un logiciel libre qui est le serveur le plus répandu avec prés de 60% du marché. Ensuite, avec environ 30% du marché, on trouve Microsoft Internet Information Server, qui est un produit commercial d'un coût de quelques milliers d'euros.

 

 

11. CONCLUSION

Avec la possibilité de conserver ouverte une connexion jusqu’au transfert complet d’une page, la version 1.1, apporte un gain de performance non négligeable, surtout si l’on songe qu’il s’agit d’une connexion TCP qui fait l’objet d’une négociation complète entre l’appelant et l’appelé lors de son établissement.

HTTP/1.1 est finalement la version finale tant attendue de HTTP. Enormément d'améliorations ont été apportées, même par rapport à HTTP/1.0 qui était déjà un bond en avant dans l'évolution du protocole. Toute la mécanique de base du protocole est désormais mise en place, et il est à croire que peu d'autres améliorations techniques seront apportées dans les futures versions de HTTP. Ce à quoi il faut s'attendre sur les prochaines versions, c'est surtout une réponse aux nouveaux besoins du WEB : l'e-commerce, l'e-business... HTTP va certainement s'orienter de plus en plus "service de haut niveau" ; HTTP n'est plus un simple protocole de transport, c'est devenu un protocole "intelligent", supérieur.

Le reproche fait à HTTP est comme bien souvent le défaut de sa qualité : " La notion originale d’URL". Le principal défaut des URLs, est de rendre très difficile la réorganisation des espaces d’adressage des serveurs HTTP, car une information n’est pas identifiée en tant que telle, mais seulement par son chemin d’adressage. Toute modification de celui-ci rend caduques les URLs utilisées dans le monde entier pour désigner ces documents.

Pour palier à ce défaut, la notion d’URN (Uniform Resource Name) a été introduite. Le serveur responsable d’un URN a en charge de résoudre l’indirection entre le nom symbolique unique du document et son URL effective à l’instant de son utilisation.

Pour la petite histoire, aujourd'hui, Tim Berners-Lee, le père du WEB (timbl@w3.org) dirige le W3C. On trouve sur son site à l'adresse ( http://www.w3.org/People/Berners-Lee ) une foule d'informations croustillantes ainsi que des réponses à bon nombre de questions qui lui ont déjà été posées.

 

 

12. LES PRINCIPALES SOURCES DE DOCUMENTATION

 

 

 

 

 

13. ANNEXES A : Les directives de HTTP/1.1

Voici la liste des 47 directives définies et utilisées dans les en-têtes de HTTP/1.1.

directive

signification

Accept:

spécifie les types de média acceptés pour la ressource demandée (text/html, image/jpeg...). Liste de type MIME.

Accept-Charset:

page de code acceptable pour la réponse (alphabet cyrillique...)

Accept-Encoding:

identique à Accept: mais limite l'encodage (gzip...)

Accept-Language:

langues (utilisées dans la page web demandée) acceptées pour la réponse

Accept-Ranges:

le serveur dit s'il accepte ou non les directives Range:

Age:

utilisé pour la gestion des caches. Dit au serveur l'âge estimé de la ressource cachée pour que le serveur compare et renvoie éventuellement une nouvelle version.

Allow:

liste les méthodes (GET, PUT...) supportées pour la ressource demandée

Authorization:

utilisé par un client pour s'authentifier auprès du serveur

Cache-Control:

définit une politique de cache pour la ressource (no-cache, public...). La liste des politiques se trouve page 108 de la RFC2616.

Connection:

indique des paramètres particuliers pour la connexion (close, par exemple, pour demander à fermer la connexion après envoi de la ressource)

Content-Encoding:

complément à media-type:. Indique quel encodage (gzip...) est utilisé pour la ressource.

Content-Language:

langue utilisée dans la ressource

Content-Length:

longueur (en octet) du corps de l'entité

Content-Location:

(en-tête de l'entité) sert à préciser la vraie URI de la ressource renvoyée si la ressource renvoyée a été trouvée à une autre URI que celle de la requête

Content-MD5:

renvoie un code de contrôle MD5 au client pour lui permettre de vérifier l'intégrité de la ressource renvoyée

Content-Range:

précise la zone de l'entité complète couverte par l'entité partielle renvoyée

Content-Type:

type de média du corps de l'entité (text/html; charset=ISO-8859-4 par exemple)

Date:

date à laquelle le message a été écrit

ETag:

dans la réponse, entity tag (sorte de code de contrôle) de la variante de l'entité demandée. Permet de faire une comparaison entre ce qui a été demandé et ce qui a été renvoyé.

Expect:

le client attend un certain comportement du serveur. Le statut 417 (Expectation Failed) est utilisé dans ce contexte.

Expires:

date à partir de laquelle la réponse doit être considérée comme invalide

From:

e-mail de l'utilisateur du client qui a formulé la requête

Host:

précise le serveur (virtuel) sur lequel la requête est formulée

If-Match:

sert à faire des requêtes conditionnelles sur les ETags

If-Modified-Since:

sert également à faire des requêtes conditionnelles, mais sur la date de dernière modification de la ressource

If-None-Match:

pour les requêtes conditionnelles, inverse de If-Match:

If-Range:

dans les requêtes conditionnelles, le client demande au serveur de lui renvoyer la portion spécifiée de la ressource, si cette dernière n'a pas été modifiée (condition vérifiée avec un If-Unmodified-Since: par exemple)

If-Unmodified-Since:

opposé de If-Modified-Since:

Last-Modified:

renvoie la date de dernière modification de l'entité

Location:

sert à rediriger une requête vers une autre URI

Max-Forwards:

avec les méthodes TRACE et OPTIONS, sert à préciser le nombre d'intermédiaires ( proxy, gateway ) qui peuvent renvoyer la requête

Pragma:

utilisé pour spécifier certains comportements pour les intermédiaires (no-cache, par exemple, pour demander à ce que la ressource ne soit pas cachée)

Proxy-Authenticate:

utilisé lorsqu'un proxy demande à au client (l'utilisateur) de s'identifier avant de continuer la requête

Proxy-Authorization:

réponse du client à un Proxy-Authenticate:

Range:

précise la portion de données (en octet) de la ressource demandée ou renvoyée

Referer:

URI de la ressource à l'origine de la requête ( lorsque l'on clique sur le lien d'une page par exemple, contient l'URI de la page où il y avait le lien)

Retry-After:

lors d'un statuts 503 (Service Unavailable) par exemple, précise dans combien de temps le client pourra reformuler la requête (durée d'indisponibilité)

Server:

indique le serveur HTTP (Apache, par exemple) qui répond à la requête

TE:

indique quelle extension de Transfer-Encoding: le client accepte dans la réponse du serveur

Trailer:

indique quelles directives sont présentes dans le trailer du message encodé avec avec "chunked transfer-coding" (voir Transfer-Encoding:)

Transfer-Encoding:

indique le type de transformation qui a été opérée sur le corps du message pour le transférer correctement (chunked par exemple)

Upgrade:

sert au client à indiquer quel protocoles de communication supplémentaires (HTTP/2.0 par exemple) il supporte et aimerait utiliser, si le serveur trouve opportun de changer de protocole

User-Agent:

indique un indentifiant pour le type de client utilisé pour faire la requête (Mozilla/4.03 [fr], par exemple)

Vary:

sert dans le mécanisme de cache : indique l'ensemble des directives à utiliser dans une requête client qui autorise le cache à renvoyer la réponse telle quelle, sans redemander validation auprès du serveur

Via:

indique par quels intermédiaires (machines et protocoles) la requête est passée avant d'atteindre le serveur

Warning:

informations additionnelles sur le statut ou la tranformation du message, et qui ne pourrait pas être signalées par d'autres directives

WWW-Authenticate:

est renvoyé par le serveur lors d'un statut 401 (Unauthorized) pour demander au client de s'authentifier

 

 

14. ANNEXES B : Les statuts de HTTP/1.1

Ces statuts complètent ceux de HTTP/1.0. La grande nouveauté, c'est la définition de 2 statuts de la classe 1xx. La classe 4xx a été considérablement élargie.

 

1xx – Informational : Ces statuts servent à donner une réponse provisoire. Il n'y a pas d'en-tête particulier pour ces statuts. Un statut 1xx ne peut être envoyé à un client HTTP/1.0, sauf dans des conditions expérimentales.

numéro

Texte

description

100

Continue

le client doit continuer à attendre la réponse et envoyer des rappels de sa requête au serveur. Le serveur signale ainsi qu'il a compris la requête et qu'il ne l'a pas encore rejetée.

101

Switching Protocols

le serveur va répondre avec une autre version de protocole

 

 

2xx – Success : Ces statuts sont utilisés lorsque la requête a été correctement reçue, comprise et traitée.

numéro

Texte

description

200

OK

la requête est satisfaite

201

Created

une URI a été créée

202

Accepted

requête acceptée mais non traitée

203

Non-Authoritative Information

les méta-informations renvoyées dans l'en-tête de l'entité ne sont pas tout à fait celles qui conviennent pour la ressource demandée. Elles proviennent par exemple d'une tiers. Ne peut être utilisé que si autrement la réponse est 200 OK.

204

No Content

requête satisfaite, mais le serveur n'a rien de particulier à renvoyer

205

Reset Content

le client doit rafraîchir l'affichage de la page actuelle car le serveur vient de finir le traitement et donc le contenu a changé. Cette réponse ne peut en aucun cas contenir d'entité.

206

Partial Content

le serveur a répondu partiellement à la requête GET

 

 

3xx – Redirection : Ces statuts sont utilisés lorsqu'il faut une autre requête pour accéder à la ressource. A priori, le serveur sait que la ressource est accessible.

numéro

texte

description

300

Multiple Choices

la ressource demandée existe sous plusieurs formes (le serveur dispose de index.htm et index.html)

301

Moved Permanently

la ressource a définitivement changé d'emplacement. La directive Location: contient alors la nouvelle URI.

302

Moved Temporarily

la ressource existe mais est temporairement indisponible. Une solution alternative peut alors être proposée.

303

See Other

la réponse à la requête peut être trouvée à une autre URI et devrait être obtenue par une nouvelle requête GET sur cette nouvelle URI

304

Not Modified

code renvoyé lorsque le client a effectué un GET conditionnel et que le document demandé n'a pas été modifié depuis la date indiquée

305

Use Proxy

la ressource demandée doit être accédée en utilisant le proxy indiqué

306

(Unused)

ce code est réservé (il était utilisé dans un premier draft de la RFC2616)

307

Temporary Redirect

la ressource demandée se trouve temporairement à une autre URI

 

4xx - Client Error : Requête syntaxiquement incorrecte ou incomprise.

numéro

texte

description

400

Bad Request

requête syntaxiquement incorrecte

401

Unauthorized

l'utilisateur doit s'authentifier pour accéder à la ressource. Une directive WWW-Authenticate: est alors fournie pour permettre l'authentification.

402

Payment Required

réservé pour une utilisation future

403

Forbidden

le serveur ne veut pas délivrer la ressource. Il ne s'agit pas d'une erreur d'authentification.

404

Not Found

la ressource spécifiée est introuvable (erreur d'URL ?)

405

Method Not Allowed

le client essaie d'utiliser une méthode non autorisée sur l'URI demandée. Le serveur renvoie alors une directive Allow: pour indiquer quelles méthodes sont autorisées.

406

Not Acceptable

la réponse (entité) ne correspond pas aux caractéristiques de la directive Accept: de l'en-tête de la requête

407

Proxy Authentication Required

identique au code 401, mais il indique que le client doit d'abord s'authentifier auprès du proxy

408

Request Timeout

le client n'a pas envoyé de requête durant la période de temps où le serveur attendait

409

Conflict

il y a un conflit entre la requête et l'état actuel de la ressource. Le client peut a priori résoudre le problème.

410

Gone

la ressource n'est plus disponible sur le serveur et aucune adresse alternative n'a été fournie

411

Length Required

la requête doit contenir un Content-Length:

412

Precondition Failed

une des préconditions fournies en en-tête de la requête a produit un résulat négatif du côté serveur

413

Request Entity Too Large

la ressource demandée est plus grosse que ce que le serveur veut renvoyer

414

Request-URI Too Long

l'URI de la ressource demadée est trop longue. Cette erreur se produit par exemple lorsque le client a mal converti une requête POST en requête GET.

415

Unsupported Media Type

le format de l'entité demandée n'est pas supporté par la ressource demandée pour la méthode demandée

416

Requested Range Not Satisfiable

le client demande un Range: (portion de l'entité) impossible à déterminer sur la ressource

417

Expectation Failed

la prévision de ressource exprimée dans le champ Expect: de la requête ne peut pas être satisfaite

 

 

 

5xx - Server Error : La requête est a priori correcte, mais elle ne peut être satisfaite.

numéro

texte

description

500

Internal Server Error

la serveur a eu un problème

501

Not Implemented

le serveur ne peut pas appliquer la requête

502

Bad Gateway

on s'adresse à un proxie ou une passerelle, et la machine ne comprend pas la réponse

503

Service Unavailable

le serveur ne peut pas satisfaire la requête pour une raison temporaire. Le serveur devrait pouvoir y répondre plus tard.

504

Gateway Timeout

le proxy ou la passerelle n'a pas reçu de réponse en temps et en heure

505

HTTP Version Not Supported

le serveur ne supporte pas la version HTTP demandée. Le serveur devrait répondre pourquoi cette version n'est pas supportée, et quelles versions le sont.

 

 

Index Retour au sommaire