Я читал о заголовке Pragma на Wikipedia, в котором говорится:
"Поле заголовка Pragma: no-cache - это заголовок HTTP/1.0, предназначенный для использовать в запросах. Это означает, что браузер должен сообщить серверу и любые промежуточные кеши, которые хотят новую версию ресурса, не для сервера, чтобы сообщить браузеру не кэшировать ресурс. Некоторые пользовательские агенты обращают внимание на этот заголовок в ответах, но HTTP/1.1 RFC специально предупреждает об этом, полагаясь на это поведение.
Но я не понял, что он делает? В чем разница между заголовком Cache-Control
, значение которого no-cache
и Pragma
, значение которого также равно no-cache
?
Ответ 1
Pragma
- это реализация HTTP/1.0, а cache-control
- реализация одного и того же понятия HTTP/1.1. Оба они предназначены для того, чтобы клиент не кэшировал ответ. Старые клиенты могут не поддерживать HTTP/1.1, поэтому этот заголовок все еще используется.
Ответ 2
Нет никакой разницы, кроме того, что Pragma
определяется только как применимый к запросам клиента, тогда как Cache-Control
может использоваться как запросами клиентов, так и ответами серверов.
Итак, что касается стандартов, их можно сравнить только с точки зрения клиента, делающего запросы, и сервера, получающего запрос от клиента. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32 определяет сценарий следующим образом:
HTTP/1.1 кеши ДОЛЖНЫ относиться к "Pragma: no-cache", как если бы клиент имел отправлено "Cache-Control: no-cache". Никаких новых директив Pragma не будет определенных в HTTP.
Note: because the meaning of "Pragma: no-cache as a response
header field is not actually specified, it does not provide a
reliable replacement for "Cache-Control: no-cache" in a response
Как я мог бы прочитать выше:
Конечно, реальность может отличаться от того, что написано или подразумевается в RFC!
Ответ 3
| Stop using | Replaced with |
| (HTTP 1.0) | (HTTP 1.1 - 1999) |
|---------------------|----------------------------------|
| Expires: [date] | Cache-Control: max-age=[seconds] |
| Pragma: no-cache | Cache-Control: no-cache |
Если после 1999 года вы все еще используете Expires или Pragma, вы делаете это неправильно.
Я смотрю на тебя Stackoverflow:
200 OK
Pragma: no-cache
Content-Type: application/json
X-Frame-Options: SAMEORIGIN
X-Request-Guid: a3433194-4a03-4206-91ea-6a40f9bfd824
Strict-Transport-Security: max-age=15552000
Content-Length: 54
Accept-Ranges: bytes
Date: Tue, 03 Apr 2018 19:03:12 GMT
Via: 1.1 varnish
Connection: keep-alive
X-Served-By: cache-yyz8333-YYZ
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1522782193.766958,VS0,VE30
Vary: Fastly-SSL
X-DNS-Prefetch-Control: off
Cache-Control: private
tl; dr: Pragma
является наследием HTTP/1.0 и не требуется с Internet Explorer 5 или Netscape 4.7. Если вы не ожидаете, что некоторые из ваших пользователей будут использовать IE5: безопасно прекратить его использовать.
- Истекает:
[date]
(устарело - HTTP 1.0) - Pragma: no-cache (устарело - HTTP 1.0)
- Cache-Control: max-age =
[seconds]
- Cache-Control: no-cache (необходимо каждый раз повторно проверять кэшированную копию)
И условные запросы:
- Условные запросы на основе тегов Etag (entity tag)
- Сервер:
Etag: W/"1d2e7–1648e509289"
- Клиент:
If-None-Match: W/"1d2e7–1648e509289"
- Сервер:
304 Not Modified
- Измененные условные запросы на основе даты
- Сервер:
last-modified: Thu, 09 May 2019 19:15:47 GMT
- Клиент:
If-Modified-Since: Fri, 13 Jul 2018 10:49:23 GMT
- Сервер:
304 Not Modified
Последнее изменение: четверг, 09 мая 2019 г., 19:15:47 GMT