Разница между заголовками 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.