1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
|
---
title: Referrer-Policy
slug: Web/HTTP/Headers/Referrer-Policy
tags:
- HTTP
- HTTP Header
- Privacy
- Reference
- Referrer-Policy
- Response
- Response Header
- Réponse
- en-tête
- referrer
translation_of: Web/HTTP/Headers/Referrer-Policy
---
<div>{{HTTPSidebar}}</div>
<p><span class="seoSummary">L'en-tête {{glossary("HTTP header")}} <strong><code>Referrer-Policy</code></strong> contrôle la quantité d'<a href="/en-US/docs/Web/Security/Referer_header:_privacy_and_security_concerns">informations sur le référent (referrer)</a> (envoyées par l'en-tête {{HTTPHeader("Referer")}}) incluses dans la requête.</span></p>
<table class="properties">
<tbody>
<tr>
<th scope="row">Type d'en-tête</th>
<td>{{Glossary("Response header")}}</td>
</tr>
<tr>
<th scope="row">{{Glossary("Forbidden header name")}}</th>
<td>non</td>
</tr>
</tbody>
</table>
<h2 id="Syntaxe">Syntaxe</h2>
<div class="blockIndicator note">
<p>Le nom originel de l'en-tête, {{HTTPHeader("Referer")}}, est une faute de frappe du mot anglais "referrer". L'en-tête <code>Referrer-Policy</code> ne comporte pas cette erreur.</p>
</div>
<pre class="syntaxbox notranslate">Referrer-Policy: no-referrer
Referrer-Policy: no-referrer-when-downgrade
Referrer-Policy: origin
Referrer-Policy: origin-when-cross-origin
Referrer-Policy: same-origin
Referrer-Policy: strict-origin
Referrer-Policy: strict-origin-when-cross-origin
Referrer-Policy: unsafe-url
</pre>
<h2 id="Directives">Directives</h2>
<dl>
<dt><code>no-referrer</code></dt>
<dd>L'en-tête {{HTTPHeader("Referer")}} sera entièrement omis. Aucune information sur le référent ne sera envoyée avec les requêtes.</dd>
<dt><code>no-referrer-when-downgrade</code> (default)</dt>
<dd>C'est le comportement par défaut si aucune valeur n'est spécifiée ou quelle celle donnée est invalide. L'{{glossary("origin")}}, le {{glossary("path")}}, et la {{glossary("querystring")}} de l'URL sont envoyés comme référent quand le niveau de sécurité du protocole reste le même (HTTP vers HTTP, HTTPS vers HTTPS) ou s'améliore (HTTP vers HTTPS) mais ne sont pas envoyés quand si la destination est moins sécurisée (HTTPS vers HTTP).
<div class="note">Les navigateurs tentent d'adopter une valeur par défaut plus stricte, précisément <code>strict-origin-when-cross-origin</code> (voir <a href="https://github.com/whatwg/fetch/pull/952">https://github.com/whatwg/fetch/pull/952</a>), envisagez d'utiliser cette valeur (ou une autre encore plus stricte) si possible si vous définissez la valeur de Referrer-Policy.</div>
</dd>
<dt><code>origin</code></dt>
<dd>N'envoie que l'{{glossary("origin")}} du document comme référent.<br>
Par exemple, un document à l'adresse <code>https://example.com/page.html</code> enverra le référent <code>https://example.com/</code>.</dd>
<dt><code>origin-when-cross-origin</code></dt>
<dd>Envoie l'origine, le chemin et les paramètres de requête pour les requêtes {{glossary("Same-origin_policy", "same-origin")}} et seulement l'origine du document dans les autres cas.</dd>
<dt><code>same-origin</code></dt>
<dd>Un référent sera envoyé aux <a href="/en-US/docs/Web/Security/Same-origin_policy">page de même origine</a>, mais des requêtes vers des adresses externes n'enverront aucune information sur le référent.</dd>
<dt><code>strict-origin</code></dt>
<dd>N'envoie que l'origine du document comme référent quand le niveau de sécurité du protocole reste le même (HTTPS vers HTTPS) mais n'envoie rien si la destination est moins sécurisée (HTTPS vers HTTP).</dd>
<dt><code>strict-origin-when-cross-origin</code></dt>
<dd>Envoie l'origine, le chemin et les paramètres de requête pour les requêtes de même origine, n'envoie que l'origine quand le niveau de sécurité du protocole reste le même pour les requêtes vers des adresses externes (HTTPS vers HTTPS) et n'envoie rien si la destination est moins sécurisée (HTTPS vers HTTP).</dd>
<dt><code>unsafe-url</code></dt>
<dd>Envoie l'origine, le chemin et les paramètres de requête pour toutes les requêtes sans tenir compte du niveau de sécurité.
<div class="blockIndicator warning">
<p>Cette valeur divulgera des informations potentiellement confidentielles de la part des URL de ressources HTTPS vers des origines non sécurisées. Considérez les conséquences de ce paramétrage avant de vous en servir.</p>
</div>
</dd>
</dl>
<h2 id="Intégration_avec_HTML">Intégration avec HTML</h2>
<p>Vous pouvez aussi définir des règles de référent au sein d'HTML. Par exemple, vous pouvez définir la règle de référent pour le document entier avec un élément {{HTMLElement("meta")}} dont le <a href="/en-US/docs/Web/HTML/Element/meta#attr-name">name</a> est <code>referrer</code> :</p>
<pre class="brush: html notranslate"><meta name="referrer" content="origin"></pre>
<p>Ou le définit pour des requêtes spécifiques avec l'attribut <code>referrerpolicy</code> sur les éléments {{HTMLElement("a")}}, {{HTMLElement("area")}}, {{HTMLElement("img")}}, {{HTMLElement("iframe")}}, {{HTMLElement("script")}}, ou {{HTMLElement("link")}} :</p>
<pre class="brush: html notranslate"><a href="http://example.com" referrerpolicy="origin"></pre>
<p>Autrement, une <a href="/en-US/docs/Web/HTML/Link_types">relation de lien</a> définie à <code>noreferrer</code> sur un élément <code>a</code>, <code>area</code>, ou <code>link</code> peut être défini :</p>
<pre class="brush: html notranslate"><a href="http://example.com" rel="noreferrer"></pre>
<div class="blockIndicator warning">
<p>Comme vu précédemment, la relation de lien <code>noreferrer</code> s'écrit sans trait d'union. Toutefois, quand la règle de référent est spécifiée pour le document entier avec un élément {{HTMLElement("meta")}}, il faut mettre le trait d'union : <code><meta name="referrer" content="no-referrer"></code>.</p>
</div>
<h2 id="Intégration_avec_CSS">Intégration avec CSS</h2>
<p>CSS peut demander des ressources référencées dans des feuilles de styles. Ces ressources suivent une règle de référent aussi :</p>
<ul>
<li>Les feuilles de styles CSS externes utilisant la règle par défaut (<code>no-referrer-when-downgrade</code>), moins qu'elle soit remplacée un l'en-tête HTTP <code>Referrer-Policy</code> dans la réponse de la feuille de styles CSS.</li>
<li>Pour les éléments {{HTMLElement("style")}} ou <a href="/en-US/docs/Web/API/HTMLElement/style">attributs <code>style</code></a>, la règle de référent du propriétaire du document est utilisée.</li>
</ul>
<h2 id="Exemples">Exemples</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Règle</th>
<th scope="col">Document</th>
<th scope="col">Navigation vers</th>
<th scope="col">Référent</th>
</tr>
</thead>
<tbody>
<tr>
<th><code>no-referrer</code></th>
<td>https://example.com/page</td>
<td><em>n'importe où</em></td>
<td><em>(pas de référent)</em></td>
</tr>
<tr>
<th rowspan="3"><code>no-referrer-when-downgrade</code></th>
<td rowspan="3">https://example.com/page</td>
<td>https://example.com/otherpage</td>
<td>https://example.com/page</td>
</tr>
<tr>
<td>https://mozilla.org</td>
<td>https://example.com/page</td>
</tr>
<tr>
<td><strong>http</strong>://example.org</td>
<td><em>(pas de référent)</em></td>
</tr>
<tr>
<th><code>origin</code></th>
<td>https://example.com/page</td>
<td><em>n'importe où</em></td>
<td>https://example.com/</td>
</tr>
<tr>
<th rowspan="3"><code>origin-when-cross-origin</code></th>
<td rowspan="3">https://example.com/page</td>
<td>https://example.com/otherpage</td>
<td>https://example.com/page</td>
</tr>
<tr>
<td>https://mozilla.org</td>
<td>https://example.com/</td>
</tr>
<tr>
<td><strong>http</strong>://example.com/page</td>
<td>https://example.com/</td>
</tr>
<tr>
<th rowspan="2"><code>same-origin</code></th>
<td rowspan="2">https://example.com/page</td>
<td>https://example.com/otherpage</td>
<td>https://example.com/page</td>
</tr>
<tr>
<td>https://mozilla.org</td>
<td><em>(pas de référent)</em></td>
</tr>
<tr>
<th rowspan="3"><code>strict-origin</code></th>
<td rowspan="2">https://example.com/page</td>
<td>https://mozilla.org</td>
<td>https://example.com/</td>
</tr>
<tr>
<td><strong>http</strong>://example.org</td>
<td><em>(pas de référent)</em></td>
</tr>
<tr>
<td><strong>http</strong>://example.com/page</td>
<td><em>n'importe où</em></td>
<td>http://example.com/</td>
</tr>
<tr>
<th rowspan="3"><code>strict-origin-when-cross-origin</code></th>
<td rowspan="3">https://example.com/page</td>
<td>https://example.com/otherpage</td>
<td>https://example.com/page</td>
</tr>
<tr>
<td>https://mozilla.org</td>
<td>https://example.com/</td>
</tr>
<tr>
<td><strong>http</strong>://example.org</td>
<td><em>(pas de référent)</em></td>
</tr>
<tr>
<th><code>unsafe-url</code></th>
<td>https://example.com/page?q=123</td>
<td><em>n'importe où</em></td>
<td>https://example.com/page?q=123</td>
</tr>
</tbody>
</table>
<h3 id="Spécifier_une_règle_par_défaut">Spécifier une règle par défaut</h3>
<p>Si vous voulez spécifier une règle à appliquer par défaut dans les où la règle voulue n'est pas supportée par les navigateurs, utilisez un liste de valeurs séparées par des virgules avec la règle voulue fournie en dernière position :</p>
<pre class="notranslate">Referrer-Policy: no-referrer, strict-origin-when-cross-origin</pre>
<p>Ici, <code>no-referrer</code> ne sera utilisée que si <code>strict-origin-when-cross-origin</code> n'est pas supportée par le navigateur.</p>
<p class="note">Spécifier plusieurs valeurs n'est supporté que dans l'en-tête HTTP <code>Referrer-Policy</code> et non dans l'attribut <code>referrerpolicy</code>.</p>
<h2 id="Spécifications">Spécifications</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Spécification</th>
<th scope="col">Statut</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-header">Referrer Policy </a></td>
<td>Brouillon de l'éditeur.</td>
</tr>
</tbody>
</table>
<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2>
<p>{{Compat("http.headers.Referrer-Policy")}}</p>
<div class="note">
<ul>
<li>Version 53 et plus, Gecko offre la possibilité aux utilisateurs de définir leur valeur par défaut de <code>Referrer-Policy</code> dans <code>about:config</code>, l'option s'appelant <span class="quote"> <code>network.http.referer.userControlPolicy</code>.</span></li>
<li>Version 59 et plus (Voir <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=587523">#587523</a>), il a été remplacé par <code>network.http.referer.defaultPolicy</code> et <code>network.http.referer.defaultPolicy.pbmode</code>.</li>
</ul>
<p>Les valeurs permises sont :</p>
<ul>
<li>0 — <code>no-referrer</code></li>
<li>1 — <code>same-origin</code></li>
<li>2 — <code>strict-origin-when-cross-origin</code></li>
<li>3 — <code>no-referrer-when-downgrade</code> (par défaut)</li>
</ul>
</div>
<h2 id="Voir_aussi">Voir aussi</h2>
<ul>
<li>{{interwiki("wikipedia", "HTTP_referer", "HTTP referer on Wikipedia")}}</li>
<li>En utilisant <a href="/en-US/docs/Web/API/Fetch_API">Fetch</a> : {{domxref("Request.referrerPolicy")}}</li>
<li>La directive obsolète {{HTTPHeader("Content-Security-Policy/referrer", "referrer")}} {{Obsolete_Inline}} de l'en-tête <span style="white-space: nowrap;">{{HTTPHeader("Content-Security-Policy")}}</span>.</li>
<li><a href="/en-US/docs/Web/Security/Same-origin_policy">Same-origin policy</a></li>
<li>
<p><a href="https://blog.mozilla.org/security/2015/01/21/meta-referrer/">Tighter Control Over Your Referrers – Mozilla Security Blog</a></p>
</li>
</ul>
|