diff options
author | Artyom Liou <10079456+artyomliou@users.noreply.github.com> | 2021-04-27 09:14:33 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-27 09:14:33 +0800 |
commit | 9cfcd5144d3dad3766d7a369e3e8f922a8ee6dc1 (patch) | |
tree | be2e935fb1a998061f0b1f198c62ffa274c90f31 /files/zh-tw/web/http | |
parent | a1711eaef7357451a07140b41bb970bc3c0e0ccb (diff) | |
download | translated-content-9cfcd5144d3dad3766d7a369e3e8f922a8ee6dc1.tar.gz translated-content-9cfcd5144d3dad3766d7a369e3e8f922a8ee6dc1.tar.bz2 translated-content-9cfcd5144d3dad3766d7a369e3e8f922a8ee6dc1.zip |
http/headers/cache-control (zh-TW translation) (#658)
* Cache-Control (zh-TW translation)
* fix: 移除多餘空白、替換括號、略為修正譯文
Diffstat (limited to 'files/zh-tw/web/http')
-rw-r--r-- | files/zh-tw/web/http/headers/cache-control/index.html | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/files/zh-tw/web/http/headers/cache-control/index.html b/files/zh-tw/web/http/headers/cache-control/index.html new file mode 100644 index 0000000000..f52d0c9c0a --- /dev/null +++ b/files/zh-tw/web/http/headers/cache-control/index.html @@ -0,0 +1,219 @@ +--- +title: Cache-Control +slug: Web/HTTP/Headers/Cache-Control +tags: + - Cache-Control + - General Header + - HTTP + - HTTP Header + - Reference +--- +<div>{{HTTPSidebar}}</div> + +<p><span class="seoSummary"><strong><code>Cache-Control</code></strong> 標頭中的<em>指令</em>用來控制 HTTP 請求、回應的<a href="/en-US/docs/Web/HTTP/Caching">快取</a>行為。HTTP 請求跟回應可以擁有不同的快取控制指令。</span></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("CORS-safelisted response header")}}</th> + <td>yes</td> + </tr> + </tbody> +</table> + +<h2 id="Syntax">語法</h2> + +<p>快取指令必須遵守這些規則:</p> + +<ul> + <li>大小寫沒差(但儘量用小寫)</li> + <li>指令之間用逗號(,)分開</li> + <li>Some directives have an optional argument, which can be either a <em>token</em> or a <em>quoted-string</em>. (See spec for definitions)</li> +</ul> + +<h3 id="Cache_request_directives">請求用指令</h3> + +<p>可以在 HTTP 請求中使用的標準 <code>Cache-Control</code> 指令</p> + +<pre class="brush: html">Cache-Control: max-age=<秒數> +Cache-Control: max-stale[=<秒數>] +Cache-Control: min-fresh=<秒數> +Cache-Control: no-cache +Cache-Control: no-store +Cache-Control: no-transform +Cache-Control: only-if-cached +</pre> + +<h3 id="Cache_response_directives">回應用指令</h3> + +<p>可以在 HTTP 回應中使用的標準 <code>Cache-Control</code> 指令</p> + +<pre class="brush: html">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=<秒數> +Cache-Control: s-maxage=<秒數> +</pre> + +<h3 id="Extension_Cache-Control_directives">擴充 Cache-Control 指令</h3> + +<p>這些擴充的 <code>Cache-Control</code> 指令不是 HTTP 快取的核心標準。使用前請檢查<a href="#browser_compatibility">相容性</a>,客戶端會直接忽略不支援的指令。</p> + +<pre class="brush: html">Cache-Control: immutable +Cache-Control: stale-while-revalidate=<秒數> +Cache-Control: stale-if-error=<秒數> +</pre> + +<h2 id="Directives">指令</h2> + +<h3 id="Cacheability">可快取性</h3> + +<p>這些指令定義 HTTP 請求/回應是否可以做快取、儲存在哪,以及使用前是否要跟後端伺服器做驗證</p> + +<dl> + <dt><code>public</code></dt> + <dd>此回應可以被<em>任何快取軟體</em>儲存起來,即使它本身通常是不可快取的。</dd> + <dt><code>private</code></dt> + <dd>此回應只可以被<em>瀏覽器</em>儲存起來,即使它本身通常是不可快取的。<strong>如果你真的不要任何快取軟體儲存你的回應,可以使用 <code>no-store</code> 。</strong><em>這個指令不是用來防止快取軟體儲存回應的。</em></dd> + <dt><code>no-cache</code></dt> + <dd>此回應可以被<em>任何快取軟體</em>儲存起來,即使它本身通常是不可快取的。不過,在使用儲存起來的 HTTP 回應之前,<em>必須</em>必須向後端伺服器做驗證,因此你不能拿 <code>no-cache</code> 跟 <code>immutable</code> 一起使用。<strong>如果你真的不要任何快取軟體儲存你的回應,可以使用 <code>no-store</code> 。</strong><em>這個指令不是用來防止快取軟體儲存回應的。</em></dd> + <dt><code>no-store</code></dt> + <dd>此回應<strong>不能</strong>被<em>任何快取軟體</em>儲存起來。當然它無法防止 <em>先前儲存起來</em> 的回應被回傳。客戶端可以用 <code>max-age=0</code> 來清除快取,並強制向後端伺服器做驗證。(其他指令跟 <code>no-store</code> 一起使用都無效)</dd> +</dl> + +<h3 id="Expiration">過期</h3> + +<dl> + <dt><code>max-age=<秒數></code></dt> + <dd>快取有效的最大時間。跟 <code>Expires</code> 不一樣,這個指令是相對於請求當下的時間。</dd> + <dt><code>s-maxage=<秒數></code></dt> + <dd>覆寫 <code>max-age</code> 或者 <code>Expires</code> 標頭,不過只對共用快取軟體生效(比如 nginx)。私有快取會無視這個指令。</dd> + <dt><code>max-stale[=<秒數>]</code></dt> + <dd>表示客戶端可以接受過期回應。可以宣告客戶端最多能接受過期多久。</dd> + <dt><code>min-fresh=<秒數></code></dt> + <dd>表示客戶端想要有效時間<em>至少</em>在指定秒數以上的回應。</dd> + <dt><code>stale-while-revalidate=<秒數></code> {{Experimental_Inline}}</dt> + <dd>表示客戶端可以接受過期回應,但同時在背景檢查最新版本。<em>秒數</em>用來控制客戶端最多能接受過期多久。何時過期取決於 <code>max-age</code> 的值。想了解更多細節請到 "<a href="https://web.dev/stale-while-revalidate">Keeping things fresh with <code>stale-while-revalidate</code></a>" 。</dd> + <dt><code>stale-if-error=<秒數></code> {{Experimental_Inline}}</dt> + <dd>表示客戶端會執行驗證,若驗證錯誤了就直接使用過期回應。<em>秒數</em>用來控制客戶端最多能接受過期多久。</dd> +</dl> + +<h3 id="Revalidation_and_reloading">驗證與重新讀取</h3> + +<dl> + <dt><code>must-revalidate</code></dt> + <dd>表示一旦過期,必須向後端伺服器做<a href="/en-US/docs/Web/HTTP/Caching#cache_validation">驗證</a>。</dd> + <dt><code>proxy-revalidate</code></dt> + <dd>跟 <code>must-revalidate</code> 類似,不過只對共用快取軟體生效(比如 nginx)。私有快取會無視這個指令。</dd> + <dt><code>immutable</code></dt> + <dd>表示回應內容<strong>不會改變</strong> 。這個資源<em>不會過期</em>,因此即使使用者手動重新整理頁面,客戶端也不會用驗證標頭 (比如 <code>If-None-Match</code> 或 <code>If-Modified-Since</code>)。 Clients that aren't aware of this extension must ignore them as per the HTTP specification. 在 Firefox 中, <code>immutable</code> 只有在使用 <code>https://</code> 時會生效。想知道更多資訊,可以閱讀<a href="https://bitsup.blogspot.de/2016/05/cache-control-immutable.html">這篇文章</a>。</dd> +</dl> + +<h3 id="Other">其他</h3> + +<dl> + <dt><code>no-transform</code></dt> + <dd>位於中間的快取軟體或代理軟體不能修改回應內容、{{HTTPHeader("Content-Encoding")}}、{{HTTPHeader("Content-Range")}}、{{HTTPHeader("Content-Type")}}。因此它可能造成某些代理軟體或瀏覽器的功能失效,比如說 <a href="https://support.google.com/webmasters/answer/6211428">Google’s Web Light</a>可以替很慢的網路事先壓縮圖片。</dd> + <dt><code>only-if-cached</code></dt> + <dd>由<em>客戶端</em>設定,表示不想經由網路得到回應。所以快取軟體可能會回傳先前儲存的回應,或者是 {{HTTPStatus("504")}} 狀態碼。使用驗證標頭如 <code>If-None-Match</code> 是沒有意義的。由伺服器在 HTTP 回應中設定 <code>only-if-cached</code> 指令也沒有意義。</dd> +</dl> + +<h2 id="Examples">範例</h2> + +<h3 id="Preventing_caching">防止被快取</h3> + +<p>想要禁止快取一個資源,你可以在回應中設定這個標頭:</p> + +<dl> + <dt>Good:</dt> + <dd> + <pre class="example-good brush: http no-line-numbers">Cache-Control: no-store</pre> + + <div class="notecard note"> + <p>這個 <code>no-store</code> 指令使得回應再也不會被儲存,但它無法防止使用先前儲存、而且仍有效的快取。多設定 <code>max-age=0</code> 可以強制執行驗證(也就會清除既有快取)。</p> + + <pre class="brush: html">Cache-Control: no-store, max-age=0 +</pre> + </div> + </dd> + <dt>Bad:</dt> + <dd> + <pre class="example-bad brush: http no-line-numbers">Cache-Control: private,no-cache,no-store,max-age=0,must-revalidate,pre-check=0,post-check=0</pre> + </dd> +</dl> + +<h3 id="Caching_static_assets">快取靜態檔案</h3> + +<p>對於那些不會更新的檔案,你可以在回應中使用下列這個激進的標頭。比如說用在圖片、CSS 檔案,以及 JavaScript 檔案。附帶一提,也可以看看 <code>Expires</code> 標頭。</p> + +<pre class="brush: http no-line-numbers">Cache-Control: public, max-age=604800, immutable +</pre> + +<h3 id="Requiring_revalidation">必須執行驗證</h3> + +<p><code>no-cache</code>、<code>max-age=0, must-revalidate</code> 是同樣的意思。<br> + 表示客戶端可以儲存資源,但使用它前必須做驗證。這表示每次都會發生 HTTP 請求,不過只要沒過期就不用下載完整內容</p> + +<pre class="brush: http no-line-numbers">Cache-Control: no-cache</pre> + +<pre class="brush: http no-line-numbers">Cache-Control: max-age=0, must-revalidate</pre> + +<p><strong>附帶一提</strong>: 這個設定可以在伺服器掛掉的時候使用過期資源</p> + +<pre class="brush: http no-line-numbers">Cache-Control: max-age=0</pre> + +<h2 id="Specifications">Specifications</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{RFC(8246, "HTTP Immutable Responses")}}</td> + <td><span class="spec-RFC">IETF RFC</span></td> + <td></td> + </tr> + <tr> + <td>{{RFC(7234, "Hypertext Transfer Protocol (HTTP/1.1): Caching")}}</td> + <td><span class="spec-RFC">IETF RFC</span></td> + <td></td> + </tr> + <tr> + <td>{{RFC(5861, "HTTP Cache-Control Extensions for Stale Content")}}</td> + <td><span class="spec-RFC">IETF RFC</span></td> + <td>Initial definition</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility">Browser compatibility</h2> + +<p>{{Compat("http.headers.Cache-Control")}}</p> + +<h2 id="See_also">See also</h2> + +<ul> + <li><a href="/en-US/docs/Web/HTTP/Caching">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> |