aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/http/headers/cache-control
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:40:17 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:40:17 -0500
commit33058f2b292b3a581333bdfb21b8f671898c5060 (patch)
tree51c3e392513ec574331b2d3f85c394445ea803c6 /files/zh-cn/web/http/headers/cache-control
parent8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff)
downloadtranslated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz
translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2
translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip
initial commit
Diffstat (limited to 'files/zh-cn/web/http/headers/cache-control')
-rw-r--r--files/zh-cn/web/http/headers/cache-control/index.html184
1 files changed, 184 insertions, 0 deletions
diff --git a/files/zh-cn/web/http/headers/cache-control/index.html b/files/zh-cn/web/http/headers/cache-control/index.html
new file mode 100644
index 0000000000..0e11a8d059
--- /dev/null
+++ b/files/zh-cn/web/http/headers/cache-control/index.html
@@ -0,0 +1,184 @@
+---
+title: Cache-Control
+slug: Web/HTTP/Headers/Cache-Control
+tags:
+ - Cache-Control
+ - HTTP
+ - 请求头
+translation_of: Web/HTTP/Headers/Cache-Control
+---
+<div>{{HTTPSidebar}}</div>
+
+<p><code><font face="Open Sans, Arial, sans-serif"> </font><strong>Cache-Control</strong></code> 通用消息头字段,被用于在http请求和响应中,通过指定指令来实现缓存机制。缓存指令是单向的,这意味着在请求中设置的指令,不一定被包含在响应中。</p>
+
+<table class="properties">
+ <tbody>
+ <tr>
+ <th scope="row">Header type </th>
+ <td>{{Glossary("General header")}}</td>
+ </tr>
+ <tr>
+ <th scope="row">{{Glossary("Forbidden header name")}}</th>
+ <td>no</td>
+ </tr>
+ <tr>
+ <th scope="row">{{Glossary("Simple response header", "CORS-safelisted response-header")}}</th>
+ <td>yes</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="语法">语法</h2>
+
+<p>指令不区分大小写,并且具有可选参数,可以用令牌或者带引号的字符串语法。多个指令以逗号分隔。</p>
+
+<h3 id="缓存请求指令">缓存请求指令</h3>
+
+<p>客户端可以在HTTP请求中使用的标准 Cache-Control 指令。</p>
+
+<pre class="syntaxbox">Cache-Control: max-age=&lt;seconds&gt;
+Cache-Control: max-stale[=&lt;seconds&gt;]
+Cache-Control: min-fresh=&lt;seconds&gt;
+Cache-control: no-cache
+Cache-control: no-store
+Cache-control: no-transform
+Cache-control: only-if-cached
+</pre>
+
+<h3 id="缓存响应指令">缓存响应指令</h3>
+
+<p>服务器可以在响应中使用的标准 Cache-Control 指令。</p>
+
+<pre class="syntaxbox">Cache-control: must-revalidate
+Cache-control: no-cache
+Cache-control: no-store
+Cache-control: no-transform
+Cache-control: public
+Cache-control: private
+Cache-control: proxy-revalidate
+Cache-Control: max-age=&lt;seconds&gt;
+Cache-control: s-maxage=&lt;seconds&gt;
+</pre>
+
+<h3 id="扩展Cache-Control指令"> 扩展<code>Cache-Control</code>指令</h3>
+
+<p>拓展缓存指令不是核心HTTP缓存标准文档的一部分,使用前请注意检查<a href="#浏览器兼容性">兼容性</a>!</p>
+
+<pre class="syntaxbox">Cache-control: immutable
+Cache-control: stale-while-revalidate=&lt;seconds&gt;
+Cache-control: stale-if-error=&lt;seconds&gt;
+</pre>
+
+<h2 id="指令">指令</h2>
+
+<h3 id="可缓存性">可缓存性</h3>
+
+<dl>
+ <dt><code>public</code></dt>
+ <dd>表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存,即使是通常不可缓存的内容。(例如:1.该响应没有<code>max-age</code>指令或<code>Expires</code>消息头;2. 该响应对应的请求方法是 <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST">POST</a> 。)</dd>
+ <dt><code>private</code></dt>
+ <dd>表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。私有缓存可以缓存响应内容,比如:对应用户的本地浏览器。</dd>
+ <dt><code>no-cache</code></dt>
+ <dd>在发布缓存副本之前,强制要求缓存把请求提交给原始服务器进行验证(协商缓存验证)。</dd>
+ <dt><code>no-store</code></dt>
+ <dd>缓存不应存储有关客户端请求或服务器响应的任何内容,即不使用任何缓存。</dd>
+</dl>
+
+<h3 id="到期">到期</h3>
+
+<dl>
+ <dt><code>max-age=&lt;seconds&gt;</code></dt>
+ <dd>设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。与<code>Expires</code>相反,时间是相对于请求的时间。</dd>
+ <dt><code>s-maxage=&lt;seconds&gt;</code></dt>
+ <dd>覆盖<code>max-age</code>或者<code>Expires</code>头,但是仅适用于共享缓存(比如各个代理),私有缓存会忽略它。</dd>
+ <dt><code>max-stale[=&lt;seconds&gt;]</code></dt>
+ <dd>表明客户端愿意接收一个已经过期的资源。可以设置一个可选的秒数,表示响应不能已经过时超过该给定的时间。</dd>
+ <dt><code>min-fresh=&lt;seconds&gt;</code></dt>
+ <dd>表示客户端希望获取一个能在指定的秒数内保持其最新状态的响应。</dd>
+ <dt><code>stale-while-revalidate=&lt;seconds&gt;</code> {{experimental_inline}}</dt>
+ <dd>表明客户端愿意接受陈旧的响应,同时在后台异步检查新的响应。秒值指示客户愿意接受陈旧响应的时间长度。</dd>
+ <dt><code>stale-if-error=&lt;seconds&gt;</code> {{experimental_inline}}</dt>
+ <dd>表示如果新的检查失败,则客户愿意接受陈旧的响应。秒数值表示客户在初始到期后愿意接受陈旧响应的时间。</dd>
+</dl>
+
+<h3 id="重新验证和重新加载">重新验证和重新加载</h3>
+
+<dl>
+ <dt><code>must-revalidate</code></dt>
+ <dd>一旦资源过期(比如已经超过<code>max-age</code>),在成功向原始服务器验证之前,缓存不能用该资源响应后续请求。</dd>
+ <dt><code>proxy-revalidate</code></dt>
+ <dd>与must-revalidate作用相同,但它仅适用于共享缓存(例如代理),并被私有缓存忽略。</dd>
+ <dt><code>immutable</code> {{experimental_inline}}</dt>
+ <dd>表示响应正文不会随时间而改变。资源(如果未过期)在服务器上不发生改变,因此客户端不应发送重新验证请求头(例如<code>If-None-Match</code>或I<code>f-Modified-Since</code>)来检查更新,即使用户显式地刷新页面。在Firefox中,immutable只能被用在 <code>https://</code> transactions. 有关更多信息,请参阅<a href="http://bitsup.blogspot.de/2016/05/cache-control-immutable.html">这里</a>。</dd>
+</dl>
+
+<h3 id="其他">其他</h3>
+
+<dl>
+ <dt><code>no-transform</code></dt>
+ <dd>不得对资源进行转换或转变。<code>Content-Encoding</code>、<code>Content-Range</code>、<code>Content-Type</code>等HTTP头不能由代理修改。例如,非透明代理或者如<a href="https://support.google.com/webmasters/answer/6211428?hl=en">Google's Light Mode</a>可能对图像格式进行转换,以便节省缓存空间或者减少缓慢链路上的流量。<code>no-transform</code>指令不允许这样做。</dd>
+ <dt><code>only-if-cached</code></dt>
+ <dd>表明客户端只接受已缓存的响应,并且不要向原始服务器检查是否有更新的拷贝。</dd>
+</dl>
+
+<h2 id="示例">示例</h2>
+
+<h3 id="禁止缓存">禁止缓存</h3>
+
+<p>发送如下响应头可以关闭缓存。此外,可以参考<code>Expires</code>和<code>Pragma</code>消息头。</p>
+
+<pre>Cache-Control: no-store
+</pre>
+
+<h3 id="缓存静态资源">缓存静态资源</h3>
+
+<p>对于应用程序中不会改变的文件,你通常可以在发送响应头前添加积极缓存。这包括例如由应用程序提供的静态文件,例如图像,CSS文件和JavaScript文件。另请参阅Expires标题。</p>
+
+<pre>Cache-Control:public, max-age=31536000</pre>
+
+<h3 id="需要重新验证">需要重新验证</h3>
+
+<p>指定 <code>no-cache</code> 或 <code>max-age=0</code> 表示客户端可以缓存资源,每次使用缓存资源前都必须重新验证其有效性。这意味着每次都会发起 HTTP 请求,但当缓存内容仍有效时可以跳过 HTTP 响应体的下载。</p>
+
+<pre>Cache-Control: no-cache
+Cache-Control: max-age=0</pre>
+
+<h2 id="规范">规范</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Title</th>
+ </tr>
+ <tr>
+ <td>{{RFC("7234")}}</td>
+ <td>Hypertext Transfer Protocol (HTTP/1.1): Caching</td>
+ </tr>
+ <tr>
+ <td>{{RFC("5861")}}</td>
+ <td>HTTP Cache-Control Extensions for Stale Content</td>
+ </tr>
+ <tr>
+ <td><a href="https://tools.ietf.org/html/draft-mcmanus-immutable-00">draft-mcmanus-immutable-00</a></td>
+ <td>HTTP Immutable Responses</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="浏览器兼容性">浏览器兼容性</h2>
+
+<p class="hidden">此页面中的兼容性表是根据结构化数据生成的。如果你想为数据做出贡献,请访问 <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> 并提交 pull request。</p>
+
+<p>{{Compat("http.headers.Cache-Control")}}</p>
+
+<h2 id="参见">参见</h2>
+
+<ul>
+ <li><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ">HTTP Caching FAQ</a></li>
+ <li><a href="https://www.mnot.net/cache_docs/">Caching Tutorial for Web Authors and Webmasters</a></li>
+ <li>Guide: <em><a href="https://csswizardry.com/2019/03/cache-control-for-civilians"><code>Cache-Control</code> for civilians</a></em></li>
+ <li>{{HTTPHeader("Age")}}</li>
+ <li>{{HTTPHeader("Expires")}}</li>
+ <li>{{HTTPHeader("Pragma")}}</li>
+</ul>