使用HTTP标头“Cache-Control:public”有什么风险?

时间:2010-07-27 00:06:55

标签: http-headers cache-control

Cache-Control HTTP / 1.1标头可以指定max-age以及缓存内容是公共还是私有,表明中间缓存是否可以缓存内容。

例如,Ruby on Rails的expires_in()默认使用Cache-Control: private

将其公开的风险是什么?如果是公共的,哪些额外的地方可以缓存内容 - 例如它是代理服务器吗?

如果网站像Amazon.com,但用户是匿名的,那么可能没有太多的隐私问题怎么办?如果用户登录,可能会出现隐私问题,因为数据通过位置并且数据可见。如果该位置想要“糟糕”,那么无论如何它真的不需要关心Cache-Control: private

如果是一个用户可以登录的网站,但网站只搜索鱼油和维生素等健康产品,该怎么办?在这种情况下,涉及的隐私更少,因为它与Amazon.com不同,因为有更多种类的产品,例如用户可以真正关心隐私问题的书籍。

话虽如此,有Cache-Control: public的其他优势是什么?

2 个答案:

答案 0 :(得分:47)

Cache-Control: Public的问题是响应可能会被缓存并显示给其他用户。如果您具有显示私有数据的经过身份验证的应用程序,则会出现此问题。通常,您应该只对静态页面使用public,或者对于返回相同数据的页面,无论用户发出请求是什么。

答案 1 :(得分:28)

我进一步发现了以下规范:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1

  

公开

     

表示响应可能是   由任何缓存缓存,即使它会   通常是不可缓存或可缓存的   仅在非共享缓存中。 (看到   还有授权,第14.8节,for   其他细节。)

     

<强>私有

     

表示全部或部分   响应消息用于a   单个用户并且不得缓存   共享缓存。这允许起源   服务器来声明指定的   响应的一部分是为了   只有一个用户而且无效   响应其他用户的请求。   私有(非共享)缓存可以缓存   响应。注意:这个用法   word private仅控制在哪里   响应可能被缓存,而不能   确保消息的隐私   内容。

所以它看起来更像是关于“共享缓存”而不是中间缓存。