191

我在Wikipedia上读到了Pragma标题,它说:

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

但是一直没看懂是干什么的?Cache-Control值是的标头no-cachePragma值也是的标头有什么区别no-cache

4

3 回答 3

225

Pragma是 HTTP/1.0 实现并且cache-control是相同概念的 HTTP/1.1 实现。它们都是为了防止客户端缓存响应。旧客户端可能不支持 HTTP/1.1,这就是该标头仍在使用的原因。

于 2012-04-25T11:00:48.937 回答
103

没有区别,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 中所写或暗示的不同!

于 2013-02-24T08:33:24.257 回答
25
于 2018-04-03T19:07:40.223 回答