Разница между заголовками Pragma и Cache-control?

Я прочитал о заголовке Pragma в Википедии, где написано:

"Поле заголовка Pragma: no-cache - это заголовок HTTP/1.0, предназначенный для использования в запросах. Он позволяет браузеру сообщать серверу и любым промежуточным кешам, что ему нужна свежая версия ресурса, а не сервера. сказать браузеру не кэшировать ресурс. Некоторые пользовательские агенты обращают внимание на этот заголовок в ответах, но HTTP/1.1 RFC специально предупреждает против использования такого поведения ".

Но я не понял, что он делает? В чем разница между Cache-Control заголовок, значение которого no-cache а также Pragma чья ценность также no-cache?

3 ответа

Решение

Pragma является реализацией HTTP/1.0 и cache-control HTTP/1.1 реализация той же концепции. Они оба предназначены для предотвращения кэширования ответа клиентом. Старые клиенты могут не поддерживать HTTP/1.1, поэтому этот заголовок все еще используется.

Там нет разницы, кроме того, что Pragma определяется только как применимый к запросам клиента, тогда как Cache-Control могут использоваться как запросами клиентов, так и ответами серверов.

Таким образом, что касается стандартов, их можно сравнивать только с точки зрения клиента, выполняющего запросы, и сервера, получающего запрос от клиента. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html определяет сценарий следующим образом:

Кэши 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

Способ, которым я прочитал бы выше:

  • если вы пишете клиент и нуждаетесь no-cache:

    • просто используйте Pragma: no-cache в ваших запросах, так как вы можете не знать, если Cache-Control поддерживается сервером;
    • но в ответах, чтобы решить, стоит ли кэшировать, проверьте Cache-Control
  • если вы пишете сервер:

    • при разборе запросов от клиентов проверьте Cache-Control; если не найден, проверьте Pragma: no-cacheи выполнить Cache-Control: no-cache логика;
    • в ответах предоставьте Cache-Control,

Конечно, реальность может отличаться от того, что написано или подразумевается в RFC!

| Stop using          | Replace with                     |
| (HTTP 1.0)          | (HTTP 1.1 - 1999)                |
|---------------------|----------------------------------|
| Expires: [date]     | Cache-Control: max-age=[seconds] |
| Pragma: no-cache    | Cache-Control: nocache           |

Если это после 1999 года, и вы все еще используете Expires или Pragma, вы делаете это неправильно.

Я смотрю на тебя Stackru:

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

ТЛ; др: Pragma является наследием HTTP/1.0 и не требуется с Internet Explorer 5 или Netscape 4.7.

Другие вопросы по тегам