什么标题添加最有效的文件caching?

所以我有我的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 

我想删除服务器签名以减less响应大小。 我应该在我的服务器configuration中添加什么,以使浏览器使用文件,甚至不向服务器发出请求,总体上尽可能高效? 目前我可以很快得到服务器上的js: http : //i55.tinypic.com/orrons.png

编辑:我知道添加这个属性:add_headercaching控制公共; 而响应标题是这样的:

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

因为我已经到期了 也设置。 有没有办法join他们?

我也检查了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物业做了什么? 我想我会像以前一样应用最近的修改。

这与caching无关,但是由于您正在将您的标题与Facebook的标题进行比较,因此我认为您的担心是改善您的网站的用户体验。

我看到从头部丢失的一个是压缩。 nginx和其他Web服务器允许您在将内容发送到客户端之前对内容进行压缩,从而大大减less总数据传输量。

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

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

在进行压缩时,一定要处理不能很好地处理压缩的MSIE浏览器。 有更多的信息在相关的文章

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

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标头给出的date之后修改了标识的实体才被传送。 确定这个的algorithm包括以下情况:

你已经有最大年龄,所以也适用

你想caching,也得到有条件的GET,所以没有响应发送到客户端

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

虽然删除服务器头将不会有什么坏处,但是除了小(例如,未修改)响应的情况外,它不会那么好。 您可能需要考虑在您的Cache-control标头中添加“public”来明确声明共享caching可能会caching内容。