高速缓存控制中的私有vs公共


127

您能否描述一个示例,该示例指示IIS托管的asp.net应用程序中的公共缓存控件和私有缓存控件之间的区别。

我在MSDN中阅读到,区别如下:

Public: 设置Cache-Control:public,以指定响应可以由客户端和共享(代理)缓存进行缓存。

私人:默认值。设置Cache-Control:私有,以指定响应仅可在客户端上缓存,而不能由共享(代理服务器)缓存缓存。

我不确定我是否已完全了解每种选择的利弊。一个何时使用或不使用它的示例将是很棒的。

例如,如果我有两个托管相同应用程序的Web服务器,该怎么办?如果选择“私人”或“公共”,有什么需要注意的吗?

Answers:


237

唯一的区别是,使用“专用”时,您不允许代理缓存通过它们传递的数据。最后,所有这些都归结为要发送的页面/文件中包含的数据。

例如,您的ISP在您和Internet之间可能有一个不可见的代理,即缓存网页以减少所需的带宽量并降低成本。通过使用cache-control:private,您可以指定它不应该缓存页面(但允许最终用户这样做)。如果使用cache-control:public,则表示每个人都可以缓存页面,因此代理将保留一个副本。

根据经验,如果每个人都可以访问(例如,此页面中的徽标)缓存控制:public可能更好,因为缓存它的人越多,所需的带宽就越少。如果它与所连接的用户有关(例如,此页面中的HTML包含我的用户名,那么它对其他任何人都不会有用)缓存控制:私有会更好,因为代理将缓存数据不会被其他用户请求,他们也可能会将您不希望保留的数据保留在不信任的服务器中。

而且,当然,所有不公开的内容都应具有私有缓存。否则,数据可能会存储在中间代理服务器中,只要有访问权限的人都可以访问。


39
唯一的区别是,与私人你是不是允许代理缓存...我猜这是一个错字。除此之外,答案+1。值得补充的是,私有不提供任何程度的安全性,中间的代理仍然可以看到它。这只是意味着没有“诚实”的代理人会把它交给别人,而不会产生新的响应。
乔恩·汉纳

固定!这很有趣,因为我在发布之前重新阅读了几次,但是我想我知道“ not”必须存在,所以我只添加了:D。是的,对您的评论+1,因为应该注意的是,尽管建议将其用于与用户相关的数据,但私有不会取代真正的安全性(SSL)。
salgiza

在不应该写“ not”或在应有的时候省略它很容易。我知道我自己的大量自我编辑(在不同领域中)正在修复相同的错字。
乔恩·汉娜

15
因此,如果我们不指定任何内容,则默认行为是“公共”还是“私人”?
Pacerier

1
@Honey,但可以有多个客户端使用同一代理。如果可以向所有客户端发送相同的响应,则可以在代理级别进行缓存,否则可以在客户端进行缓存(在某些情况下,即使这样也是个坏主意),但不能在代理上进行。
乔恩·汉娜
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.