1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
---
title: Cache-Control
slug: Web/HTTP/Headers/Cache-Control
tags:
- Кеширование
translation_of: Web/HTTP/Headers/Cache-Control
original_slug: Web/HTTP/Заголовки/Cache-Control
---
<div>{{HTTPSidebar}}</div>
<p>Общий заголовок <strong><code>Cache-Control</code></strong> используется для задания инструкций кеширования как для запросов, так и для ответов. Инструкции кеширования однонаправленные: заданная инструкция в запросе не подразумевает, что такая же инструкция будет указана в ответе</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>нет</td>
</tr>
<tr>
<th scope="row">{{Glossary("Simple response header", "CORS-safelisted response-header")}}</th>
<td>да</td>
</tr>
</tbody>
</table>
<h2 id="Синтаксис">Синтаксис</h2>
<p>Инструкции не чувствительны к регистру и имеют необязательный аргумент, который может быть указан как в кавычках, так и без них. Несколько инструкций разделяются запятыми.</p>
<h3 id="Инструкции_кеширования_для_запросов">Инструкции кеширования для запросов</h3>
<p>Стандартные инструкции <code>Cache-Control</code>, которые могут задаваться клиентом для HTTP запроса.</p>
<pre class="syntaxbox">Cache-Control: max-age=<seconds>
Cache-Control: max-stale[=<seconds>]
Cache-Control: min-fresh=<seconds>
Cache-Control: no-cache
Cache-Control: no-store
Cache-Control: no-transform
Cache-Control: only-if-cached
</pre>
<h3 id="Инструкции_кеширования_для_ответов">Инструкции кеширования для ответов</h3>
<p>Стандартные инструкции <code>Cache-Control</code>, которые могут задаваться сервером для HTTP ответа.</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=<seconds>
Cache-Control: s-maxage=<seconds>
</pre>
<h3 id="Расширенные_инструкции_Cache-Control">Расширенные инструкции <code>Cache-Control</code></h3>
<p>Расширенные инструкции <code>Cache-Control</code> не являются частью базовых стандартов, описывающих кеширование в HTTP. В <a href="#Browser_compatibility">таблице совместимости</a> указаны браузеры, которые поддерживают расширенные инструкции.</p>
<pre class="syntaxbox">Cache-Control: immutable
Cache-Control: stale-while-revalidate=<seconds>
Cache-Control: stale-if-error=<seconds>
</pre>
<h2 id="Инструкции">Инструкции</h2>
<h3 id="Управление_кешированием">Управление кешированием</h3>
<dl>
<dt><code>public</code></dt>
<dd>Указывает, что ответ может быть закеширован в любом кеше.</dd>
<dt><code>private</code></dt>
<dd>Указывает, что ответ предназначен для одного пользователя и не должен помещаться в разделяемый кеш. Частный кеш может хранить ресурс.</dd>
<dt><code>no-cache</code></dt>
<dd>Указывает на необходимость отправить запрос на сервер для валидации ресурса перед использованием закешированных данных.</dd>
<dt><code>only-if-cached</code></dt>
<dd>Указывает на необходимость использования только закешированных данных. Запрос на сервер не должен посылаться.</dd>
</dl>
<h3 id="Управление_временем_жизни">Управление временем жизни</h3>
<dl>
<dt><code>max-age=<seconds></code></dt>
<dd>Задаёт максимальное время в течение которого ресурс будет считаться актуальным. В отличие от <code>Expires</code>, данная инструкция является относительной по отношению ко времени запроса.</dd>
<dt><code>s-maxage=<seconds></code></dt>
<dd>Переопределяет <code>max-age</code> или заголовок <code>Expires</code>, но применяется только для разделяемых кешей (например, прокси) и игнорируется частными кешами.</dd>
<dt><code>max-stale[=<seconds>]</code></dt>
<dd>Указывает, что клиент хочет получить ответ, для которого было превышено время устаревания. Дополнительно может быть указано значение в секундах, указывающее, что ответ не должен быть просрочен более чем на указанное значение.</dd>
<dt><code>min-fresh=<seconds></code></dt>
<dd>Указывает, что клиент хочет получить ответ, который будет актуален как минимум указанное количество секунд.</dd>
<dt><code>stale-while-revalidate=<seconds></code> {{experimental_inline}}</dt>
<dd>Указывает, что клиент хочет получить просроченный ответ, одновременно осуществляя фоновую проверку наличия свежих данных. Значение в секундах обозначает, какое время клиент желает получать просроченный ответ.</dd>
<dt><code>stale-if-error=<seconds></code> {{experimental_inline}}</dt>
<dd>...</dd>
</dl>
<h3 id="Управление_ревалидацией_и_перезагрузкой">Управление ревалидацией и перезагрузкой</h3>
<dl>
<dt><code>must-revalidate</code></dt>
<dd>Кеш должен проверить статус устаревших ресурсов перед их использованием. Просроченные ресурсы не должны быть использованы.</dd>
<dt><code>proxy-revalidate</code></dt>
<dd>То же самое, что <code>must-revalidate</code>, но применимо только к разделяемым кешам (например, прокси) и игнорируется частными кешами.</dd>
<dt><code>immutable</code></dt>
<dd>Indicates that the response body will not change over time. The resource, if unexpired, is unchanged on the server and therefore the client should not send a conditional revalidation for it (e.g. <code>If-None-Match</code> or <code>If-Modified-Since</code>) to check for updates, even when the user explicitly refreshes the page. Clients that aren't aware of this extension must ignore them as per the HTTP specification. In Firefox, <code>immutable</code> is only honored on <code>https://</code> transactions. For more information, see also this <a href="http://bitsup.blogspot.de/2016/05/cache-control-immutable.html">blog post</a>.</dd>
</dl>
<h3 id="Другие_инструкции">Другие инструкции</h3>
<dl>
<dt><code>no-store</code></dt>
<dd>Кеш не должен хранить никакую информацию о запросе и ответе</dd>
<dt><code>no-transform</code></dt>
<dd>Никакие преобразования не должны применяться к ресурсу. Заголовки <code>Content-Encoding</code>, <code>Content-Range</code>, <code>Content-Type</code> не должны изменяться прокси. Непрозрачный прокси может, например, конвертировать изображения из одного формата в другой для сохранения дискового пространства или уменьшения трафика. Инструкция <code>no-transform</code> запрещает это.</dd>
</dl>
<h2 id="Примеры">Примеры</h2>
<h3 id="Выключение_кеширования">Выключение кеширования</h3>
<p>Для выключения кеширования возможно добавить следующий заголовок к ответу. Дополнительно см. заголовки <code>Expires</code> и <code>Pragma</code>.</p>
<pre class="brush: bash">Cache-Control: no-cache, no-store, must-revalidate
</pre>
<h3 id="Кеширование_статического_контента">Кеширование статического контента</h3>
<p>Для файлов, которые не будут изменяться обычно возможно применить агрессивное кеширование, отослав ответ с заголовком ниже. Например, такой ответ может быть послан для изображений, файлов CSS и JavaScript. Дополнительно см. заголовок <code>Expires</code>.</p>
<pre class="brush: bash">Cache-Control: public, max-age=31536000</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>{{RFC("8246")}}</td>
<td>HTTP Immutable Responses</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.Cache-Control")}}</p>
<h2 id="Смотрите_также">Смотрите также</h2>
<ul>
<li><a href="/en-US/docs/Web/HTTP/Caching_FAQ">HTTP Caching FAQ</a></li>
<li>{{HTTPHeader("Age")}}</li>
<li>{{HTTPHeader("Expires")}}</li>
<li>{{HTTPHeader("Pragma")}}</li>
</ul>
|