Lorsqu'un serveur Web répond à une requête de ressource, il peut inclure un en-tête Set-Cookie dans sa réponse. Cet en-tête indique à votre navigateur de stocker un cookie.
Exemple : Set-Cookie:cat=tabby.
En plus de fournir un nom et une valeur de cookie, Set-Cookie peut inclure des attributs permettant de contrôler si les cookies sont définis et quand ils expirent. Les attributs de cookie sont séparés par des points-virgules. Exemple :
Set-Cookie:cat=tabby; Secure; HTTPOnly; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
Ce document explique les attributs de cookie les plus importants :
La section Utiliser des cookies HTTP explique les attributs de cookie de manière plus technique.
Secure
Si un en-tête Set-Cookie inclut Secure, le cookie ne sera inclus qu'avec les requêtes chiffrées qui utilisent le protocole HTTPS : il ne sera pas inclus dans les requêtes HTTP. Cela peut aider à arrêter les
attaques intermédiaires,
où un pirate intervient secrètement dans les communications entre le
navigateur et le serveur pour transmettre des informations et potentiellement les modifier.
HTTPOnly
Si un en-tête Set-Cookie inclut HTTPOnly, JavaScript ne peut pas accéder au cookie, par exemple en utilisant document.cookie. Cela permet de se protéger contre certains types d'attaques ciblant les cookies.
SameSite
Une requête de ressource provenant d'un site différent de celui que vous consultez est une requête intersite. Un cookie défini en réponse à une requête intersite est un cookie tiers.
L'attribut SameSite contrôle si un cookie tiers sera inclus dans une requête. Il comporte trois valeurs possibles : Strict, Lax ou None.
En savoir plus : Que sont les cookies tiers ?
Strict
Le cookie ne sera envoyé qu'en réponse aux requêtes d'une page qui se trouve sur le site d'origine du cookie. Par exemple, imaginez qu'un utilisateur consulte cats.example et qu'un cookie est défini avec l'attribut SameSite=Strict. Plus tard, l'utilisateur se trouve sur un autre site et suit un lien vers une page de cats.example. Le cookie défini ne sera pas inclus dans cette requête.
Lax
Cette option fonctionne de la même manière que Strict, sauf que le navigateur inclut également le cookie lorsque l'utilisateur suit un lien vers le site d'origine du cookie. (Dans l'exemple Strict précédent, le cookie serait inclus lorsque l'utilisateur suit le lien vers cats.example.) Lax est la valeur par défaut si aucun attribut SameSite n'est inclus dans un en-tête Set-Cookie.
None
Aucune contrainte : le cookie sera inclus dans une requête, qu'elle soit intersite ou non. Avec SameSite=None, le cookie doit également avoir l'attribut Secure.
Partitioned
Cet attribut vous permet d'activer un cookie pour le stockage partitionné, avec un "pot de cookies" distinct par site de premier niveau. Le cookie est collecté deux fois, par le site de premier niveau et par le domaine qui le définit.
Par exemple, imaginez que le site Web A et le site Web B incluent tous deux un iFrame du site Web C. Un cookie partitionné défini par l'iFrame sur le site Web A n'est pas accessible par l'iFrame sur le site Web B : le cookie AC est distinct du cookie BC.
Les cookies avec un attribut Partitioned sont appelés CHIPS (Cookies Having Independent Partitioned State).
Les cookies partitionnés doivent avoir l'attribut Secure.
En savoir plus : Cookies Having Independent Partitioned State.
Expires et Max-Age
Vous pouvez spécifier une date et une heure Expires, ou un Max-Age en secondes, après quoi un cookie doit être supprimé et ne plus être envoyé. Exemple :
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;Set-Cookie:cat=tabby; Max-Age=86400
Si vous ne spécifiez pas d'attribut Max-Age ou Expires, un cookie est supprimé à la fin de la session en cours. Ce type de cookie est parfois appelé cookie de session.
Domain
Si un en-tête Set-Cookie comporte un attribut Domain, le cookie sera inclus dans les requêtes envoyées au domaine spécifié et à l'un de ses sous-domaines.
Si un en-tête Set-Cookie ne comporte pas d'attribut Domain, le cookie ne sera pas inclus dans les requêtes envoyées aux sous-domaines.
En d'autres termes, l'inclusion de l'attribut Domain réduit les restrictions de domaine.
Par exemple, avec une réponse du site Web cats.example :
Set-Cookie:cat=tabby
Le cookie ne sera inclus que dans les requêtes envoyées àcats.exampleSet-Cookie:cat=tabby; Domain=cats.example
Le cookie sera inclus dans les requêtes envoyées àcats.example, ainsi que dans toutes les requêtes de ressources sur des sous-domaines tels quefluffy.cats.exampleouuser.assets.cats.example
Path
Si un attribut Path est inclus dans un en-tête de réponse Set-Cookie, le cookie défini ne sera inclus que dans les requêtes envoyées aux URL (sur le site qui a défini le cookie !) qui correspondent à la valeur Path.
Exemple :
Set-Cookie:cat=tabby; Path=/articles
Le cookie sera inclus pour une requête envoyée à n'importe quel chemin de l'URL commençant par/articles:
✅https://cats.example/articles/tabby/index.html
✅https://cats.example/articles/breeds/tabby/index.html
❎https://cats.example/images/tabby.jpg
❎https://cats.example/en/articles/tabby/index.htmlSet-Cookie:cat=tabby; Path=/
Toutes les requêtes envoyées à n'importe quelle URL du site incluront le cookie.
Si un en-tête de réponse Set-Cookie ne comporte pas de valeur Path, le cookie ne sera inclus que dans les requêtes envoyées au même répertoire. Par exemple, imaginez qu'
un cat=tabby cookie soit défini en réponse à une requête envoyée à
cats.example/images/tabby.jpg. Si aucun Path n'est défini, le cookie ne sera
inclus que dans les requêtes envoyées aux fichiers du répertoire cats.example/images.
Démonstrations
- 1pc.glitch.me : démonstration de cookie propriétaire
- 3pc.glitch.me : démonstration de cookie tiers
Outils
- Afficher, ajouter, modifier et supprimer des cookies dans les outils pour les développeurs Chrome
- Privacy Sandbox Analysis Tool
En savoir plus
- Recettes de cookies propriétaires
- Que sont les cookies ?
- Que sont les cookies tiers ?
- Requête et réponse HTTP
- Outils de cookies
- Démonstrations de cookies
- Utiliser des cookies HTTP
- Explication des cookies SameSite
- OWASP: Cookies