是否有任何证据表明在响应中滥用 HTTP Pragma 标头具有任何(独特)效果?

信息安全 http 缓存
2021-08-14 06:16:01

我一直在研究 Pragma 标头,因为已经有两个其他缓存清除 HTTP 响应标头(Cache-Control 和 Expires),并且我对哪些浏览器使用(d)旧的 HTTP 1.0 很感兴趣。

事实证明, 规范no-cache只为 HTTP 1.0请求 定义了 Pragma 行为 ( ) ,而不是响应。

我能找到的唯一特定浏览器提到的是 IE4,它似乎需要 32 KB 的内容才能将其作为一个<meta>元素,这意味着即使该浏览器是相关的,作为标题它也永远不会起作用,而 Netscape 4 显然也没有不工作

OWASP 似乎在推荐这个标头一些大网站也使用它,但它看起来很像是作为“以防万一”开始的,实际上从未得到支持,并且一直作为一种迷信。

有没有人通过在响应中使用 Pragma HTTP 标头观察到可重现(和理想)的行为变化,这与 Cache-Control 或 Expires 的功能不同?

1个回答

不推荐使用 Pragma 以支持 Cache-Control,但由于它通常被误用作响应标头,因此某些客户端和代理会将其解释为这样。

过去的 squid 版本就是一个例子,从 3.2 开始,Squid 正在宣传并尝试完全支持 HTTP/1.1 规范,这意味着服务器响应中的 pragma 没有任何意义,将被忽略。

根据Microsoft KB234067,Internet Explorer 4.01 和 6.0 允许 Pragma: no-cache 在安全的 HTTP 响应中和 Pragma: no-cache 元标记通过不安全的响应。其他浏览器(例如 Firefox)似乎对它的支持参差不齐。

注意RFC2616指出:

缓存指令是单向的,因为在请求中存在指令并不意味着要在响应中给出相同的指令。

请注意,HTTP/1.0 缓存可能不实现 Cache-Control 并且可能只实现 Pragma: no-cache(参见第 14.32 节)。