为了实现最有效的文件缓存,需要添加哪些标头?

为了实现最有效的文件缓存,需要添加哪些标头?

因此我在我的 nginx 服务器上有静态文件的响应标头。

Cache-Control:max-age=2592000
Connection:keep-alive
Date:Sat, 11 Dec 2010 22:28:13 GMT
Expires:Mon, 10 Jan 2011 22:28:13 GMT
Last-Modified:Sat, 11 Dec 2010 22:11:35 GMT
Server:nginx/0.6.32

我想删除服务器签名以减少响应大小。我应该在服务器配置中添加什么,以使浏览器使用文件甚至不向服务器发出请求,并使其总体上尽可能高效?目前我可以如此快速地在服务器上获取 js:http://i55.tinypic.com/orrons.png

编辑: 我知道添加了这个属性:add_header cache-control public;并且响应标头如下:

Cache-Control: max-age=31536000
Cache-Control: public

因为我也设置了有效期 1 年。有办法把它们合并吗?

我还检查了 Facebook 的 JavaScript 文件响应,他们使用了以下技术:

HTTP/1.1 200 OK
Content-Type: application/x-javascript; charset=utf-8
Last-Modified: Sat, 01 Jan 2000 00:00:00 GMT
Pragma:
Content-Encoding: gzip
X-Cnection: close
Content-Length: 11724
Vary: Accept-Encoding
Cache-Control: public, max-age=31239788
Expires: Thu, 08 Dec 2011 23:43:19 GMT
Date: Sun, 12 Dec 2010 10:00:11 GMT
Connection: keep-alive

Vary 属性起什么作用?我想我会像他们一样应用几年前的最后修改时间。

答案1

这与缓存无关,但由于您正在将您的标题与 Facebook 的标题进行比较,所以我假设您的关注点是改善您网站的用户体验。

我发现您的标题中缺少压缩。nginx 和其他 Web 服务器允许您在将内容发送到客户端之前对其进行压缩,从而显著减少总数据传输量。

您可以使用以下链接在您的 nginx 实例上配置压缩。

http://www.devcha.com/2010/02/enable-gzip-compression-of-nginx.html

进行压缩时,请务必处理较旧的 MSIE 浏览器,因为这些浏览器不能很好地处理压缩。更多信息请参阅相关文章

其次,如果可能的话,请为静态内容使用不同的域名。这将减少客户端请求的大小,因为不会传递 cookie。例如,雅虎使用 yimg.com 作为其静态内容,即 JS、CSS、图像

答案2

If-Modified-Since 请求标头字段使用一种方法使其具有条件性:如果自该字段中指定的时间以来,所请求的变体未被修改,则服务器将不会返回实体;而是返回 304(未修改)响应,而没有任何消息正文。

   If-Modified-Since = "If-Modified-Since" ":" HTTP-date

该字段的一个示例是:

   If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

带有 If-Modified-Since 标头且无 Range 标头的 GET 方法请求仅当所标识的实体自 If-Modified-Since 标头给出的日期以来已被修改时才传输该实体。确定这一点的算法包括以下情况:

你已经拥有最大年龄,因此这也适用

您希望缓存并获取条件 GET,这样就不会向客户端发送任何响应

答案3

Silviud 谈论的是客户端作为请求的一部分发送给服务器的标头,以便服务器知道是否发送 304 Not Modified 或文件/页面的全部内容作为响应。

虽然删除服务器标头不会造成任何损害,但除非响应很小(例如,未修改),否则也不会带来太大好处。您可能需要考虑将“public”添加到 Cache-control 标头中,以明确声明共享缓存可以缓存内容。

相关内容