Fork me on GitHub

HTTP HyperText Transfer Protocol

Comprendre HTTP

HTTP (Hypertext Transfer Protocol) est un protocole textuel, sans état, à requête-réponse destiné à servir des documents web.

CLIENT SERVER GET /index.html HTTP/1.1 HTTP/1.1 200 OK ... index.html

Requête : Le client (browser) demande à lire ou modifier un document (hypertexte, image, …)

Réponse : Le server envoie une réponse (pas nécessairement le document).

Textuel : Toutes les communications sont codées en ASCII.

Sans état : Le server ne se souvient pas du client entre deux requêtes.

Le protocole HTTP

Servi habituellement sur le port 80. Exemple de dialogue HTTP.

REQUÊTE

GET / HTTP/1.1
Host: www.google.fr

RÉPONSE

HTTP/1.1 200 OK
Date: Tue, 24 Jan 2012 17:09:10 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=4479751101deda66:FF=0:TM=1327424950:LM=1327424950:S=CDCjreHNXoofkoQk; expires=Thu, 23-Jan-2014 17:09:10 GMT; path=/; domain=.google.fr
Set-Cookie: NID=56=jkWXBR2FaxtIwRcpdJ-3nAJqgoJ2hDIqdo0Q7-ttgoCSX_5go3FrbRWBWg0em3oKnE88UcPz-4sjCwQNxb7iPcs7vu-kXQ3zKnSlXH97v-TAQgOQfNx2QqCM2XNPCUUl; expires=Wed, 25-Jul-2012 17:09:10 GMT; path=/; domain=.google.fr; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked

1000
<!doctype html>...

La requête HTTP

POST /document.html HTTP/1.1
Host: www.example.com User-Agent: Mosaic/2.1 Cookie: sessionid=aa03x; Content-Length: 10
1234567890
  • Action,
  • Entêtes (seulement Host est obligatoire),
  • Une ligne vide (attention: <CR><LF>),
  • Corps du message (Optionnel).

La ligne d’action

POST /document.html HTTP/1.1

Méthode

  • HEAD Demande seulement les entêtes.
  • GET Demande une page. Ne modifie pas l’état du server.
  • POST Envoie des données. Peut entraîner une modification de l’état du server.

D’autres méthodes occasionnellement utilisées: PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH.

Ressource

Adresse du document web.

Protocole

Deux possibilités: HTTP/1.0 ou HTTP/1.1. (HTTP/2.0 en cours?)

Entêtes des requêtes

Host: www.example.com
User-Agent: Mosaic/2.1
Cookie: sessionid=aa03x;
Content-Length: 10

Servent à envoyer des meta-données au server.

Obligatoires

  • Host Le nom de domaine du server à qui on envoie la requête.
  • Content-Length Obligatoire seulement pour POST et PUT. Donne la longueur en octets du contenu.

Fréquentes

  • Accept-* Type de contenu que le client accepte (type, encodage, langue)
  • Cookie Utilisé pour la persistance côté client.
  • Referer Adresse qui a donné origine à la requête.
  • User-Agent Nom du browser du client.
  • Content-Type MIME type du contenu (texte, HTML, etc.).

Les applications peuvent définir leur propres entêtes (en général avec un prefixe X-).

Réponse HTTP

HTTP/1.1 200 OK
Date: Tue, 24 Jan 2012 18:34:40 GMT Server: Apache/2.2.21 (Debian) Last-Modified: Fri, 10 Dec 2010 14:10:25 GMT Content-Length: 53 Content-Type: text/html Set-Cookie: sessionid=jkWXBR; expires=Wed, 25-Jul-2012 17:09:10 GMT; path=/; domain=.google.fr; HttpOnly
<html><head></head><body><h1>Hello world!</h1></html>
  • Status line,
  • Entêtes,
  • Une ligne vide (attention: <CR><LF>),
  • Contenu (Optionnel).

La status line

HTTP/1.1 200 OK

Protocole + code d’état + message

Les codes d’état décrivent le résultat de la requête. Les plus fréquents :

  • 200 OK Le document a été trouvé et envoyé au client.
  • 301 MOVED PERMANENTLY Rédirection permanente (nécessite Location).
  • 302 FOUND
  • 303 SEE OTHER
  • 307 TEMPORARY REDIRECT Différents types de redirection (nécessitent Location).
  • 400 BAD REQUEST Le client a envoyé une requête mal formatée.
  • 403 FORBIDDEN Le document n’est pas accessible.
  • 404 NOT FOUND Le document est inconnu au server.
  • 410 GONE Le document n’existe plus.
  • 418 I’M A TEAPOT Poison d’avril IETF 1998.
  • 500 INTERNAL SERVER ERROR Erreur sur le server.
  • 503 SERVICE UNAVAILABLE Le server est momentanément indisponible.

Entêtes de la réponse

Date: Tue, 24 Jan 2012 18:34:40 GMT
Server: Apache/2.2.21 (Debian)
Last-Modified: Fri, 10 Dec 2010 14:10:25 GMT
Content-Length: 53
Content-Type: text/html
Set-Cookie: sessionid=jkWXBR; expires=Wed, 25-Jul-2012 17:09:10 GMT; path=/; domain=.google.fr; HttpOnly

Plus fréquentes :

  • Date, Expires, Last-Modified Gestion des caches.
  • Content-Type MIME type du contenu de la réponse.
  • Content-Length Longueur en octets du contenu. Non obligatoire (peut être spécifié autrement).
  • Location Utilisé par les redirections.
  • Sever Nom du logiciel du server.
  • Set-Cookie Utilisé pour la persistance côté client.

Références