首页 文章

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

提问于
浏览
134

我在Wikipedia上读到了Pragma Headers ,其中说:

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

但我还不明白它的作用? Cache-Control 标头的值是 no-cachePragma ,其值也是 no-cache 有什么区别?

3 回答

  • 85

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

  • 3

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

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

    HTTP / 1.1缓存应该像处理客户端发送“Cache-Control:no-cache”一样处理“Pragma:no-cache” . 在HTTP中不会定义新的Pragma指令 . 注意:因为“Pragma:no-cache作为回应”的含义
    头字段实际上没有指定,它没有提供
    可靠替换响应中的“Cache-Control:no-cache”

    我将如何阅读以上内容:

    • 如果您正在编写客户端并且需要 no-cache

    • 只需在您的请求中使用 Pragma: no-cache ,因为您可能不知道服务器是否支持 Cache-Control ;

    • 但在回复中,要决定是否缓存,请检查 Cache-Control

    • 如果您正在编写服务器:

    • 在解析来自客户端的请求时,检查 Cache-Control ;如果找不到,检查 Pragma: no-cache ,并执行 Cache-Control: no-cache 逻辑;

    • 在回复中,提供 Cache-Control .

    当然,现实可能与RFC中的书面或暗示有所不同!

  • 156
    | Stop using          | Replace with                     |
    | (HTTP 1.0)          | (HTTP 1.1 - 1999)                |
    |---------------------|----------------------------------|
    | Expires: [date]     | Cache-Control: max-age=[seconds] |
    | Pragma: no-cache    | Cache-Control: nocache           |
    

    如果's after 1999, and you'仍然使用 ExpiresPragma ,那你做错了 .

    我在看你Stackoverflow:

    200 OK
    Pragma:没有缓存
    Content-Type:application / json
    X-Frame-Options:SAMEORIGIN
    X-Request-Guid:a3433194-4a03-4206-91ea-6a40f9bfd824
    严格传输安全:max-age = 15552000
    内容长度:54
    Accept-Ranges:字节
    日期:2018年4月3日星期二19:03:12 GMT
    通过:1.1清漆
    连接:保持活力
    X-Served-By:cache-yyz8333-YYZ
    X-Cache:MISS
    X-Cache-Hits:0
    X-Timer:S1522782193.766958,VS0,VE30
    变化:快速SSL
    X-DNS-Prefetch-Control:关闭
    缓存控制:私有

    tl;博士: Pragma 是HTTP / 1.0的遗产,自Internet Explorer 5或Netscape 4.7以来一直不需要 .

相关问题