2. DNS, SMTP, HTTP & Co M2 SIME Réseaux 2015/2016
modèle en couches Le modèle en couches OSI TCP/IP Application Présentation Application Session Transport Réseau Liaison Physique Transport Internet Interface réseau
1. Couche application
Couche application Application Layer The Application layer Application Transport Network Datalink Physical layer SDU Network Datalink Physical layer Application Transport Network Datalink Physical layer Goals Exchange useful information between applications by relying on the transport layer that hides the complexity of the network Unit of information Protocoles applicatifs, aussi nombreux que variés. Service Data Unit, SDU SMTP, HTTP, FTP, XMPP,... CNP3/2010.1. O. Bonaventure 2010
Couche application Dernière couche des modèles OSI et TCP/IP Échange de messages entre processus, généralement utilisée en bordure de réseau. Un protocole de niveau application doit spécifier : le type et le contenu des messages échangés ; les règles déterminant quand ces messages doivent être envoyés/reçus. Agent utilisateur (user agent) : interface entre l'utilisateur et le protocole (ex : navigateur web)
Modèle client/serveur En général un protocole applicatif utilisera le modèle client/serveur : Le client initie la connexion, demande un service Le serveur attend des connexions, fournit un service Exemples : HTTP : navigateur/serveur Web SMTP : MTA qui envoie/mta qui reçoit Plus rarement, chaque participant est alternativement client et serveur (ex : FTP)
Définir un protocole Comment structurer les données? lignes de texte / éléments XML / codage binaire Quelles interactions entre les participants? Comment traiter les erreurs?
Structuration des données avec UDP Service non connecté : organisation des données en datagrammes. Protocole non fiable. L'application doit continuer à fonctionner si certains datagrammes sont perdus. (ex. en vidéo, I-frames et P-frames)
Structuration des données à TCP Service connecté : transmission d'un flux de données. Nécessite une analyse syntaxique/sémantique. Le protocole doit être structuré : HTTP : lignes de texte, une entête par ligne, puis un saut de ligne pour marquer la fin. XMPP (Jabber) : flux XML, lire jusqu'à la balise fermante correspondant. Protocoles binaires, par exemple faire débuter un champ par sa longueur pour le délimiter.
Interactions Limiter le nombre de messages : Le temps d'aller-retour est souvent le facteur limitant. Un mécanisme pour signaler le type de réponse : Code d'erreur (ex : HTTP) Balise spéciale (ex : XMPP)
Sockets Une des extrémités d'une communication sur l'internet. Une socket est donnée par : l'adresse de transport locale (IP + port) ; l'adresse de transport du destinataire ; le protocole de transport (UDP, TCP,...) Une socket connectée est déterminée par le quadruplet : (adresse réseau source, port source, adresse réseau destination, port destination)
Types de sockets Plusieurs types possibles. Les plus fréquents : Socket stream (connectée, par ex. TCP) ; Socket datagram (non connectée, par ex. UDP) ; Socket raw : accès à la couche réseau.
API sockets Plusieurs API : BSD sockets (Standard sous Linux, BSD, OSX) Windows Sockets TLI (Transport Layer Interface)/XTI (Standard sous Solaris, Mac OS,...) Normalisé dans POSIX. En Java : java.net.socket
BSD sockets côté serveur s=socket(pf_inet,sock_stream,0); bind(s,addr,addrlen); listen(s,w); c=accept(s,&caddr,&caddrlen); k=read(c,buf,buflen); write(c,buf,n); close(c); côté client s=socket(pf_inet,sock_stream,0); connect(s,addr,addrlen); k=read(s,buf,buflen); write(s,buf,n); close(s); close(s);
Multiplexage Un serveur peut recevoir plusieurs connexions en même temps. Chaque connexion est accessible à travers une socket distincte. Multiplexage dans un programme séquentiel avec select......dans un programme parallèle à l'aide de threads.
2. DNS
Domain Name System Donner des noms (alphanumériques) plutôt que des adresses (IP) aux machines Un fichier à plat partagé (/etc/hosts) a ses limites Organiser les noms hiérarchiquement sous forme d'un espace de noms arborescent : chaque noeud a un nom (ex : univ-orleans.fr.) les feuilles de l'arbre correspondent à des hôtes un domaine est un sous-arbre (quelconque) Associer des enregistrements aux domaines
Zones DNS L'arbre DNS est partitionné en zones : une zone est un ensemble de noeuds chaque zone possède un serveur officiel (authoritative server) faisant autorité pour la zone le serveur officiel gère tous les noms de la zone Contraintes : tout noeud appartient à une zone aucun noeud n'appartient à plus d'une zone
Résolution DNS Comment retrouver l'information dans l'arbre DNS qui est distribué sur les serveurs de chaque zone? Le protocole DNS permet d'interroger les serveurs. Protocole d'interrogation de type question/réponse UDP (ou TCP pour les longs échanges) sur le port 53 Question type : quelle est l'adresse de www.perdu.com?
Résolution DNS Du point de vue du serveur, 3 cas se présentent : (1) si j'ai la réponse (par exemple parce que je suis le serveur officiel de la zone qui contient ce nom), je renvoie la réponse (2) sinon s'il s'agit d'une adresse dans un de mes sous-domaines, la question est à poser au serveur officiel du sous-domaine. (3) sinon, la question est à poser à la racine DNS.
Racine et TLD Le serveur racine de l'arbre DNS connaît les serveurs officiels de chaque domaine de premier niveau (TLD) L'adresse officielle du serveur racine de l'internet doit être configurée dans chaque serveur DNS : cf http://www.iana.org/about/popular-links. 3600000 NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 (...)
Redondance, résolveurs et cache En plus des serveurs officiels (primaires) de zone : serveurs DNS secondaires (redondance) ; résolveurs DNS des différents FAI + cache. Le protocole utilisé reste le même dans tous les cas : le protocole DNS sur le port 53. La manière de répondre aux requêtes diffère
Interrogation Une requête DNS peut être de deux types : itérative : lorsque le serveur n'a pas la réponse à la question, il se contente d'envoyer l'adresse du serveur à contacter pour poursuivre la requête. récursive : lorsque le serveur n'a pas la réponse à la question, il interroge lui-même le prochain serveur à contacter, itérant jusqu'à la réponse. En pratique les serveurs officiels de zones refusent traitent toutes les requêtes itérativement et les résolveurs des FAI récursivement.
Exemple du lab Alice dnsblue.blue.net dnsroot. dnsnet.net dnscold.cold.net smtp.cold.net A? smtp.cold.net A? NS dnsnet.net smtp.cold.net A? NS dnscold.cold.net smtp.cold.net A? A 2.3.4.5 A 2.3.4.5
Délégation Les champs de type NS qui désigne le prochain serveur à contacter contiennent des noms DNS......il y a un risque de cercle vicieux Une zone doit connaître non seulement les noms des hôtes auxquels elle délègue des sous-domaines, mais aussi les adresses IP de ces hôtes. L'adresse IP est jointe en annexe à la réponse. com. 60000 IN NS dnscom.com. dnscom.com. 60000 IN A 42.13.37.42
Enregistrements DNS Un enregistrement DNS est de la forme suivante : ac. 172800 IN NS b.ns13.net. nom de domaine ; TTL (Time to Live) : durée de validité ; Classe d'enregistrement (IN = internet) ; Type d'enregistrement ; Contenu. Il existe différents types d'enregistrement : on peut faire plus que convertir des noms en adresses
Types DNS A adresse IPv4 AAAA adresse IPv6 NS Name Server (utilisé pour la délégation) CNAME Canonical Name SOA Start of Authority TXT MX Mail exchanger = priorité + nom de serveur
$TTL 60000 @ IN SOA dnsnet.net. root.dnsnet.net. ( 1 ; serial 28 ; refresh 14 ; retry 3600000 ; expire 60000 ; negative cache ttl ) @ IN NS dnsnet.net. dnsnet IN A 54.16.64.54 blue IN NS dnsblue.blue.net. dnsblue.blue IN A 1.2.3.4 red IN NS dnsred.red.net. dnsred.red IN A 2.3.4.5 cold IN NS dnscold.cold.net. dnscold.cold IN A 213.186.33.5
% dig -t ANY univ-orleans.fr ; <<>> DiG 9.6-ESV-R4-P3 <<>> -t ANY univ-orleans.fr ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27828 ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 2 ;; QUESTION SECTION: ;univ-orleans.fr. IN ANY ;; ANSWER SECTION: univ-orleans.fr. 86400 IN SOA dns.univ-orleans.fr. gestion-dns.univorleans.fr. 2011090817 21600 3600 604800 86400 univ-orleans.fr. 86400 IN MX 1 smtpin.univ-orleans.fr. univ-orleans.fr. 86400 IN NS arcturus.ciril.fr. univ-orleans.fr. 86400 IN NS dns.univ-orleans.fr. univ-orleans.fr. 86400 IN TXT "v=spf1 mx ip4:194.167.30.0/24 ~all" ;; ADDITIONAL SECTION: smtpin.univ-orleans.fr. 86400 IN A 194.167.30.151 dns.univ-orleans.fr. 86400 IN A 194.167.30.130 ;; Query time: 38 msec ;; SERVER: 192.168.0.254#53(192.168.0.254) ;; WHEN: Tue Oct 18 10:44:08 2011 ;; MSG SIZE rcvd: 230
% dig -t ANY www.univ-orleans.fr ; <<>> DiG 9.6-ESV-R4-P3 <<>> -t ANY www.univ-orleans.fr ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10087 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.univ-orleans.fr. IN ANY ;; ANSWER SECTION: www.univ-orleans.fr. 86400 IN A 194.167.30.107 www.univ-orleans.fr. 86400 IN MX 0 smtpin.univ-orleans.fr. ;; AUTHORITY SECTION: univ-orleans.fr. 86400 IN NS arcturus.ciril.fr. univ-orleans.fr. 86400 IN NS dns.univ-orleans.fr. ;; ADDITIONAL SECTION: smtpin.univ-orleans.fr. 86400 IN A 194.167.30.151 dns.univ-orleans.fr. 86400 IN A 194.167.30.130 ;; Query time: 47 msec ;; SERVER: 192.168.0.254#53(192.168.0.254) ;; WHEN: Tue Oct 18 10:48:28 2011 ;; MSG SIZE rcvd: 155
% dig -x 194.167.30.107 ; <<>> DiG 9.6-ESV-R4-P3 <<>> -x 194.167.30.107 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2986 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0 ;; QUESTION SECTION: ;107.30.167.194.in-addr.arpa. IN PTR ;; ANSWER SECTION: 107.30.167.194.in-addr.arpa. 10800 IN PTR kelset.univ-orleans.fr. ;; AUTHORITY SECTION: 30.167.194.in-addr.arpa. 10800 IN NS dns.univ-orleans.fr. 30.167.194.in-addr.arpa. 10800 IN NS arcturus.ciril.fr. ;; Query time: 37 msec ;; SERVER: 192.168.0.254#53(192.168.0.254) ;; WHEN: Tue Oct 18 10:50:27 2011 ;; MSG SIZE rcvd: 128
3. SMTP
Messagerie électronique Plusieurs fonctionnalités, par plusieurs applications : MUA (Mail User Agent) : votre client de messagerie (mutt, Thunderbird, gmail,...) MSA (Mail Submission Agent) : serveur courrier sortant (protocole SMTP port 587... ou 25) MTA (Mail Transfer Agent) : transfère les messages d'un serveur à un autre (SMTP) MDA (Mail Delivery Agent) : dépose les messages dans la boîte du destinataire (SMTP) On néglige ici les protocoles POP3 et IMAP
Courriel Un email est constitué d'entêtes suivies d'une ligne vide suivie du corps du message. Trois entêtes obligatoires : From: Bob Dylan <bob@cold.net> To: Alice Russell <alice@jmail.com> Date: Wed, 23 Sep 2015 11:20:10 +0200 Entêtes courantes : Subject: Notre concert du mois de mai Cc: management@universalmusic.com MIME-Version: 1.0 Content-Type: text/plain
Simple Mail Transfer Protocol RFC 821 Protocole textuel, simple à comprendre Encapsulé dans TCP, usuellement port 25 Si alice@jmail.com écrit à bob@cold.net : le MUA d'alice utilise le protocole SMTP pour transmettre le message au serveur de courrier sortant du domaine jmail.com celui-ci résout l'enregistrement DNS de type MX pour le domaine cold.net pour identifier le serveur de courier entrant pour ce domaine. En l'absence de MX il utilisera le champ de type A. le serveur de courrier entrant se charge de stocker le message dans la boîte du destinataire.
220 dio.univ-orleans.fr ESMTP Postfix (Debian/GNU) HELO delu 250 dio.univ-orleans.fr MAIL FROM: nicolas.ollinger@univ-orleans.fr 250 2.1.0 Ok RCPT TO: nicolas.ollinger@univ-provence.fr 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> From: Nicolas Ollinger <nicolas.ollinger@univ-orleans.fr> To: Nicolas Ollinger <nicolas.ollinger@univ-provence.fr> Date: Tue, 18 Oct 2011 08:32:00 +0200 Subject: demo cours L3 Cher destinataire, Voici un message tres interessant. Bien a toi, N. --. 250 2.0.0 Ok: queued as CF855777 QUIT 221 2.0.0 Bye
Return-Path: <nicolas.ollinger@univ-orleans.fr> Delivered-To: Nicolas.Ollinger@lif.univ-mrs.fr Received: from localhost (localhost.localdomain [127.0.0.1]) by platine.lidil.univ-mrs.fr (Postfix) with ESMTP id 5B0742BC007D for <Nicolas.Ollinger@lif.univ-mrs.fr>; Tue, 18 Oct 2011 08:28:58 +0200 (CEST) X-Virus-Scanned: amavisd-new at lidil.univ-mrs.fr X-Spam-Flag: NO X-Spam-Score: 0.654 X-Spam-Level: X-Spam-Status: No, score=0.654 required=6.31 tests=[spf_softfail=0.654] autolearn=disabled Received: from platine.lidil.univ-mrs.fr ([127.0.0.1]) by localhost (platine.lidil.univ-mrs.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JyqZVSyA38j7 for <Nicolas.Ollinger@lif.univ-mrs.fr>; Tue, 18 Oct 2011 08:28:58 +0200 (CEST) Received: from mso1k193.u-3mrs.fr (mso1k193.u-3mrs.fr [195.221.207.193]) by platine.lidil.univ-mrs.fr (Postfix) with ESMTP id 35D7F2BC007C for <Nicolas.Ollinger@lif.univ-mrs.fr>; Tue, 18 Oct 2011 08:28:58 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AhEGAFkcnU7AqDMV/2dsb2JhbABDmXYBjmSBBYF4gR51IYgUtl0ShxVhBJkTMowP X-IronPort-AV: E=Sophos;i="4.69,363,1315173600"; d="scan'208";a="131513789" Received: from unknown (HELO localhost.localdomain) ([192.168.51.21]) by ironport.u-3mrs.fr with ESMTP; 18 Oct 2011 08:28:58 +0200 Received: from shiva.univ-provence.fr ([147.94.113.17]) by smtp.unr-paca.fr for <nicolas.ollinger@univ-provence.fr>;tue, 18 Oct 2011 08:28:56 +0200 (CEST) Received: from mso1k193.u-3mrs.fr (mso1k193.u-3mrs.fr [195.221.207.193]) by shiva.univ-provence.fr (Postfix) with ESMTP id 771CC8070 for <nicolas.ollinger@univ-provence.fr>; Tue, 18 Oct 2011 08:28:56 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: At0CAFkcnU7Cpx4vgWdsb2JhbABDmXYBjmQiAQEWJiWECyGIFJY6oCMShxVhBKVU X-IronPort-AV: E=Sophos;i="4.69,363,1315173600"; d="scan'208";a="131513785"
Received: from dio.univ-orleans.fr ([194.167.30.47]) by mso1k206.u-3mrs.fr with ESMTP; 18 Oct 2011 08:28:56 +0200 Received: from localhost (localhost [127.0.0.1]) by dio.univ-orleans.fr (Postfix) with ESMTP id B28A4795 for <nicolas.ollinger@univ-provence.fr>; Tue, 18 Oct 2011 08:28:57 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at dio.univ-orleans.fr Received: from dio.univ-orleans.fr ([127.0.0.1]) by localhost (dio.univ-orleans.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id H-+Q59LFrT-0 for <nicolas.ollinger@univ-provence.fr>; Tue, 18 Oct 2011 08:28:53 +0200 (CEST) Received: from delu (repartiteur.univ-orleans.fr [194.167.30.199]) by dio.univ-orleans.fr (Postfix) with SMTP id CF855777 for <nicolas.ollinger@univ-provence.fr>; Tue, 18 Oct 2011 08:27:08 +0200 (CEST) From: Nicolas Ollinger <nicolas.ollinger@univ-orleans.fr> To: Nicolas Ollinger <nicolas.ollinger@univ-provence.fr> Date: Tue, 18 Oct 2011 08:32:00 +0200 Subject: demo cours L3 Message-Id: <20111018062857.B28A4795@dio.univ-orleans.fr> X-Loop: smtp.unr-paca.fr MIME-Version: 1.0 Cher destinataire, Voici un message tres interessant. Bien a toi, N. --
% dig -t MX univ-provence.fr ; <<>> DiG 9.6-ESV-R4-P3 <<>> -t MX univ-provence.fr ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42323 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 4 ;; QUESTION SECTION: ;univ-provence.fr. IN MX ;; ANSWER SECTION: univ-provence.fr. 86400 IN MX 10 mx.univ-provence.fr. univ-provence.fr. 86400 IN MX 20 mx2.univ-provence.fr. ;; AUTHORITY SECTION: univ-provence.fr. 86400 IN NS dns.univ-provence.fr. univ-provence.fr. 86400 IN NS lsh.up.univ-aix.fr. univ-provence.fr. 86400 IN NS servun.phocean.fr. ;; ADDITIONAL SECTION: mx.univ-provence.fr. 86400 IN A 195.221.207.206 mx2.univ-provence.fr. 86400 IN A 134.59.1.131 dns.univ-provence.fr. 86400 IN A 147.94.113.8 dns.univ-provence.fr. 86400 IN AAAA 2001:660:5403::113:8 ;; Query time: 44 msec ;; SERVER: 192.168.0.254#53(192.168.0.254) ;; WHEN: Tue Oct 18 09:17:49 2011 ;; MSG SIZE rcvd: 226
Le protocole SMTP RFC 5321 Protocole textuel, lignes de texte ASCII terminées par CR+LF (en pratique juste LF passe aussi). Commandes client sur 4 lettres majuscules : helo mail rcpt data quit = "HELO" SP Domain CRLF = "MAIL FROM:" Path CRLF = "RCPT TO:" Path CRLF = "DATA" CRLF = "QUIT" CRLF Domain = sub-domain *("." sub-domain) sub-domain = Let-dig [Ldh-str] Let-dig = ALPHA / DIGIT Ldh-str = *( ALPHA / DIGIT / "-" ) Let-dig Path = "<" Mailbox ">" Mailbox = Local-part "@" Domain Local-part = Dot-string Dot-string = Atom *("." Atom) Atom = 1*atext
Réponses du serveur Réponses préfixées par un code numérique sur trois chiffres représenté en ASCII. Greeting Reply-line Reply-code textstring = "220 " Domain [ SP textstring ] CRLF = *( Reply-code "-" [ textstring ] CRLF) Reply-code [ SP textstring ] CRLF = %x32-35 %x30-35 %x30-39 = 1*atext Le premier chiffre du code réponse indique si la commande a été exécutée avec succès : 2xy commande acceptée 3xy commande acceptée, en attente de la suite 4xy commande refusée à cause d un problème temporaire 5xy commande refusée définitivement
500 Syntax error, command unrecognized 501 Syntax error in parameters or arguments 502 Command not implemented 503 Bad sequence of commands 220 <domain> Service ready 221 <domain> Service closing transmission channel 421 <domain> Service not available, closing transmission channel 250 Requested mail action okay, completed 450 Requested mail action not taken: mailbox unavailable 452 Requested action not taken: insufficient system storage 550 Requested action not taken: mailbox unavailable 354 Start mail input; end with <CRLF>.<CRLF>
Session SMTP typique
4. HTTP
World Wide Web Permet, à l'aide d'un navigateur web, de consulter des documents hypertexte répartis sur le réseau. Mis en œuvre à travers : URL un schéma d'adressage des documents ; HTML un format de documents hypertexte ; HTTP un protocole d'échange de documents.
Uniform Ressource Locator http://www.perdu.com/ http://celene.univ-orleans.fr/course/view.php?id=1980 http://cnp3book.info.ucl.ac.be/1st/html/application/http.html file:///etc/passwd ftp://ftp.lip6.fr/pub/rfc/rfc/rfc1149.txt.gz
URI = scheme ":" "//" authority path [ "?" query ] [ "#" fragment ] scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) authority = [ userinfo "@" ] host [ ":" port ] query = *( pchar / "/" / "?" ) fragment = *( pchar / "/" / "?" ) pchar = unreserved / pct-encoded / sub-delims / ":" / "@" query = *( pchar / "/" / "?" ) fragment = *( pchar / "/" / "?" ) pct-encoded = "%" HEXDIG HEXDIG unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" reserved = gen-delims / sub-delims gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" sub-delims = "" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
HyperText Markup Language <html> <head> <title>vous Etes Perdu?</title> </head> <body> <h1>perdu sur l'internet?</h1> <h2>pas de panique, on va vous aider</h2> <strong><pre> pre></strong> </body> </html> * <----- vous êtes ici</
HyperText Transfer Protocol Protocole utilisé pour accéder aux pages Web Encapsulé dans TCP, port officiel 80 Protocole textuel, simple à comprendre Entêtes dans les questions et les réponses Données associées à la question et/ou la réponse Utilisation de codes d'erreur numériques Différentes versions du protocole normalisées : HTTP/1.0 en 1996, HTTP/1.1 en 1997, HTTP/2 en mai 2015
GET /lifo/members/nicolas.ollinger/ HTTP/1.1 Host: www.univ-orleans.fr HTTP/1.1 200 OK Date: Mon, 17 Oct 2011 20:41:26 GMT Server: Apache Last-Modified: Fri, 30 Sep 2011 12:54:21 GMT ETag: "30c001-13b1-4ae281fb93940" Accept-Ranges: bytes Content-Length: 5041 Vary: Accept-Encoding Content-Type: text/html Via: 1.1 www.univ-orleans.fr Content-Language: fr <DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">... </html>
% curl -v http://www.perdu.com * About to connect() to www.perdu.com port 80 (#0) * Trying 173.236.190.252... connected * Connected to www.perdu.com (173.236.190.252) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.21.6 (x86_64-apple-darwin10.7.0) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.5 libidn/1.22 > Host: www.perdu.com > Accept: */* > < HTTP/1.1 200 OK < Date: Tue, 18 Oct 2011 09:06:44 GMT < Server: Apache < Last-Modified: Tue, 02 Mar 2010 18:52:21 GMT < ETag: "6496016-cc-480d5dd98a340" < Accept-Ranges: bytes < Content-Length: 204 < Vary: Accept-Encoding < Content-Type: text/html < <html><head><title>vous Etes Perdu?</title></head><body><h1>Perdu sur l'internet?</h1><h2>pas de panique, on va vous aider</h2><strong><pre> * <----- vous êtes ici</pre></strong></body></html> * Connection #0 to host www.perdu.com left intact * Closing connection #0
Requête HTTP/1.0 Une connexion TCP pour chaque requête et sa réponse. Protocole inspiré du protocole SMTP Une requête HTTP comprend : une méthode (GET, HEAD, PUT, POST, ) qui indique le type de requête, une URL, ainsi que la version du protocole utilisée ; des entêtes de la forme clé: valeur, terminées par une ligne vide ; éventuellement un document MIME associé à la requête.
Réponse HTTP/1.0 Une réponse HTTP comprend : une ligne de status (200, 404, 500, ) qui indique si la requête a été traitée avec succès ; des entêtes de la forme clé: valeur, terminées par une ligne vide ; éventuellement un document MIME associé à la requête.
Méthodes usuelles GET utilisée pour récupérer un document stocké sur le serveur à partir de son URI. HEAD permet de récupérer les entêtes d une réponse à une requête GET sans le document. POST permet au client d envoyer un document au serveur, par exemple des données de formulaire.
Entêtes Client/Serveur Content-Length: indique la longueur en octets du document associé à la requête/réponse. Content-Type: indique le type MIME du document associé à la requête/réponse. Content-Encoding: indique un éventuel recodage (compression, etc) du document associé à la requête/réponse.
Entêtes Client User-Agent: permet d identifier le navigateur. If-Modified-Since: demande un document uniquement s il a été mis à jour depuis une date. Referrer: indique l URI du document contenant un lien suivi pour accéder au document demandé. Host: indique le nom DNS du serveur sur lequel on fait la requête correspondant à l URI.
Entêtes Serveur Server: indique la version du serveur Web. Date: indique la date à laquelle la réponse a été émise par le serveur. Last-Modified: indique la date et heure de dernière modification du document.
Codes status HTTP 2xy indique une réponse valide (200 Ok). 3xy indique que le document n est plus disponible (301 Moved Permanently, l entête Location: indique la nouvelle adresse de la page). 4xy indique une erreur dans la requête soumise au serveur (404 Not Found, 400 Bad Request). 5xy indique une erreur sur le serveur (500 Internal Serveur Error).
Le protocole HTTP/1.1 Ajoute la persistance de connexion. GET / HTTP/1.1 Host: www.perdu.com Connection: Keep-Alive HTTP/1.1 200 OK Content-Length: 204 Keep-Alive: timeout=2, max=100 Connection: Keep-Alive Content-Type: text/html
Le protocole HTTP/2 Daniel Stenberg, May 6 th 2015