43

HTTP / Cache-Control1.1 header可以指定max-age以及缓存内容是public还是private,表示中间缓存是否可以缓存内容。

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

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

如果网站像 Amazon.com,但用户是匿名的,那么可能没有太大的隐私问题?如果用户登录了,会不会有隐私问题,因为数据会通过地方并且数据是可见的。如果那个位置想要“坏”,它真的不需要关心Cache-Control: private

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

话虽如此, have 的额外优势是Cache-Control: public什么?

4

2 回答 2

51

问题Cache-Control: Public在于响应可能会被缓存并显示给不同的用户。如果您有一个显示私人数据的经过身份验证的应用程序,这将是一个问题。通常,您应该只将 public 用于静态页面,或者无论哪个用户发出请求都返回相同数据的页面。

于 2010-07-27T00:31:20.770 回答
29

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

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

上市

表示响应可以被任何缓存缓存,即使它通常是不可缓存的或只能在非共享缓存中缓存。(有关更多详细信息,另请参见授权,第 14.8 节。)

私人的

表示响应消息的全部或部分是针对单个用户的,并且不得由共享缓存缓存。这允许源服务器声明响应的指定部分仅针对一个用户,而不是对其他用户请求的有效响应。私有(非共享)缓存可以缓存响应。注意:private这个词的使用只控制响应可能被缓存的地方,并不能保证消息内容的隐私。

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

于 2010-07-27T13:00:00.897 回答