Depuis très longtemps, la connectivité réseau est utilisé pour permettre à un programme d'exécuter une tâche sur une autre machine.
En exposant l'interface logicielle, API, via le protocole HTTP, toutes sortes de clients peuvent en bénéficier.

Au fil du temps, plusieurs mécanismes ont été développé pour rendre plus efficace l'utilisation de HTTP dans différents contexte


GET
/products?query=keyboard&sort=asc
POST
application/x-www-form-urlencodedmultipart/form-datatext/plainapplication/octet-streamHTTP est un protocole au format texte, il est possible de le tester avec un client TCP. Le service Echo permet de tester plusieurs types de requêtes-réponses HTTP.
echo -ne \
'GET /ed-1/02_1-service-web/echo_http_server.sinatra HTTP/1.1\r\n'\
'Host: cegep.jhoffman.ca\r\n'\
'Connection: close\r\n'\
'\r\n'\
| openssl s_client -connect cegep.jhoffman.ca:443 -quiet 2>/dev/nullHTTP/1.1 200 OK
Date: Mon, 03 Aug 2026 15:04:34 GMT
Server: Apache/2.4.68 (Debian)
cache-control: max-age=0, private, must-revalidate
x-request-id: 5679ac38-dc65-4096-b144-fc4043291598
x-runtime: 0.002240
x-content-type-options: nosniff
X-Powered-By: Phusion Passenger(R) 6.0.22
etag: W/"a78c007efd008fd2747bb9b705fb8ec2"
Content-Length: 133
Status: 200 OK
Connection: close
Content-Type: application/json
{"method":"get","host":"cegep.jhoffman.ca","path":null,"query_params":[],"headers":{"host":"cegep.jhoffman.ca","version":"HTTP/1.1"}}echo -ne \
'GET /ed-1/02_1-service-web/echo_http_server.sinatra/a/b/c?search=lotr&sort=year HTTP/1.1\r\n'\
'Host: cegep.jhoffman.ca\r\n'\
'Connection: close\r\n'\
'\r\n'\
| openssl s_client -connect cegep.jhoffman.ca:443 -quiet 2>/dev/nullHTTP/1.1 200 OK
...
{
"method": "get",
"host": "cegep.jhoffman.ca",
"path": null,
"query_params": [
[
"search",
"lotr"
],
[
"sort",
"year"
]
],
"headers": {
"host": "cegep.jhoffman.ca",
"version": "HTTP/1.1"
}
}echo -ne \
'POST /ed-1/02_1-service-web/echo_http_server.sinatra/send-body HTTP/1.1\r\n'\
'Host: cegep.jhoffman.ca\r\n'\
'Connection: close\r\n'\
'User-Agent: telnet/demo\r\n'\
'Content-Type: text/plain\r\n'\
'Content-Length: 13\r\n'\
'\r\n'\
'allo le monde\r\n'\
'\r\n'\
| openssl s_client -connect cegep.jhoffman.ca:443 -quiet 2>/dev/nullHTTP/1.1 200 OK
Content-Length: 184
...
{
"method": "post",
"host": "cegep.jhoffman.ca",
"path": null,
"query_params": [],
"headers": {
"user-agent": "telnet/demo",
"host": "cegep.jhoffman.ca",
"version": "HTTP/1.1"
},
"body": "allo le monde"
}Pour élaborer des requêtes plus complexes, il existe des clients HTTP spécialisés
Ce type d'outil est très utile pour expérimenter et déboguer les requêtes-réponses lors du développement d'un service web.
Pour répondre aux besoins du cours, nous utiliserons l'outil personnalisé Peek
Pour nous permettre d'exprimer efficacement le format attendu pour les requêtes-réponses d'un service web, nous utiliserons la syntaxe suivante
VERBE PATH HTTP/1.1
Header1: Value1
Header2: Value2
Body...
=== Réponse
...
~~~ Réponse alternative
...
GET /
Accept: text/plain
===
...La blague...