aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/http/headers
diff options
context:
space:
mode:
authorFlorian Dieminger <me@fiji-flo.de>2021-02-11 18:29:51 +0100
committerGitHub <noreply@github.com>2021-02-11 18:29:51 +0100
commit2bc5610921312613f8623f7ed347aa576689b2b6 (patch)
treef17a7a00e232c97d1335ff3cb24dbcfafacfe141 /files/zh-cn/web/http/headers
parent964decad361766e85d928a56f0ab80af0e75c172 (diff)
parentfc56124ac4eda6b3f0349c8a16fa750f27b4c7d6 (diff)
downloadtranslated-content-2bc5610921312613f8623f7ed347aa576689b2b6.tar.gz
translated-content-2bc5610921312613f8623f7ed347aa576689b2b6.tar.bz2
translated-content-2bc5610921312613f8623f7ed347aa576689b2b6.zip
Merge pull request #32 from fiji-flo/unslugging-zh-cn
Unslugging zh cn
Diffstat (limited to 'files/zh-cn/web/http/headers')
-rw-r--r--files/zh-cn/web/http/headers/strict-transport-security/index.html122
-rw-r--r--files/zh-cn/web/http/headers/x-dns-prefetch-control/index.html98
-rw-r--r--files/zh-cn/web/http/headers/x-frame-options/index.html162
3 files changed, 382 insertions, 0 deletions
diff --git a/files/zh-cn/web/http/headers/strict-transport-security/index.html b/files/zh-cn/web/http/headers/strict-transport-security/index.html
new file mode 100644
index 0000000000..da1c441a5a
--- /dev/null
+++ b/files/zh-cn/web/http/headers/strict-transport-security/index.html
@@ -0,0 +1,122 @@
+---
+title: HTTP Strict Transport Security
+slug: Web/HTTP/Headers/Strict-Transport-Security
+tags:
+ - HSTS
+ - HTTP
+ - HTTPS
+ - Security
+ - header
+translation_of: Web/HTTP/Headers/Strict-Transport-Security
+original_slug: Web/HTTP/HTTP_Strict_Transport_Security
+---
+<div><code><strong> HTTP Strict Transport Security</strong></code>(通常简称为{{Glossary("HSTS")}})是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源,而不是<a href="/en/HTTP" title="en/HTTP">HTTP</a>。</div>
+
+<table class="properties">
+ <tbody>
+ <tr>
+ <th scope="row">Header type</th>
+ <td>{{Glossary("Response header")}}</td>
+ </tr>
+ <tr>
+ <th scope="row">{{Glossary("Forbidden header name")}}</th>
+ <td>no</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox notranslate">Strict-Transport-Security: max-age=&lt;expire-time&gt;
+Strict-Transport-Security: max-age=&lt;expire-time&gt;; includeSubDomains
+Strict-Transport-Security: max-age=&lt;expire-time&gt;; preload
+</pre>
+
+<h2 id="指令">指令</h2>
+
+<dl>
+ <dt><code>max-age=&lt;expire-time&gt;</code></dt>
+ <dd>设置在浏览器收到这个请求后的&lt;expire-time&gt;秒的时间内凡是访问这个域名下的请求都使用HTTPS请求。</dd>
+ <dt><code>includeSubDomains</code> {{optional_inline}}</dt>
+ <dd>如果这个可选的参数被指定,那么说明此规则也适用于该网站的所有子域名。</dd>
+ <dt><code>preload</code> {{optional_inline}}</dt>
+ <dd>查看 {{anch("预加载 HSTS")}} 获得详情。不是标准的一部分。</dd>
+</dl>
+
+<h2 id="描述">描述</h2>
+
+<p>一个网站接受一个HTTP的请求,然后跳转到HTTPS,用户可能在开始跳转前,通过没有加密的方式和服务器对话,比如,用户输入http://foo.com或者直接foo.com。</p>
+
+<p>这样存在中间人攻击潜在威胁,跳转过程可能被恶意网站利用来直接接触用户信息,而不是原来的加密信息。</p>
+
+<p>网站通过HTTP Strict Transport Security通知浏览器,这个网站禁止使用HTTP方式加载,浏览器应该自动把所有尝试使用HTTP的请求自动替换为HTTPS请求。</p>
+
+<div class="note">
+<p><strong>注意:</strong> <code>Strict-Transport-Security</code> 在通过 HTTP 访问时会被浏览器<strong>忽略;</strong> 因为攻击者可以通过中间人攻击的方式在连接中修改、注入或删除它.  只有在你的网站通过HTTPS访问并且没有证书错误时, 浏览器才认为你的网站支持HTTPS 然后使用 <code>Strict-Transport-Security</code> 的值 .</p>
+</div>
+
+<h3 id="浏览器如何处理">浏览器如何处理</h3>
+
+<p>你的网站第一次通过HTTPS请求,服务器响应<code>Strict-Transport-Security</code> 头,浏览器记录下这些信息,然后后面尝试访问这个网站的请求都会自动把HTTP替换为HTTPS。</p>
+
+<p>当HSTS头设置的过期时间到了,后面通过HTTP的访问恢复到正常模式,不会再自动跳转到HTTPS。</p>
+
+<p>每次浏览器接收到Strict-Transport-Security头,它都会更新这个网站的过期时间,所以网站可以刷新这些信息,防止过期发生。</p>
+
+<p>Chrome、Firefox等浏览器里,当您尝试访问该域名下的内容时,会产生一个307 Internal Redirect(内部跳转),自动跳转到HTTPS请求。</p>
+
+<h3 id="示例场景">示例场景</h3>
+
+<p>你连接到一个免费WiFi接入点,然后开始浏览网站,访问你的网上银行,查看你的支出,并且支付一些订单。很不幸,你接入的WiFi实际上是黑客的笔记本热点,他们拦截了你最初的HTTP请求,然后跳转到一个你银行网站一模一样的钓鱼网站。 现在,你的隐私数据暴露给黑客了。</p>
+
+<p>Strict Transport Security解决了这个问题;只要你通过HTTPS请求访问银行网站,并且银行网站配置好<span style="line-height: 1.5;">Strict Transport Security,你的浏览器知道自动使用HTTPS请求,这可以阻止黑客的中间人攻击的把戏。</span></p>
+
+<h2 id="预加载_HSTS">预加载 HSTS</h2>
+
+<p>谷歌维护着一个 <a href="https://hstspreload.appspot.com/">HSTS 预加载服务</a>。按照如下指示成功提交你的域名后,浏览器将会永不使用非安全的方式连接到你的域名。虽然该服务是由谷歌提供的,但所有浏览器都有使用这份列表的意向(或者已经在用了)。但是,这不是 HSTS 标准的一部分,也不该被当作正式的内容。</p>
+
+<ul>
+ <li>Chrome &amp; Chromium 的 HSTS 预加载列表: <a href="https://www.chromium.org/hsts">https://www.chromium.org/hsts</a></li>
+ <li>Firefox 的 HSTS 预加载列表:<a href="https://hg.mozilla.org/mozilla-central/raw-file/tip/security/manager/ssl/nsSTSPreloadList.inc">nsSTSPreloadList.inc</a></li>
+</ul>
+
+<h2 id="示例">示例</h2>
+
+<p>现在和未来的所有子域名会自动使用 HTTPS 连接长达一年。同时阻止了只能通过 HTTP 访问的内容。</p>
+
+<pre class="notranslate"><code>Strict-Transport-Security: max-age=31536000; includeSubDomains</code>
+</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">规范</th>
+ <th scope="col">状态</th>
+ <th scope="col">注释</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('HSTS')}}</td>
+ <td>{{Spec2('HSTS')}}</td>
+ <td>Initial definition</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容">浏览器兼容</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("http.headers.Strict-Transport-Security")}}</p>
+
+<h2 id="查看更多">查看更多</h2>
+
+<ul>
+ <li>Blog post: <a href="http://blog.sidstamm.com/2010/08/http-strict-transport-security-has.html">HTTP Strict Transport Security has landed!</a></li>
+ <li>Blog post: <a href="http://hacks.mozilla.org/2010/08/firefox-4-http-strict-transport-security-force-https/">HTTP Strict Transport Security (force HTTPS)</a></li>
+ <li>OWASP Article: <a href="https://www.owasp.org/index.php/HTTP_Strict_Transport_Security">HTTP Strict Transport Security</a></li>
+ <li>Wikipedia: <a href="http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security">HTTP Strict Transport Security</a></li>
+ <li>Google: <a href="http://www.zdnet.com/article/google-chrome-is-backing-away-from-public-key-pinning-and-heres-why/">Chrome is backing away from public key pinning, and here's why</a></li>
+ <li>Blog post: <a href="https://scotthelme.co.uk/a-new-security-header-expect-ct/">A new security header: Expect-CT</a></li>
+</ul>
diff --git a/files/zh-cn/web/http/headers/x-dns-prefetch-control/index.html b/files/zh-cn/web/http/headers/x-dns-prefetch-control/index.html
new file mode 100644
index 0000000000..fa88398051
--- /dev/null
+++ b/files/zh-cn/web/http/headers/x-dns-prefetch-control/index.html
@@ -0,0 +1,98 @@
+---
+title: X-DNS-Prefetch-Control
+slug: Web/HTTP/Headers/X-DNS-Prefetch-Control
+tags:
+ - DNS
+ - DNS prefetch
+ - HTTP
+ - 预解析
+translation_of: Web/HTTP/Headers/X-DNS-Prefetch-Control
+original_slug: Controlling_DNS_prefetching
+---
+<p>{{HTTPSidebar}}</p>
+
+<p><strong><code>X-DNS-Prefetch-Control</code></strong> 头控制着浏览器的 DNS 预读取功能。 DNS 预读取是一项使浏览器主动去执行域名解析的功能,其范围包括文档的所有链接,无论是图片的,CSS 的,还是 JavaScript 等其他用户能够点击的 URL。</p>
+
+<p>因为预读取会在后台执行,所以 {{glossary("DNS")}} 很可能在链接对应的东西出现之前就已经解析完毕。这能够减少用户点击链接时的延迟。</p>
+
+<table class="properties">
+ <tbody>
+ <tr>
+ <th scope="row">Header type</th>
+ <td>{{Glossary("Response header")}}</td>
+ </tr>
+ <tr>
+ <th scope="row">{{Glossary("Forbidden header name")}}</th>
+ <td>no</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="语法">语法</h2>
+
+<pre class="syntaxbox">X-DNS-Prefetch-Control: on
+X-DNS-Prefetch-Control: off
+</pre>
+
+<h3 id="参数">参数</h3>
+
+<dl>
+ <dt>on</dt>
+ <dd>启用 DNS 预解析。在浏览器支持 DNS 预解析的特性时即使不使用该标签浏览器依然会进行预解析。</dd>
+ <dt>off</dt>
+ <dd>关闭 DNS 预解析。这个属性在页面上的链接并不是由你控制的或是你根本不想向这些域名引导数据时是非常有用的。</dd>
+</dl>
+
+<h2 id="介绍">介绍</h2>
+
+<p>DNS 请求需要的带宽非常小,但是延迟却有点高,这一点在手机网络上特别明显。预读取 DNS 能让延迟明显减少一些,例如在用户点击链接时。在某些情况下,延迟能减少一秒钟。 </p>
+
+<p>在某些浏览器中这个预读取的行为将会与页面实际内容并行发生(而不是串行)。正因如此,某些高延迟的域名的解析过程才不会卡住资源的加载。</p>
+
+<p>这样可以极大的加速(尤其是移动网络环境下)页面的加载。在某些图片较多的页面中,在发起图片加载请求之前预先把域名解析好将会有至少 5% 的图片加载速度提升。</p>
+
+<h3 id="在浏览器中设置预读取配置">在浏览器中设置预读取配置</h3>
+
+<p>一般来说并不需要去管理预读取,但是可能会有用户希望关闭预读取功能。这时只需要将 <code>network.dns.disablePrefetch</code> 选项值设置为 <code>true</code> 就可以了。</p>
+
+<p>另外,默认情况下,通过 {{glossary("HTTPS")}} 加载的页面上内嵌链接的域名并不会执行预加载。在 Firefox 浏览器中,可以通过 about:config 设置 <code>network.dns.disablePrefetchFromHTTPS</code> 值为 <code>false</code> 来改变这一默认行为。</p>
+
+<h2 id="示例">示例</h2>
+
+<h3 id="打开和关闭_DNS_预读取">打开和关闭 DNS 预读取</h3>
+
+<p>你可以通过在服务器端发送 <code>X-DNS-Prefetch-Control</code> 报头,或是在文档中使用值为 {{ htmlattrxref("http-equiv") }} 的 {{ HTMLElement("meta") }} 标签:</p>
+
+<pre>&lt;meta http-equiv="x-dns-prefetch-control" content="off"&gt;
+</pre>
+
+<p>您可以通过将 <code>content</code> 的参数设置为“<code>on</code>”来改变设置。</p>
+
+<h3 id="强制查询特定主机名">强制查询特定主机名</h3>
+
+<p>你可以通过使用 {{ htmlattrxref("rel","link") }} 属性值为 <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types">link type</a> 中的 <code>dns-prefetch</code> 的 {{ HTMLElement("link") }} 标签来对特定域名进行预读取:</p>
+
+<pre class="brush: html">&lt;link rel="dns-prefetch" href="http://www.spreadfirefox.com/"&gt;
+</pre>
+
+<p>在这个例子中,Firefox 将预解析域名"<a class="linkification-ext external" href="http://www.spreadfirefox.com" title="Linkification: http://www.spreadfirefox.com">www.spreadfirefox.com</a>"。</p>
+
+<p>而且,{{ HTMLElement("link") }} 元素也可以使用不完整的 URL 的主机名来标记预解析,但这些主机名前必需要有双斜线:</p>
+
+<pre class="brush: html">&lt;link rel="dns-prefetch" href="//www.spreadfirefox.com"&gt;
+</pre>
+
+<p>强制对域名进行预读取在一些情况下很有用, 比如, 在网站的主页上,强制在整个网站上频繁引用的域名的预解析,即使它们不在主页本身上使用。即使主页的性能可能不受影响,这将提高整体站点性能。</p>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+
+
+<p>{{Compat("http.headers.X-DNS-Prefetch-Control")}}</p>
+
+<h2 id="参考">参考</h2>
+
+<ul>
+ <li><a class="external" href="http://bitsup.blogspot.com/2008/11/dns-prefetching-for-firefox.html">DNS Prefetching for Firefox (blog post)</a></li>
+ <li><a class="external" href="http://dev.chromium.org/developers/design-documents/dns-prefetching">Google Chrome handles DNS prefetching control</a></li>
+</ul>
diff --git a/files/zh-cn/web/http/headers/x-frame-options/index.html b/files/zh-cn/web/http/headers/x-frame-options/index.html
new file mode 100644
index 0000000000..22bc56158a
--- /dev/null
+++ b/files/zh-cn/web/http/headers/x-frame-options/index.html
@@ -0,0 +1,162 @@
+---
+title: X-Frame-Options
+slug: Web/HTTP/Headers/X-Frame-Options
+tags:
+ - HTTP
+ - 响应头
+ - 响应头部
+ - 安全性
+translation_of: Web/HTTP/Headers/X-Frame-Options
+original_slug: Web/HTTP/X-Frame-Options
+---
+<div>{{HTTPSidebar}}</div>
+
+<p>The <strong><code>X-Frame-Options</code></strong> <a href="/en-US/docs/Web/HTTP">HTTP</a> 响应头是用来给浏览器 指示允许一个页面 可否在 {{HTMLElement("frame")}}, {{HTMLElement("iframe")}}, {{HTMLElement("embed")}} 或者 {{HTMLElement("object")}} 中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 {{interwiki("wikipedia", "clickjacking")}} 攻击。</p>
+
+<p>The added security is only provided if the user accessing the document is using a browser supporting <code>X-Frame-Options</code>. {{HTTPHeader("Content-Security-Policy")}} HTTP 头中的 <a href="/en-US/docs/Security/CSP/CSP_policy_directives#frame-ancestors">frame-ancestors</a> 指令会<a href="https://www.w3.org/TR/CSP2/#frame-ancestors-and-frame-options">替代</a>这个非标准的 header。CSP 的 frame-ancestors 会在 {{Gecko("4.0")}} 中支持,但是并不会被所有浏览器支持。然而 <code>X-Frame-Options</code> 是个已广泛支持的非官方标准,可以和 CSP 结合使用。</p>
+
+<table class="properties">
+ <tbody>
+ <tr>
+ <th scope="row">Header type</th>
+ <td>{{Glossary("Response header")}}</td>
+ </tr>
+ <tr>
+ <th scope="row">{{Glossary("Forbidden header name")}}</th>
+ <td>no</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="语法">语法</h2>
+
+<p><code>X-Frame-Options</code> 有三个可能的值:</p>
+
+<pre class="syntaxbox">X-Frame-Options: deny
+X-Frame-Options: sameorigin
+X-Frame-Options: allow-from https://example.com/
+</pre>
+
+<h3 id="指南">指南</h3>
+
+<p>换一句话说,如果设置为 <code>deny</code>,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为<code>sameorigin</code>,那么页面就可以在同域名页面的 frame 中嵌套。</p>
+
+<dl>
+ <dt><code>deny</code></dt>
+ <dd>表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。</dd>
+ <dt><code>sameorigin</code></dt>
+ <dd>表示该页面可以在相同域名页面的 frame 中展示。</dd>
+ <dt><code>allow-from <em>uri</em></code></dt>
+ <dd>表示该页面可以在指定来源的 frame 中展示。</dd>
+</dl>
+
+<h2 id="例子">例子</h2>
+
+<div class="blockIndicator note">
+<p><strong>Note:</strong> 设置 meta 标签是无效的!例如 <code>&lt;meta http-equiv="X-Frame-Options" content="deny"&gt;</code> 没有任何效果。不要这样用!只有当像下面示例那样设置 HTTP 头 <code>X-Frame-Options</code> 才会生效。</p>
+</div>
+
+<h3 id="配置_Apache">配置 Apache</h3>
+
+<p>配置 Apache 在所有页面上发送 X-Frame-Options 响应头,需要把下面这行添加到 'site' 的配置中:</p>
+
+<pre>Header always set X-Frame-Options "sameorigin"
+</pre>
+
+<p>要将 Apache 的配置 <code>X-Frame-Options</code> 设置成 deny , 按如下配置去设置你的站点:</p>
+
+<pre>Header set X-Frame-Options "deny"
+</pre>
+
+<p>要将 Apache 的配置 <code>X-Frame-Options</code> 设置成 <code>allow-from</code>,在配置里添加:</p>
+
+<pre>Header set X-Frame-Options "allow-from https://example.com/"
+</pre>
+
+<h3 id="配置_nginx">配置 nginx</h3>
+
+<p>配置 nginx 发送 X-Frame-Options 响应头,把下面这行添加到 'http', 'server' 或者 'location' 的配置中:</p>
+
+<pre>add_header X-Frame-Options sameorigin always;
+</pre>
+
+<h3 id="配置_IIS">配置 IIS</h3>
+
+<p>配置 IIS 发送 <code>X-Frame-Options</code> 响应头,添加下面的配置到 Web.config 文件中:</p>
+
+<pre class="brush: xml">&lt;system.webServer&gt;
+ ...
+
+ &lt;httpProtocol&gt;
+ &lt;customHeaders&gt;
+ &lt;add name="X-Frame-Options" value="sameorigin" /&gt;
+ &lt;/customHeaders&gt;
+ &lt;/httpProtocol&gt;
+
+ ...
+&lt;/system.webServer&gt;
+</pre>
+
+<h3 id="配置_HAProxy">配置 HAProxy</h3>
+
+<p>配置 HAProxy 发送 <code>X-Frame-Options</code> 头,添加这些到你的前端、监听 listen,或者后端的配置里面:</p>
+
+<pre>rspadd X-Frame-Options:\ sameorigin
+</pre>
+
+<p>或者,在更加新的版本中:</p>
+
+<pre>http-response set-header X-Frame-Options sameorigin
+</pre>
+
+<h3 id="配置_Express">配置 Express</h3>
+
+<p>要配置 Express 可以发送 <code>X-Frame-Options</code> header,你可以用借助了 <a href="https://helmetjs.github.io/docs/frameguard/">frameguard</a> 来设置头部的 <a href="https://helmetjs.github.io/">helmet</a>。在你的服务器配置里面添加:</p>
+
+<pre class="brush: js">const helmet = require('helmet');
+const app = express();
+app.use(helmet.frameguard({ action: "sameorigin" }));
+</pre>
+
+<p>或者,你也可以直接用 <a href="https://helmetjs.github.io/docs/frameguard/">frameguard</a>:</p>
+
+<pre class="brush: js">const frameguard = require('frameguard')
+app.use(frameguard({ action: 'sameorigin' }))
+</pre>
+
+<h2 id="结果">结果</h2>
+
+<p>在 Firefox 尝试加载 frame 的内容时,如果 X-Frame-Options 响应头设置为禁止访问了,那么 Firefox 会用 about:blank 展现到 frame 中。也许从某种方面来讲的话,展示为错误消息会更好一点。</p>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">规范</th>
+ <th scope="col">标题</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{RFC("7034")}}</td>
+ <td>HTTP Header Field X-Frame-Options</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("http.headers.X-Frame-Options")}}</p>
+
+<h2 id="参见">参见</h2>
+
+<ul>
+ <li><a href="/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors"><code>frame-ancestors</code> (CSP)</a></li>
+ <li><a href="https://tools.ietf.org/html/rfc7034">HTTP Header Field X-Frame-Options - RFC 7034</a></li>
+ <li><a class="external" href="http://blogs.msdn.com/b/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx" title="http://blogs.msdn.com/b/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx">ClickJacking Defenses - IEBlog</a></li>
+ <li><a href="http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx" title="http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx">Combating ClickJacking with X-Frame-Options - IEInternals</a></li>
+ <li><a href="https://w3c.github.io/webappsec/specs/content-security-policy/#directive-frame-ancestors" title="https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#frame-src">CSP Level 2 frame-ancestors directive</a></li>
+</ul>