{"title":"Intergiciels (« middleware »)","version":"1.11","locale":"fr","docname":"ref/middleware","url":"/fr/1.11/ref/middleware/","canonical":"https://djangodocs.dev/fr/1.11/ref/middleware/","summary":"Ce document présente tous les composants intergiciels livrés avec Django. Pour plus d’informations sur la façon de les utiliser et sur la manière d’écrire ses…","html":"<span id=\"middleware\"></span><h1>Intergiciels (« middleware »)<a class=\"heading-anchor\" href=\"#module-django.middleware\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Ce document présente tous les composants intergiciels livrés avec Django. Pour plus d’informations sur la façon de les utiliser et sur la manière d’écrire ses propres intergiciels, consultez le <a class=\"reference internal\" href=\"/fr/1.11/topics/http/middleware/\"><span class=\"doc\">guide d’utilisation des intergiciels</span></a>.</p>\n<section id=\"available-middleware\">\n<h2>Intergiciels disponibles<a class=\"heading-anchor\" href=\"#available-middleware\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"module-django.middleware.cache\">\n<span id=\"cache-middleware\"></span><h3>Intergiciel de cache<a class=\"heading-anchor\" href=\"#module-django.middleware.cache\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.cache.UpdateCacheMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">UpdateCacheMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.middleware.cache.UpdateCacheMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.cache.FetchFromCacheMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">FetchFromCacheMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.middleware.cache.FetchFromCacheMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Active le cache global du site. Quand il est actif, chaque page générée par Django est mise en cache pour une durée équivalente au réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-CACHE_MIDDLEWARE_SECONDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CACHE_MIDDLEWARE_SECONDS</span></code></a>. Voir la <a class=\"reference internal\" href=\"/fr/1.11/topics/cache/\"><span class=\"doc\">documentation du cache</span></a>.</p>\n</section>\n<section id=\"module-django.middleware.common\">\n<span id=\"common-middleware\"></span><h3>Intergiciel « common »<a class=\"heading-anchor\" href=\"#module-django.middleware.common\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.common.CommonMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">CommonMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.middleware.common.CommonMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ajoute quelques commodités pour les perfectionnistes :</p>\n<ul>\n<li><p>Interdit l’accès aux agents utilisateurs (navigateurs) mentionnés dans le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-DISALLOWED_USER_AGENTS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DISALLOWED_USER_AGENTS</span></code></a>, qui devrait contenir une liste d’objets expression régulière compilés.</p></li>\n<li><p>Effectue une réécriture d’URL sur la base des réglages <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a> et <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-PREPEND_WWW\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">PREPEND_WWW</span></code></a>.</p>\n<p>Si <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> et que l’URL initiale ne se termine pas par une barre oblique et que l’URL n’est pas trouvée dans les configuration d’URL, une nouvelle URL est formée en y ajoutant une barre oblique à la fin. Si la nouvelle URL est trouvée dans la configuration d’URL, Django redirige la requête vers cette URL. Sinon, l’URL de départ est traitée comme d’habitude.</p>\n<p>Par exemple, <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar</span></code> sera redirigée vers <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar/</span></code> s’il n’existe pas de motif d’URL valide correspondant à <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar</span></code> mais qu’il <em>existe</em> un motif valide pour <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar/</span></code>.</p>\n<p>Si <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-PREPEND_WWW\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">PREPEND_WWW</span></code></a> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, les URL ne commençant pas par « www. » seront redirigées vers la même URL commençant par « www. ».</p>\n<p>Ces deux options visent à normaliser les URL. L’idée étant que chaque URL devrait exister sous une et une seule forme. Techniquement, une URL <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar</span></code> est différente de <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar/</span></code> – un index de moteur de recherche les traiterait comme des URL distinctes – ce qui justifie la bonne pratique de normaliser les URL.</p>\n</li>\n<li><p>Gère les en-têtes <code class=\"docutils literal notranslate\"><span class=\"pre\">ETags</span></code> sur la base du réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-USE_ETAGS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_ETAGS</span></code></a>. Si <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-USE_ETAGS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_ETAGS</span></code></a> vaut <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, Django génère l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code> pour chaque requête en calculant l’empreinte MD5 du contenu de la page, et il se chargera d’envoyer des réponses <code class=\"docutils literal notranslate\"><span class=\"pre\">Not</span> <span class=\"pre\">Modified</span></code> le cas échéant.</p></li>\n<li><p>Définit l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Length</span></code> pour les réponses qui ne sont pas de type flux.</p></li>\n</ul>\n<aside class=\"version-note version-changed\" data-version=\"1.11\">\n<p class=\"version-note-title\">Changed in Django 1.11</p><p>Les versions précédentes ne définissaient pas l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Length</span></code>.</p>\n</aside>\n<aside class=\"version-note version-deprecated\" data-version=\"1.11\">\n<p class=\"version-note-title\">Deprecated since Django 1.11</p><p><span class=\"versionmodified deprecated\">Obsolète depuis la version 1.11: </span>Le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-USE_ETAGS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_ETAGS</span></code></a> est obsolète et remplacé par l’utilisation de <a class=\"reference internal\" href=\"#django.middleware.http.ConditionalGetMiddleware\" title=\"django.middleware.http.ConditionalGetMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ConditionalGetMiddleware</span></code></a> pour la génération de l’ETag.</p>\n</aside>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.common.CommonMiddleware.response_redirect_class\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">CommonMiddleware.</span></span><span class=\"sig-name descname\"><span class=\"pre\">response_redirect_class</span></span><a class=\"heading-anchor\" href=\"#django.middleware.common.CommonMiddleware.response_redirect_class\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>La valeur par défaut est <a class=\"reference internal\" href=\"/fr/1.11/ref/request-response/#django.http.HttpResponsePermanentRedirect\" title=\"django.http.HttpResponsePermanentRedirect\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponsePermanentRedirect</span></code></a>. Créez une sous-classe de <code class=\"docutils literal notranslate\"><span class=\"pre\">CommonMiddleware</span></code> et surchargez cet attribut pour personnaliser les redirections émises par l’intergiciel.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.common.BrokenLinkEmailsMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">BrokenLinkEmailsMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.middleware.common.BrokenLinkEmailsMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<ul class=\"simple\">\n<li><p>Envoie des courriels de notification de lien brisé aux <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MANAGERS</span></code></a> (voir <a class=\"reference internal\" href=\"/fr/1.11/howto/error-reporting/\"><span class=\"doc\">Signalement d’erreurs</span></a>).</p></li>\n</ul>\n</section>\n<section id=\"module-django.middleware.gzip\">\n<span id=\"gzip-middleware\"></span><h3>Intergiciel GZip<a class=\"heading-anchor\" href=\"#module-django.middleware.gzip\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.gzip.GZipMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">GZipMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.middleware.gzip.GZipMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Les chercheurs en sécurité ont récemment découvert que lorsque des techniques de compression (y compris avec <code class=\"docutils literal notranslate\"><span class=\"pre\">GZipMiddleware</span></code>) sont utilisés sur un site Web, le site peut être exposé à un certain nombre d’attaques potentielles. Avant d’utiliser <code class=\"docutils literal notranslate\"><span class=\"pre\">GZipMiddleware</span></code> pour votre site, vous devriez évaluer avec soin si vous êtes une cible possible de ces attaques. Si vous doutez d’une façon ou d’une autre à ce sujet, vous devriez éviter d’utiliser cet intergiciel. Pour plus de détails, consultez le <a class=\"reference external\" href=\"http://breachattack.com/resources/BREACH%20-%20SSL,%20gone%20in%2030%20seconds.pdf\">document présentant la faille (PDF)</a> et <a class=\"reference external\" href=\"http://breachattack.com\">breachattack.com</a>.</p>\n</aside>\n<p>Compresse le contenu pour les navigateurs qui prennent en charge la compression GZip (tous les navigateurs modernes).</p>\n<p>Cet intergiciel devrait être placé avant tout autre intergiciel qui a besoin de lire ou d’écrire le corps de la réponse afin que la compression puisse avoir lieu après.</p>\n<p>Il ne compresse PAS le contenu si l’un des critères suivants est vrai :</p>\n<ul class=\"simple\">\n<li><p>La taille du corps du contenu est plus petite que 200 octets.</p></li>\n<li><p>La réponse a déjà défini l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Encoding</span></code>.</p></li>\n<li><p>La requête (le navigateur) n’a pas envoyé d’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Accept-Encoding</span></code> incluant <code class=\"docutils literal notranslate\"><span class=\"pre\">gzip</span></code>.</p></li>\n</ul>\n<p>Si la réponse possède un en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code>, l’ETag est rendu faible pour se conformer à <span class=\"target\" id=\"index-2\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc7232.html#section-2.1\"><strong>RFC 7232 Section 2.1</strong></a>.</p>\n<p>Vous pouvez appliquer la compression GZip pour des vues individuelles en utilisant le décorateur <a class=\"reference internal\" href=\"/fr/1.11/topics/http/decorators/#django.views.decorators.gzip.gzip_page\" title=\"django.views.decorators.gzip.gzip_page\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">gzip_page()</span></code></a>.</p>\n<aside class=\"version-note version-changed\" data-version=\"1.10\">\n<p class=\"version-note-title\">Changed in Django 1.10</p><p>Dans les versions précédentes, le mécanisme de protection CSRF de Django était vulnérable aux attaques BREACH lorsque la compression était utilisée. Ce n’est plus le cas, mais il faut toujours prendre garde à ne pas compromettre vos propres informations secrètes de cette façon.</p>\n</aside>\n</section>\n<section id=\"module-django.middleware.http\">\n<span id=\"conditional-get-middleware\"></span><h3>Intergiciel GET conditionnel<a class=\"heading-anchor\" href=\"#module-django.middleware.http\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.http.ConditionalGetMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">ConditionalGetMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.middleware.http.ConditionalGetMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Traite les opérations GET conditionnelles. Si la réponse ne possède pas d’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code>, l’intergiciel en crée un si nécessaire. Si la réponse possède un en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">Last-Modified</span></code> et que la requête possède l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">If-None-Match</span></code> ou <code class=\"docutils literal notranslate\"><span class=\"pre\">If-Modified-Since</span></code>, la réponse est remplacée par <a class=\"reference internal\" href=\"/fr/1.11/ref/request-response/#django.http.HttpResponseNotModified\" title=\"django.http.HttpResponseNotModified\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponseNotModified</span></code></a>.</p>\n<aside class=\"version-note version-changed\" data-version=\"1.11\">\n<p class=\"version-note-title\">Changed in Django 1.11</p><p>Dans les versions précédentes, l’intergiciel définissait les en-têtes <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Length</span></code> et <code class=\"docutils literal notranslate\"><span class=\"pre\">Date</span></code>, mais pas l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code>.</p>\n</aside>\n</section>\n<section id=\"module-django.middleware.locale\">\n<span id=\"locale-middleware\"></span><h3>Intergiciel de locale<a class=\"heading-anchor\" href=\"#module-django.middleware.locale\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.locale.LocaleMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">LocaleMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.middleware.locale.LocaleMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Active le choix de la langue en fonction de données de la requête. Le contenu est alors personnalisé par utilisateur. Voir la <a class=\"reference internal\" href=\"/fr/1.11/topics/i18n/translation/\"><span class=\"doc\">documentation sur l’internationalisation</span></a>.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.locale.LocaleMiddleware.response_redirect_class\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">LocaleMiddleware.</span></span><span class=\"sig-name descname\"><span class=\"pre\">response_redirect_class</span></span><a class=\"heading-anchor\" href=\"#django.middleware.locale.LocaleMiddleware.response_redirect_class\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>La valeur par défaut est <a class=\"reference internal\" href=\"/fr/1.11/ref/request-response/#django.http.HttpResponseRedirect\" title=\"django.http.HttpResponseRedirect\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponseRedirect</span></code></a>. Créez une sous-classe de <code class=\"docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code> et surchargez cet attribut pour personnaliser les redirections émises par l’intergiciel.</p>\n</section>\n<section id=\"module-django.contrib.messages.middleware\">\n<span id=\"message-middleware\"></span><h3>Intergiciel de messages<a class=\"heading-anchor\" href=\"#module-django.contrib.messages.middleware\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.messages.middleware.MessageMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">MessageMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.contrib.messages.middleware.MessageMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Active la prise en charge des messages par session ou par cookie. Voir la <a class=\"reference internal\" href=\"/fr/1.11/ref/contrib/messages/\"><span class=\"doc\">documentation sur les messages</span></a>.</p>\n</section>\n<section id=\"module-django.middleware.security\">\n<span id=\"id1\"></span><span id=\"security-middleware\"></span><h3>Intergiciel de sécurité<a class=\"heading-anchor\" href=\"#module-django.middleware.security\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Si votre situation de déploiement le permet, il est généralement préférable de déléguer au serveur Web frontal la fonctionnalité fournie par l’intergiciel <code class=\"docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code>. De cette façon, si certaines requêtes ne sont pas fournies par Django (comme des fichiers statiques ou des fichiers envoyés par les utilisateurs), elles bénéficieront de la même protection que les requêtes servies par l’application Django.</p>\n</aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.security.SecurityMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SecurityMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.middleware.security.SecurityMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>L’intergiciel <code class=\"docutils literal notranslate\"><span class=\"pre\">django.middleware.security.SecurityMiddleware</span></code> fournit plusieurs améliorations de sécurité au cycle de requête/réponse. Chaque amélioration peut être activée ou désactivée indépendamment par un réglage.</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_BROWSER_XSS_FILTER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_BROWSER_XSS_FILTER</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_CONTENT_TYPE_NOSNIFF\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_CONTENT_TYPE_NOSNIFF</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_HSTS_INCLUDE_SUBDOMAINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_HSTS_INCLUDE_SUBDOMAINS</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_HSTS_PRELOAD\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_HSTS_PRELOAD</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_HSTS_SECONDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_HSTS_SECONDS</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_REDIRECT_EXEMPT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_REDIRECT_EXEMPT</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_SSL_HOST\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_SSL_HOST</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_SSL_REDIRECT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_SSL_REDIRECT</span></code></a></p></li>\n</ul>\n<section id=\"http-strict-transport-security\">\n<span id=\"id2\"></span><h4>Sécurité de transport HTTP stricte (HSTS)<a class=\"heading-anchor\" href=\"#http-strict-transport-security\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Pour les sites qui ne devraient pouvoir être accédés que par HTTPS, vous pouvez demander aux navigateurs modernes de refuser les connexions à votre nom de domaine si la connexion n’est pas sécurisée (pour une certaine période de temps) en définissant l”<a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Strict_Transport_Security\">en-tête « Strict-Transport-Security »</a>. Cela réduit l’exposition à certaines attaques de type « homme du milieu » (MITM) par détournement SSL.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code> définit cet en-tête pour vous sur toutes les réponses HTTPS si vous définissez le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_HSTS_SECONDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_HSTS_SECONDS</span></code></a> à une valeur entière différente de zéro.</p>\n<p>Lors de l’activation de HSTS, il est recommandé d’utiliser d’abord une faible valeur pour tester, par exemple <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_HSTS_SECONDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_HSTS_SECONDS</span> <span class=\"pre\">=</span> <span class=\"pre\">3600</span></code></a> pour une heure. Chaque fois qu’un navigateur Web lit l’en-tête HSTS pour votre site, il refusera de communiquer de manière non sécurisée (par HTTP) avec votre domaine pour la durée de temps indiquée. Après avoir obtenu confirmation que toutes les ressources de votre site sont servies de manière sécurisée (c’est-à-dire que HSTS ne casse rien du tout), il est alors possible et souhaité d’augmenter cette valeur afin que les visiteurs occasionnels soient protégés (il est fréquent de voir 31536000 secondes, c’est-à-dire 1 an).</p>\n<p>De plus, si vous définissez le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_HSTS_INCLUDE_SUBDOMAINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_HSTS_INCLUDE_SUBDOMAINS</span></code></a> à <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code> ajoute la directive <code class=\"docutils literal notranslate\"><span class=\"pre\">includeSubDomains</span></code> à l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Strict-Transport-Security</span></code>. C’est recommandé (pour autant que tous les sous-domaines soient servis exclusivement par HTTPS), sinon votre site pourrait rester vulnérable au travers d’une connexion non sécurisée à un sous-domaine.</p>\n<p>Si vous souhaitez soumettre votre site à la <a class=\"reference external\" href=\"https://hstspreload.org/\">liste de préchargement du navigateur</a>, définissez le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_HSTS_PRELOAD\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_HSTS_PRELOAD</span></code></a> à <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>. Cela ajoute la directive <code class=\"docutils literal notranslate\"><span class=\"pre\">preload</span></code> à l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Strict-Transport-Security</span></code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>La politique HSTS s’applique à un domaine entier, pas seulement pour l’URL de la réponse pour laquelle vous définissez cet en-tête. Il ne faut donc l’utiliser que si tout le domaine est servi exclusivement par HTTPS.</p>\n<p>Les navigateurs respectant scrupuleusement l’en-tête HSTS refuseront aux utilisateurs de passer outre les avertissements et de se connecter à un site avec un certificat SSL expiré, auto-signé ou non valide pour toute autre raison. Si vous utilisez HSTS, assurez-vous que vos certificats sont en bon état et qu’ils le restent !</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Si votre déploiement se trouve derrière un répartiteur de charge ou un serveur mandataire inverse, et que l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Strict-Transport-Security</span></code> n’est pas ajouté à vos réponses, il est possible que Django ne détecte pas qu’il fonctionne sur une connexion sécurisée ; il faut alors définir le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_PROXY_SSL_HEADER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_PROXY_SSL_HEADER</span></code></a>.</p>\n</aside>\n</section>\n<section id=\"x-content-type-options-nosniff\">\n<span id=\"x-content-type-options\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">X-Content-Type-Options:</span> <span class=\"pre\">nosniff</span></code><a class=\"heading-anchor\" href=\"#x-content-type-options-nosniff\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Certains navigateurs essaient de deviner les types de contenu des ressources qu’ils appellent, sans tenir compte de l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code>. Bien que cela puisse aider à afficher des sites dont les serveurs sont mal configurés, cela peut aussi poser un risque de sécurité.</p>\n<p>Si votre site sert des fichiers que des utilisateurs ont envoyés, un utilisateur mal intentionné pourrait envoyer un fichier spécialement écrit pour qu’il soit interprété comme du HTML ou du JavaScript par le navigateur alors que vous vous attendiez à ce que son contenu soit inoffensif.</p>\n<p>Pour empêcher le navigateur de deviner le type de contenu et le forcer à toujours utiliser le type indiqué dans l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code>, vous pouvez définir l’en-tête <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options\">X-Content-Type-Options: nosniff</a>. <code class=\"docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code> s’en charge pour toutes les réponses si le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_CONTENT_TYPE_NOSNIFF\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_CONTENT_TYPE_NOSNIFF</span></code></a> est défini à <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<p>Notez que dans la plupart des situations de déploiement où Django n’est pas impliqué dans le service de fichiers envoyés par les utilisateurs, ce réglage ne va pas aider. Par exemple, si le contenu de <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a> est directement servi par le serveur Web frontal (nginx, Apache, etc.), c’est par ce dernier que l’en-tête doit être défini. D’un autre côté, si vous utilisez Django pour s’occuper de choses comme exiger une autorisation avant de pouvoir télécharger des fichiers et que vous n’êtes pas en mesure de faire définir cet en-tête par le serveur Web, ce réglage sera utile.</p>\n</section>\n<section id=\"x-xss-protection-1-mode-block\">\n<span id=\"x-xss-protection\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">X-XSS-Protection:</span> <span class=\"pre\">1;</span> <span class=\"pre\">mode=block</span></code><a class=\"heading-anchor\" href=\"#x-xss-protection-1-mode-block\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Certains navigateurs ont la capacité de bloquer du contenu qui ressemble à une <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Cross-site_scripting\">attaque XSS</a>. Ils le font en examinant le contenu JavaScript dans les paramètres GET ou POST des pages. Si le JavaScript est rejoué dans la réponse du serveur, l’affichage de la page est bloqué et une page d’erreur s’affiche à la place.</p>\n<p>L”<a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection\">en-tête X-XSS-Protection</a> est utilisé pour contrôler l’opération du filtre XSS.</p>\n<p>Pour activer le filtre XSS dans le navigateur et le forcer à toujours bloquer les suspicions d’attaque XSS, vous pouvez définir l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">X-XSS-Protection:</span> <span class=\"pre\">1;</span> <span class=\"pre\">mode=block</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code> s’en charge pour toutes les réponses si le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_BROWSER_XSS_FILTER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_BROWSER_XSS_FILTER</span></code></a> est défini à <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avertissement</p>\n<p>Le filtre XSS du navigateur est une mesure de défense utile, mais on ne peut pas s’y fier de manière exclusive. Il ne peut pas détecter toutes les attaques XSS et ce n’est pas pris en charge avec tous les navigateurs. Prenez soin de toujours <a class=\"reference internal\" href=\"/fr/1.11/topics/security/#cross-site-scripting\"><span class=\"std std-ref\">valider et nettoyer</span></a> toutes les valeurs entrées pour éviter les attaques XSS.</p>\n</aside>\n</section>\n<section id=\"ssl-redirect\">\n<span id=\"id4\"></span><h4>Redirection SSL<a class=\"heading-anchor\" href=\"#ssl-redirect\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Si votre site offre à la fois des connexions HTTP et HTTPS, la plupart des utilisateurs obtiendront une connexion non sécurisée par défaut. Pour une meilleure sécurité, vous devriez rediriger toutes les connexions HTTP vers HTTPS.</p>\n<p>Si vous définissez le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_SSL_REDIRECT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_SSL_REDIRECT</span></code></a> à <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code> va rediriger de manière permanente (HTTP 301) toutes les connexions HTTP vers HTTPS.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Pour des raisons de performance, il est préférable de procéder à ces redirections en dehors de Django, dans une répartiteur de charge frontal ou un serveur mandataire inverse tel que <a class=\"reference external\" href=\"http://nginx.org\">nginx</a>. <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_SSL_REDIRECT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_SSL_REDIRECT</span></code></a> est prévu pour des situations de déploiement où ce scénario n’est pas envisageable.</p>\n</aside>\n<p>Si le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_SSL_HOST\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_SSL_HOST</span></code></a> possède une valeur, toutes les redirections seront envoyées vers cet hôte au lieu de l’hôte d’origine de la requête.</p>\n<p>Si certaines pages de votre site doivent rester disponibles par HTTP sans être redirigées vers HTTPS, vous pouvez ajouter des expressions régulières correspondantes à ces URL dans le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_REDIRECT_EXEMPT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_REDIRECT_EXEMPT</span></code></a> (sous forme de liste).</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Si votre déploiement se trouve derrière un répartiteur de charge ou un serveur mandataire inverse, et que Django ne semble pas pouvoir détecter si une requête est déjà sécurisée ou non, il peut alors être nécessaire de définir le réglage <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-SECURE_PROXY_SSL_HEADER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_PROXY_SSL_HEADER</span></code></a>.</p>\n</aside>\n</section>\n</section>\n<section id=\"module-django.contrib.sessions.middleware\">\n<span id=\"session-middleware\"></span><h3>Intergiciel de session<a class=\"heading-anchor\" href=\"#module-django.contrib.sessions.middleware\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sessions.middleware.SessionMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SessionMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sessions.middleware.SessionMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Active la prise en charge des sessions. Voir la <a class=\"reference internal\" href=\"/fr/1.11/topics/http/sessions/\"><span class=\"doc\">documentation sur les sessions</span></a>.</p>\n</section>\n<section id=\"module-django.contrib.sites.middleware\">\n<span id=\"site-middleware\"></span><h3>Intergiciel de site<a class=\"heading-anchor\" href=\"#module-django.contrib.sites.middleware\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.sites.middleware.CurrentSiteMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">CurrentSiteMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.contrib.sites.middleware.CurrentSiteMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ajoute l’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">site</span></code> représentant le site en cours à chaque objet <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> entrant. Voir la <a class=\"reference internal\" href=\"/fr/1.11/ref/contrib/sites/#site-middleware\"><span class=\"std std-ref\">documentation sur les sites</span></a>.</p>\n</section>\n<section id=\"module-django.contrib.auth.middleware\">\n<span id=\"authentication-middleware\"></span><h3>Intergiciel d’authentification<a class=\"heading-anchor\" href=\"#module-django.contrib.auth.middleware\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.middleware.AuthenticationMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AuthenticationMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.middleware.AuthenticationMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ajoute l’attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">user</span></code> représentant l’utilisateur actuellement connecté à chaque objet <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> entrant. Voir <a class=\"reference internal\" href=\"/fr/1.11/topics/auth/default/#auth-web-requests\"><span class=\"std std-ref\">Authentification dans les requêtes Web</span></a>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.middleware.RemoteUserMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RemoteUserMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.middleware.RemoteUserMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Intergiciel permettant d’exploiter l’authentification fournie par le serveur Web. Voir <a class=\"reference internal\" href=\"/fr/1.11/howto/auth-remote-user/\"><span class=\"doc\">Authentification avec REMOTE_USER</span></a> pour les détails d’utilisation.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.middleware.PersistentRemoteUserMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">PersistentRemoteUserMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.middleware.PersistentRemoteUserMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Intergiciel permettant d’exploiter l’authentification fournie par le serveur Web lorsqu’elle n’est activée que sur la page de connexion. Voir <a class=\"reference internal\" href=\"/fr/1.11/howto/auth-remote-user/#persistent-remote-user-middleware-howto\"><span class=\"std std-ref\">Utilisation de REMOTE_USER uniquement pour les pages de connexion</span></a> pour les détails d’utilisation.</p>\n</section>\n<section id=\"module-django.middleware.csrf\">\n<span id=\"csrf-protection-middleware\"></span><h3>Intergiciel de protection CSRF<a class=\"heading-anchor\" href=\"#module-django.middleware.csrf\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.csrf.CsrfViewMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">CsrfViewMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.middleware.csrf.CsrfViewMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ajoute la protection contre les attaques Cross Site Request Forgeries en ajoutant des champs de formulaires masqués aux formulaires POST et en contrôlant que les requêtes contiennent la valeur correcte. Voir la <a class=\"reference internal\" href=\"/fr/1.11/ref/csrf/\"><span class=\"doc\">documentation concernant la protection contre les attaques Cross Site Request Forgery</span></a>.</p>\n</section>\n<section id=\"module-django.middleware.clickjacking\">\n<span id=\"x-frame-options-middleware\"></span><h3>Intergiciel <code class=\"docutils literal notranslate\"><span class=\"pre\">X-Frame-Options</span></code><a class=\"heading-anchor\" href=\"#module-django.middleware.clickjacking\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.clickjacking.XFrameOptionsMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">XFrameOptionsMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.middleware.clickjacking.XFrameOptionsMiddleware\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Protection simple contre les <a class=\"reference internal\" href=\"/fr/1.11/ref/clickjacking/\"><span class=\"doc\">attaques par détournement de clic au moyen de l’en-tête X-Frame-Options</span></a>.</p>\n</section>\n</section>\n<section id=\"middleware-ordering\">\n<span id=\"id5\"></span><h2>Ordre des intergiciels<a class=\"heading-anchor\" href=\"#middleware-ordering\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Voici quelques indications au sujet de l’ordre des diverses classes d’intergiciel Django :</p>\n<ol class=\"arabic\">\n<li><p><a class=\"reference internal\" href=\"#django.middleware.security.SecurityMiddleware\" title=\"django.middleware.security.SecurityMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code></a></p>\n<p>Il devrait se trouver assez haut dans la liste si vous prévoyez d’activer la redirection SSL car cela évite de passer par plusieurs autres intergiciels inutiles.</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"#django.middleware.cache.UpdateCacheMiddleware\" title=\"django.middleware.cache.UpdateCacheMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UpdateCacheMiddleware</span></code></a></p>\n<p>Avant ceux qui modifient l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> (<code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">GZipMiddleware</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code>).</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"#django.middleware.gzip.GZipMiddleware\" title=\"django.middleware.gzip.GZipMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GZipMiddleware</span></code></a></p>\n<p>Avant tout intergiciel susceptible de modifier ou d’utiliser le corps de la réponse.</p>\n<p>Après <code class=\"docutils literal notranslate\"><span class=\"pre\">UpdateCacheMiddleware</span></code>: modifie l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code>.</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"#django.middleware.http.ConditionalGetMiddleware\" title=\"django.middleware.http.ConditionalGetMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ConditionalGetMiddleware</span></code></a></p>\n<p>Avant <code class=\"docutils literal notranslate\"><span class=\"pre\">CommonMiddleware</span></code>: utilise son en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code> lorsque <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-USE_ETAGS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_ETAGS</span></code></a> = <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.sessions.middleware.SessionMiddleware\" title=\"django.contrib.sessions.middleware.SessionMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code></a></p>\n<p>Après <code class=\"docutils literal notranslate\"><span class=\"pre\">UpdateCacheMiddleware</span></code>: modifie l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code>.</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"#django.middleware.locale.LocaleMiddleware\" title=\"django.middleware.locale.LocaleMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code></a></p>\n<p>Doit être dans les premiers, après  <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code> (utilise les données de sessions) et <code class=\"docutils literal notranslate\"><span class=\"pre\">UpdateCacheMiddleware</span></code> (modifie l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code>).</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"#django.middleware.common.CommonMiddleware\" title=\"django.middleware.common.CommonMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CommonMiddleware</span></code></a></p>\n<p>Avant tout intergiciel pouvant modifier la réponse (il calcule les valeurs <code class=\"docutils literal notranslate\"><span class=\"pre\">ETags</span></code>).</p>\n<p>Après <code class=\"docutils literal notranslate\"><span class=\"pre\">GZipMiddleware</span></code> afin qu’il ne calcule pas d’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code> pour du contenu compressé gzip.</p>\n<p>Dans les tout premiers : il redirige lorsque <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a> ou <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-PREPEND_WWW\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">PREPEND_WWW</span></code></a> valent <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"#django.middleware.csrf.CsrfViewMiddleware\" title=\"django.middleware.csrf.CsrfViewMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CsrfViewMiddleware</span></code></a></p>\n<p>Avant tout intergiciel comptant sur le fait que des attaques CSRF ont déjà été contrées.</p>\n<p>Il doit figurer après <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code> si vous utilisez <a class=\"reference internal\" href=\"/fr/1.11/ref/settings/#std-setting-CSRF_USE_SESSIONS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_USE_SESSIONS</span></code></a>.</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.auth.middleware.AuthenticationMiddleware\" title=\"django.contrib.auth.middleware.AuthenticationMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AuthenticationMiddleware</span></code></a></p>\n<p>Après <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code>: utilise le stockage des sessions.</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.messages.middleware.MessageMiddleware\" title=\"django.contrib.messages.middleware.MessageMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MessageMiddleware</span></code></a></p>\n<p>Après <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code>: peut utiliser le stockage basé sur les sessions.</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"#django.middleware.cache.FetchFromCacheMiddleware\" title=\"django.middleware.cache.FetchFromCacheMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FetchFromCacheMiddleware</span></code></a></p>\n<p>Après tout intergiciel qui modifie l’en-tête <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code>: cet en-tête est utilisé pour choisir une valeur pour la clé de hachage du cache.</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"/fr/1.11/ref/contrib/flatpages/#django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\" title=\"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FlatpageFallbackMiddleware</span></code></a></p>\n<p>Devrait se situer dans les derniers car c’est un type d’intergiciel de dernier recours.</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"/fr/1.11/ref/contrib/redirects/#django.contrib.redirects.middleware.RedirectFallbackMiddleware\" title=\"django.contrib.redirects.middleware.RedirectFallbackMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RedirectFallbackMiddleware</span></code></a></p>\n<p>Devrait se situer dans les derniers car c’est un type d’intergiciel de dernier recours.</p>\n</li>\n</ol>\n</section>","rootId":"module-django.middleware","toc":[{"title":"Intergiciels disponibles","anchor":"available-middleware","children":[{"title":"Intergiciel de cache","anchor":"module-django.middleware.cache","children":[]},{"title":"Intergiciel « common »","anchor":"module-django.middleware.common","children":[]},{"title":"Intergiciel GZip","anchor":"module-django.middleware.gzip","children":[]},{"title":"Intergiciel GET conditionnel","anchor":"module-django.middleware.http","children":[]},{"title":"Intergiciel de locale","anchor":"module-django.middleware.locale","children":[]},{"title":"Intergiciel de messages","anchor":"module-django.contrib.messages.middleware","children":[]},{"title":"Intergiciel de sécurité","anchor":"module-django.middleware.security","children":[{"title":"Sécurité de transport HTTP stricte (HSTS)","anchor":"http-strict-transport-security","children":[]},{"title":"X-Content-Type-Options: nosniff","anchor":"x-content-type-options-nosniff","children":[]},{"title":"X-XSS-Protection: 1; mode=block","anchor":"x-xss-protection-1-mode-block","children":[]},{"title":"Redirection SSL","anchor":"ssl-redirect","children":[]}]},{"title":"Intergiciel de session","anchor":"module-django.contrib.sessions.middleware","children":[]},{"title":"Intergiciel de site","anchor":"module-django.contrib.sites.middleware","children":[]},{"title":"Intergiciel d’authentification","anchor":"module-django.contrib.auth.middleware","children":[]},{"title":"Intergiciel de protection CSRF","anchor":"module-django.middleware.csrf","children":[]},{"title":"Intergiciel X-Frame-Options","anchor":"module-django.middleware.clickjacking","children":[]}]},{"title":"Ordre des intergiciels","anchor":"middleware-ordering","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/1.11/ref/"}],"prev":{"docname":"ref/forms/validation","title":"La validation de formulaires et de champs","url":"/fr/1.11/ref/forms/validation/"},"next":{"docname":"ref/migration-operations","title":"Opérations de migration","url":"/fr/1.11/ref/migration-operations/"},"formats":{"html":"/fr/1.11/ref/middleware/","markdown":"/fr/1.11/ref/middleware.md","json":"/fr/1.11/ref/middleware.json"},"source":"https://github.com/django/django/blob/stable/1.11.x/docs/ref/middleware.txt","official":"https://docs.djangoproject.com/fr/1.11/ref/middleware/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","ko","es","el","pl"]}