Comment les cookies sont-ils transmis dans le protocole HTTP ?
Est-il vrai que le cookie ne fonctionne qu'avec les verbes GET/POST, mais pas avec CONNECT ?
Comment les cookies sont-ils transmis dans le protocole HTTP ?
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.
Est-il vrai que le cookie ne fonctionne qu'avec les verbes GET/POST, mais pas avec CONNECT ?
@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.
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; ...
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 .
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 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.
16 votes
La meilleure vue d'ensemble que j'ai lue est celle de Zakas : nczonline.net/blog/2009/05/05/http-cookies-explained