什么是caching控制:私人?

当我访问chesseng.herokuapp.com时,我得到一个响应头,看起来像

Cache-Control:private Connection:keep-alive Content-Encoding:gzip Content-Type:text/css Date:Tue, 16 Oct 2012 06:37:53 GMT Last-Modified:Tue, 16 Oct 2012 03:13:38 GMT Status:200 OK transfer-encoding:chunked Vary:Accept-Encoding X-Rack-Cache:miss 

然后我刷新页面并获取

 Cache-Control:private Connection:keep-alive Date:Tue, 16 Oct 2012 06:20:49 GMT Status:304 Not Modified X-Rack-Cache:miss 

所以看起来像caching工作。 如果这适用于caching,那么ExpiresCache-Control的重点是什么? 为了增加混淆,当我在https://developers.google.com/speed/pagespeed/insights/上testing页面时,它告诉我“利用浏览器caching”。

 Cache-Control: private 

指示全部或部分响应消息是针对单个用户的,不能被共享caching(如代理服务器)caching。

从RFC2616第14.9.1节

RFC 2616, 第14.9.1节 :

指示全部或部分响应消息是针对单个用户的,并且不能被共享cachingcaching…私有(非共享)caching可以caching响应。


浏览器可以使用这些信息。 当然,目前的“用户”可能意味着很多东西:操作系统用户,浏览器用户(例如Chrome的configuration文件)等。

对我来说, Cache-Control: private 一个更具体的例子是,代理服务器(通常有许多用户)不会caching它。 这是为了最终用户,而不是其他人。


仅供参考,RFC明确表示这不提供安全性。 这是关于展示正确的内容,而不是确保内容。

private这个用法只控制响应可能被caching的地方,并且不能保证消息内容的隐私。

Expires实体标题字段给出响应被认为是陈旧的date/时间.Cache-control:maxage字段给出的年龄值(以秒为单位)大于哪个响应被认为是陈旧的。

尽pipe上面的头字段给了客户机决定是否向服务器发送请求的机制。 在某些情况下,客户端发送中断请求,响应的年龄值大于最大值,这意味着服务器需要将资源发送给客户端? 也许资源从未改变。

为了解决这个问题,HTTP1.1给出了最后修改的头部。 服务器将响应的最后修改date提供给客户端。 当客户端需要这个资源时,它会将If-Modified-Since头字段发送到服务器。 如果这个date在资源修改date之前,服务器将把资源发送给客户端,并给出200个代码。否则,它将返回304代码给客户端,这意味着客户端可以使用它caching的资源。