Toutes les transactions HTTP suivent le même principe. Les requêtes d'un client et d'un serveur contiennent trois parties principales :
GET /index.html HTTP/1.0
effectue une requête avec la méthode GET sur le document index.html
avec la version 1.0 de HTTP.
User-Agent: Mozilla/2.02Gold (WinNT; I)
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
HTTP/1.0 200 OK
Le code de retour 200 indique que la requête a été acceptée et que la réponse se trouve après les en-têtes.
Date: Fri, 20 Sep 1996 08:17:58 GMT
Server: NCSA/1.5.2
Last-modified: Mon, 17 Jun 1996 21:53:08 GMT
Content-type: text/html
Content-length: 2482
Dans la version 1.0 de HTTP, le serveur déconnecte le client après la transaction à moins qu'il y ai un en-tête Connexion: Keep Alive dans la requête du client. Dans la version 1.1 de HTTP, le serveur maintient la connexion par défaut. Ceci évite de renvoyer des requêtes lorsqu'un document contient plusieurs types de document (images, applets, ...).
HTTP ne retient aucune information des précédentes requêtes, il faut donc renvoyer toutes les informations d'une requête à l'autre. L'intérêt est qu'ainsi le serveur peut gérer beaucoup de connexions différentes, ce qui serait vite impossible si les connexions étaient permanentes.
La méthode est la première information de la requête. Les trois principales sont GET, POST et HEAD. Le nom de méthode est sensible à la casse donc GET est différent de get.
La méthode GET est utilisée pour accéder à un document localisé par une URL. Le résultat peut être un fichier, la sortie d'un programme, ....
La méthode GET permet aussi de passer des paramètres à l'URL. Par exemple :
GET /cgi-bin/anniversaire.pl?mois=aout&date=24 HTTP/1.0
permet d'envoyer les paramètres mois et date avec les valeurs respectives aout et 24 au programme Perl cgi-bin/anniversaire.pl.
La méthode fonctionne comme GET sauf qu'elle demande au serveur de ne renvoyer que les en-têtes de la réponse et pas les données requises. L'utilité peut être de récupérer uniquement des informations sur le document et non le document ( date de dernière modification, taille, type, ...).
La méthode POST permet d'envoyer des données au serveur dans la requête. À la différence de la méthode GET, les données sont envoyées dans le corps (après les en-têtes) de la requête et non avec l'URL. Par exemple :
POST /cgi-bin/anniversaire.pl HTTP/1.0
...
mois=aout;date=24