Définition

Définition HTTP

Hyper Text Transfer Protocol (HTTP)

L’Hyper Text Transport Protocol est un protocole client-serveur de réponse aux requêtes basé sur le texte. Un client HTTP (par exemple un navigateur web tel que Mozilla) effectue une requête HTTP à un serveur HTTP (par exemple le serveur HTTP Apache), qui en retour émet une réponse HTTP. L’en-tête du protocole HTTP est basé sur du texte, où les en-têtes sont écrits dans des lignes de texte.

Le protocole HTTP/1.1 permet d’établir des connexions client-serveur en pipeline, ce qui permet d’envoyer plusieurs requêtes (souvent dans le même paquet), sans attendre une réponse du serveur. La seule restriction est que le serveur DOIT renvoyer les réponses dans le même ordre qu’elles ont été reçues. Cela permet une plus grande efficacité, en particulier lors de la revalidation.

Une variante cryptée appelée HTTPS est également disponible. Elle est souvent utilisée lorsque la confidentialité des données est nécessaire, par exemple lors de l’utilisation de la banque en ligne. Le protocole HTTPS est en fait deux protocoles fonctionnant l’un sur l’autre. Le premier protocole est un protocole de sécurité comme SSL, TLS ou PCT. Le deuxième protocole, qui s’exécute en plus de ce protocole de sécurité, est le HTTP. Les URL commençant par https:// ne sont en fait qu’une notation abrégée pour l’utilisateur final. Le navigateur web lit le schéma URI (https://), lance le protocole de sécurité vers le serveur, et une fois cette connexion sécurisée établie, émet une requête HTTP par dessus avec l’URI spécifié dans la requête.

Historique

L’Hyper Text Transfer Protocol (HTTP) a été lancé au CERN à Genève (Suisse), où il est né (avec le langage de présentation HTML) de la nécessité d’échanger des informations scientifiques sur un réseau informatique de manière simple. La première mise en œuvre publique du HTTP ne permettait que l’échange d’informations en texte clair, et a presque instantanément remplacé le service GOPHER. L’un des premiers navigateurs en mode texte était LYNX, qui existe encore aujourd’hui ; un client HTTP graphique est apparu très rapidement sous le nom de NCSA Mosaic. Mosaic était un navigateur très populaire en 1994. Bientôt, le besoin d’une expérience multimédia plus riche est né, et le langage de balisage a permis de prendre en charge une multitude croissante de types de médias.

La prise en charge d’une multitude de types de médias faisait déjà partie de la norme informelle HTTP/1.0 publiée sous le nom de RFC1945 en 1996. Comme la communauté utilisant le protocole HTTP s’est développée à un rythme incroyablement rapide, et grâce à l’expérience d’utilisation acquise par la communauté et traitée par des experts, le besoin d’une définition plus formelle du protocole HTTP est apparu. C’est ainsi que HTTP/1.1 a été publié, d’abord sous le nom de RFC2068 en janvier 1997, bientôt remplacé par le RFC2616 publié en juin 1999.

Dépendances du protocole

MIME_multipart : HTTP utilise MIME_multipart pour encoder ses messages.

TCP : En général, HTTP utilise TCP comme protocole de transport. Le port TCP bien connu pour le trafic HTTP est le port 80. Un proxy HTTP utilise souvent un port différent ; les valeurs typiques sont 81, 3128, 8000 et 8080. Toutefois, HTTP peut également utiliser d’autres protocoles de transport.

Exemple de trafic

Demande par le navigateur d’un utilisateur final

Cet utilisateur veut accéder au site web « www.freebsd.org », il doit donc taper http://www.freebsd.org dans son navigateur et appuyer sur « Entrée ». Après la résolution DNS habituelle pour trouver l’adresse IP de www.freebsd.org, une connexion est établie via TCP avec le serveur web (SYN ; SYN,ACK ; ACK). Le navigateur/client envoie ensuite au serveur web la requête suivante en texte clair :

GET / HTTP/1.1
Hôte : www.freebsd.org
User-Agent : Mozilla/5.0 (Windows ; U ; Windows NT 5.1 ; en-US ; rv:1.7.7) Gecko/20050414 Firefox/1.0.3
Accepter : text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Langue acceptée : en-us,en;q=0,5
Accepté-Encodage : gzip,deflate
Acceptation – Charset : ISO-8859-1,utf-8;q=0.7,*;q=0.7
Garder en vie : 300
Connexion : rester en vie
Si Modifié-Depuis : Lun, 09 Mai 2005 21:01:30 GMT
If-None-Match : « 26f731-8287-427fcfaa »
Le serveur sait que le navigateur/client a terminé son trafic lorsqu’il reçoit une ligne blanche avec un retour de chariot + un saut de ligne (\r\n).

Réponse du serveur

La réponse est également en texte clair :

HTTP/1.1 200 OK
Date : Fri, 13 May 2005 05:51:12 GMT
Serveur : Apache/1.3.x LaHonda (Unix)
Modifié en dernier lieu : Fri, 13 May 2005 05:25:02 GMT
ETag : « 26f725-8286-42843a2e »
Plages d’acceptation : octets
Contenu-longueur : 33414
Keep-Alive : timeout=15, max=100
Connexion : Keep-Alive
Type de contenu : text/html
Le navigateur/client sait maintenant que le texte/html arrive, et le voici :

<!DOCTYPE html PUBLIC « -//W3C//DTD XHTML 1.0 Transitional//EN »
« http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd »>
<html>
<!– Le reste de la page HTML ici –>
</html>
Le navigateur/client sait que le serveur a fini d’envoyer son html (ou des données pour les autres formats) lorsqu’il reçoit une ligne blanche avec un retour chariot + un saut de ligne (\r\n).

Ecrire un commentaire