我在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
?
Pragma
是 HTTP/1.0 实现并且cache-control
是相同概念的 HTTP/1.1 实现。它们都是为了防止客户端缓存响应。旧客户端可能不支持 HTTP/1.1,这就是该标头仍在使用的原因。
没有区别,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 中所写或暗示的不同!