300 votes

Comment les cookies sont-ils transmis dans le protocole HTTP ?

Comment les cookies sont-ils transmis dans le protocole HTTP ?

16 votes

La meilleure vue d'ensemble que j'ai lue est celle de Zakas : nczonline.net/blog/2009/05/05/http-cookies-explained

345voto

deinst Points 8706

Le serveur envoie ce qui suit dans son en-tête de réponse pour définir un champ de cookie.

Set-Cookie: nom = valeur

Si un cookie est installé, le navigateur envoie ce qui suit dans son en-tête de demande.

Cookie: nom = valeur

Voir le Cookie HTTP sur Wikipedia pour plus d'informations.

0 votes

Est-il vrai que le cookie ne fonctionne qu'avec les verbes GET/POST, mais pas avec CONNECT ?

5 votes

@PerlDev Il n'y a rien que je puisse voir dans rfc2109 qui dit que cela ne devrait pas fonctionner avec des requêtes autres que GET/POST, mais je soupçonne que les implémentations du navigateur et du serveur peuvent ne pas l'implémenter dans ces cas.

9 votes

Notez que selon RFC 2109 si un agent utilisateur ou un navigateur envoie plusieurs cookies, il les place dans un seul champ délimité par des points-virgules : Cookie: name1=value1; name2=value2; ...

43voto

Douglas Leeder Points 29986

Les cookies sont transmis sous forme d'en-têtes HTTP, à la fois dans la demande (client -> serveur) et dans la réponse (serveur -> client).

3 votes

Donc dans toute demande qui est faite, tous les cookies sont ipso facto envoyés ?

37voto

En dehors de ce qui est écrit dans les autres réponses, d'autres détails liés au chemin du cookie, à l'âge maximum du cookie, au fait qu'il soit sécurisé ou non, sont également transmis dans l'en-tête de réponse Set-Cookie. Par exemple :

Set-Cookie: nom = valeur [ ; expires= date ][ ; domain= domaine ][ ; path= chemin ][ ; secure ]


Cependant, tous ces détails ne sont pas transmis au serveur par le client lors de la prochaine requête HTTP.

Vous pouvez également définir HttpOnly à la fin de votre cookie, pour indiquer que votre cookie est httponly et ne doit pas être autorisé à être consulté, dans scripts par le code javascript. Cela permet de prévenir les attaques telles que le détournement de session.

Pour plus d'informations, voir RFC 2109 . Jetez également un coup d'œil à l'article de Nicholas C. Zakas, Les cookies HTTP expliqués .

13voto

FariZ Points 159

Créer l'exemple script comme resp :

#!/bin/bash

http_code=200
mime=text/html

echo -e "HTTP/1.1 $http_code OK\r"
echo "Content-type: $mime"
echo "Set-Cookie: name=F"
echo

puis rendez-le exécutable et exécutez-le comme ceci.

./resp | nc -l 12346

ouvrir le navigateur et parcourir l'URL : http://localhost:12346 vous verrez la valeur du cookie envoyé par le navigateur.

    \[aaa@bbbbbbbb \]$ ./resp | nc -l -p 12346
    GET / HTTP/1.1
    Host: xxx.xxx.xxx.xxx:12346
    Connection: keep-alive
    Cache-Control: max-age=0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,\*/\*;q=0.8
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US,en;q=0.8,ru;q=0.6
    **Cookie: name=F**

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X