我在Wikipedia上读到有关Pragma标头的内容:
“ Pragma:no-cache头字段是供请求使用的HTTP / 1.0头。这是浏览器告诉服务器和任何中间缓存的一种手段,它想要的是资源的最新版本,而不是服务器告诉用户不要缓存资源。某些用户代理确实在响应中注意此标头,但是HTTP / 1.1 RFC特别警告不要依赖此行为。”
但是我不知道它做什么?是什么之间的差异Cache-Control
,其值是头no-cache
和Pragma
其值也no-cache
?
我在Wikipedia上读到有关Pragma标头的内容:
“ Pragma:no-cache头字段是供请求使用的HTTP / 1.0头。这是浏览器告诉服务器和任何中间缓存的一种手段,它想要的是资源的最新版本,而不是服务器告诉用户不要缓存资源。某些用户代理确实在响应中注意此标头,但是HTTP / 1.1 RFC特别警告不要依赖此行为。”
但是我不知道它做什么?是什么之间的差异Cache-Control
,其值是头no-cache
和Pragma
其值也no-cache
?
Answers:
Pragma
是HTTP / 1.0实现,并且cache-control
是相同概念的HTTP / 1.1实现。它们都旨在防止客户端缓存响应。较旧的客户端可能不支持HTTP / 1.1,这就是为什么该标头仍在使用的原因。
Cache-Control: no-cache
对请求具有相同的含义,但实际上也对响应进行了定义,即“如果将来要使用此内容的缓存副本,则必须先与我确认它是最新的(即执行重新验证)”。
max-age
不阻止缓存的功能。它只是为其设置了到期日期...
没有区别,只是Pragma
仅定义为适用于客户端的请求,而客户端Cache-Control
的请求和服务器的答复均可使用。
因此,就标准而言,只能从客户端发出请求和服务器从客户端接收请求的角度比较这些标准。该http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32定义方案如下:
HTTP / 1.1缓存应将“ Pragma:no-cache”视为客户端已发送“ Cache-Control:no-cache”。HTTP中不会定义新的Pragma指令。
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中所写或暗示的内容有所不同!
Cache-Control: max-age=86400
和 Pragma: no-cache
?那么现代浏览器会尊重哪一个?
Pragma: no-cache
仅针对浏览器的请求定义了,因此从服务器到浏览器的回复中,它完全无效且未定义,例如,我想象每个单独的浏览器(无论是现代浏览器还是不是)应该在可能收到的任何回复中忽略此类标头。
| 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)[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
最后修改日期:2019年5月9日,星期四,格林尼治标准时间
Pragma
。(在HTTP / 1.0中,Pragma被定义为收件人特定于实现的指令的可扩展字段。该规范不赞成使用此类扩展来提高互操作性。)
Pragma: no-cache
仅用于请求(意味着“我想要原始文件,而不是缓存的副本”),并且未为响应指定行为。