Pragma和Cache-control标题之间的区别?

我读了关于维基百科上的Pragma标题:

“Pragma:no-cache header字段是一个HTTP / 1.0头,用于请求中,这是浏览器告诉服务器和任何中间caching它想要一个新的资源版本,而不是服务器告诉浏览器不要caching资源,一些用户代理在响应中确实注意到了这个头,但是HTTP / 1.1 RFC特别警告不要依赖这种行为。

但我还没有明白它的作用? 其值为no-cacheCache-Control头和值为no-cache Pragma之间有什么区别?

Pragma是HTTP / 1.0实现,而cache-control是同一个概念的HTTP / 1.1实现。 它们都是为了防止客户caching响应。 旧的客户端可能不支持HTTP / 1.1,这就是为什么这个头还在使用中。

除了Pragma仅被定义为适用于客户端的请求外,没有区别,而Cache-Control可以被客户端的请求和服务器的回复使用。

因此,就标准而言,只能从客户端请求和服务器接收客户请求的angular度进行比较。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32如下定义场景:

HTTP / 1.1caching应该把“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 ;
    • 但在回复中,要决定是否caching,请检查Cache-Control
  • 如果你正在写一个服务器:

    • 在parsing来自客户端的请求时,检查Cache-Control ; 如果没有find,检查Pragma: no-cache ,然后执行Cache-Control: no-cache逻辑;
    • 在回复中,提供Cache-Control

当然,现实可能不同于RFC中所写或暗示的内容!