{"title":"ミドルウェア","version":"5.0","locale":"ja","docname":"ref/middleware","url":"/ja/5.0/ref/middleware/","canonical":"https://djangodocs.dev/ja/5.0/ref/middleware/","summary":"このドキュメントでは、Djangoに付属するすべてのミドルウェアコンポーネントについて説明します。それらの使用方法や独自のミドルウェアの作成方法についての情報は、 ミドルウェア使用ガイド を参照してください。 使用できる middleware Link to this heading # Cache middleware…","html":"<span id=\"middleware\"></span><h1>ミドルウェア<a class=\"heading-anchor\" href=\"#module-django.middleware\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>このドキュメントでは、Djangoに付属するすべてのミドルウェアコンポーネントについて説明します。それらの使用方法や独自のミドルウェアの作成方法についての情報は、 <a class=\"reference internal\" href=\"/ja/5.0/topics/http/middleware/\"><span class=\"doc\">ミドルウェア使用ガイド</span></a> を参照してください。</p>\n<section id=\"available-middleware\">\n<h2>使用できる middleware<a class=\"heading-anchor\" href=\"#available-middleware\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"module-django.middleware.cache\">\n<span id=\"cache-middleware\"></span><h3>Cache middleware<a class=\"heading-anchor\" href=\"#module-django.middleware.cache\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>サイト全体でキャッシュを有効にします。有効にすると、Django を利用している各ページは <a class=\"reference internal\" href=\"/ja/5.0/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> 設定で指定した時間だけキャッシュされます。詳しくは <a class=\"reference internal\" href=\"/ja/5.0/topics/cache/\"><span class=\"doc\">キャッシュのドキュメント</span></a> を参照してください。</p>\n</section>\n<section id=\"module-django.middleware.common\">\n<span id=\"common-middleware\"></span><h3>Common middleware<a class=\"heading-anchor\" href=\"#module-django.middleware.common\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>完璧主義者のためにいくつかの便利な機能を提供します。</p>\n<ul>\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/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> 設定に含まれるユーザーエージェントのアクセスを禁止します。この設定は、コンパイルした正規表現オブジェクトのリストである必要があります。</p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a> および <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-PREPEND_WWW\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">PREPEND_WWW</span></code></a> 設定に基づいて、URL の書き換えを実行します。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> で、与えられた URL がスラッシュで終わっていなくて、さらに URLconf に URL が見つからなければ、Django は / が最後に追加された新しい URL を作り、この新しい URL へリクエストをリダイレクトします。それ以外のときには、最初の URL を通常通りに処理します。</p>\n<p>たとえば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar</span></code> は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar</span></code> に対する有効な URL パタンがなく、<code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar/</span></code> に対しては有効なパタンが <em>存在する</em> 場合に、 <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar/</span></code> にリダイレクトされます。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-PREPEND_WWW\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">PREPEND_WWW</span></code></a> を <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> にすると、先頭に &quot;www.&quot; がない URL は &quot;www.&quot; で始まる同じ URL にリダイレクトされます。</p>\n<p>2つのオプションが意味するのは、URL を正規化するということです。これは、1つの URL には1つの、かつただ1つだけの場所を指すべきだという考えです。技術的には URL <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">foo.com/bar/</span></code> とは区別されます。実際、サーチエンジンのインデクスはこれらを区別して作成されます。よって、URL を正規化するというのがベストプラクティスなのです。</p>\n<p>必要に応じて、個々のビューは、 <a class=\"reference internal\" href=\"/ja/5.0/topics/http/decorators/#django.views.decorators.common.no_append_slash\" title=\"django.views.decorators.common.no_append_slash\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">no_append_slash()</span></code></a> デコレータを使用して、<code class=\"docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code> の動作から除外できます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.decorators.common</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">no_append_slash</span>\n\n\n<span class=\"nd\">@no_append_slash</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">sensitive_fbv</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;View to be excluded from APPEND_SLASH.&quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">()</span>\n</code></pre></div>\n</li>\n<li><p>非ストリーミングレスポンスに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Length</span></code> ヘッダを設定します。</p></li>\n</ul>\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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>デフォルトは <a class=\"reference internal\" href=\"/ja/5.0/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> です。ミドルウェアが発行するリダイレクトをカスタマイズするには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">CommonMiddleware</span></code> をサブクラス化し、この属性をオーバーライドします。</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<ul class=\"simple\">\n<li><p>壊れたリンクの通知メールを <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MANAGERS</span></code></a> に送信します (詳細は <a class=\"reference internal\" href=\"/ja/5.0/howto/error-reporting/\"><span class=\"doc\">エラーレポートの管理</span></a> を参照)。</p></li>\n</ul>\n</section>\n<section id=\"module-django.middleware.gzip\">\n<span id=\"gzip-middleware\"></span><h3>GZip middleware<a class=\"heading-anchor\" href=\"#module-django.middleware.gzip\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.middleware.gzip.GZipMiddleware.max_random_bytes\">\n<span class=\"sig-name descname\"><span class=\"pre\">max_random_bytes</span></span><a class=\"heading-anchor\" href=\"#django.middleware.gzip.GZipMiddleware.max_random_bytes\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>デフォルトは 100 です。 圧縮されたレスポンスに含まれるランダムバイトの最大数を変更するには、<code class=\"docutils literal notranslate\"><span class=\"pre\">GZipMiddleware</span></code> をサブクラス化して属性をオーバーライドしてください。</p>\n</dd></dl>\n\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>セキュリティ研究者たちは、Webサイトで <code class=\"docutils literal notranslate\"><span class=\"pre\">GZipMiddleware</span></code> を含む圧縮技術が使用されると、そのサイトが多くの潜在的な攻撃にさらされる可能性があることを明らかにしました。</p>\n<p>攻撃を軽減するために、Django は <em>Heal The Breach (HTB)</em> と呼ばれる技術を実装しています。攻撃の効果を軽減するため、各レスポンスに最大で 100 バイトまでのランダムなバイト (詳細は <a class=\"reference internal\" href=\"#django.middleware.gzip.GZipMiddleware.max_random_bytes\" title=\"django.middleware.gzip.GZipMiddleware.max_random_bytes\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">max_random_bytes</span></code></a> を参照) を追加します。</p>\n<p>詳細については、 <a class=\"reference external\" href=\"https://www.breachattack.com/resources/BREACH%20-%20SSL,%20gone%20in%2030%20seconds.pdf\">BREACH paper (PDF)</a> 、<a class=\"reference external\" href=\"https://www.breachattack.com/\">breachattack.com</a>、そして <a class=\"reference external\" href=\"https://ieeexplore.ieee.org/document/9754554\">Heal The Breach (HTB) paper</a> を参照してください。</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"4.2\">\n<p class=\"version-note-title\">Changed in Django 4.2</p><p>BREACH 攻撃に対する緩和策が追加されました。</p>\n</aside>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.middleware.gzip.GZipMiddleware</span></code> は、GZip 圧縮に対応したブラウザ(すべてのモダンブラウザ)のためにコンテンツを圧縮します。</p>\n<p>このミドルウェアは、レスポンスボディを読み書きする必要がある他のミドルウェアよりも前に配置するべきです。圧縮がその後に行われるようにするためです。</p>\n<p>次のいずれかが当てはまる場合、コンテンツは圧縮されません:</p>\n<ul class=\"simple\">\n<li><p>コンテンツ・ボディの長さが200バイト未満。</p></li>\n<li><p>レスポンスがすでに <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Encoding</span></code> ヘッダを設定している。</p></li>\n<li><p>リクエスト（ブラウザ）が <code class=\"docutils literal notranslate\"><span class=\"pre\">Accept-Encoding</span></code> ヘッダに <code class=\"docutils literal notranslate\"><span class=\"pre\">gzip</span></code> を含んでいない。</p></li>\n</ul>\n<p>もしレスポンスに <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code> ヘッダーがあれば、ETag は、<span class=\"target\" id=\"index-2\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc9110.html#section-8.8.1\"><strong>RFC 9110 Section 8.8.1</strong></a> に準拠するために弱い形式になります。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/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> デコレータを使用して、個別のビューに GZip 圧縮を適用できます。</p>\n</section>\n<section id=\"module-django.middleware.http\">\n<span id=\"conditional-get-middleware\"></span><h3>Conditional GET middleware<a class=\"heading-anchor\" href=\"#module-django.middleware.http\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>条件付きGET操作を扱います。レスポンスに <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code> ヘッダーがない場合、必要に応じてミドルウェアが追加します。レスポンスに <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">Last-Modified</span></code> ヘッダーがあり、リクエストに <code class=\"docutils literal notranslate\"><span class=\"pre\">If-None-Match</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">If-Modified-Since</span></code> がある場合、レスポンスは <a class=\"reference internal\" href=\"/ja/5.0/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</section>\n<section id=\"module-django.middleware.locale\">\n<span id=\"locale-middleware\"></span><h3>Locale ミドルウェア<a class=\"heading-anchor\" href=\"#module-django.middleware.locale\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>リクエストからのデータに基づいた言語セクションを有効化します。この機能は、それぞれのユーザに対してコンテンツをカスタマイズします。 <a class=\"reference internal\" href=\"/ja/5.0/topics/i18n/translation/\"><span class=\"doc\">国際化のドキュメント</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>デフォルトは <a class=\"reference internal\" href=\"/ja/5.0/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> です。<code class=\"docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code> をサブクラス化して属性をオーバーライドし、ミドルウェアによって発行されたリダイレクトをカスタマイズします。</p>\n</section>\n<section id=\"module-django.contrib.messages.middleware\">\n<span id=\"message-middleware\"></span><h3>Message ミドルウェア<a class=\"heading-anchor\" href=\"#module-django.contrib.messages.middleware\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>クッキーおよびセッションをベースとしたメッセージサポートを有効化します。<a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/messages/\"><span class=\"doc\">メッセージのドキュメント</span></a> を参照してください。</p>\n</section>\n<section id=\"module-django.middleware.security\">\n<span id=\"id1\"></span><span id=\"security-middleware\"></span><h3>Security middleware<a class=\"heading-anchor\" href=\"#module-django.middleware.security\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>デプロイメントの状況によっては、通常、フロントエンドのウェブサーバーが <code class=\"docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code> が提供する機能を実行するのが良いです。これにより、Djangoで処理されないリクエスト（静的メディアやユーザーがアップロードしたファイルなど）も、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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.middleware.security.SecurityMiddleware</span></code> は、リクエスト/レスポンスサイクルに複数のセキュリティ強化機能を提供します。それぞれの機能は、設定を使って個別に有効または無効にできます。</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/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=\"/ja/5.0/ref/settings/#std-setting-SECURE_CROSS_ORIGIN_OPENER_POLICY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_CROSS_ORIGIN_OPENER_POLICY</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/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=\"/ja/5.0/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=\"/ja/5.0/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=\"/ja/5.0/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=\"/ja/5.0/ref/settings/#std-setting-SECURE_REFERRER_POLICY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_REFERRER_POLICY</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/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=\"/ja/5.0/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>HTTP Strict Transport Security<a class=\"heading-anchor\" href=\"#http-strict-transport-security\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>HTTPSでのみアクセスする必要のあるサイトでは、  <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security\">&quot;Strict-Transport-Security&quot; header</a> を設定することで、一定期間、モダンブラウザに対して、セキュアでない接続を通じてドメイン名に接続しないように指示できます。これにより、SSLストリッピング型の中間者攻撃 (MITM) に対するリスクを軽減できます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code> は、<a class=\"reference internal\" href=\"/ja/5.0/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> 設定をゼロ以外の整数値に設定すると、すべての HTTPS レスポンスに対してこのヘッダーを自動的に設定します。</p>\n<p>HSTSを有効にする際には、最初に小さい値をテスト用に使用することをお勧めします。たとえば、1時間の場合は <a class=\"reference internal\" href=\"/ja/5.0/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> です。ウェブブラウザがあなたのサイトからHSTSヘッダーを検知するたびに、指定された期間、非セキュアな通信(HTTPを使用)をあなたのドメインと行うことを拒否します。サイト上の全てのアセットが安全に提供されていること(つまり、HSTSが何も壊していないこと)を確認できたら、頻繁でない訪問者も保護されるようにこの値を増やすことをお勧めします(一般的には31536000秒、すなわち1年が普通です)。</p>\n<p>また、<a class=\"reference internal\" href=\"/ja/5.0/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> は <code class=\"docutils literal notranslate\"><span class=\"pre\">Strict-Transport-Security</span></code> ヘッダーに <code class=\"docutils literal notranslate\"><span class=\"pre\">includeSubDomains</span></code> ディレクティブを追加します。これは推奨です (すべてのサブドメインが HTTPS を使用してのみ提供されている場合)。それ以外の場合、サイトはまだサブドメインへの安全でない接続を介して脆弱になる可能性があります。</p>\n<p><a class=\"reference external\" href=\"https://hstspreload.org/\">browser preload list</a> にサイトを登録する場合は、 <a class=\"reference internal\" href=\"/ja/5.0/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> に設定してください。これにより、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Strict-Transport-Security</span></code> ヘッダーに <code class=\"docutils literal notranslate\"><span class=\"pre\">preload</span></code> ディレクティブが追加されます。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>HSTSポリシーは、ヘッダーを設定したレスポンスのURLだけでなく、ドメイン全体に適用されます。したがって、ドメイン全体がHTTPS経由のみで提供される場合にのみ使用すべきです。</p>\n<p>HSTSヘッダーを適切に尊重するブラウザは、期限切れ、自己署名、またはその他の無効なSSL証明書を持つサイトに警告をバイパスして接続することをユーザーに許可しません。HSTSを使用する場合は、証明書が適切な状態にあることを確認し、維持してください！</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>ロードバランサーやリバースプロキシサーバーの後ろに配置されている場合、そして <code class=\"docutils literal notranslate\"><span class=\"pre\">Strict-Transport-Security</span></code> ヘッダーがレスポンスに追加されていない場合は、Djangoが安全な接続上にあることを認識していない可能性があります。その場合、<a class=\"reference internal\" href=\"/ja/5.0/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=\"referrer-policy\">\n<span id=\"id4\"></span><h4>リファラ・ポリシー<a class=\"heading-anchor\" href=\"#referrer-policy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>ブラウザは、ユーザーがどのようにそのサイトに到達したかについての情報をサイトに送信する手段として、 <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer\">the Referer header</a> を使用します。ユーザーがリンクをクリックすると、ブラウザはリファラとしてリンク元ページの完全な URL を送信します。これにより、誰があなたのサイトにリンクしているかを特定するなどの目的には役立ちますが、同時に、ユーザーが別のサイトを訪れていたことを1つのサイトに通知することでプライバシー上の懸念が引き起こされる可能性もあります。</p>\n<p>一部のブラウザには、ユーザーがリンクをクリックした際に HTTP <code class=\"docutils literal notranslate\"><span class=\"pre\">Referer</span></code> ヘッダを送信すべきかについてのヒントを受け入れる機能があります。このヒントは <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy\">the Referrer-Policy header</a> を介して提供されます。このヘッダは、ブラウザに対して3つの動作のいずれかを提案できます:</p>\n<ul class=\"simple\">\n<li><p>完全なURL: <code class=\"docutils literal notranslate\"><span class=\"pre\">Referer</span></code> ヘッダーには、完全なURLを送信します。たとえば、ユーザーが <code class=\"docutils literal notranslate\"><span class=\"pre\">https://example.com/page.html</span></code> を訪問している場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">Referer</span></code> ヘッダーには <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;https://example.com/page.html&quot;</span></code> が含まれます。</p></li>\n<li><p>Origin のみ: referrerには &quot;origin&quot; のみを送信します。origin はスキーム、ホスト、(オプションで) ポート番号から構成されます。例えば、ユーザーが <code class=\"docutils literal notranslate\"><span class=\"pre\">https://example.com/page.html</span></code> を訪問している場合、origin は <code class=\"docutils literal notranslate\"><span class=\"pre\">https://example.com/</span></code> となります。</p></li>\n<li><p>リファラなし: <code class=\"docutils literal notranslate\"><span class=\"pre\">Referer</span></code> ヘッダーを一切送信しません。</p></li>\n</ul>\n<p>このヘッダーがブラウザーに注意を促す条件は2種類あります:</p>\n<ul class=\"simple\">\n<li><p>同一オリジンとクロスオリジン: <code class=\"docutils literal notranslate\"><span class=\"pre\">https://example.com/1.html</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">https://example.com/2.html</span></code> へのリンクは同一オリジンです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">https://example.com/page.html</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">https://not.example.com/page.html</span></code> へのリンクはクロスオリジンです。</p></li>\n<li><p>プロトコルのダウングレード: リンクを含むページがHTTPS経由で提供されている場合、リンク先のページがHTTPS経由で提供されていない場合にダウングレードが発生します。</p></li>\n</ul>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>サイトが HTTPS 経由で提供される場合、<a class=\"reference internal\" href=\"/ja/5.0/ref/csrf/#how-csrf-works\"><span class=\"std std-ref\">Django の CSRF 保護システム</span></a> は <code class=\"docutils literal notranslate\"><span class=\"pre\">Referer</span></code> ヘッダーが存在することを要求するので、<code class=\"docutils literal notranslate\"><span class=\"pre\">Referer</span></code> ヘッダーを完全に無効にすることは CSRF 保護の妨げになります。 <code class=\"docutils literal notranslate\"><span class=\"pre\">Referer</span></code> ヘッダーを無効にすることの多くの利点を享受しつつ、CSRF 保護も維持するには、同一オリジンのリファラーのみを有効にすることを検討してください。</p>\n</aside>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code> は、<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-SECURE_REFERRER_POLICY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_REFERRER_POLICY</span></code></a> 設定に基づいて <code class=\"docutils literal notranslate\"><span class=\"pre\">Referrer-Policy</span></code> ヘッダを設定できます（スペルに注意: ブラウザはユーザーがリンクをクリックすると <code class=\"docutils literal notranslate\"><span class=\"pre\">Referer</span></code> ヘッダを送信しますが、ブラウザにこれを行うかどうかを指示するヘッダは <code class=\"docutils literal notranslate\"><span class=\"pre\">Referrer-Policy</span></code> と綴られます）。この設定の有効な値は次の通りです:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">no-referrer</span></code></dt><dd><p>このサイト上でクリックされたリンクに対して、ブラウザにリファラを送信しないよう指示します。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">no-referrer-when-downgrade</span></code></dt><dd><p>ブラウザに、プロトコルのダウングレードが発生しない時にのみ、完全なURLをリファラとして送信するよう指示します。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">origin</span></code></dt><dd><p>ブラウザに、リファラとして完全な URL ではなく、オリジンのみを送信するよう指示します。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">origin-when-cross-origin</span></code></dt><dd><p>ブラウザに、同一オリジンのリンクでは完全なURLをリファラとして送信するように指示し、クロスオリジンのリンクではオリジンのみを送信するようにします。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">same-origin</span></code></dt><dd><p>ブラウザに対し、同一オリジンのリンクについては完全なURLを送信するよう指示します。クロスオリジンのリンクに対しては、リファラは送信されません。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">strict-origin</span></code></dt><dd><p>ブラウザに、プロトコルのダウングレードが発生した場合に、完全なURLではなくオリジンのみを送信するよう指示し、リファラを送信しないようにします。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">strict-origin-when-cross-origin</span></code></dt><dd><p>同一オリジンでプロトコルのダウングレードが発生しない場合、ブラウザには完全なURLを送信するよう指示します。クロスオリジンでプロトコルのダウングレードが発生しない場合、ブラウザにはオリジンのみを送信するよう指示します。プロトコルのダウングレードが発生する場合はリファラを送信しません。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">unsafe-url</span></code></dt><dd><p>ブラウザに常に完全なURLをリファラとして送信するよう指示します。</p>\n</dd>\n</dl>\n<aside class=\"admonition-unknown-policy-values admonition\">\n<p class=\"admonition-title\">ポリシーの値が unknown の場合</p>\n<p>ユーザーエージェントによってポリシー値が <a class=\"reference external\" href=\"https://w3c.github.io/webappsec-referrer-policy/#unknown-policy-values\">unknown</a> とされた場合、フォールバックを提供するために複数のポリシー値を指定できます。解釈可能な最後に指定された値が優先されます。これをサポートするために、イテラブルもしくはカンマで区切られた文字列が <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-SECURE_REFERRER_POLICY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_REFERRER_POLICY</span></code></a> の設定として使用できます。</p>\n</aside>\n</section>\n<section id=\"cross-origin-opener-policy\">\n<span id=\"id8\"></span><h4>同一生成元ポリシー (Cross-Origin Opener Policy)<a class=\"heading-anchor\" href=\"#cross-origin-opener-policy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>一部のブラウザは、 <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy\">Cross-Origin Opener Policy</a> (COOP) ヘッダーの値に基づいて、トップレベルウィンドウを他のドキュメントから分離する能力を持っています。この分離によって、特定のドキュメントがクロスオリジンのポップアップウィンドウを開いた場合、そのポップアップの <code class=\"docutils literal notranslate\"><span class=\"pre\">window.opener</span></code> プロパティは <code class=\"docutils literal notranslate\"><span class=\"pre\">null</span></code> になります。COOP を使用したウィンドウの分離は、特に Spectre のような、共有されたブラウジングコンテキストに読み込まれたデータの外部への持ち出しを可能にしたクロスオリジン攻撃に対する深層防御保護です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code> は、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-SECURE_CROSS_ORIGIN_OPENER_POLICY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SECURE_CROSS_ORIGIN_OPENER_POLICY</span></code></a> 設定に基づいて、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Cross-Origin-Opener-Policy</span></code> ヘッダーを設定できます。この設定の有効な値は以下の通りです:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">same-origin</span></code></dt><dd><p>同じオリジンのドキュメントに閲覧コンテキストを排他的に限定します。異なるオリジンのドキュメントは同じ閲覧コンテキストで読み込まれません。これがデフォルトで最も安全なオプションです。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">same-origin-allow-popups</span></code></dt><dd><p>ブラウジングコンテキストを同一オリジンのドキュメントに限定します。または、COOP を設定しないドキュメントや、COOP を <code class=\"docutils literal notranslate\"><span class=\"pre\">unsafe-none</span></code> に設定して隔離からオプトアウトするドキュメントに限定します。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">unsafe-none</span></code></dt><dd><p>ドキュメントを、オープナー自体が <code class=\"docutils literal notranslate\"><span class=\"pre\">same-origin</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">same-origin-allow-popups</span></code> のCOOPを持っている場合を除いて、そのオープナーのブラウジングコンテキストグループに追加できるようにします。</p>\n</dd>\n</dl>\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\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>一部のブラウザーは、取得したアセットのコンテンツタイプを推測し、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code> ヘッダーを上書きしようとします。これは不適切に設定されたサーバーのサイトを表示する際に役立つことがありますが、セキュリティリスクをもたらすこともあります。</p>\n<p>サイトがユーザーがアップロードしたファイルを提供する場合、悪意のあるユーザーが特別に作成したファイルをアップロードする可能性があります。そのファイルが無害なものだと思っていたのに、ブラウザでHTMLまたはJavaScriptとして解釈されてしまう恐れがあります。</p>\n<p>ブラウザがコンテンツタイプを推測し、常に <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code> ヘッダーで提供されたタイプを使用するように強制するために、<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> ヘッダーを渡すことができます。 <a class=\"reference internal\" href=\"/ja/5.0/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> 設定が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> であれば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code> は全てのレスポンスに対してこれを行います。</p>\n<p>ほとんどのデプロイ状況では、ユーザーがアップロードしたファイルの配信に Django が関与しないため、この設定は助けになりません。たとえば、<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a> がフロントエンドのウェブサーバー (nginx や Apache など) から直接配信される場合は、このヘッダーを設定することをおすすめします。一方で、たとえばもし認可が必要なファイルをダウンロードするために Django を使用していて、ウェブサーバーを使ってヘッダーを設定することができない場合、この設定が役に立つでしょう。</p>\n</section>\n<section id=\"ssl-redirect\">\n<span id=\"id11\"></span><h4>SSL リダイレクト<a class=\"heading-anchor\" href=\"#ssl-redirect\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>サイトが HTTP と HTTPS 接続の両方をサポートしている場合、多くのユーザーはデフォルトでセキュアでない接続を行ってしまいます。最善のセキュリティのためには、すべての HTTP 接続を HTTPS 接続にリダイレクトするべきです。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/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> 設定を True に設定すれば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">SecurityMiddleware</span></code> が すべての HTTP 接続を HTTPS に parmanent (HTTP 301) にリダイレクトしてくれます。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>パフォーマンス上の理由により、このようなリダイレクトは Django の外部、フロントエンドのロードバランサーや <a class=\"reference external\" href=\"https://nginx.org/\">nginx</a> などのリバースプロキシサーバーで実行した方が良いです。 <a class=\"reference internal\" href=\"/ja/5.0/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>\n</aside>\n<p><a class=\"reference internal\" href=\"/ja/5.0/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>\n<p>サイトのいくつかのページをHTTP経由で利用可能にし、HTTPSにリダイレクトされないようにしたい場合は、 <a class=\"reference internal\" href=\"/ja/5.0/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> 設定にそれらのURLに一致する正規表現をリストアップできます。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>ロードバランサーやリバースプロキシサーバーの後ろにデプロイしており、Django がリクエストが既に安全であるかどうかを正しく判断できない場合は、 <a class=\"reference internal\" href=\"/ja/5.0/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>Session middleware<a class=\"heading-anchor\" href=\"#module-django.contrib.sessions.middleware\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>セッションのサポートを有効にします。詳しくは <a class=\"reference internal\" href=\"/ja/5.0/topics/http/sessions/\"><span class=\"doc\">セッションのドキュメント</span></a> を読んでください。</p>\n</section>\n<section id=\"module-django.contrib.sites.middleware\">\n<span id=\"site-middleware\"></span><h3>Site ミドルウェア<a class=\"heading-anchor\" href=\"#module-django.contrib.sites.middleware\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>受信側のすべての <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> オブジェクトに、現在のサイトを表す <code class=\"docutils literal notranslate\"><span class=\"pre\">site</span></code> 属性を追加します。詳しくは <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/sites/#site-middleware\"><span class=\"std std-ref\">sites のドキュメント</span></a> を参照してください。</p>\n</section>\n<section id=\"module-django.contrib.auth.middleware\">\n<span id=\"authentication-middleware\"></span><h3>Authentication middleware<a class=\"heading-anchor\" href=\"#module-django.contrib.auth.middleware\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> オブジェクトに対して、現在ログインしているユーザーを表す <code class=\"docutils literal notranslate\"><span class=\"pre\">user</span></code> 属性を追加します。<a class=\"reference internal\" href=\"/ja/5.0/topics/auth/default/#auth-web-requests\"><span class=\"std std-ref\">ウェブリクエストにおける認証</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Web サーバーが提供する認証を利用するためのミドルウェアです。使用方法の詳細については <a class=\"reference internal\" href=\"/ja/5.0/howto/auth-remote-user/\"><span class=\"doc\">REMOTE_USER で認証する</span></a> を参照してください。</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>ログインページでのみ有効にした場合の、Webサーバー提供の認証を利用するためのミドルウェアです。使い方の詳細については、 <a class=\"reference internal\" href=\"/ja/5.0/howto/auth-remote-user/#persistent-remote-user-middleware-howto\"><span class=\"std std-ref\">ログインページでのみ REMOTE_USER を使用する</span></a> を参照してください。</p>\n</section>\n<section id=\"csrf-protection-middleware\">\n<h3>CSRF プロテクション middleware<a class=\"heading-anchor\" href=\"#csrf-protection-middleware\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>POST フォームに隠しフォームフィールドを追加し、リクエストの値が正しいかチェックすることで、Cross Site Request Forgery に対するプロテクションを追加します。詳しくは <a class=\"reference internal\" href=\"/ja/5.0/ref/csrf/\"><span class=\"doc\">Cross Site Request Forgery プロテクションのドキュメント</span></a> を読んでください。</p>\n</section>\n<section id=\"x-frame-options-middleware\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">X-Frame-Options</span></code> middleware<a class=\"heading-anchor\" href=\"#x-frame-options-middleware\"><span class=\"visually-hidden\">Link to this heading</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\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>シンプルな <a class=\"reference internal\" href=\"/ja/5.0/ref/clickjacking/\"><span class=\"doc\">クリックジャッキングに対する X-Frame-Options ヘッダ経由のプロテクション</span></a> です。</p>\n</section>\n</section>\n<section id=\"middleware-ordering\">\n<span id=\"id12\"></span><h2>Middleware の順序<a class=\"heading-anchor\" href=\"#middleware-ordering\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>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>SSL リダイレクトを有効にしているなら、他のたくさんの必要のないミドルウェアが実行されないように、リストの先頭付近に置くべきです。</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><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>response body を変更・使用する可能性のあるミドルウェアの前に置きます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> ヘッダを修正するため、 <code class=\"docutils literal notranslate\"><span class=\"pre\">UpdateCacheMiddleware</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><a class=\"reference internal\" href=\"/ja/5.0/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> を使用している場合、例えば <a class=\"reference internal\" href=\"/ja/5.0/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">PermissionDenied</span></code></a> のようなエラービューをトリガーする例外を発生させる可能性のあるミドルウェアよりも前に配置してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> ヘッダを修正するため、 <code class=\"docutils literal notranslate\"><span class=\"pre\">UpdateCacheMiddleware</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>レスポンスを変更する可能性があるミドルウェアよりも前に設定してください (これは <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code> ヘッダを設定します)。</p>\n<p>gzip されたコンテンツに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">ETag</span></code> ヘッダを計算しないように、 <code class=\"docutils literal notranslate\"><span class=\"pre\">GZipMiddleware</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><code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code> (session データを使う) と <code class=\"docutils literal notranslate\"><span class=\"pre\">UpdateCacheMiddleware</span></code> (<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>レスポンスを変更する可能性のあるミドルウェアの前に配置します (<code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Length</span></code> ヘッダーを設定します)。 <code class=\"docutils literal notranslate\"><span class=\"pre\">CommonMiddleware</span></code> の前に配置され、レスポンスを変更するミドルウェアは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Length</span></code> をリセットする必要があります。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APPEND_SLASH</span></code></a> か <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-PREPEND_WWW\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">PREPEND_WWW</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> に設定されているとリダイレクトされるので、先頭の近くに置きます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code> の後に、 <a class=\"reference internal\" href=\"/ja/5.0/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.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>CSRF 攻撃が可能なすべての view ミドルウェアの前に置きます。</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.auth.middleware.RemoteUserMiddleware\" title=\"django.contrib.auth.middleware.RemoteUserMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RemoteUserMiddleware</span></code></a> の前、あるいはログインを実行し、CSRF トークンをローテートする可能性のある他の認証ミドルウェアの前、ミドルウェアチェインを呼び出す前に置きます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code> の後に、 <a class=\"reference internal\" href=\"/ja/5.0/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>session ストレージを使うので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code> の後に置きます。</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>session ベースの storage を使うので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionMiddleware</span></code> の後に置きます。</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>キャッシュのハッシュキーを生成するのに <code class=\"docutils literal notranslate\"><span class=\"pre\">Vary</span></code> ヘッダを使用するため、このヘッダを修正するすべてのミドルウェアのあとに置きます。</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/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>最後に実行されるタイプのミドルウェアなので、できるだけ下に置く必要があります。</p>\n</li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/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>最後に実行されるタイプのミドルウェアなので、できるだけ下に置く必要があります。</p>\n</li>\n</ol>\n</section>","rootId":"module-django.middleware","toc":[{"title":"使用できる middleware","anchor":"available-middleware","children":[{"title":"Cache middleware","anchor":"module-django.middleware.cache","children":[]},{"title":"Common middleware","anchor":"module-django.middleware.common","children":[]},{"title":"GZip middleware","anchor":"module-django.middleware.gzip","children":[]},{"title":"Conditional GET middleware","anchor":"module-django.middleware.http","children":[]},{"title":"Locale ミドルウェア","anchor":"module-django.middleware.locale","children":[]},{"title":"Message ミドルウェア","anchor":"module-django.contrib.messages.middleware","children":[]},{"title":"Security middleware","anchor":"module-django.middleware.security","children":[{"title":"HTTP Strict Transport Security","anchor":"http-strict-transport-security","children":[]},{"title":"リファラ・ポリシー","anchor":"referrer-policy","children":[]},{"title":"同一生成元ポリシー (Cross-Origin Opener Policy)","anchor":"cross-origin-opener-policy","children":[]},{"title":"X-Content-Type-Options: nosniff","anchor":"x-content-type-options-nosniff","children":[]},{"title":"SSL リダイレクト","anchor":"ssl-redirect","children":[]}]},{"title":"Session middleware","anchor":"module-django.contrib.sessions.middleware","children":[]},{"title":"Site ミドルウェア","anchor":"module-django.contrib.sites.middleware","children":[]},{"title":"Authentication middleware","anchor":"module-django.contrib.auth.middleware","children":[]},{"title":"CSRF プロテクション middleware","anchor":"csrf-protection-middleware","children":[]},{"title":"X-Frame-Options middleware","anchor":"x-frame-options-middleware","children":[]}]},{"title":"Middleware の順序","anchor":"middleware-ordering","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API リファレンス","url":"/ja/5.0/ref/"}],"prev":{"docname":"ref/logging","title":"ロギング","url":"/ja/5.0/ref/logging/"},"next":{"docname":"ref/migration-operations","title":"マイグレーション・オペレーション","url":"/ja/5.0/ref/migration-operations/"},"formats":{"html":"/ja/5.0/ref/middleware/","markdown":"/ja/5.0/ref/middleware.md","json":"/ja/5.0/ref/middleware.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/middleware.txt","official":"https://docs.djangoproject.com/ja/5.0/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","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}