Я прочитал о заголовке Pragma в Википедии, где написано:
«Поле заголовка Pragma: no-cache - это заголовок HTTP / 1.0, предназначенный для использования в запросах. Он позволяет браузеру сообщать серверу и любым промежуточным кешам, что ему нужна свежая версия ресурса, а не сервера. сказать браузеру не кэшировать ресурс. Некоторые пользовательские агенты обращают внимание на этот заголовок в ответах, но RFC HTTP / 1.1 специально предупреждает против использования такого поведения ».
Но я не понял, что он делает? В чем разница между Cache-Control
заголовком, значение которого no-cache
и Pragma
значение которого также no-cache
?
источник
Pragma: no-cache
предназначен для использования только в запросах (что означает «я хочу оригинал, а не кэшированную копию»), и его поведение не указано для ответов.Cache-Control: no-cache
имеет то же значение для запросов, но на самом деле также определено для ответов, что означает «Если вы хотите использовать кэшированную копию этого в будущем, вы должны сначала проверить со мной, что она актуальна (т.е. выполнить повторную проверку)».max-age
что не мешает кешированию. Он просто устанавливает срок годности для него ...Разницы нет, за исключением того, что
Pragma
она определяется только как применимая к запросам клиента, тогда какCache-Control
может использоваться как запросами клиентов, так и ответами серверов.Таким образом, что касается стандартов, их можно сравнивать только с точки зрения клиента, выполняющего запросы, и сервера, получающего запрос от клиента. Http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32 определяет сценарий следующим образом :
Способ, которым я прочитал бы выше:
если вы пишете клиент и нуждаетесь в
no-cache
:Pragma: no-cache
в своих запросах, так как вы можете не знать,Cache-Control
поддерживается ли сервер;Cache-Control
если вы пишете сервер:
Cache-Control
; если не найден, проверьтеPragma: no-cache
и выполнитеCache-Control: no-cache
логику;Cache-Control
.Конечно, реальность может отличаться от того, что написано или подразумевается в RFC!
источник
Cache-Control: max-age=86400
аPragma: no-cache
? Какой из них тогда будет удостоен чести современных браузеров?Pragma: no-cache
оно определено только для запросов от браузера, и, таким образом, оно будет полностью недействительным и неопределенным в ответах от сервера к браузеру, например, я думаю, что каждый браузер (будь то современный или не) следует игнорировать такой заголовок в любом ответе, который он может получить.Если это после 1999 года, и вы все еще используете Expires или Pragma , вы делаете это неправильно.
Я смотрю на тебя Stackoverflow:
tl; dr:
Pragma
является наследием HTTP / 1.0 и не требуется с Internet Explorer 5 или Netscape 4.7. Если вы не ожидаете, что некоторые из ваших пользователей будут использовать IE5: безопасно прекратить его использование.[date]
(устарело - HTTP 1.0)[seconds]
И условные запросы:
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
источник
Pragma
вообще. (В HTTP / 1.0 Pragma была определена как расширяемое поле для заданных реализацией директив для получателей. В этой спецификации не рекомендуется использовать такие расширения для улучшения взаимодействия.)